diff --git a/app/src/main/java/com/yonsz/z1/UniKongApp.java b/app/src/main/java/com/yonsz/z1/UniKongApp.java new file mode 100644 index 0000000..85ae0b3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/UniKongApp.java @@ -0,0 +1,217 @@ +package com.yonsz.z1; + +import android.app.Activity; +import android.graphics.Bitmap; +import android.os.Build; +import android.os.Bundle; +import android.support.multidex.MultiDex; +import android.support.multidex.MultiDexApplication; +import android.util.Log; + +import com.common.openapi.ClassInstanceManager; +import com.lechange.demo.tools.MediaPlayHelper; +import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; +import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; +import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; +import com.nostra13.universalimageloader.core.assist.ImageScaleType; +import com.nostra13.universalimageloader.core.assist.QueueProcessingType; +import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; +import com.nostra13.universalimageloader.core.download.BaseImageDownloader; +import com.qw.soul.permission.SoulPermission; +import com.tencent.smtt.sdk.QbSdk; +import com.tuya.smart.home.sdk.TuyaHomeSdk; +import com.uuzuche.lib_zxing.activity.ZXingLibrary; +import com.yonsz.z1.chat.db.base.BaseManager; +import com.yonsz.z1.fragment.person.language.Languagetils; +import com.yonsz.z1.utils.FileUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.io.File; +import java.util.LinkedList; +import java.util.List; + +/** + * Created by Administrator on 2017/5/16. + */ + +public class UniKongApp extends MultiDexApplication { + private static UniKongApp uniKongApp; + private static Activity sActivity; + private static UniKongApp instance; + private List activityList = new LinkedList<>(); + + public static Activity getActivity() { + return sActivity; + } + + public static UniKongApp getHiApp() { + return uniKongApp; + } + + // 单例模式中获取HiLightApp实例 + public static UniKongApp getInstance() { + if (null == instance) { + instance = new UniKongApp(); + } + return instance; + } + + @Override + public void onCreate() { + MultiDex.install(this); + super.onCreate(); + BaseManager.initOpenHelper(this); + uniKongApp = this; + SharedpreferencesUtil.instans(); + ImageLoader.getInstance().init(initImageLoaderConfig()); + Languagetils.setLocale(this); + //no necessary 权限 + SoulPermission.init(this); + //二维码扫描 + ZXingLibrary.initDisplayOpinion(this); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + TuyaHomeSdk.init(this); + } + + uniKongApp.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + + } + + @Override + public void onActivityStarted(Activity activity) { + sActivity = activity; + } + + @Override + public void onActivityResumed(Activity activity) { + + } + + @Override + public void onActivityPaused(Activity activity) { + + } + + @Override + public void onActivityStopped(Activity activity) { + + } + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) { + + } + + @Override + public void onActivityDestroyed(Activity activity) { + + } + }); + + //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。 + + QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() { + + @Override + public void onViewInitFinished(boolean arg0) { + // TODO Auto-generated method stub + //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。 + Log.d("app", " onViewInitFinished is " + arg0); + } + + @Override + public void onCoreInitFinished() { + // TODO Auto-generated method stub + } + }; + //x5内核初始化接口 + QbSdk.initX5Environment(getApplicationContext(), cb); + + MediaPlayHelper.initContext(getApplicationContext()); + ClassInstanceManager.newInstance().init(this); + } + + // 添加Activity到容器中 + public void addActivity(Activity activity) { + activityList.add(activity); + } + + // 遍历Activity并finish + public void exit() { + for (Activity activity : activityList) { + activity.finish(); + } + System.exit(0); + } + + public ImageLoaderConfiguration initImageLoaderConfig() { + ImageLoaderConfiguration config = new ImageLoaderConfiguration + .Builder(this) + .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每个缓存文件的最大长宽 + .threadPoolSize(3)//线程池内加载的数量 + .threadPriority(Thread.NORM_PRIORITY - 2) + .denyCacheImageMultipleSizesInMemory() + .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你可以通过自己的内存缓存实现 + .memoryCacheSize(2 * 1024 * 1024) + .discCacheSize(50 * 1024 * 1024) + .discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密 + .tasksProcessingOrder(QueueProcessingType.LIFO) + .discCacheFileCount(100) //缓存的文件数量 + .discCache(new UnlimitedDiscCache(new File(FileUtil.getInstance().getSDCardPath() + "/UniKong/cache/")))//自定义缓存路径 + .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) + .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间 + .writeDebugLogs() // Remove for release app + .build();//开始构建 + return config; + } + + public DisplayImageOptions getImageLoaderOption() { + DisplayImageOptions options; + options = new DisplayImageOptions.Builder() + // .showImageOnLoading(R.drawable.icon_headportrait) //设置图片在下载期间显示的图片 + .showImageForEmptyUri(R.drawable.icon_headportrait)//设置图片Uri为空或是错误的时候显示的图片 + .showImageOnFail(R.drawable.icon_headportrait) //设置图片加载/解码过程中错误时候显示的图片 + .cacheInMemory(true)//设置下载的图片是否缓存在内存中 + .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中 + .considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转) + // .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示 + .imageScaleType(ImageScaleType.NONE) + .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型// + // .decodingOptions(android.graphics.BitmapFactory.OptionsdecodingOptions)//设置图片的解码配置 + // .delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间 + // .preProcessor(BitmapProcessor preProcessor)//设置图片加入缓存前,对bitmap进行设 + .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位 + // .displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少 + .displayer(new FadeInBitmapDisplayer(0))//是否图片加载好后渐入的动画时间 + .build();//构建完成 + return options; + } + + public DisplayImageOptions getUserImageLoaderOption() { + DisplayImageOptions options; + options = new DisplayImageOptions.Builder() + .showImageOnLoading(R.drawable.icon_headportrait) //设置图片在下载期间显示的图片 + .showImageForEmptyUri(R.drawable.icon_headportrait)//设置图片Uri为空或是错误的时候显示的图片 + .showImageOnFail(R.drawable.icon_headportrait) //设置图片加载/解码过程中错误时候显示的图片 + .cacheInMemory(true)//设置下载的图片是否缓存在内存中 + .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中 + .considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转) + .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示 + .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型// + // .decodingOptions(android.graphics.BitmapFactory.OptionsdecodingOptions)//设置图片的解码配置 + // .delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间 + // .preProcessor(BitmapProcessor preProcessor)//设置图片加入缓存前,对bitmap进行设 + .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位 + // .displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少 + .displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间 + .build();//构建完成 + return options; + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/activity/AsxAddDeviceListActivity.java b/app/src/main/java/com/yonsz/z1/activity/AsxAddDeviceListActivity.java new file mode 100644 index 0000000..62e0f15 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/activity/AsxAddDeviceListActivity.java @@ -0,0 +1,866 @@ +package com.yonsz.z1.activity; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.gavin.com.library.listener.OnGroupClickListener; +import com.gavin.com.library.listener.PowerGroupListener; +import com.lechange.demo.business.Business; +import com.lechange.demo.localvideo.PowerfulStickyDecoration; +import com.lechange.demo.yonsz.LechengLoginActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.createfamily.floor.ChooseRoomInFloorActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.CheckBindEntity; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity5.AllDeviceTypeEntity; +import com.yonsz.z1.devicea2.safedevice.ScanCodeActivity; +import com.yonsz.z1.fragment.person.WebViewActivity; +import com.yonsz.z1.gateway.GatewayTypeActivity; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.devicelist.DeviceList4Activity; +import com.yonsz.z1.version5.ChooseA1AddDeviceActivity; +import com.yonsz.z1.version5.ChooseRoomActivity; +import com.yonsz.z1.version5.ChooseVersionActivity; +import com.yonsz.z1.version5.SwoitBindActivity; +import com.yonsz.z1.version5.SwoitSyncActivity; +import com.yonsz.z1.version5.adapter.AddLeftListAdapter; +import com.yonsz.z1.version5.adapter.AddListAdapter; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.io.Serializable; +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.CAMERA_ISADD_FAIL; +import static com.yonsz.z1.net.Constans.CAMERA_ISADD_SUCCESS; +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.CAT_EYE; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_SUCCESS; +import static com.yonsz.z1.net.Constans.DEIVCE_DEVICEMODEL_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.GETZIINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.KUQI_PANEL; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.RGB_LIGHT; +import static com.yonsz.z1.net.Constans.SAFETY_ACOUSTO_OPTIC; +import static com.yonsz.z1.net.Constans.SAFETY_DISPLACEMENT; +import static com.yonsz.z1.net.Constans.SAFETY_WIRELESS_REMOTE; +import static com.yonsz.z1.net.Constans.SAFE_DEVICE_TAG; +import static com.yonsz.z1.net.Constans.SKYWORTH_ISADD_SUCCESS; +import static com.yonsz.z1.net.Constans.SKYWORTH_TV; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.NetWorkUrl.CAMERA_ISADD; +import static com.yonsz.z1.net.NetWorkUrl.CHECK_USER_BIND; +import static com.yonsz.z1.net.NetWorkUrl.FIND_DEVICES; +import static com.yonsz.z1.net.NetWorkUrl.SWAIOT_DEVICE_ISBIND; + +/** + * Created by Administrator on 2019/2/25. + */ + +public class AsxAddDeviceListActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout a1Rl, lechengRl; + private RecyclerView verticalRecyclerView, leftRecyclerView; + private AddListAdapter mVerticalAdapter; + private AddLeftListAdapter mLeftAdapter; + private AllDeviceTypeEntity allDeviceTypeEntity; + private AllDeviceTypeEntity.DataBean.DeviceModelsBean dataBean; + private PowerfulStickyDecoration decoration; + private LoadingDialog mLoadingDialog; + private boolean isSlideChange = false; + private String skyworthIsadd = "true"; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("关闭")) { + finish(); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_asx_add_device_list); + initView(); + initListener(); + } + + private void initView() { + verticalRecyclerView = (RecyclerView) findViewById(R.id.vertical_RecyclerView); + leftRecyclerView = (RecyclerView) findViewById(R.id.left_RecyclerView); + a1Rl = (RelativeLayout) findViewById(R.id.rl_a1); + lechengRl = (RelativeLayout) findViewById(R.id.rl_lecheng); + mTitleView = (TitleView) findViewById(R.id.title_asx_add_device); + mTitleView.setHead(R.string.add_device); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + getDevicemodelList(); + } + + private void getDevicemodelList() { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestGetByAsy(NetWorkUrl.DEIVCE_DEVICEMODEL_CATEGORY_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getDevicemodelList", respone); + AllDeviceTypeEntity entity = JSON.parseObject(respone, AllDeviceTypeEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(DEIVCE_DEVICEMODEL_LIST_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GETZIINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GETZIINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initListener() { + a1Rl.setOnClickListener(this); + lechengRl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rl_a1: + + break; + case R.id.rl_lecheng: + + break; + } + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SKYWORTH_ISADD_SUCCESS: + skyworthIsadd = (String) msg.obj; + getAideviceList(dataBean.getDeviceTypeCode()); + /*String obj1 = (String) msg.obj; + Intent intent1; + if (obj1.equals("true")) { + intent1 = new Intent(AsxAddDeviceListActivity.this, ChooseA1AddDeviceActivity.class); + } else { + intent1 = new Intent(AsxAddDeviceListActivity.this, ChooseA1AddDeviceActivity.class); + intent1.putExtra("platform", "skyworth_tv"); + intent1.putExtra("data", (String) msg.obj); + } + intent1.putExtra("deviceType", SKYWORTH_TV); + intent1.putExtra("deviceModel", "0"); + startActivity(intent1); + finish();*/ + break; + case CHECK_USER_BIND_SUCCESS: + CheckBindEntity bindEntity = (CheckBindEntity) msg.obj; + if (bindEntity.getData().getBindStatus() == 1 || !TextUtils.isEmpty(bindEntity.getData().getUserToken())) { + Business.getInstance().setToken(bindEntity.getData().getUserToken()); + Intent intent; + if (dataBean.getDeviceTypeCode().equals(GATE_WAY)) { + intent = new Intent(this, GatewayTypeActivity.class); + if (null != getIntent().getExtras().get("floorList") && !TextUtils.isEmpty(getIntent().getExtras().get("floorList").toString())) { + intent = new Intent(this, ChooseRoomInFloorActivity.class); + intent.putExtra("floorList", getIntent().getExtras().get("floorList").toString()); + } else { + intent = new Intent(this, ChooseRoomActivity.class); + } + intent.putExtra("houseTypeName", "房间选择"); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + } else if (dataBean.getDeviceTypeCode().equals(CAMERA_TAG)) { + if (TextUtils.isEmpty(getIntent().getExtras().get("floorList").toString())) { + intent = new Intent(this, ChooseRoomActivity.class); + } else { + intent = new Intent(this, ChooseRoomInFloorActivity.class); + intent.putExtra("floorList", getIntent().getExtras().get("floorList").toString()); + } + intent.putExtra("houseTypeName", "房间选择"); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + } else { + intent = new Intent(AsxAddDeviceListActivity.this, ScanCodeActivity.class); + intent.putExtra("ziId", "AsxAddDeviceListActivity"); + intent.putExtra("deviceAddress", "AsxAddDeviceListActivity"); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + startActivity(intent); + } + } else { + Intent intent = new Intent(AsxAddDeviceListActivity.this, LechengLoginActivity.class); + intent.putExtra("ziId", "123"); + intent.putExtra("deviceAddress", "123"); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + // finish(); + } + break; + case CHECK_USER_BIND_FAIL: + case GETZIINFO_FAIL: + case CAMERA_ISADD_FAIL: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + case DEIVCE_DEVICEMODEL_LIST_SUCCESS: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + allDeviceTypeEntity = (AllDeviceTypeEntity) msg.obj; + // setRecycleView(); + mVerticalAdapter = new AddListAdapter(this, allDeviceTypeEntity.getData()); + mLeftAdapter = new AddLeftListAdapter(this, allDeviceTypeEntity.getData()); + RecyclerViewNoBugLinearLayoutManager manage1 = new RecyclerViewNoBugLinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + verticalRecyclerView.setHasFixedSize(true); + verticalRecyclerView.setLayoutManager(manage1); + verticalRecyclerView.setAdapter(mVerticalAdapter); + + RecyclerViewNoBugLinearLayoutManager manage2 = new RecyclerViewNoBugLinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + leftRecyclerView.setHasFixedSize(true); + leftRecyclerView.setLayoutManager(manage2); + leftRecyclerView.setAdapter(mLeftAdapter); + + + verticalRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { + //用来标记是否正在向最后一个滑动 + boolean isSlidingToLast = false; + + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager(); + // 当不滚动时 + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + //获取最后一个完全显示的ItemPosition + int lastVisibleItem = manager.findLastCompletelyVisibleItemPosition(); + int firstVisibleItemPosition = manager.findFirstVisibleItemPosition(); + int totalItemCount = manager.getItemCount(); + Log.i("TAG", "AsxAddDeviceListActivity onScrollStateChanged()" + lastVisibleItem + "----" + newState + "----" + firstVisibleItemPosition); + leftRecyclerView.smoothScrollToPosition(Math.abs(firstVisibleItemPosition)); + if (!isSlideChange) { + mLeftAdapter.setNowPosition(Math.abs(firstVisibleItemPosition)); + isSlideChange = false; + } else { + isSlideChange = false; + } + // 判断是否滚动到底部,并且是向右滚动 + if (lastVisibleItem == (totalItemCount - 1) && isSlidingToLast) { + //加载更多功能的代码 + } + } + } + + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + //dx用来判断横向滑动方向,dy用来判断纵向滑动方向 + if (dx > 0) { + //大于0表示正在向右滚动 + isSlidingToLast = true; + } else { + //小于等于0表示停止或向左滚动 + isSlidingToLast = false; + } + } + }); + + mVerticalAdapter.setmOnItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id) { + //添加设备 + addDevice(parentPosition, childPosition); + } + }); + + + mLeftAdapter.setmOnItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id) { + isSlideChange = true; + verticalRecyclerView.smoothScrollToPosition(parentPosition); + } + }); + + /*mVerticalAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + //添加设备 + addDevice(position); + } + });*/ + break; + case GET_USERDEVICES4_SIMPLEINFO_FAIL: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + //涂鸦wifi插座 + if (dataBean.getDeviceTypeCode().equals(SWITCH_TAG) && dataBean.getCode().equals("4")) { + Intent intent; + if (TextUtils.isEmpty(getIntent().getExtras().get("floorList").toString())) { + intent = new Intent(this, ChooseRoomActivity.class); + } else { + intent = new Intent(this, ChooseRoomInFloorActivity.class); + intent.putExtra("floorList", getIntent().getExtras().get("floorList").toString()); + } + intent.putExtra("houseTypeName", "房间选择"); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + return; + } + DeviceSimpleEntity simpleEntity = (DeviceSimpleEntity) msg.obj; + if (simpleEntity.getData().size() != 0) { + Intent intent; + if (dataBean.getDeviceTypeCode().equals(RGB_LIGHT)) { + intent = new Intent(this, DeviceList4Activity.class); + } else { + intent = new Intent(this, ChooseA1AddDeviceActivity.class); + } + Bundle bundle = new Bundle(); + bundle.putSerializable("dataBeanList", (Serializable) simpleEntity.getData()); + intent.putExtras(bundle); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + intent.putExtra("subType", dataBean.getSubType()); + intent.putExtra("standardCodes", dataBean.getStandardCodes()); + intent.putExtra("ziId", ""); + intent.putExtra("nameTag", ""); + intent.putExtra("id", ""); + + if (dataBean.getDeviceTypeCode().equals(SKYWORTH_TV)) { + if (!skyworthIsadd.equals("true")) { + intent.putExtra("platform", "skyworth_tv"); + intent.putExtra("data", skyworthIsadd); + } + } + startActivity(intent); + } else { + int arg1 = msg.arg1; + if (arg1 == 0) { + ToastUtil.show(this, "暂无语音管家,无法添加该设备"); + } else { + ToastUtil.show(this, "暂无网关,无法添加该设备"); + } + } + break; + case CAMERA_ISADD_SUCCESS: + CheckBindEntity obj = (CheckBindEntity) msg.obj; + if (obj.getData().getIsAdd().equals("1")) { + int arg1 = msg.arg1; + if (arg1 == 1) { + Intent intent; + if (TextUtils.isEmpty(getIntent().getExtras().get("floorList").toString())) { + intent = new Intent(this, ChooseRoomActivity.class); + } else { + intent = new Intent(this, ChooseRoomInFloorActivity.class); + intent.putExtra("floorList", getIntent().getExtras().get("floorList").toString()); + } + intent.putExtra("houseTypeName", "房间选择"); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + } else { + checkUserBind(); + } + } else { + ToastUtil.show(this, "暂无语音管家,无法添加该设备"); + } + break; + } + } + + private void setRecycleView() { + //模拟数据 + // dataList.addAll(CityUtil.getCityList()); + GridLayoutManager manager = new GridLayoutManager(this, 4); + verticalRecyclerView.setLayoutManager(manager); + decoration = PowerfulStickyDecoration.Builder + .init(new PowerGroupListener() { + @Override + public String getGroupName(int position) { + //获取组名,用于判断是否是同一组 + if (allDeviceTypeEntity.getData().size() > position) { + int code = allDeviceTypeEntity.getData().get(position).getSort(); + String groupName = ""; + if (code < 3) { + groupName = "网关"; + } else if (code < 9) { + groupName = "红外"; + } else if (code < 50) { + groupName = "433"; + } else { + groupName = "大华"; + } + return groupName; + } + return null; + } + + @Override + public View getGroupView(int position) { + //获取自定定义的组View + if (allDeviceTypeEntity.getData().size() > position) { + int code = allDeviceTypeEntity.getData().get(position).getSort(); + String groupName = ""; + if (code < 3) { + groupName = "网关"; + } else if (code < 9) { + groupName = "红外"; + } else if (code < 50) { + groupName = "433"; + } else { + groupName = "大华"; + } + final View view = getLayoutInflater().inflate(R.layout.add_room_group, null, true); + ((TextView) view.findViewById(R.id.tv_room_type)).setText(groupName); + return view; + } else { + return null; + } + } + }) + .setCacheEnable(true) + .resetSpan(verticalRecyclerView, manager) + .setGroupHeight(DensityUtil.dip2px(AsxAddDeviceListActivity.this, 40)) + .setDivideHeight(0) + .setGroupBackground(0xfffafafa) + .setOnClickListener(new OnGroupClickListener() { + @Override + public void onClick(int position, int id) { + if (allDeviceTypeEntity.getData().size() > position) { + + } + } + }) + .build(); + //---------------- ------------- + verticalRecyclerView.addItemDecoration(decoration); + verticalRecyclerView.setVisibility(View.VISIBLE); + //------------- PowerfulStickyDecoration 使用部分 ---------------- + //下面是平时的RecyclerView操作 + mVerticalAdapter = new AddListAdapter(this, allDeviceTypeEntity.getData()); + verticalRecyclerView.setAdapter(mVerticalAdapter); + + mVerticalAdapter.setmOnItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id) { + //添加设备 + addDevice(parentPosition, childPosition); + } + }); + } + + private void addDevice(int position, int childPosition) { + dataBean = allDeviceTypeEntity.getData().get(position).getDeviceModels().get(childPosition); + if (!TextUtils.isEmpty(dataBean.getDeviceTypeCode())) { + Intent intent; + switch (dataBean.getDeviceTypeCode()) { + case "000": + if (TextUtils.isEmpty(getIntent().getExtras().get("floorList").toString())) { + intent = new Intent(this, ChooseRoomActivity.class); + } else { + intent = new Intent(this, ChooseRoomInFloorActivity.class); + intent.putExtra("floorList", getIntent().getExtras().get("floorList").toString()); + } + intent.putExtra("houseTypeName", "房间选择"); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + intent.putExtra("titleRemark", dataBean.getTitleRemark()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + break; + /* case KUQI_PANEL: + intent = new Intent(this, ChooseRoomActivity.class); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + startActivity(intent); + break;*/ + case SKYWORTH_TV: + swaiotDeviceIsbind(dataBean.getDeviceTypeCode()); + break; + case CAMERA_TAG: + cameraIscCanAdd(dataBean.getDeviceTypeCode()); + break; + case GATE_WAY: + checkUserBind(); + break; + case WIRELESS_EMERGENCY_BUTTON: + //0:大华 1:紧急求助按钮 + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(this, "敬请期待!"); + } else { + if (dataBean.getCode().equals("0")) { + getLcDeviceList(); + } else { + getAideviceList(dataBean.getDeviceTypeCode()); + } + } + break; + case CAT_EYE: + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(this, "敬请期待!"); + } else { + cameraIscCanAdd(dataBean.getDeviceTypeCode()); + } + break; + case INTELLIGENT_DOOR_LOCK: + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(this, "敬请期待!"); + } else { + if (dataBean.getCode().equals("1")) { + cameraIscCanAdd(dataBean.getDeviceTypeCode()); + } else if (dataBean.getCode().equals("2")) { + getAideviceList(dataBean.getDeviceTypeCode()); + } else { + getLcDeviceList(); + } + } + break; + case INFRARED_CURTAIN_DETECTOR: + case SAFETY_DISPLACEMENT: + case SAFETY_ACOUSTO_OPTIC: + case SAFETY_WIRELESS_REMOTE: + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(this, "敬请期待!"); + } else { + getLcDeviceList(); + } + break; + case GAS_TAG: + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(this, "敬请期待!"); + } else { + getAideviceList(dataBean.getDeviceTypeCode()); + } + break; + case SAFE_DEVICE_TAG: + case DOOR_LOCK_TAG: + case INFRARED_TAG: + case SMOKE_TAG: + case WATER_TAG: + //0旧安防1乐橙2嘉德 + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(this, "敬请期待!"); + } else { + if (dataBean.getCode().equals("1")) { + getLcDeviceList(); + } else if (dataBean.getCode().equals("0") || dataBean.getCode().equals("2")) { + getAideviceList(dataBean.getDeviceTypeCode()); + } + } + break; + case LIGHT_TAG: + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(this, "敬请期待!"); + } else { + if (dataBean.getVersionList().size() == 0) { + getAideviceList(dataBean.getDeviceTypeCode()); + } else { + //跳转选择版本属性界面 + Intent intent1 = new Intent(this, ChooseVersionActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("dataBeanList", (Serializable) dataBean); + intent1.putExtras(bundle); + startActivity(intent1); + } + } + break; + default: + //原先小艾中设备添加 + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(this, "敬请期待!"); + } else { + // getUserDevices4SimpleInfo(); + getAideviceList(dataBean.getDeviceTypeCode()); + } + break; + } + } else { + ToastUtil.show(this, "敬请期待!"); + } + } + + private synchronized void getLcDeviceList() { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + // map.put("deviceModel", "0"); + map.put("deviceType", GATE_WAY); + netWorkUtil.requestPostByAsynewApi(FIND_DEVICES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("findDevices", "onSuccess()" + respone); + DeviceSimpleEntity obj = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == obj.getFlag()) { + android.os.Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = obj; + msg.arg1 = 1; + mHandler.sendMessage(msg); + } else { + android.os.Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getAideviceList(String deviceTypeCode) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("standardCodes", dataBean.getStandardCodes()); + map.put("deviceType", deviceTypeCode); + util.requestGetByAsy(NetWorkUrl.DEIVCE_AIDEVICE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getAideviceList", respone); + DeviceSimpleEntity entity = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = entity; + msg.arg1 = 0; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USERDEVICES4_SIMPLEINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /* private void getUserDevices4SimpleInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("standardCodes", dataBean.getStandardCodes()); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.GET_USERDEVICES4_SIMPLEINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getUserDevices4", "SolidVersionActivity onSuccess()" + respone); + DeviceSimpleEntity obj = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + }*/ + + private void cameraIscCanAdd(String deviceType) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", getIntent().getExtras().get("houseId").toString()); + netWorkUtil.requestGetByAsy(CAMERA_ISADD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cameraIscCanAdd", "onSuccess()" + respone); + CheckBindEntity obj = JSON.parseObject(respone, CheckBindEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CAMERA_ISADD_SUCCESS); + msg.obj = obj; + if (deviceType.equals(INTELLIGENT_DOOR_LOCK) || deviceType.equals(CAT_EYE)) { + msg.arg1 = 1; + } else { + msg.arg1 = 0; + } + mHandler.sendMessage(msg); + } else { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void swaiotDeviceIsbind(String deviceType) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestGetByAsy(SWAIOT_DEVICE_ISBIND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("swaiotDeviceIsbind", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SKYWORTH_ISADD_SUCCESS); + msg.obj = obj.getData(); + mHandler.sendMessage(msg); + } else { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void checkUserBind() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", getIntent().getExtras().get("houseId").toString()); + netWorkUtil.requestPostByAsynewApi(CHECK_USER_BIND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("checkUserBind", "onSuccess()" + respone); + CheckBindEntity obj = JSON.parseObject(respone, CheckBindEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + android.os.Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/activity/BaseActivity.java b/app/src/main/java/com/yonsz/z1/activity/BaseActivity.java new file mode 100644 index 0000000..4880c04 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/activity/BaseActivity.java @@ -0,0 +1,297 @@ +package com.yonsz.z1.activity; + + +import android.annotation.TargetApi; +import android.app.ActivityManager; +import android.content.Context; +import android.graphics.Color; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.StringRes; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.DisplayCutout; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowInsets; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.umeng.analytics.MobclickAgent; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.OnlineEvent; +import com.yonsz.z1.database.entity.ThirdEvent; +import com.yonsz.z1.devicea2.safedevice.dialog.FullDialogFragment; +import com.yonsz.z1.fragment.main.StatusBarUtil; +import com.yonsz.z1.fragment.person.language.Languagetils; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.net.NetworkChangeEvent; +import com.yonsz.z1.utils.AppUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.version4.MainActivity4; +import com.yonsz.z1.view.TitleView; + +import java.lang.ref.WeakReference; +import java.util.List; + +import de.greenrobot.event.EventBus; + +/** + * Created by Administrator on 2017/5/16. + */ + +public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener { + public UIHandle mHandler; + protected boolean mCheckNetWork = true; //默认检查网络状态 + View mTipView; + WindowManager mWindowManager; + WindowManager.LayoutParams mLayoutParams; + private ImageView mBack; + private TextView mHead; + private RelativeLayout mFuntion; + private OnTitleItemClickListener mListener; + private Toast mToast = null; + private FullDialogFragment fullDialogFragment; + private long mClickTime; + private Context mContext; + + public static boolean isActivityRunning(String packagename, Context context) { + ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + List runningTaskInfos = am.getRunningTasks(1); + String cmpNameTemp = null; + if (null != runningTaskInfos) { + cmpNameTemp = runningTaskInfos.get(0).topActivity.toString(); + } + if (null != cmpNameTemp) { + return cmpNameTemp.contains(packagename); + } + return false; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mContext = this; + mHandler = new UIHandle(this); + AppUtil.getInstance().addActivity(this); + initTipView();//初始化提示View + // 设置本地化语言 +// setLocale(); + //注册eventBus + EventBus.getDefault().register(this); + + /*if (enableSliding()) { + SlidingLayout rootView = new SlidingLayout(this); + rootView.bindActivity(this); + }*/ + StatusBarUtil.changStatusIconCollor(this, true); + } + + public boolean enableSliding() { + return false; + } + + //eventbus接收来自netty的信息,注释起上下线通知 + public void onEventMainThread(OnlineEvent event) { + final String msg = event.getMsg(); + // Log.e("nettyUtil", msg); + runOnUiThread(new Runnable() { + @Override + public void run() { + /*if (mToast == null) { + mToast = new Toast(BaseActivity.this); + mToast = Toast.makeText(BaseActivity.this, msg, Toast.LENGTH_LONG); + mToast.show(); + }*/ + } + }); + } + + + public void onEventMainThread(NetworkChangeEvent event) { + hasNetWork(event.isConnected); + } + + /** + * 设置Locale + */ + private void setLocale() { + if (!Languagetils.isSameLanguage(this)) { + Languagetils.setLocale(this); + Languagetils.toRestartMainActvity(this); + } + } + + protected void initHead(OnTitleItemClickListener listener) { + mBack = (ImageView) findViewById(R.id.iv_back); + mHead = (TextView) findViewById(R.id.tv_title); + mFuntion = (RelativeLayout) findViewById(R.id.iv_funtion); + mBack.setOnClickListener(this); + mFuntion.setOnClickListener(this); + mListener = listener; + + if (Build.VERSION.SDK_INT >= 19) { + findViewById(R.id.bar).setVisibility(View.VISIBLE); + } else { + findViewById(R.id.bar).setVisibility(View.GONE); + } + // findViewById(R.id.tilte).setBackground(getResources().getDrawable(R.drawable.color_from_27_50)); + } + + protected void setHead(String text) { + mHead.setText(text); + } + + protected void setHead(@StringRes int text) { + mHead.setText(text); + } + + + @Override + protected void onDestroy() { + super.onDestroy(); + mHandler.removeCallbacksAndMessages(null); + AppUtil.getInstance().removeActivityByClazz(this.getClass()); + //取消eventBus注册 + EventBus.getDefault().unregister(this); + } + + public abstract void callBackUiThread(Message msg); + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_back: + Log.i("baseactivity", "onClick: " + this.getPackageName()); + if (mListener != null) { + mListener.onBack(); + } + break; + case R.id.iv_funtion: + if (mListener != null) { + mListener.onFunction(); + } + break; + } + } + + @Override + public void onBackPressed() { + // + if ((this instanceof LoginActivity) || (this instanceof MainActivity4)) { + + if (System.currentTimeMillis() - mClickTime > 3000) { + Toast.makeText(BaseActivity.this, R.string.exit_app, Toast.LENGTH_SHORT).show(); + // ToastUtil.show(this, R.string.exit_app); + mClickTime = System.currentTimeMillis(); + } else if (System.currentTimeMillis() - mClickTime < 3000) { + AppUtil.getInstance().exitApp(); + } + } else { + super.onBackPressed(); + finish(); + overridePendingTransition(R.anim.activity_exit_in, R.anim.activity_exit_out); + } + } + + + public void onResume() { + super.onResume(); + MobclickAgent.onResume(this); + //在无网络情况下打开APP时,系统不会发送网络状况变更的Intent,需要自己手动检查 + hasNetWork(DensityUtil.isConnected(mContext)); + } + + public void onPause() { + super.onPause(); + MobclickAgent.onPause(this); + } + + @Override + protected void onStop() { + super.onStop(); + } + + @Override + public void finish() { + super.finish(); + //当提示View被动态添加后直接关闭页面会导致该View内存溢出,所以需要在finish时移除 + if (mTipView != null && mTipView.getParent() != null) { + mWindowManager.removeView(mTipView); + } + } + + public void hasNetWork(boolean has) { + if (isCheckNetWork()) { + if (has) { + if (mTipView != null && mTipView.getParent() != null) { + mWindowManager.removeView(mTipView); + } + } else { + if (mTipView.getParent() == null) { + mWindowManager.addView(mTipView, mLayoutParams); + } + } + } + } + + public boolean isCheckNetWork() { + return mCheckNetWork; + } + + public void setCheckNetWork(boolean checkNetWork) { + mCheckNetWork = checkNetWork; + } + + private void initTipView() { + LayoutInflater inflater = getLayoutInflater(); + mTipView = inflater.inflate(R.layout.layout_network_tip, null); //提示View布局 + mWindowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); + mLayoutParams = new WindowManager.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, + WindowManager.LayoutParams.TYPE_APPLICATION, + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE + | WindowManager.LayoutParams.FLAG_FULLSCREEN + | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, + PixelFormat.TRANSLUCENT); + //使用非CENTER时,可以通过设置XY的值来改变View的位置 + mLayoutParams.gravity = Gravity.CENTER | Gravity.TOP; + mLayoutParams.x = 0; + mLayoutParams.y = 0; + } + + /*public void registerOnClick(int id) { + if(id==getWifiBtn()){ + //TODO wifibtn的click操作 + + } + } + + public abstract int getWifiBtn();*/ + + public static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(BaseActivity activity) { + weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + BaseActivity activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/activity/GatewagAddListActivity.java b/app/src/main/java/com/yonsz/z1/activity/GatewagAddListActivity.java new file mode 100644 index 0000000..7dc85bb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/activity/GatewagAddListActivity.java @@ -0,0 +1,597 @@ +package com.yonsz.z1.activity; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.gavin.com.library.listener.OnGroupClickListener; +import com.gavin.com.library.listener.PowerGroupListener; +import com.lechange.demo.business.Business; +import com.lechange.demo.localvideo.PowerfulStickyDecoration; +import com.lechange.demo.yonsz.LechengLoginActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.createfamily.floor.ChooseRoomInFloorActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity4.CheckBindEntity; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity5.AllDeviceTypeEntity; +import com.yonsz.z1.devicea2.safedevice.ScanCodeActivity; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ChooseA1AddDeviceActivity; +import com.yonsz.z1.version5.ChooseRoomActivity; +import com.yonsz.z1.version5.adapter.AddListAdapter; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.io.Serializable; +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.CAMERA_ISADD_FAIL; +import static com.yonsz.z1.net.Constans.CAMERA_ISADD_SUCCESS; +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_SUCCESS; +import static com.yonsz.z1.net.Constans.DEIVCE_DEVICEMODEL_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.GETZIINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.SAFE_DEVICE_TAG; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.net.NetWorkUrl.CAMERA_ISADD; +import static com.yonsz.z1.net.NetWorkUrl.CHECK_USER_BIND; +import static com.yonsz.z1.net.NetWorkUrl.FIND_DEVICES; + +/** + * Created by Administrator on 2019/2/25. + */ + +public class GatewagAddListActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout a1Rl, lechengRl; + private RecyclerView verticalRecyclerView; + private AddListAdapter mVerticalAdapter; + private AllDeviceTypeEntity allDeviceTypeEntity; + private AllDeviceTypeEntity.DataBean.DeviceModelsBean dataBean; + private PowerfulStickyDecoration decoration; + private LoadingDialog mLoadingDialog; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_gateway_add_device_list); + initView(); + initListener(); + } + + private void initView() { + verticalRecyclerView = (RecyclerView) findViewById(R.id.vertical_RecyclerView); + a1Rl = (RelativeLayout) findViewById(R.id.rl_a1); + lechengRl = (RelativeLayout) findViewById(R.id.rl_lecheng); + mTitleView = (TitleView) findViewById(R.id.title_asx_add_device); + mTitleView.setHead(R.string.add_device); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + getDevicemodelList(); + } + + private void getDevicemodelList() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestGetByAsy(NetWorkUrl.DEIVCE_DEVICEMODEL_CATEGORY_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getDevicemodelList", respone); + AllDeviceTypeEntity entity = JSON.parseObject(respone, AllDeviceTypeEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(DEIVCE_DEVICEMODEL_LIST_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GETZIINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GETZIINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initListener() { + a1Rl.setOnClickListener(this); + lechengRl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rl_a1: + + break; + case R.id.rl_lecheng: + + break; + } + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CHECK_USER_BIND_SUCCESS: + CheckBindEntity bindEntity = (CheckBindEntity) msg.obj; + if (bindEntity.getData().getBindStatus() == 1 || !TextUtils.isEmpty(bindEntity.getData().getUserToken())) { + Business.getInstance().setToken(bindEntity.getData().getUserToken()); + Intent intent; + if (dataBean.getDeviceTypeCode().equals(GATE_WAY) || dataBean.getDeviceTypeCode().equals(CAMERA_TAG)) { + if (TextUtils.isEmpty(getIntent().getExtras().get("floorList").toString())) { + intent = new Intent(this, ChooseRoomActivity.class); + } else { + intent = new Intent(this, ChooseRoomInFloorActivity.class); + intent.putExtra("floorList", getIntent().getExtras().get("floorList").toString()); + } + intent.putExtra("houseTypeName", "房间选择"); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + } else { + intent = new Intent(GatewagAddListActivity.this, ScanCodeActivity.class); + intent.putExtra("ziId", "AsxAddDeviceListActivity"); + intent.putExtra("deviceAddress", "AsxAddDeviceListActivity"); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + startActivity(intent); + } + } else { + Intent intent = new Intent(GatewagAddListActivity.this, LechengLoginActivity.class); + intent.putExtra("ziId", "123"); + intent.putExtra("deviceAddress", "123"); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + // finish(); + } + break; + case CHECK_USER_BIND_FAIL: + case GETZIINFO_FAIL: + case CAMERA_ISADD_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DEIVCE_DEVICEMODEL_LIST_SUCCESS: + allDeviceTypeEntity = (AllDeviceTypeEntity) msg.obj; + // setRecycleView(); + mVerticalAdapter = new AddListAdapter(this, allDeviceTypeEntity.getData()); + RecyclerViewNoBugLinearLayoutManager manage1 = new RecyclerViewNoBugLinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + verticalRecyclerView.setHasFixedSize(true); + verticalRecyclerView.setLayoutManager(manage1); + verticalRecyclerView.setAdapter(mVerticalAdapter); + + mVerticalAdapter.setmOnItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id) { + //添加设备 + addDevice(parentPosition, childPosition); + } + }); + + /*mVerticalAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + //添加设备 + addDevice(position); + } + });*/ + break; + case GET_USERDEVICES4_SIMPLEINFO_FAIL: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + break; + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + //涂鸦wifi插座 + if (dataBean.getDeviceTypeCode().equals(SWITCH_TAG) && dataBean.getCode().equals("4")) { + Intent intent; + if (TextUtils.isEmpty(getIntent().getExtras().get("floorList").toString())) { + intent = new Intent(this, ChooseRoomActivity.class); + } else { + intent = new Intent(this, ChooseRoomInFloorActivity.class); + intent.putExtra("floorList", getIntent().getExtras().get("floorList").toString()); + } + intent.putExtra("houseTypeName", "房间选择"); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + return; + } + DeviceSimpleEntity simpleEntity = (DeviceSimpleEntity) msg.obj; + if (simpleEntity.getData().size() != 0) { + Intent intent = new Intent(this, ChooseA1AddDeviceActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("dataBeanList", (Serializable) simpleEntity.getData()); + intent.putExtras(bundle); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + intent.putExtra("subType", dataBean.getSubType()); + startActivity(intent); + } else { + int arg1 = msg.arg1; + if (arg1 == 0) { + ToastUtil.show(this, "暂无语音管家,无法添加该设备"); + } else { + ToastUtil.show(this, "暂无网关,无法添加该设备"); + } + } + break; + case CAMERA_ISADD_SUCCESS: + CheckBindEntity obj = (CheckBindEntity) msg.obj; + if (obj.getData().getIsAdd().equals("1")) { + checkUserBind(); + } else { + ToastUtil.show(this, "暂无语音管家,无法添加该设备"); + } + break; + } + } + + private void setRecycleView() { + //模拟数据 + // dataList.addAll(CityUtil.getCityList()); + GridLayoutManager manager = new GridLayoutManager(this, 4); + verticalRecyclerView.setLayoutManager(manager); + decoration = PowerfulStickyDecoration.Builder + .init(new PowerGroupListener() { + @Override + public String getGroupName(int position) { + //获取组名,用于判断是否是同一组 + if (allDeviceTypeEntity.getData().size() > position) { + int code = allDeviceTypeEntity.getData().get(position).getSort(); + String groupName = ""; + if (code < 3) { + groupName = "网关"; + } else if (code < 9) { + groupName = "红外"; + } else if (code < 50) { + groupName = "433"; + } else { + groupName = "大华"; + } + return groupName; + } + return null; + } + + @Override + public View getGroupView(int position) { + //获取自定定义的组View + if (allDeviceTypeEntity.getData().size() > position) { + int code = allDeviceTypeEntity.getData().get(position).getSort(); + String groupName = ""; + if (code < 3) { + groupName = "网关"; + } else if (code < 9) { + groupName = "红外"; + } else if (code < 50) { + groupName = "433"; + } else { + groupName = "大华"; + } + final View view = getLayoutInflater().inflate(R.layout.add_room_group, null, true); + ((TextView) view.findViewById(R.id.tv_room_type)).setText(groupName); + return view; + } else { + return null; + } + } + }) + .setCacheEnable(true) + .resetSpan(verticalRecyclerView, manager) + .setGroupHeight(DensityUtil.dip2px(GatewagAddListActivity.this, 40)) + .setDivideHeight(0) + .setGroupBackground(0xfffafafa) + .setOnClickListener(new OnGroupClickListener() { + @Override + public void onClick(int position, int id) { + if (allDeviceTypeEntity.getData().size() > position) { + + } + } + }) + .build(); + //---------------- ------------- + verticalRecyclerView.addItemDecoration(decoration); + verticalRecyclerView.setVisibility(View.VISIBLE); + //------------- PowerfulStickyDecoration 使用部分 ---------------- + //下面是平时的RecyclerView操作 + mVerticalAdapter = new AddListAdapter(this, allDeviceTypeEntity.getData()); + verticalRecyclerView.setAdapter(mVerticalAdapter); + + mVerticalAdapter.setmOnItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id) { + //添加设备 + addDevice(parentPosition, childPosition); + } + }); + } + + private void addDevice(int position, int childPosition) { + dataBean = allDeviceTypeEntity.getData().get(position).getDeviceModels().get(childPosition); + if (!TextUtils.isEmpty(dataBean.getDeviceTypeCode())) { + switch (dataBean.getDeviceTypeCode()) { + case "000": + /*Intent intent = new Intent(this, ChooseRoomActivity.class); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + startActivity(intent);*/ + Intent intent; + if (TextUtils.isEmpty(getIntent().getExtras().get("floorList").toString())) { + intent = new Intent(this, ChooseRoomActivity.class); + } else { + intent = new Intent(this, ChooseRoomInFloorActivity.class); + intent.putExtra("floorList", getIntent().getExtras().get("floorList").toString()); + } + intent.putExtra("houseTypeName", "房间选择"); + intent.putExtra("deviceType", dataBean.getDeviceTypeCode()); + intent.putExtra("deviceModel", dataBean.getCode()); + intent.putExtra("titleRemark", dataBean.getTitleRemark()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + /*WifiManager wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(this, ConnectWifiActivity.class); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("from", "AsxAddDeviceListActivity"); + startActivity(intent); + } else { + Intent intent = new Intent(this, NoWifiConnectActicity.class); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("from", "AsxAddDeviceListActivity"); + startActivity(intent); + }*/ + break; + case CAMERA_TAG: + cameraIscCanAdd(); + break; + case GATE_WAY: + checkUserBind(); + break; + case INTELLIGENT_DOOR_LOCK: + case WIRELESS_EMERGENCY_BUTTON: + case INFRARED_CURTAIN_DETECTOR: + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(this, "敬请期待!"); + } else { + getLcDeviceList(); + } + break; + case SAFE_DEVICE_TAG: + case DOOR_LOCK_TAG: + case INFRARED_TAG: + case SMOKE_TAG: + case GAS_TAG: + case WATER_TAG: + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(this, "敬请期待!"); + } else { + if (dataBean.getCode().equals("1")) { + getLcDeviceList(); + } else if (dataBean.getCode().equals("0")) { + getAideviceList(dataBean.getDeviceTypeCode()); + } + } + break; + default: + //原先小艾中设备添加 + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(this, "敬请期待!"); + } else { + // getUserDevices4SimpleInfo(); + getAideviceList(dataBean.getDeviceTypeCode()); + } + break; + } + } else { + ToastUtil.show(this, "敬请期待!"); + } + } + + private synchronized void getLcDeviceList() { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("deviceModel", "0"); + map.put("deviceType", GATE_WAY); + netWorkUtil.requestPostByAsynewApi(FIND_DEVICES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("findDevices", "onSuccess()" + respone); + DeviceSimpleEntity obj = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = obj; + msg.arg1 = 1; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getAideviceList(String deviceTypeCode) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("standardCodes", dataBean.getStandardCodes()); + map.put("deviceType", deviceTypeCode); + util.requestGetByAsy(NetWorkUrl.DEIVCE_AIDEVICE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getAideviceList", respone); + DeviceSimpleEntity entity = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = entity; + msg.arg1 = 0; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USERDEVICES4_SIMPLEINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private void cameraIscCanAdd() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", getIntent().getExtras().get("houseId").toString()); + netWorkUtil.requestGetByAsy(CAMERA_ISADD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cameraIscCanAdd", "onSuccess()" + respone); + CheckBindEntity obj = JSON.parseObject(respone, CheckBindEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CAMERA_ISADD_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void checkUserBind() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", getIntent().getExtras().get("houseId").toString()); + netWorkUtil.requestPostByAsynewApi(CHECK_USER_BIND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("checkUserBind", "onSuccess()" + respone); + CheckBindEntity obj = JSON.parseObject(respone, CheckBindEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/activity/HotelAddDeviceListActivity.java b/app/src/main/java/com/yonsz/z1/activity/HotelAddDeviceListActivity.java new file mode 100644 index 0000000..cf6c181 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/activity/HotelAddDeviceListActivity.java @@ -0,0 +1,443 @@ +package com.yonsz.z1.activity; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; + +import com.alibaba.fastjson.JSON; +import com.lechange.demo.localvideo.PowerfulStickyDecoration; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity5.AllDeviceTypeEntity; +import com.yonsz.z1.device.tv.AirListActivity; +import com.yonsz.z1.device.tv.FanListActivity; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.new433.switcher.SwitcherOneActivity; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.devicelist.DeviceList4Activity; +import com.yonsz.z1.version5.ChooseRoomActivity; +import com.yonsz.z1.version5.adapter.HotelAddDeviceAdapter; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; +import com.yonsz.z1.ybl.panel.YblPanelStepOneActivity; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_CLEANER; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CLOTHES_HANGER; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.DEIVCE_DEVICEMODEL_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.GETZIINFO_FAIL; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MOVIE_CAMERA; +import static com.yonsz.z1.net.Constans.MULTIFUNCTIONAL_CONTROLLER; +import static com.yonsz.z1.net.Constans.MUSIC_TAG; +import static com.yonsz.z1.net.Constans.SAFE_DEVICE_TAG; +import static com.yonsz.z1.net.Constans.SITUATIONAL_PANEL; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WINDOW_OPENER; +import static com.yonsz.z1.net.Constans.localAddAddressId; + +/** + * Created by Administrator on 2019/2/25. + */ + +public class HotelAddDeviceListActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout a1Rl, lechengRl; + private RecyclerView verticalRecyclerView, leftRecyclerView; + private HotelAddDeviceAdapter mVerticalAdapter; + private PowerfulStickyDecoration decoration; + private AllDeviceTypeEntity allDeviceTypeEntity = new AllDeviceTypeEntity(); + private List addList = new ArrayList<>(); + private String addZiId = ""; + private List dataBeanList; + private AllDeviceTypeEntity.DataBean dataBean; + private LoadingDialog mLoadingDialog; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_asx_add_device_list); + initView(); + initListener(); + } + + private void initView() { + addList = (ArrayList) getIntent().getStringArrayListExtra("addList"); + addZiId = getIntent().getExtras().get("ziId").toString(); + verticalRecyclerView = (RecyclerView) findViewById(R.id.vertical_RecyclerView); + leftRecyclerView = (RecyclerView) findViewById(R.id.left_RecyclerView); + a1Rl = (RelativeLayout) findViewById(R.id.rl_a1); + lechengRl = (RelativeLayout) findViewById(R.id.rl_lecheng); + mTitleView = (TitleView) findViewById(R.id.title_asx_add_device); + mTitleView.setHead(R.string.add_device); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + leftRecyclerView.setVisibility(View.GONE); + getDevicemodelList(); + } + + private void initListener() { + a1Rl.setOnClickListener(this); + lechengRl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rl_a1: + + break; + case R.id.rl_lecheng: + + break; + } + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GETZIINFO_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DEIVCE_DEVICEMODEL_LIST_SUCCESS: + allDeviceTypeEntity = (AllDeviceTypeEntity) msg.obj; + dataBeanList = allDeviceTypeEntity.getData(); + mVerticalAdapter = new HotelAddDeviceAdapter(this, dataBeanList); + GridLayoutManager manager = new GridLayoutManager(this, 3); + verticalRecyclerView.setLayoutManager(manager); + verticalRecyclerView.setHasFixedSize(true); + verticalRecyclerView.setLayoutManager(manager); + verticalRecyclerView.setAdapter(mVerticalAdapter); + + mVerticalAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + dataBean = dataBeanList.get(position); + if (!TextUtils.isEmpty(dataBean.getDeviceTypeCode())) { + if (dataBean.getPostStatus() == 0) { + ToastUtil.show(HotelAddDeviceListActivity.this, "敬请期待!"); + } else { + addDevice(position); + } + } else { + ToastUtil.show(HotelAddDeviceListActivity.this, "敬请期待!"); + } + } + }); + break; + } + } + + + private void addDevice(int position) { + String deviceType = dataBeanList.get(position).getDeviceTypeCode(); + String deviceModel = dataBeanList.get(position).getCode(); + String ziId = addZiId; + String deviceVersion = getIntent().getExtras().get("deviceVersion").toString(); + Intent intent; + switch (deviceVersion) { + case "2": + switch (deviceType) { + case TV_TAG: + case TVONE_TAG: + case AIR_TAG: + case FAN_TAG: + case SWEEP_TAG: + case MUSIC_TAG: + case MOVIE_CAMERA: + case AIR_CLEANER: + intent = new Intent(HotelAddDeviceListActivity.this, DeviceList4Activity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + case SAFE_DEVICE_TAG: + case DOOR_LOCK_TAG: + case INFRARED_TAG: + case SMOKE_TAG: + case GAS_TAG: + case WATER_TAG: + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceAddress", localAddAddressId); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + /*intent = new Intent(HotelAddDeviceListActivity.this, ScanCodeActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", localAddAddressId); + startActivity(intent);*/ + break; + case SITUATIONAL_PANEL: + if (deviceModel.equals("0")) { + intent = new Intent(HotelAddDeviceListActivity.this, YblPanelStepOneActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", localAddAddressId); + startActivity(intent); + } else if (deviceModel.equals("1") || deviceModel.equals("2")) { + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", SITUATIONAL_PANEL); + intent.putExtra("deviceAddress", localAddAddressId); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + } + break; + case CURTAINS_TAG: + if (deviceModel.equals("0")) { + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceAddress", localAddAddressId); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + } else if (deviceModel.equals("1")) { + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + } + break; + case SWITCH_TAG: + /*intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("deviceAddress", localAddAddressId); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent);*/ + + intent = new Intent(HotelAddDeviceListActivity.this, SwitcherOneActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("deviceAddress", localAddAddressId); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + break; + case CLOTHES_HANGER: + case LIGHT_TAG: + case WINDOW_OPENER: + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + break; + case MULTIFUNCTIONAL_CONTROLLER: + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + startActivity(intent); + break; + /*case LIGHT_TAG: + addChildDevice(ziId, LIGHT_TAG, "未知品牌"); + break;*/ + default: + break; + } + break; + case "1": + switch (deviceType) { + case AIR_TAG: + intent = new Intent(HotelAddDeviceListActivity.this, AirListActivity.class); + intent.putExtra("airStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case TV_TAG: + case TVONE_TAG: + case FAN_TAG: + case SWEEP_TAG: + intent = new Intent(HotelAddDeviceListActivity.this, FanListActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + case MUSIC_TAG: + case MOVIE_CAMERA: + case AIR_CLEANER: + intent = new Intent(HotelAddDeviceListActivity.this, DeviceList4Activity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + intent.putExtra("id", ""); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + case SAFE_DEVICE_TAG: + case DOOR_LOCK_TAG: + case INFRARED_TAG: + case SMOKE_TAG: + case GAS_TAG: + case WATER_TAG: + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceAddress", localAddAddressId); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + /*intent = new Intent(HotelAddDeviceListActivity.this, ScanCodeActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", localAddAddressId); + startActivity(intent);*/ + break; + case SITUATIONAL_PANEL: + if (deviceModel.equals("0")) { + intent = new Intent(HotelAddDeviceListActivity.this, YblPanelStepOneActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", localAddAddressId); + startActivity(intent); + } else if (deviceModel.equals("1") || deviceModel.equals("2")) { + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", SITUATIONAL_PANEL); + intent.putExtra("deviceAddress", localAddAddressId); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + } + break; + case CURTAINS_TAG: + if (deviceModel.equals("0")) { + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceAddress", localAddAddressId); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + } else if (deviceModel.equals("1")) { + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + } + break; + case SWITCH_TAG: + /*intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("deviceAddress", localAddAddressId); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent);*/ + + intent = new Intent(HotelAddDeviceListActivity.this, SwitcherOneActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("deviceAddress", localAddAddressId); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + break; + case CLOTHES_HANGER: + case LIGHT_TAG: + case WINDOW_OPENER: + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + break; + case MULTIFUNCTIONAL_CONTROLLER: + intent = new Intent(HotelAddDeviceListActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + startActivity(intent); + break; + /*case LIGHT_TAG: + addChildDevice(ziId, LIGHT_TAG, "未知品牌"); + break;*/ + default: + break; + } + break; + } + } + + private void getDevicemodelList() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + util.requestGetByAsy(NetWorkUrl.DEIVCE_DEVICEMODEL_SUBSET_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getDevicemodelList", respone); + AllDeviceTypeEntity entity = JSON.parseObject(respone, AllDeviceTypeEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(DEIVCE_DEVICEMODEL_LIST_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GETZIINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GETZIINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/activity/MainActivity.java b/app/src/main/java/com/yonsz/z1/activity/MainActivity.java new file mode 100644 index 0000000..c4afe3f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/activity/MainActivity.java @@ -0,0 +1,511 @@ +package com.yonsz.z1.activity; + +import android.content.DialogInterface; +import android.content.Intent; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Message; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RadioButton; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.facebook.rebound.SpringConfig; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.ThirdEvent; +import com.yonsz.z1.database.entity.VersionEntity; +import com.yonsz.z1.database.entity.entitya2.EventShowEntity; +import com.yonsz.z1.database.entity.entitya2.SafeLogEntity; +import com.yonsz.z1.device.deviceadd.ConfigWifiActicity; +import com.yonsz.z1.device.deviceadd.NoWifiConnectActicity; +import com.yonsz.z1.devicea2.safedevice.FullDialogActivity; +import com.yonsz.z1.devicea2.safedevice.dialog.FullDialogFragment; +import com.yonsz.z1.fragment.main.MainFragment; +import com.yonsz.z1.fragment.message.MessageFragment; +import com.yonsz.z1.fragment.person.PersonFragment; +import com.yonsz.z1.fragment.store.StroeFragment; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.mine.aboutversion.util.UpdateAppUtils; +import com.yonsz.z1.model.ModelSettingActivity; +import com.yonsz.z1.model.ModelTimeSetActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppGenerUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.CircleImageView; +import com.yonsz.z1.view.MainViewPager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.springmenu.MenuListener; +import com.yonsz.z1.view.springmenu.SpringMenu; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.mine.aboutversion.util.UpdateAppUtils.DOWNLOAD_BY_BROWSER; +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.SHOW_FULL_WARN; +import static com.yonsz.z1.net.Constans.SHOW_SAHRE_DEVICE; +import static com.yonsz.z1.net.Constans.UPDATE_STATE_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_STATE_SUCCESS; + +public class MainActivity extends BaseActivity implements MenuListener, DialogInterface.OnDismissListener { + public static String versionUrl = "http://a.app.qq.com/o/simple.jsp?pkgname=com.yonsz.z1"; + public static String versionId = ""; + public static VersionEntity.ObjEntity versionEntity; + public static int listInfoNum, msgViewNum; + private TitleView mTitle; + private LinearLayout inHomeLl, outHomeLl, inBedLl, outBedLl, timeSettingLl; + private RadioButton mainRb; + private RadioButton storeRb; + private RadioButton messageRb; + private RadioButton meRb; + private LinearLayout mydeviceLl, shareDeviceLl; + private ImageView mydeviceIv, shareDeviceIv; + private TextView mydeviceTv, shareDeviceTv; + private MainFragment mMainFragment; + private PersonFragment mPersonFragment; + private FullDialogFragment fullDialogFragment; + private FullDialogActivity mFullDialogActivity; + + /** + * 侧滑 + */ + private SpringMenu mSpringMenu; + /** + * A2 + */ + private MainViewPager mViewPager; + // private CoordinatorMenu mCoordinatorMenu; + private CircleImageView personIcon; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + //先注释起来 + // NettyHandlerUtil.getInstance(); + initView(); + } + + public void onEventMainThread(EventShowEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = SHOW_SAHRE_DEVICE; + mHandler.sendMessage(message); + } + + public void onEventMainThread(ThirdEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = SHOW_FULL_WARN; + mHandler.sendMessage(message); + } + + @Override + public void onResume() { + super.onResume(); + // initData(); + } + + private void initView() { + mMainFragment = new MainFragment(); + mPersonFragment = new PersonFragment(); + + /** + * 侧滑 + */ + mSpringMenu = new SpringMenu(this, R.layout.main_slide_menu); + mSpringMenu.setMenuListener(this); + mSpringMenu.setFadeEnable(true); + mSpringMenu.setDirection(SpringMenu.DIRECTION_LEFT); + mSpringMenu.setChildSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(90, 10)); + //设置侧滑的位置 + mSpringMenu.setDragOffset(0.1f); + //忽略这个控件 + //mSpringMenu.addIgnoredView(mFrictionBar); + + mydeviceLl = (LinearLayout) findViewById(R.id.ll_my_device); + shareDeviceLl = (LinearLayout) findViewById(R.id.ll_share_device); + mydeviceIv = (ImageView) findViewById(R.id.iv_icon_side_nav_my); + shareDeviceIv = (ImageView) findViewById(R.id.iv_icon_side_nav_share); + mydeviceTv = (TextView) findViewById(R.id.tv_side_nav_my); + shareDeviceTv = (TextView) findViewById(R.id.tv_side_nav_share); + mTitle = (TitleView) findViewById(R.id.title_main); + mTitle.setHeadBackGone(); + mTitle.setHeadFuntionGone(); + mTitle.clearBackGroud(); + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + mSpringMenu.openMenu(); + } + + @Override + public void onFunction() { + //判断wifi是否打开 + WifiManager wifimanager; + wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(MainActivity.this, ConfigWifiActicity.class); + startActivity(intent); + } else { + Intent intent = new Intent(MainActivity.this, NoWifiConnectActicity.class); + startActivity(intent); + } + } + + @Override + public void onFunctionText() { + + } + }); + + /** + * A2 + */ + // mCoordinatorMenu = (CoordinatorMenu) findViewById(R.id.main_slide_menu); + personIcon = (CircleImageView) findViewById(R.id.civ_personl); + + mainRb = (RadioButton) findViewById(R.id.rb_main_page); + storeRb = (RadioButton) findViewById(R.id.rb_store_page); + messageRb = (RadioButton) findViewById(R.id.rb_message_page); + meRb = (RadioButton) findViewById(R.id.rb_me_page); + + inHomeLl = (LinearLayout) findViewById(R.id.ll_in_home); + outHomeLl = (LinearLayout) findViewById(R.id.ll_out_home); + inBedLl = (LinearLayout) findViewById(R.id.ll_in_bed); + outBedLl = (LinearLayout) findViewById(R.id.ll_out_bed); + timeSettingLl = (LinearLayout) findViewById(R.id.ll_time_setting); + + mainRb.setOnClickListener(this); + storeRb.setOnClickListener(this); + messageRb.setOnClickListener(this); + meRb.setOnClickListener(this); + inHomeLl.setOnClickListener(this); + outHomeLl.setOnClickListener(this); + inBedLl.setOnClickListener(this); + outBedLl.setOnClickListener(this); + timeSettingLl.setOnClickListener(this); + mydeviceLl.setOnClickListener(this); + shareDeviceLl.setOnClickListener(this); + + + mViewPager = (MainViewPager) findViewById(R.id.mvp_main); + + List fragmentList = new ArrayList<>(); + fragmentList.add(mMainFragment); + fragmentList.add(new StroeFragment()); + fragmentList.add(new MessageFragment()); + fragmentList.add(mPersonFragment); + FragmentManager manager = this.getSupportFragmentManager(); + mViewPager.setAdapter(new MainActivityAdapter(manager, fragmentList)); + mViewPager.setOffscreenPageLimit(3); + + if (SharedpreferencesUtil.get(Constans.USERICON, "").toString() != null) { + ImageLoader.getInstance().displayImage(SharedpreferencesUtil.get(Constans.USERICON, "").toString(), personIcon, UniKongApp.getHiApp().getImageLoaderOption()); + } + + if (DensityUtil.isNetConnected(this)) { + updataUserState(); + } else { + ToastUtil.show(this, R.string.net_error_info); + } + } + + @Override + public void onBackPressed() { + /** + * A2 + */ + if (mSpringMenu.isOpened()) { + mSpringMenu.closeMenu(); + } else { + super.onBackPressed(); + } + } + + //上传用户经纬度信息 + private void updataUserState() { + + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.iv_add_device: + intent = new Intent(MainActivity.this, ConfigWifiActicity.class); + startActivity(intent); + break; + case R.id.rb_main_page: + mViewPager.setCurrentItem(0, false); + /*mTitle.setHead(R.string.my_device); + mTitle.setHeadFuntion(R.drawable.icon_nav_add); + mTitle.setBackFuntion(R.drawable.device_icon_wode); + mTitle.clearBackGroud();*/ + break; + case R.id.rb_store_page: + mViewPager.setCurrentItem(1, false); + // mTitle.setHead(R.string.store_page); + // mTitle.setHeadBackGone(); + // mTitle.setHeadFuntionGone(); + // mTitle.showBackGroud(); + break; + case R.id.rb_message_page: + mViewPager.setCurrentItem(2, false); + /*mTitle.setHead(R.string.message_center); + mTitle.setHeadBackGone(); + mTitle.setHeadFuntionGone(); + mTitle.showBackGroud();*/ + break; + case R.id.rb_me_page: + mViewPager.setCurrentItem(3, false); + // mTitle.setHead(R.string.me_page); + // // mTitle.setBackFuntion(R.drawable.icon_nav_back); + // mTitle.setHeadBackGone(); + // mTitle.setHeadFuntionGone(); + // mTitle.clearBackGroud(); + break; + case R.id.ll_in_home: + intent = new Intent(MainActivity.this, ModelSettingActivity.class); + intent.putExtra("model", 1); + setIshaveDevice(intent); + startActivity(intent); + break; + case R.id.ll_out_home: + intent = new Intent(MainActivity.this, ModelSettingActivity.class); + intent.putExtra("model", 2); + setIshaveDevice(intent); + startActivity(intent); + break; + case R.id.ll_in_bed: + intent = new Intent(MainActivity.this, ModelSettingActivity.class); + intent.putExtra("model", 3); + setIshaveDevice(intent); + startActivity(intent); + break; + case R.id.ll_out_bed: + intent = new Intent(MainActivity.this, ModelSettingActivity.class); + intent.putExtra("model", 4); + setIshaveDevice(intent); + startActivity(intent); + break; + case R.id.ll_time_setting: + intent = new Intent(this, ModelTimeSetActivity.class); + setIshaveDevice(intent); + startActivity(intent); + break; + case R.id.ll_my_device: + mydeviceTv.setTextColor(0xfff7ac00); + shareDeviceTv.setTextColor(0xff333333); + mydeviceIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_sidenav_mydevice_pre)); + shareDeviceIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_sidenav_share_nor)); + + + if (mSpringMenu.isOpened()) { + mSpringMenu.closeMenu(); + } else { + super.onBackPressed(); + } + mMainFragment.showAllRecord(); + break; + case R.id.ll_share_device: + shareDeviceTv.setTextColor(0xfff7ac00); + mydeviceTv.setTextColor(0xff333333); + mydeviceIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_sidenav_mydevice_nor)); + shareDeviceIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_sidenav_share_pre)); + + if (mSpringMenu.isOpened()) { + mSpringMenu.closeMenu(); + } else { + super.onBackPressed(); + } + mMainFragment.showShareRecord(); + break; + } + } + + private void setIshaveDevice(Intent intent) { + boolean haveDevice = mMainFragment.isHaveDevice(); + if (haveDevice) { + intent.putExtra("isHaveDevice", "1"); + } else { + intent.putExtra("isHaveDevice", "0"); + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_USER_SESSION_NULL: + // ToastUtil.show(MainActivity.this, "用户在其他手机登陆"); + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(MainActivity.this, LoginActivity.class); + startActivity(intent); + finish(); + } + }, 1000); + break; + case UPDATE_STATE_SUCCESS: + versionEntity = (VersionEntity.ObjEntity) msg.obj; + // initRedCircle(versionEntity); + versionId = versionEntity.getVersionInfo().getVersionId().substring(2, 7); + if (!versionId.equals(AppGenerUtil.getVersionName(this))) { + mPersonFragment.isShowRedCircle(true); + } else { + mPersonFragment.isShowRedCircle(false); + } + //暂时修改成每次进入都提醒 + getVersion(); + /*if (null != SharedpreferencesUtil.get(Constans.VESION_NOW, "")) { + if (versionId.equals(SharedpreferencesUtil.get(Constans.VESION_NOW, ""))) { + + } else { + getVersion(); + } + } else { + getVersion(); + }*/ + break; + case UPDATE_STATE_FAIL: + + break; + case SHOW_SAHRE_DEVICE: + if (mSpringMenu.isOpened()) { + mSpringMenu.closeMenu(); + } else { + mSpringMenu.openMenu(); + } + break; + case SHOW_FULL_WARN: + if (UniKongApp.getActivity() == this) { + selectSafetyLog(); + } else if (FullDialogActivity.isActivityRunning("FullDialogActivity", this)) { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(UniKongApp.getActivity(), FullDialogActivity.class); + startActivity(intent); + } else { + Intent intent = new Intent(UniKongApp.getActivity(), FullDialogActivity.class); + startActivity(intent); + } + break; + case GET_LOG_SUCCESS: + if (msg.obj != null) { + if (null != fullDialogFragment && fullDialogFragment.getShowsDialog()) { + fullDialogFragment.eixtDioalog(); + } + fullDialogFragment = new FullDialogFragment(UniKongApp.getActivity(), (List) msg.obj); + fullDialogFragment.show(getSupportFragmentManager(), "FullDialogFragment"); + } + break; + } + } + + private void initRedCircle(VersionEntity.ObjEntity versionEntity) { + versionId = versionEntity.getVersionInfo().getVersionId().substring(2, 7); + msgViewNum = versionEntity.getSysMsgNnum(); + //先把红点注释起来 + /*if (msgViewNum != 0) { + mTitle.setHeadBackRed(true); + } else if (!versionId.equals(AppGenerUtil.getVersionName(this))) { + mTitle.setHeadBackRed(true); + } else { + mTitle.setHeadBackRed(false); + }*/ + } + + // 获取更新版本号 + private void getVersion() { + UpdateAppUtils.from(this) + .checkBy(UpdateAppUtils.CHECK_BY_VERSION_NAME) + .serverVersionName(versionId) + .serverVersionCode(5) + .apkPath(versionUrl) + .downloadBy(DOWNLOAD_BY_BROWSER) + .isForce(false) + .update(1); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return mSpringMenu.dispatchTouchEvent(ev); + } + + @Override + public void onMenuOpen() { + if (SharedpreferencesUtil.get(Constans.USERICON, "").toString() != null) { + ImageLoader.getInstance().displayImage(SharedpreferencesUtil.get(Constans.USERICON, "").toString(), personIcon, UniKongApp.getHiApp().getImageLoaderOption()); + } + } + + @Override + public void onMenuClose() { + + } + + @Override + public void onProgressUpdate(float value, boolean bouncing) { + + } + + private void selectSafetyLog() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("startNo", 0 + ""); + if (1 == 1) { + map.put("viewFlag", "0"); + } else { + map.put("viewFlag", "0"); + } + netWorkUtil.requestPostByAsynew(NetWorkUrl.SELECT_SAFETY_LOG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectSafetyLog", "ShareDeviceActivity onSuccess()" + respone); + SafeLogEntity obj = JSON.parseObject(respone, SafeLogEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_LOG_SUCCESS); + msg.obj = obj.getObj(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + + } + });*/ + } + + @Override + public void onDismiss(DialogInterface dialog) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/activity/MainActivityAdapter.java b/app/src/main/java/com/yonsz/z1/activity/MainActivityAdapter.java new file mode 100644 index 0000000..9bce9d7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/activity/MainActivityAdapter.java @@ -0,0 +1,36 @@ +package com.yonsz.z1.activity; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.view.ViewGroup; + +import java.util.List; + +/** + * Created by xiesuichao on 2016/11/11. + */ +public class MainActivityAdapter extends FragmentPagerAdapter { + + private List fragmentList; + + public MainActivityAdapter(FragmentManager manager, List fragmentList) { + super(manager); + this.fragmentList = fragmentList; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + super.destroyItem(container, position, object); + } + + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/activity/TestActivity.java b/app/src/main/java/com/yonsz/z1/activity/TestActivity.java new file mode 100644 index 0000000..17bd2e3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/activity/TestActivity.java @@ -0,0 +1,483 @@ +package com.yonsz.z1.activity; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.ExpandableListView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.DeviceDetailEntity; +import com.yonsz.z1.database.entity.DeviceEntity; +import com.yonsz.z1.database.entity.VersionEntity; +import com.yonsz.z1.device.DeviceExpandableListView; +import com.yonsz.z1.device.SlideAdapter; +import com.yonsz.z1.device.airconditioner.AddAirAutoActivity; +import com.yonsz.z1.device.airconditioner.AirConditionActivity; +import com.yonsz.z1.device.childdevice.ChildDeviceListActivity; +import com.yonsz.z1.device.deviceadd.ConfigWifiActicity; +import com.yonsz.z1.device.fan.FanLearnActivity; +import com.yonsz.z1.device.tv.TvControlActivity; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.util.UpdateAppUtils; +import com.yonsz.z1.mine.mydevice.DeviceDetailActivity; +import com.yonsz.z1.mine.mydevice.ShareDeviceActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppGenerUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.PullToRefreshLayout; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.mine.aboutversion.util.UpdateAppUtils.DOWNLOAD_BY_BROWSER; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.GETZIINFO_FAIL; +import static com.yonsz.z1.net.Constans.GETZIINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_STATE_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_STATE_SUCCESS; +import static com.yonsz.z1.utils.NettyHandlerUtil.initNetty; + +/** + * Created by Administrator on 2017/9/4. + */ + +public class TestActivity extends BaseActivity { + private PullToRefreshLayout pullLayout; + private TitleView mTitle; + private ImageView addDeviceIv; + private DeviceExpandableListView mListView; + private List mObjEntity; + private SlideAdapter mSlideAdapter; + private String ziId; + private LinearLayout mNoDeviceLl; + private String respone1; + private boolean isOpen = false; + + public static String versionUrl = "http://a.app.qq.com/o/simple.jsp?pkgname=com.yonsz.z1"; + public static String versionId = ""; + public static VersionEntity.ObjEntity versionEntity; + public static boolean isUpdateVersion = false; + public static int listInfoNum, msgViewNum; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_test); + initNetty(); + initData(); + initView(); + initListener(); + } + + + @Override + public void onResume() { + super.onResume(); + initData(); + updataUserState(); + } + + private void initView() { + pullLayout = (PullToRefreshLayout) findViewById(R.id.pull_refresh_layout); + addDeviceIv = (ImageView) findViewById(R.id.iv_add_device); + mNoDeviceLl = (LinearLayout) findViewById(R.id.ll_no_record); + mTitle = (TitleView) findViewById(R.id.title_main); + mTitle.setHead(R.string.device); + mTitle.setHeadFuntion(R.drawable.icon_nav_add); + mTitle.setBackFuntion(R.drawable.device_icon_wode); + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + // startActivity(new Intent(TestActivity.this, PersonalActivity.class)); + startActivity(new Intent(TestActivity.this, TestActivity.class)); + } + + @Override + public void onFunction() { + /* //判断wifi是否打开 + WifiManager wifimanager; + wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(TestActivity.this, ConfigWifiActicity.class); + startActivity(intent); + } else { + Intent intent = new Intent(TestActivity.this, NoWifiConnectActicity.class); + startActivity(intent); + }*/ + } + + @Override + public void onFunctionText() { + + } + }); + mListView = (DeviceExpandableListView) findViewById(R.id.expandablelist); + } + + private void setZ1DataView() { + if (mObjEntity != null) { + mNoDeviceLl.setVisibility(View.GONE); + mListView.setVisibility(View.VISIBLE); + mSlideAdapter = new SlideAdapter(getApplicationContext(), mObjEntity); + mListView.setAdapter(mSlideAdapter); + for (int i = 0; i < mSlideAdapter.getGroupCount(); i++) { + mListView.expandGroup(i); + } + mSlideAdapter.setmOnExpandItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int groupPosition, final int childPosition, int i, int j, String id) { + Intent intent; + switch (i) { + case 0: + //分享操作 + if (childPosition == 1) { + intent = new Intent(TestActivity.this, ShareDeviceActivity.class); + intent.putExtra("ziId", mObjEntity.get(groupPosition).getZiId()); + startActivity(intent); + } else { + ToastUtil.show(TestActivity.this, "您没有分享的权限"); + } + break; + case 1: + //进入设备 + intent = new Intent(TestActivity.this, DeviceDetailActivity.class); + intent.putExtra("deviceEntity", respone1); + intent.putExtra("position", groupPosition); + intent.putExtra("isOwner", childPosition); + startActivity(intent); + break; + case 2: + //删除设备 + ziId = mObjEntity.get(groupPosition).getZiId(); + + /*if (j != 1) { + ToastUtil.show(TestActivity.this, "请先添加设备"); + return; + } else */ + ConfirmDialog dialog = new ConfirmDialog(TestActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + if (childPosition == 0) { + deleteChildDevice(TV_TAG, ziId); + } else if (childPosition == 1) { + deleteChildDevice(AIR_TAG, ziId); + } else if (childPosition == 2) { + deleteChildDevice(FAN_TAG, ziId); + } + break; + case 1: + break; + } + } + }); + dialog.setContent(R.string.sure_delete); + dialog.setCancleBtn(R.string.delete); + dialog.setSureBtn(R.string.cancel); + dialog.setCancelable(false); + dialog.show(); + break; + case 3: + //开关机 + intent = new Intent(TestActivity.this, ChildDeviceListActivity.class); + intent.putExtra("name", "小智K1—069"); + startActivity(intent); + /* if (mObjEntity.get(groupPosition).getOnlineFlag().equals("1")) { + setShake(); + ziId = mObjEntity.get(groupPosition).getZiId(); + Toast.makeText(MainActivity.this, "开关机", Toast.LENGTH_SHORT).show(); + switcher (childPosition) { + case 0: + sendAirControlOrder(TV_OPEN, ziId); + break; + case 1: + if (isOpen) { + sendAirControlOrder(AIR_CLOSE, ziId); + isOpen = false; + } else { + sendAirControlOrder(AIR_OPEN, ziId); + isOpen = true; + } + break; + case 2: + sendAirControlOrder(FAN_OPEN, ziId); + break; + } + }*/ + break; + case 4: + //添加子设备 + if (mObjEntity.get(groupPosition).getOnlineFlag().equals("1")) { + ziId = mObjEntity.get(groupPosition).getZiId(); + if (childPosition == 0) { + //电视 + addChildDevice(ziId, TV_TAG, "未知品牌"); + } else if (childPosition == 1) { + //空调 + intent = new Intent(TestActivity.this, AddAirAutoActivity.class); + intent.putExtra("airStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } else if (childPosition == 2) { + //风扇 + addChildDevice(ziId, FAN_TAG, "未知品牌"); + } + } + break; + case 5: + //进入或添加设备 + ziId = mObjEntity.get(groupPosition).getZiId(); + if (j == 1) { + if (childPosition == 0) { + intent = new Intent(TestActivity.this, TvControlActivity.class); + intent.putExtra("tvStateTag", "1"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } else if (childPosition == 1) { + intent = new Intent(TestActivity.this, AirConditionActivity.class); + intent.putExtra("airStateTag", "1"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } else if (childPosition == 2) { + intent = new Intent(TestActivity.this, FanLearnActivity.class); + intent.putExtra("fanStateTag", "1"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } + } else { + if (childPosition == 0) { + //电视 + addChildDevice(ziId, TV_TAG, "未知品牌"); + } else if (childPosition == 1) { + //空调 + intent = new Intent(TestActivity.this, AddAirAutoActivity.class); + intent.putExtra("airStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } else if (childPosition == 2) { + //风扇 + addChildDevice(ziId, FAN_TAG, "未知品牌"); + } + } + break; + case 6: + //进入子设备列表 + Toast.makeText(TestActivity.this, "" + groupPosition, Toast.LENGTH_SHORT).show(); + // /*intent = new Intent(MainActivity.this, FanLearnActivity.class); + // intent.putExtra("groupPosition", groupPosition); + // startActivity(intent);*/ + break; + } + } + }); + } else { + mNoDeviceLl.setVisibility(View.VISIBLE); + mListView.setVisibility(View.GONE); + } + + mListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { + Intent intent; + + @Override + public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { + if (mObjEntity.get(groupPosition).getList() != null && mObjEntity.get(groupPosition).getOnlineFlag().equals("1")) { + ziId = mObjEntity.get(groupPosition).getZiId(); + List list = mObjEntity.get(groupPosition).getList(); + if (childPosition == 0) { + //电视 + intent = new Intent(TestActivity.this, TvControlActivity.class); + intent.putExtra("tvStateTag", "1"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } else if (childPosition == 1) { + //空调 + intent = new Intent(TestActivity.this, AirConditionActivity.class); + intent.putExtra("airStateTag", "1"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } else if (childPosition == 2) { + //风扇 + intent = new Intent(TestActivity.this, FanLearnActivity.class); + intent.putExtra("fanStateTag", "1"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } + } + return true; + } + }); + + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + + private void initData() { + if (DensityUtil.isNetworkConnected(this)) { + getZ1Info(); + } else { + ToastUtil.show(this, R.string.Unconnected_network); + } + } + + //获取Z1列表 + private void getZ1Info() { + + } + + private void initListener() { + addDeviceIv.setOnClickListener(this); + pullLayout.setOnRefreshListener(new PullToRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + initData(); + // initNetty(); + } + + @Override + public void onLoad() { + initData(); + } + }); + } + + //上传用户经纬度信息 + private void updataUserState() { + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_add_device: + Intent intent = new Intent(TestActivity.this, ConfigWifiActicity.class); + startActivity(intent); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GETZIINFO_SUCCESS: + DeviceEntity entity = (DeviceEntity) msg.obj; + mObjEntity = entity.getObj(); + setZ1DataView(); + break; + case GETZIINFO_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + String deviceId = entity1.getObj().getDeviceId(); + if (deviceId.equals(FAN_TAG)) { + Intent intent = new Intent(TestActivity.this, FanLearnActivity.class); + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } else { + Intent intent = new Intent(TestActivity.this, TvControlActivity.class); + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } + /*ToastUtil.show(this, entity1.getMsg()); + getZ1Info(); + mSlideAdapter.notifyDataSetChanged();*/ + + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DELETE_CHILDDEVICE_SUCCESS: + + break; + case DELETE_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case GET_USER_SESSION_NULL: +// ToastUtil.show(TestActivity.this, "用户在其他手机登陆"); + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(TestActivity.this, LoginActivity.class); + startActivity(intent); + finish(); + } + }, 1000); + break; + case UPDATE_STATE_SUCCESS: + versionEntity = (VersionEntity.ObjEntity) msg.obj; + initRedCircle(versionEntity); + if (!isUpdateVersion) { + getVersion(); + } + break; + case UPDATE_STATE_FAIL: + + break; + } + } + + private void initRedCircle(VersionEntity.ObjEntity versionEntity) { + versionId = versionEntity.getVersionInfo().getVersionId().substring(2, 5); + msgViewNum = versionEntity.getSysMsgNnum(); + if (msgViewNum != 0) { + mTitle.setHeadBackRed(true); + } else if (!versionId.equals(AppGenerUtil.getVersionName(this))) { + mTitle.setHeadBackRed(true); + } else { + mTitle.setHeadBackRed(false); + } + } + + // 获取更新版本号 + private void getVersion() { + UpdateAppUtils.from(this) + .checkBy(UpdateAppUtils.CHECK_BY_VERSION_NAME) + .serverVersionName(versionId) + .serverVersionCode(5) + .apkPath(versionUrl) + .downloadBy(DOWNLOAD_BY_BROWSER) + .isForce(false) + .update(1); + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/APIService.java b/app/src/main/java/com/yonsz/z1/baiduai/APIService.java new file mode 100644 index 0000000..946f925 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/APIService.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai; + +import android.content.Context; + +import com.yonsz.z1.baiduai.listener.OnResultListener; +import com.yonsz.z1.baiduai.model.AccessToken; +import com.yonsz.z1.baiduai.model.CommunicateResponse; +import com.yonsz.z1.baiduai.utils.HttpUtil; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +public class APIService { + //https://aip.baidubce.com/rpc/2.0/unit/bot/chat + private static final String BASE_URL = "https://aip.baidubce.com"; + private static final String ACCESS_TOEKN_URL = BASE_URL + "/oauth/2.0/token?"; + // private static final String COMMUNCATE_URL = BASE_URL + "/rpc/2.0/solution/v1/unit_utterance"; + private static final String COMMUNCATE_URL = BASE_URL + "/rpc/2.0/unit/bot/chat"; + + + private static APIService instance; + private Context context; + private String accessToken; + + + private APIService() { + + } + + public static APIService getInstance() { + synchronized (APIService.class) { + if (instance == null) { + instance = new APIService(); + } + } + + return instance; + } + + public void init(Context context) { + this.context = context.getApplicationContext(); + + HttpUtil.getInstance().init(); + // DeviceUuidFactory.init(context); + } + + public void initAccessToken(final OnResultListener listener, String ak, String sk) { + StringBuilder sb = new StringBuilder(); + sb.append("client_id=").append(ak); + sb.append("&client_secret=").append(sk); + sb.append("&grant_type=client_credentials"); + HttpUtil.getInstance().getAccessToken(listener, ACCESS_TOEKN_URL, sb.toString()); + } + + public void setAccessToken(String token) { + this.accessToken = token; + } + + /** + * 用户向平台请求对话内容,平台返回场景bot理解和应答的信息 + * + * @param listener 场景ID + * @param sceneId 当前轮用户的query + * @param query 标记一次会话,当新建一个会话时,不需要传值。服务端会返回一个唯一id。如果要保持这次多轮会话,再次请求时传入该id + * @param sessionId + */ + public void communicate(final OnResultListener listener, + int sceneId, String query, String sessionId) { + + String params = "{\"bot_session\":\"\"," + + "\"log_id\":\"" + 7758521 + "\"," + + "\"request\":{\"bernard_level\":1,\"client_session\":\"{\\\"client_results\\\":\\\"\\\", \\\"candidate_options\\\":[]}\"," + + "\"query\":\"" + query + "\"," + + "\"query_info\":{\"asr_candidates\":[],\"source\":\"KEYBOARD\",\"type\":\"TEXT\"},\"updates\":\"\"," + + "\"user_id\":\"" + SharedpreferencesUtil.get(Constans.USERPHONE, "") + "\"}," + + "\"bot_id\":\"" + sceneId + "\"," + + "\"version\":\"2.0\"}"; + /*JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("version", "2.0"); + jsonObject.put("bot_id", "20069"); + jsonObject.put("log_id", "0"); + jsonObject.put("session_id", sessionId); + jsonObject.put("bot_session", ""); + } catch (JSONException e) { + e.printStackTrace(); + }*/ + + // CommunicateParser parser = new CommunicateParser(); + // HttpUtil.getInstance().post(urlAppendCommonParams(COMMUNCATE_URL), jsonObject.toString(), parser, listener); + HttpUtil.getInstance().post(urlAppendCommonParams(COMMUNCATE_URL), params, listener); + } + + /** + * URL append access token,sdkversion,aipdevid + * + * @param url + * @return + */ + private String urlAppendCommonParams(String url) { + StringBuilder sb = new StringBuilder(url); + sb.append("?access_token=").append(accessToken); + + return sb.toString(); + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/ChatRecordActivity.java b/app/src/main/java/com/yonsz/z1/baiduai/ChatRecordActivity.java new file mode 100644 index 0000000..886d7c9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/ChatRecordActivity.java @@ -0,0 +1,42 @@ +package com.yonsz.z1.baiduai; + +import android.os.Bundle; +import android.os.Message; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.activity.MainActivityAdapter; +import com.yonsz.z1.chat.RecyclerViewChatFragment; +import com.yonsz.z1.view.MainViewPager; + +import java.util.ArrayList; +import java.util.List; + +public class ChatRecordActivity extends BaseActivity { + private MainViewPager mViewPager; + private RecyclerViewChatFragment mRecyclerViewChatFragment; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_chat_record); + initView(); + } + + private void initView() { + mViewPager = (MainViewPager) findViewById(R.id.mvp_main); + List fragmentList = new ArrayList<>(); + mRecyclerViewChatFragment = new RecyclerViewChatFragment(); + fragmentList.add(mRecyclerViewChatFragment); + FragmentManager manager = this.getSupportFragmentManager(); + mViewPager.setAdapter(new MainActivityAdapter(manager, fragmentList)); + mViewPager.setOffscreenPageLimit(1); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/HintAdapter.java b/app/src/main/java/com/yonsz/z1/baiduai/HintAdapter.java new file mode 100644 index 0000000..e78bdc5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/HintAdapter.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.List; + +public class HintAdapter extends RecyclerView.Adapter { + + private ItemClickListener mItemClickListener; + private Context mContext; + private List mList = new ArrayList<>(); + + public HintAdapter(Context context) { + this.mContext = context; + } + + public void addItems(List list) { + mList = list; + notifyDataSetChanged(); + } + + public String getItem(int position) { + return mList.get(position); + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = View.inflate(mContext, R.layout.hint_item_view, null); + // 将全局的监听传递给holder + ViewHolder holder = new ViewHolder(view, mItemClickListener); + return holder; + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + + TextView textView = (TextView) holder.itemView.findViewById(R.id.hint_tv); + textView.setText(mList.get(position)); + } + + @Override + public int getItemCount() { + return mList.size(); + } + + class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + private ItemClickListener mListener; + + public ViewHolder(View itemView, ItemClickListener itemClickListener) { + super(itemView); + // 将全局的监听赋值给接口 + this.mListener = itemClickListener; + itemView.setOnClickListener(this); + } + + /** + * 实现OnClickListener接口重写的方法 + * + * @param v + */ + @Override + public void onClick(View v) { + if (mListener != null) { + mListener.onItemClick(v, getPosition()); + } + + } + } + + /** + * 创建一个回调接口 + */ + public interface ItemClickListener { + void onItemClick(View view, int position); + } + + /** + * 在activity里面adapter就是调用的这个方法,将点击事件监听传递过来,并赋值给全局的监听 + * + * @param itemClickListener + */ + public void setItemClickListener(ItemClickListener itemClickListener) { + this.mItemClickListener = itemClickListener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/UnitActivity.java b/app/src/main/java/com/yonsz/z1/baiduai/UnitActivity.java new file mode 100644 index 0000000..6d9809d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/UnitActivity.java @@ -0,0 +1,821 @@ +package com.yonsz.z1.baiduai; + +import android.Manifest; +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.speech.tts.TextToSpeech; +import android.speech.tts.UtteranceProgressListener; +import android.support.v4.app.ActivityCompat; +import android.text.TextUtils; +import android.util.AndroidRuntimeException; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baidu.aip.chatkit.ImageLoader; +import com.baidu.aip.chatkit.message.MessagesList; +import com.baidu.aip.chatkit.message.MessagesListAdapter; +import com.baidu.aip.chatkit.model.Hint; +import com.baidu.aip.chatkit.model.Message; +import com.baidu.aip.chatkit.model.User; +import com.baidu.android.voicedemo.control.MyRecognizer; +import com.baidu.android.voicedemo.recognization.ChainRecogListener; +import com.baidu.android.voicedemo.recognization.IRecogListener; +import com.baidu.android.voicedemo.recognization.RecogResult; +import com.baidu.android.voicedemo.util.FileUtil; +import com.baidu.android.voicedemo.util.Logger; +import com.baidu.speech.asr.SpeechConstant; +import com.baidu.voicerecognition.android.ui.DigitalDialogInput; +import com.qw.soul.permission.SoulPermission; +import com.qw.soul.permission.bean.Permission; +import com.qw.soul.permission.bean.Permissions; +import com.qw.soul.permission.callbcak.CheckRequestPermissionsListener; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.baiduai.model.Scene; +import com.yonsz.z1.baiduai.view.RippleView; +import com.yonsz.z1.baiduai.widget.BasePopupWindow; +import com.yonsz.z1.database.entity.ChatReplyEntity; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity4.PhoneChatInfoEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ShakeUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.StandardCodeUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import de.greenrobot.event.EventBus; + +import static com.baidu.voicerecognition.android.ui.BaiduASRDialog.PARAM_PORMPT_TEXT; +import static com.baidu.voicerecognition.android.ui.BaiduASRDialog.STATUS_None; +import static com.baidu.voicerecognition.android.ui.BaiduASRDialog.STATUS_Ready; +import static com.baidu.voicerecognition.android.ui.BaiduASRDialog.STATUS_Recognition; +import static com.baidu.voicerecognition.android.ui.BaiduASRDialog.STATUS_Speaking; +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.net.Constans.EXECUTE_PHONE_FAIL; +import static com.yonsz.z1.net.Constans.EXECUTE_PHONE_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.PHONE_MESSAGE_SEND; + +/** + * Created by Administrator on 2018/12/5. + */ + +public class UnitActivity extends BaseActivity + implements MessagesListAdapter.OnLoadMoreListener, TextToSpeech.OnInitListener { + + private static final int SCENE_SWEEPER_ROBOT = 20091; + private static final int SCENE_NAVIGATE = 20090; + private static final int SCENE_CONSTELLATION = 10538; + private static final int TV_CONTROL = 20069; + protected ImageLoader imageLoader; + protected MessagesListAdapter messagesAdapter; + protected HintAdapter hintAdapter; + protected String mPrompt; + protected int status = STATUS_None; + private String chatSessionId = ""; + private TextView titleTv; + private RelativeLayout titleRl; + private RelativeLayout rootRl; + private BasePopupWindow popupWindow; + // private MessageInput messageInput; + private MessagesList messagesList; + private User sender; + private User cs; + private String sessionId = ""; + private Scene curScene; + private int id = 0; + private String accessToken; + private List waitList = new ArrayList<>(); + private Map sceneMap = new HashMap(); + private ListView dataListview; + private List dataList; + private RippleView iv_voice_input; + private ImageView iv_voice_click; + private TextView tv_voice_input, tv_chat_record; + private TitleView mTitleView; + //识别 + private MyRecognizer myRecognizer; + private ChainRecogListener listener; + private Bundle mParams = new Bundle(); + private volatile boolean mIsRunning = false; + private DigitalDialogInput input; + private android.speech.tts.TextToSpeech tts; + private String samplePath; + private CheckBox putonghuaYueyucB; + + private String currentId = ""; + private BroadcastReceiver mWifiChangedReceiver; + private BaseActivity mBaseActivity = new BaseActivity() { + @Override + public void callBackUiThread(android.os.Message msg) { + + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_unit); + checkConfig(); + initRecog(1536); + initData(); + findView(); + initAdapter(); + hintAdapter = new HintAdapter(this); + + mWifiChangedReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); + if (networkInfo != null && networkInfo.isConnected()) { + mBaseActivity.hasNetWork(true); + resendWaitListNoNet(); + } else { + ToastUtil.show(UnitActivity.this, "请先连接网络"); + } + } + }; + registerReceiver(mWifiChangedReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + + + SoulPermission.getInstance().checkAndRequestPermissions( + Permissions.build(Manifest.permission.RECORD_AUDIO, + Manifest.permission.ACCESS_NETWORK_STATE, + Manifest.permission.INTERNET, + Manifest.permission.READ_PHONE_STATE, + Manifest.permission.WRITE_EXTERNAL_STORAGE), + //if you want do noting or no need all the callbacks you may use SimplePermissionsAdapter instead + new CheckRequestPermissionsListener() { + @Override + public void onAllPermissionOk(Permission[] allPermissions) { + } + + @Override + public void onPermissionDenied(Permission[] refusedPermissions) { + } + }); + + //就显示一次吧 + cs = new User("1", "帮助", "", "5", true); + Message message = new Message(String.valueOf(id++), cs, "您可以这样说:“我想看电视”、“打开客厅 插座”、“回家模式”、“我准备睡觉了”", new Date(), 0); + messagesAdapter.addToStart(message, false); + } + + private void initRecog(int pid) { + listener = new ChainRecogListener(); + myRecognizer = new MyRecognizer(this, listener); + initSamplePath(this); + Map params = new HashMap(); // params可以手动填入 + // params.put("vad.endpoint-timeout", 2230); + params.put("vad.endpoint-timeout", 1230); + params.put("accept-audio-data", true); + params.put("disable-punctuation", true); + params.put("accept-audio-volume", false); + params.put(SpeechConstant.OUT_FILE, samplePath + "/outfile.pcm"); + Logger.info("initRecog", "语音录音文件将保存在:" + samplePath + "/outfile.pcm"); + params.put(SpeechConstant.SOUND_START, com.baidu.speech.recognizerdemo.R.raw.bdspeech_recognition_start); + params.put(SpeechConstant.SOUND_END, com.baidu.speech.recognizerdemo.R.raw.bdspeech_speech_end); + params.put(SpeechConstant.SOUND_SUCCESS, com.baidu.speech.recognizerdemo.R.raw.bdspeech_recognition_success); + params.put(SpeechConstant.SOUND_ERROR, com.baidu.speech.recognizerdemo.R.raw.bdspeech_recognition_error); + params.put(SpeechConstant.SOUND_CANCEL, com.baidu.speech.recognizerdemo.R.raw.bdspeech_recognition_cancel); + params.put(SpeechConstant.PID, pid); + input = new DigitalDialogInput(myRecognizer, listener, params); + listener.addListener(new DialogListener()); + Bundle extras = getIntent().getExtras(); + if (extras != null) { + mParams.putAll(extras); + } + } + + protected void initSamplePath(Activity context) { + String sampleDir = "baiduASR"; + samplePath = Environment.getExternalStorageDirectory().toString() + "/" + sampleDir; + if (!FileUtil.makeDir(samplePath)) { + samplePath = context.getApplication().getExternalFilesDir(sampleDir).getAbsolutePath(); + if (!FileUtil.makeDir(samplePath)) { + throw new RuntimeException("创建临时目录失败 :" + samplePath); + } + } + } + + /** + * 启动识别 + */ + protected void startRecognition() { + myRecognizer.cancel(); + mPrompt = mParams.getString(PARAM_PORMPT_TEXT); + mIsRunning = true; + Map params = input.getStartParams(); + params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, true); + myRecognizer.start(input.getStartParams()); + } + + /** + * 手动结束输入 + */ + protected void speakFinish() { + iv_voice_input.setVisibility(View.GONE); + myRecognizer.stop(); + } + + /** + * 取消当前识别 + */ + protected void cancleRecognition() { + myRecognizer.cancel(); + status = STATUS_None; + } + + /** + * 获取识别参数,可以再次设置相关参数 + * + * @return + */ + public Bundle getParams() { + return mParams; + } + + private void checkConfig() { + try { + ActivityInfo info = getPackageManager().getActivityInfo(new ComponentName(getPackageName(), getClass().getName()), PackageManager.GET_META_DATA); + boolean exported = info.exported; + if (exported) { + throw new AndroidRuntimeException(getClass().getName() + ", 'android:exported' should be false, please modify AndroidManifest.xml"); + } + Log.d("export", "exported:" + exported); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + } + + // 演示数据,开发者可到ai.baidu.com 官网理解与交互技术(UNIT)板块申请并训练自己的场景机器人 + private void initData() { + tts = new TextToSpeech(this, this); + sender = new User("0", "right", "", "", false); + cs = new User("1", "left", "", "", true); + sceneMap.put(TV_CONTROL, "智能语音遥控器"); + sceneMap.put(SCENE_SWEEPER_ROBOT, "查天气"); + sceneMap.put(SCENE_NAVIGATE, "智能问答"); + // sceneMap.put(SCENE_CONSTELLATION, "星座运势查询"); + dataList = new ArrayList(); + dataList.add(new Scene(TV_CONTROL, "智能语音遥控器")); + dataList.add(new Scene(SCENE_SWEEPER_ROBOT, "查天气")); + dataList.add(new Scene(SCENE_NAVIGATE, "智能问答")); + // dataList.add(new Scene(SCENE_CONSTELLATION, "星座运势查询")); + } + + private void findView() { + mTitleView = (TitleView) findViewById(R.id.title_unit); + this.rootRl = (RelativeLayout) findViewById(R.id.root); + this.titleRl = (RelativeLayout) findViewById(R.id.title_rl); + this.titleTv = (TextView) findViewById(R.id.title_tv); + this.messagesList = (MessagesList) findViewById(R.id.messagesList); + iv_voice_input = (RippleView) findViewById(R.id.iv_voice_input); + iv_voice_click = (ImageView) findViewById(R.id.iv_voice_click); + tv_voice_input = (TextView) findViewById(R.id.tv_voice_input); + tv_chat_record = (TextView) findViewById(R.id.tv_chat_record); + putonghuaYueyucB = (CheckBox) findViewById(R.id.cb_putonghua_yueyu); + // messageInput = (MessageInput) findViewById(R.id.input); + + mTitleView.clearBackGroud(); + mTitleView.setHeadHomeVisible(R.drawable.icon_nav_back_black); + mTitleView.setHomeNameTxt(getIntent().getExtras().get("homeName").toString()); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + iv_voice_input.setOnClickListener(this); + tv_chat_record.setOnClickListener(this); + iv_voice_click.setOnClickListener(this); + putonghuaYueyucB.setOnClickListener(this); + iv_voice_click.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + Toast.makeText(UnitActivity.this, "单击就能触发语音功能!", Toast.LENGTH_SHORT).show(); + return false; + } + }); + } + + /** + * 连接上网络重发未发送的 + */ + // TODO: 2018/12/21 连接上网络重发未发送的 + private void resendWaitListNoNet() { + for (Message message : waitList) { + sendPhoneVoice(message, "2"); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_voice_click: + if (iv_voice_input.getVisibility() == View.VISIBLE) { + recgnizerFail(); + } else { + if (DensityUtil.isNetworkConnected(getActivity())) { + start(); + } else { + ToastUtil.show(UnitActivity.this, "请先连接网络"); + } + } + break; + case R.id.cb_putonghua_yueyu: + myRecognizer.release(); + if (putonghuaYueyucB.isChecked()) { + initRecog(1637); + } else { + initRecog(1536); + } + break; + case R.id.tv_chat_record: + Intent intent = new Intent(UnitActivity.this, ChatRecordActivity.class); + startActivity(intent); + break; + } + } + + + @Override + protected void onStart() { + super.onStart(); + } + + private void initAdapter() { + messagesAdapter = new MessagesListAdapter<>(sender.getId(), imageLoader); + // messagesAdapter.enableSelectionMode(this); + messagesAdapter.setLoadMoreListener(this); + messagesAdapter.setOnHintClickListener(new MessagesListAdapter.OnHintClickListener() { + @Override + public void onHintClick(String hint) { + com.baidu.aip.chatkit.model.Message message = new com.baidu.aip.chatkit.model.Message(String.valueOf(id++), sender, hint, new Date(), 0); + // sendMessage(message); + messagesAdapter.addToStart(message, true); + sendPhoneVoice(message, "2"); + speakFinish(); + } + }); + messagesAdapter.registerViewClickListener(R.id.messageUserAvatar, + new MessagesListAdapter.OnMessageViewClickListener() { + @Override + public void onMessageViewClick(View view, com.baidu.aip.chatkit.model.Message message) { + /*ToastUtil.show(UnitActivity.this, + message.getUser().getName() + " avatar click");*/ + } + }); + messagesAdapter.setOnMessageClickListener(new MessagesListAdapter.OnMessageClickListener() { + @Override + public void onMessageClick(Message message) { + if (message.getUser().getName().equals("right") && message.getSendState() == 2) { + if (DensityUtil.isNetworkConnected(getActivity())) { + sendPhoneVoice(message, "2"); + } else { + ToastUtil.show(UnitActivity.this, "请先连接网络"); + } + } + } + }); + this.messagesList.setAdapter(messagesAdapter); + + } + + @Override + public void onLoadMore(int page, int totalItemsCount) { + + } + + @Override + public void callBackUiThread(android.os.Message msg) { + switch (msg.what) { + case EXECUTE_PHONE_SUCCESS: + Bundle data1 = msg.getData(); + Message chatMessage = (Message) data1.get("chatMessage"); + chatMessage.setSendState(1); + messagesAdapter.update(chatMessage); + ChatReplyEntity controlEntity = (ChatReplyEntity) msg.obj; + List data = controlEntity.getData().getMessages(); + chatSessionId = JSONObject.toJSONString(controlEntity.getData().getSessionContext()); + currentId = controlEntity.getData().getCurrentId(); + upLoadVoice(); + if (data.size() > 0) { + for (int i = 0; i < data.size(); i++) { + StringBuilder sb = new StringBuilder(); + sb.append(data.get(i).getContent()); + + if (data.get(i).getSenderType() == 3) { + cs = new User("1", AddressNameUtil.getAiNameAndState(data.get(i).getZiId()), String.valueOf(StandardCodeUtil.getDevicePicDrawable(AddressNameUtil.getAiModel(data.get(i).getZiId()))), "3", true); + } else { + cs = new User("1", "", data.get(i).getZiId(), "2", true); + } + + com.baidu.aip.chatkit.model.Message message = new com.baidu.aip.chatkit.model.Message(String.valueOf(id++), cs, sb.toString(), new Date(), 0); + messagesAdapter.addToStart(message, true); + + if (!TextUtils.isEmpty(data.get(i).getAddition())) { + String addition = data.get(i).getAddition(); + JSONArray jsonArray = JSONObject.parseArray(addition); + for (Object hintText : jsonArray) { + message.getHintList().add(new Hint((String) hintText)); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + playReplyTxt(data, i); + } else { + start(); + } + } + } + } + break; + case EXECUTE_PHONE_FAIL: + Bundle data2 = msg.getData(); + Message chatMessage2 = (Message) data2.get("chatMessage"); + chatMessage2.setSendState(2); + messagesAdapter.update(chatMessage2); + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void playReplyTxt(List data, int i) { + // 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规 + tts.setPitch(1.0f); + // 设置语速 + tts.setSpeechRate(1.0f); + final HashMap ttsOptions = new HashMap<>(); + ttsOptions.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "utterance");//utterance,这个参数随便写,用于监听播报完成的回调中 + tts.setOnUtteranceProgressListener(new UtteranceProgressListener() { + + @Override + public void onStart(String utteranceId) { + Log.i("onStart utteranceId", utteranceId); + } + + @Override + public void onDone(String utteranceId) { + Log.i("onDone utteranceId", utteranceId); + runOnUiThread(new Runnable() { + @Override + public void run() { + start(); + } + }); + } + + @Override + public void onError(String utteranceId) { + + } + }); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + tts.speak(data.get(i).getContent(), TextToSpeech.QUEUE_ADD, null, "utterance"); + } + } + + /** + * 开始录音,点击“开始”按钮后调用。 + */ + protected void start() { + SoulPermission.getInstance().checkAndRequestPermissions( + Permissions.build(Manifest.permission.RECORD_AUDIO, + Manifest.permission.ACCESS_NETWORK_STATE, + Manifest.permission.INTERNET, + Manifest.permission.READ_PHONE_STATE, + Manifest.permission.WRITE_EXTERNAL_STORAGE), + //if you want do noting or no need all the callbacks you may use SimplePermissionsAdapter instead + new CheckRequestPermissionsListener() { + @Override + public void onAllPermissionOk(Permission[] allPermissions) { + ShakeUtil.setShake(UnitActivity.this); + if (ActivityCompat.checkSelfPermission(UnitActivity.this, Manifest.permission.RECORD_AUDIO) != PackageManager + .PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(UnitActivity.this, new String[]{Manifest.permission.RECORD_AUDIO}, 100); + return; + } + iv_voice_input.setVisibility(View.VISIBLE); + startRecognition(); + } + + @Override + public void onPermissionDenied(Permission[] refusedPermissions) { + ToastUtil.show(UnitActivity.this, "开启此功能需要开启该权限"); + } + }); + + } + + private void recgnizerFail() { + if (!TextUtils.isEmpty(tv_voice_input.getText().toString().trim())) { + sendEndMessage(tv_voice_input.getText().toString()); + } + iv_voice_input.setVisibility(View.INVISIBLE); + myRecognizer.cancel(); + speakFinish(); + } + + + private void sendPhoneVoice(final Message message, String senderType) { + if (!DensityUtil.isNetworkConnected(getActivity())) { + waitList.add(message); + message.setSendState(2); + messagesAdapter.update(message); + return; + } + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("content", message.getText()); + map.put("scopeType", "1"); + map.put("ziId", ""); + map.put("senderType", senderType); + map.put("messageType", "1"); + if (!TextUtils.isEmpty(chatSessionId)) { + map.put("sessionContext", chatSessionId.replace("sYS_", "SYS_")); + } + netWorkUtil.requestPostByAsyId(PHONE_MESSAGE_SEND, map, message, new NetWorkUtil.ReqCallId() { + @Override + public void onSuccess(String respone, Message chatMessage) { + Log.i("sendPhoneVoice", "onSuccess()" + respone); + ChatReplyEntity obj = JSON.parseObject(respone, ChatReplyEntity.class); + if (1 == obj.getFlag()) { + android.os.Message msg = mHandler.obtainMessage(EXECUTE_PHONE_SUCCESS); + msg.obj = obj; + Bundle bundle = new Bundle(); + bundle.putSerializable("chatMessage", chatMessage); //往Bundle中存放数据 + msg.setData(bundle); + mHandler.sendMessage(msg); + } else { + android.os.Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = obj.getMsg(); + Bundle bundle = new Bundle(); + bundle.putSerializable("chatMessage", chatMessage); //往Bundle中存放数据 + msg.setData(bundle); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message, Message chatMessage) { + android.os.Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = message; + Bundle bundle = new Bundle(); + bundle.putSerializable("chatMessage", chatMessage); //往Bundle中存放数据 + msg.setData(bundle); + mHandler.sendMessage(msg); + } + }); + } + + + @Override + public void onPause() { + super.onPause(); + myRecognizer.cancel(); // 注意:在android 4.3及以下系统中,调用destroy方法会将立即与service解绑,cancel和destroy一起调用时,cancel不起作用,故需分开! + /*if (!isFinishing()) { + finish(); + }*/ + } + + @Override + public void onDestroy() { + super.onDestroy(); + myRecognizer.release(); // 注意:在android 4.3及以下系统中,调用destroy方法会将立即与service解绑,cancel和destroy一起调用时,cancel不起作用,故需分开! + EventBus.getDefault().post( + new ChooseHomeEvent("1")); + if (tts != null) { + tts.stop(); + tts.shutdown(); + } + } + + @Override + public void onInit(int status) { + // 判断是否转化成功 + if (status == TextToSpeech.SUCCESS) { + //默认设定语言为中文,原生的android貌似不支持中文。 + int result = tts.setLanguage(Locale.CHINESE); + if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { + // Toast.makeText(UnitActivity.this, "初始化成功", Toast.LENGTH_SHORT).show(); + } else { + //不支持中文就将语言设置为英文 + tts.setLanguage(Locale.US); + } + } + } + + private void sendEndMessage(String text) { + tv_voice_input.setText(""); + tv_voice_input.setVisibility(View.INVISIBLE); + Message message = new Message(String.valueOf(id++), sender, text, new Date(), 0); + // sendMessage(message); + messagesAdapter.addToStart(message, true); + iv_voice_input.setVisibility(View.GONE); + sendPhoneVoice(message, "2"); + // upLoadVoice(); + } + + private void upLoadVoice() { + //上传语音到服务器 + if (DensityUtil.isNetworkConnected(getActivity())) { + File file = new File(samplePath + "/outfile.pcm"); + ArrayList files = new ArrayList<>(); + Intent service = new Intent(UnitActivity.this, UploadVoiceService.class); + files.add(file.getPath()); + service.putExtra("data", files); + service.putExtra("messageId", currentId); + startService(service); + } + } + + protected class DialogListener implements IRecogListener { + + /** + * ASR_START 输入事件调用后,引擎准备完毕 + */ + @Override + public void onAsrReady() { + status = STATUS_Ready; + // onPrepared(); + } + + /** + * onAsrReady后检查到用户开始说话 + */ + @Override + public void onAsrBegin() { + status = STATUS_Speaking; + // onBeginningOfSpeech(); + } + + /** + * 检查到用户开始说话停止,或者ASR_STOP 输入事件调用后, + */ + @Override + public void onAsrEnd() { + status = STATUS_Recognition; + // onEndOfSpeech(); + runOnUiThread(new Runnable() { + @Override + public void run() { + tv_voice_input.setVisibility(View.INVISIBLE); + } + }); + } + + /** + * onAsrBegin 后 随着用户的说话,返回的临时结果 + * + * @param results 可能返回多个结果,请取第一个结果 + * @param recogResult 完整的结果 + */ + @Override + public void onAsrPartialResult(final String[] results, RecogResult recogResult) { + // onPartialResults(results); + runOnUiThread(new Runnable() { + @Override + public void run() { + tv_voice_input.setVisibility(View.VISIBLE); + tv_voice_input.setText(results[0]); + } + }); + } + + /** + * 最终的识别结果 + * + * @param results 可能返回多个结果,请取第一个结果 + * @param recogResult 完整的结果 + */ + @Override + public void onAsrFinalResult(String[] results, RecogResult recogResult) { + status = STATUS_None; + mIsRunning = false; + String text = ""; + // BaiduASRDialog.this.onPartialResults(results); + // onFinish(0, 0);// TODO + runOnUiThread(new Runnable() { + @Override + public void run() { + tv_voice_input.setVisibility(View.INVISIBLE); + } + }); + ArrayList list = new ArrayList(); + list.addAll(Arrays.asList(results)); + if (list != null && list.size() > 0) { + text += list.get(0); + } + sendEndMessage(text); + } + + @Override + public void onAsrFinish(RecogResult recogResult) { + mIsRunning = false; + // finish(); + runOnUiThread(new Runnable() { + @Override + public void run() { + tv_voice_input.setVisibility(View.INVISIBLE); + } + }); + } + + @Override + public void onAsrFinishError(int errorCode, int subErrorCode, String errorMessage, String descMessage) { + // onFinish(errorCode, subErrorCode); + runOnUiThread(new Runnable() { + @Override + public void run() { + ToastUtil.show(UnitActivity.this, "未识别到语音"); + tv_voice_input.setVisibility(View.INVISIBLE); + iv_voice_input.setVisibility(View.GONE); + // tv_voice_input.setVisibility(View.INVISIBLE); + } + }); + } + + /** + * 长语音识别结束 + */ + @Override + public void onAsrLongFinish() { + mIsRunning = false; + } + + @Override + public void onAsrVolume(int volumePercent, int volume) { + // onVolumeChanged(volumePercent); + } + + @Override + public void onAsrAudio(byte[] data, int offset, int length) { + + } + + @Override + public void onAsrExit() { + + } + + @Override + public void onAsrOnlineNluResult(String nluResult) { + + } + + @Override + public void onOfflineLoaded() { + + } + + @Override + public void onOfflineUnLoaded() { + + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/UploadVoiceService.java b/app/src/main/java/com/yonsz/z1/baiduai/UploadVoiceService.java new file mode 100644 index 0000000..1e30494 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/UploadVoiceService.java @@ -0,0 +1,75 @@ +package com.yonsz.z1.baiduai; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.support.annotation.Nullable; +import android.util.Log; + +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.util.List; + +/** + * Created by Administrator on 2018/12/18. + */ + +public class UploadVoiceService extends Service { + + private static final String TAG = "uploadVoice"; + + @Override + public void onCreate() { + Log.i(TAG, "ExampleService-onCreate"); + super.onCreate(); + } + + @Override + public void onStart(Intent intent, int startId) { + Log.i(TAG, "ExampleService-onStart"); + super.onStart(intent, startId); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.i(TAG, "onStartCommand: start"); + List files = (List) intent.getExtras().get("data"); + Log.i("gaojie", "UploadHeadIconService onStartCommand()" + files.size() + "---" + files.get(0).toString()); + String id = intent.getStringExtra("messageId"); + if (files != null && files.size() > 0) { + startUpload(files, id); + } + return super.onStartCommand(intent, flags, startId); + } + + private void startUpload(List files, String parentId) { + StringBuffer url = new StringBuffer(); + url.append(NetWorkUrl.UPLOAD_VOICE); + url.append("messageId=" + parentId); + url.append("&voiceFile"); + url.append("&tokenId=" + SharedpreferencesUtil.get(Constans.TOKENID, "null")); + url.append("&session=" + SharedpreferencesUtil.get(Constans.SEESSIONID, "null")); + NetWorkUtil.instans().uploadImg(files, url.toString(), "3", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("startUpload", "UploadHeadIconService onSuccess()" + "123456789次" + respone); + stopSelf(); + } + + @Override + public void onFail(String message) { + Log.i("startUpload", "UploadHeadIconService onSuccess()" + "1234次" + message); + stopSelf(); + } + }); + } + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/exception/UnitError.java b/app/src/main/java/com/yonsz/z1/baiduai/exception/UnitError.java new file mode 100644 index 0000000..c88a975 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/exception/UnitError.java @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.exception; + +public class UnitError extends Exception { + + private int errorCode; + private String errorMessage; + private Throwable cause; + + public UnitError(int errorCode, String message, Throwable cause) { + super(message, cause); + this.cause = cause; + this.errorCode = errorCode; + } + + public UnitError(int errorCode, String message) { + super(message); + this.errorCode = errorCode; + this.errorMessage = message; + } + + public UnitError(String message) { + super(message); + } + + public UnitError() { + + } + + public Throwable getCause() { + return cause; + } + + public int getErrorCode() { + return errorCode; + } + + public void setErrorCode(int errorCode) { + this.errorCode = errorCode; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + public interface ErrorCode { + // accessToken + int ACCESS_TOKEN_INVALID_PARAMETER = 100; + int ACCESS_TOKEN_INVALID_ACCESS_TOKEN = 101; + int ACCESS_TOKEN_PARSE_ERROR = 110; + + int NETWORK_REQUEST_ERROR = 10000; + int JSON_PARSE_ERROR = 11000; + + // {"error_msg":"Open api request limit reached","error_code":4} + int REQUEST_LIMIT_REACHED = 4; + + // common + int MODULE_CLOSED = 216015; + int INVALID_PARAMS = 216100; + int NOT_ENOUGH_PARAMS = 216101; + int SERVICE_NOT_SUPPORTED = 216102; + int PARAM_TOO_LONG = 216103; + int APP_ID_NOT_EXIST = 216110; + int INVALID_USER_ID = 216111; + int EMPTY_IMAGE = 216200; + int INVALID_FORMAT = 216201; + int INVALID_IMAGE_SIZE = 216202; + int DATABASE_ERROR = 216300; + int BACKEND_ERROR = 216400; + int INTERNAL_ERROR = 216401; + int UNKNOWN_ERROR = 216500; + + // + int INVALID_ID_NUMBER_FORMAT = 216600; + int ID_NUMBER_AND_NAME_MISMATCH = 216601; + int USER_NOT_EXIST = 216611; + int USER_NOT_FOUND = 216613; + int NOT_ENOUGH_IMAGES = 216614; + int IMAGE_PROCESS_FAILED = 216615; + int IMAGE_ALREADY_EXIST = 216616; + int ADD_USER_FAILED = 216617; + int NO_USER_IN_GROUP = 216618; + int RECOGNIZE_ERROR = 216630; + int RECOGNIZE_BANK_CARD_ERROR = 216631; + } + + // @Override + // public String getMessage() { + // if(cause != null) { + // + // } + // return super.getMessage(); + // } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/listener/OnResultListener.java b/app/src/main/java/com/yonsz/z1/baiduai/listener/OnResultListener.java new file mode 100644 index 0000000..a03b1d9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/listener/OnResultListener.java @@ -0,0 +1,14 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.listener; + +import com.yonsz.z1.baiduai.exception.UnitError; + +public interface OnResultListener { + void onResult(T result); + + void onStringResult(String result); + + void onError(UnitError error); +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/listener/VoiceRecognizeCallback.java b/app/src/main/java/com/yonsz/z1/baiduai/listener/VoiceRecognizeCallback.java new file mode 100644 index 0000000..77fc154 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/listener/VoiceRecognizeCallback.java @@ -0,0 +1,13 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.listener; + +/** + * Created by wangtianfei01 on 17/8/1. + */ + +public interface VoiceRecognizeCallback { + + public void callback(String text); +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/model/AccessToken.java b/app/src/main/java/com/yonsz/z1/baiduai/model/AccessToken.java new file mode 100644 index 0000000..686298d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/model/AccessToken.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.model; + +public class AccessToken { + + private String accessToken; + + private int expiresIn; + + private String json; + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public int getExpiresIn() { + return expiresIn; + } + + public void setExpiresIn(int expiresIn) { + this.expiresIn = expiresIn; + } + + public String getJson() { + return json; + } + + public void setJson(String json) { + this.json = json; + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/model/CommunicateResponse.java b/app/src/main/java/com/yonsz/z1/baiduai/model/CommunicateResponse.java new file mode 100644 index 0000000..0537ea1 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/model/CommunicateResponse.java @@ -0,0 +1,858 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.model; + +import java.util.ArrayList; +import java.util.List; + +public class CommunicateResponse { + + + /** + * error_code : 0 + * error_msg : ok + * result : {"bot_id":"20069","interaction_id":"interaction-1544428312334-1726691461-8013-27","log_id":"7758521","response":{"action_list":[{"action_id":"fail_action","confidence":100,"custom_reply":"","refine_detail":{"clarify_reason":"","interact":"","option_list":[]},"say":"我不知道应该怎么答复您。","type":"failure"}],"qu_res":{"candidates":[],"lexical_analysis":[{"basic_word":["你好"],"etypes":[],"term":"你好","type":"19","weight":1}],"qu_res_chosen":"","raw_query":"你好","sentiment_analysis":{"label":"1","pval":0.998},"status":0,"timestamp":0},"schema":{"domain_confidence":0,"intent":"","intent_confidence":0,"slots":[]}},"timestamp":"2018-12-10 15:51:52.334","version":"2.0"} + */ + private String bernard_level; + private int error_code; + private String error_msg; + private ResultBean result; + + public String getBernard_level() { + return bernard_level == null ? "" : bernard_level; + } + + public void setBernard_level(String bernard_level) { + this.bernard_level = bernard_level; + } + + public int getError_code() { + return error_code; + } + + public void setError_code(int error_code) { + this.error_code = error_code; + } + + public String getError_msg() { + return error_msg == null ? "" : error_msg; + } + + public void setError_msg(String error_msg) { + this.error_msg = error_msg; + } + + public ResultBean getResult() { + return result; + } + + public void setResult(ResultBean result) { + this.result = result; + } + + public static class ResultBean { + /** + * bot_id : 20069 + * interaction_id : interaction-1544428312334-1726691461-8013-27 + * log_id : 7758521 + * response : {"action_list":[{"action_id":"fail_action","confidence":100,"custom_reply":"","refine_detail":{"clarify_reason":"","interact":"","option_list":[]},"say":"我不知道应该怎么答复您。","type":"failure"}],"qu_res":{"candidates":[],"lexical_analysis":[{"basic_word":["你好"],"etypes":[],"term":"你好","type":"19","weight":1}],"qu_res_chosen":"","raw_query":"你好","sentiment_analysis":{"label":"1","pval":0.998},"status":0,"timestamp":0},"schema":{"domain_confidence":0,"intent":"","intent_confidence":0,"slots":[]}} + * timestamp : 2018-12-10 15:51:52.334 + * version : 2.0 + */ + + private String bot_id; + private String interaction_id; + private String log_id; + private ResultBean.ResponseBean response; + private String timestamp; + private String version; + + public String getBot_id() { + return bot_id == null ? "" : bot_id; + } + + public void setBot_id(String bot_id) { + this.bot_id = bot_id; + } + + public String getInteraction_id() { + return interaction_id == null ? "" : interaction_id; + } + + public void setInteraction_id(String interaction_id) { + this.interaction_id = interaction_id; + } + + public String getLog_id() { + return log_id == null ? "" : log_id; + } + + public void setLog_id(String log_id) { + this.log_id = log_id; + } + + public ResultBean.ResponseBean getResponse() { + return response; + } + + public void setResponse(ResultBean.ResponseBean response) { + this.response = response; + } + + public String getTimestamp() { + return timestamp == null ? "" : timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + + public String getVersion() { + return version == null ? "" : version; + } + + public void setVersion(String version) { + this.version = version; + } + + public static class ResponseBean { + /** + * action_list : [{"action_id":"fail_action","confidence":100,"custom_reply":"","refine_detail":{"clarify_reason":"","interact":"","option_list":[]},"say":"我不知道应该怎么答复您。","type":"failure"}] + * qu_res : {"candidates":[],"lexical_analysis":[{"basic_word":["你好"],"etypes":[],"term":"你好","type":"19","weight":1}],"qu_res_chosen":"","raw_query":"你好","sentiment_analysis":{"label":"1","pval":0.998},"status":0,"timestamp":0} + * schema : {"domain_confidence":0,"intent":"","intent_confidence":0,"slots":[]} + */ + + private ResultBean.ResponseBean.QuResBean qu_res; + private ResultBean.ResponseBean.SchemaBean schema; + private List action_list; + + public ResultBean.ResponseBean.QuResBean getQu_res() { + return qu_res; + } + + public void setQu_res(ResultBean.ResponseBean.QuResBean qu_res) { + this.qu_res = qu_res; + } + + public ResultBean.ResponseBean.SchemaBean getSchema() { + return schema; + } + + public void setSchema(ResultBean.ResponseBean.SchemaBean schema) { + this.schema = schema; + } + + public List getAction_list() { + if (action_list == null) { + return new ArrayList<>(); + } + return action_list; + } + + public void setAction_list(List action_list) { + this.action_list = action_list; + } + + public static class QuResBean { + /** + * candidates : [] + * lexical_analysis : [{"basic_word":["你好"],"etypes":[],"term":"你好","type":"19","weight":1}] + * qu_res_chosen : + * raw_query : 你好 + * sentiment_analysis : {"label":"1","pval":0.998} + * status : 0 + * timestamp : 0 + */ + + private String qu_res_chosen; + private String raw_query; + private ResultBean.ResponseBean.QuResBean.SentimentAnalysisBean sentiment_analysis; + private int status; + private int timestamp; + private List lexical_analysis; + private List candidates; + + + public String getQu_res_chosen() { + return qu_res_chosen == null ? "" : qu_res_chosen; + } + + public void setQu_res_chosen(String qu_res_chosen) { + this.qu_res_chosen = qu_res_chosen; + } + + public String getRaw_query() { + return raw_query == null ? "" : raw_query; + } + + public void setRaw_query(String raw_query) { + this.raw_query = raw_query; + } + + public ResultBean.ResponseBean.QuResBean.SentimentAnalysisBean getSentiment_analysis() { + return sentiment_analysis; + } + + public void setSentiment_analysis(ResultBean.ResponseBean.QuResBean.SentimentAnalysisBean sentiment_analysis) { + this.sentiment_analysis = sentiment_analysis; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public int getTimestamp() { + return timestamp; + } + + public void setTimestamp(int timestamp) { + this.timestamp = timestamp; + } + + public List getLexical_analysis() { + if (lexical_analysis == null) { + return new ArrayList<>(); + } + return lexical_analysis; + } + + public void setLexical_analysis(List lexical_analysis) { + this.lexical_analysis = lexical_analysis; + } + + public List getCandidates() { + if (candidates == null) { + return new ArrayList<>(); + } + return candidates; + } + + public void setCandidates(List candidates) { + this.candidates = candidates; + } + + public static class SentimentAnalysisBean { + /** + * label : 1 + * pval : 0.998 + */ + + private String label; + private double pval; + + public String getLabel() { + return label == null ? "" : label; + } + + public void setLabel(String label) { + this.label = label; + } + + public double getPval() { + return pval; + } + + public void setPval(double pval) { + this.pval = pval; + } + } + + public static class LexicalAnalysisBean { + /** + * basic_word : ["你好"] + * etypes : [] + * term : 你好 + * type : 19 + * weight : 1 + */ + + private String term; + private String type; + private int weight; + private List basic_word; + private List etypes; + + public String getTerm() { + return term == null ? "" : term; + } + + public void setTerm(String term) { + this.term = term; + } + + public String getType() { + return type == null ? "" : type; + } + + public void setType(String type) { + this.type = type; + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public List getBasic_word() { + if (basic_word == null) { + return new ArrayList<>(); + } + return basic_word; + } + + public void setBasic_word(List basic_word) { + this.basic_word = basic_word; + } + + public List getEtypes() { + if (etypes == null) { + return new ArrayList<>(); + } + return etypes; + } + + public void setEtypes(List etypes) { + this.etypes = etypes; + } + } + + public static class CandidatesBean { + /** + * confidence : 100 + * domain_confidence : 0 + * extra_info : {"group_id":"-1","real_threshold":"1","threshold":"1"} + * from_who : pow-slu-lev1 + * intent : CONTROL_DEVICE + * intent_confidence : 100 + * intent_need_clarify : false + * match_info : 打开电视 + * slots : [{"begin":0,"confidence":100,"father_idx":-1,"length":2,"name":"user_action","need_clarify":false,"normalized_word":"","original_word":"打开","word_type":""},{"begin":2,"confidence":100,"father_idx":-1,"length":2,"name":"user_device","need_clarify":false,"normalized_word":"","original_word":"电视","word_type":""}] + */ + + private int confidence; + private int domain_confidence; + private ResultBean.ResponseBean.QuResBean.CandidatesBean.ExtraInfoBean extra_info; + private String from_who; + private String intent; + private int intent_confidence; + private boolean intent_need_clarify; + private String match_info; + private List slots; + + public int getConfidence() { + return confidence; + } + + public void setConfidence(int confidence) { + this.confidence = confidence; + } + + public int getDomain_confidence() { + return domain_confidence; + } + + public void setDomain_confidence(int domain_confidence) { + this.domain_confidence = domain_confidence; + } + + public ResultBean.ResponseBean.QuResBean.CandidatesBean.ExtraInfoBean getExtra_info() { + return extra_info; + } + + public void setExtra_info(ResultBean.ResponseBean.QuResBean.CandidatesBean.ExtraInfoBean extra_info) { + this.extra_info = extra_info; + } + + public String getFrom_who() { + return from_who == null ? "" : from_who; + } + + public void setFrom_who(String from_who) { + this.from_who = from_who; + } + + public String getIntent() { + return intent == null ? "" : intent; + } + + public void setIntent(String intent) { + this.intent = intent; + } + + public int getIntent_confidence() { + return intent_confidence; + } + + public void setIntent_confidence(int intent_confidence) { + this.intent_confidence = intent_confidence; + } + + public boolean isIntent_need_clarify() { + return intent_need_clarify; + } + + public void setIntent_need_clarify(boolean intent_need_clarify) { + this.intent_need_clarify = intent_need_clarify; + } + + public String getMatch_info() { + return match_info == null ? "" : match_info; + } + + public void setMatch_info(String match_info) { + this.match_info = match_info; + } + + public List getSlots() { + if (slots == null) { + return new ArrayList<>(); + } + return slots; + } + + public void setSlots(List slots) { + this.slots = slots; + } + + public static class ExtraInfoBean { + /** + * group_id : -1 + * real_threshold : 1 + * threshold : 1 + */ + + private String group_id; + private String real_threshold; + private String threshold; + + public String getGroup_id() { + return group_id == null ? "" : group_id; + } + + public void setGroup_id(String group_id) { + this.group_id = group_id; + } + + public String getReal_threshold() { + return real_threshold == null ? "" : real_threshold; + } + + public void setReal_threshold(String real_threshold) { + this.real_threshold = real_threshold; + } + + public String getThreshold() { + return threshold == null ? "" : threshold; + } + + public void setThreshold(String threshold) { + this.threshold = threshold; + } + } + + public static class SlotsBean { + /** + * begin : 0 + * confidence : 100 + * father_idx : -1 + * length : 2 + * name : user_action + * need_clarify : false + * normalized_word : + * original_word : 打开 + * word_type : + */ + + private int begin; + private int confidence; + private int father_idx; + private int length; + private String name; + private boolean need_clarify; + private String normalized_word; + private String original_word; + private String word_type; + + public int getBegin() { + return begin; + } + + public void setBegin(int begin) { + this.begin = begin; + } + + public int getConfidence() { + return confidence; + } + + public void setConfidence(int confidence) { + this.confidence = confidence; + } + + public int getFather_idx() { + return father_idx; + } + + public void setFather_idx(int father_idx) { + this.father_idx = father_idx; + } + + public int getLength() { + return length; + } + + public void setLength(int length) { + this.length = length; + } + + public String getName() { + return name == null ? "" : name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isNeed_clarify() { + return need_clarify; + } + + public void setNeed_clarify(boolean need_clarify) { + this.need_clarify = need_clarify; + } + + public String getNormalized_word() { + return normalized_word == null ? "" : normalized_word; + } + + public void setNormalized_word(String normalized_word) { + this.normalized_word = normalized_word; + } + + public String getOriginal_word() { + return original_word == null ? "" : original_word; + } + + public void setOriginal_word(String original_word) { + this.original_word = original_word; + } + + public String getWord_type() { + return word_type == null ? "" : word_type; + } + + public void setWord_type(String word_type) { + this.word_type = word_type; + } + } + } + } + + public static class SchemaBean { + /** + * domain_confidence : 0 + * intent : CONTROL_DEVICE + * intent_confidence : 100 + * slots : [{"begin":0,"confidence":100,"length":2,"merge_method":"updated","name":"user_action","normalized_word":"打开","original_word":"打开","session_offset":0,"sub_slots":[],"word_type":""},{"begin":2,"confidence":100,"length":2,"merge_method":"updated","name":"user_device","normalized_word":"电视","original_word":"电视","session_offset":0,"sub_slots":[],"word_type":""}] + */ + + private int domain_confidence; + private String intent; + private int intent_confidence; + private List slots; + + public int getDomain_confidence() { + return domain_confidence; + } + + public void setDomain_confidence(int domain_confidence) { + this.domain_confidence = domain_confidence; + } + + public String getIntent() { + return intent == null ? "" : intent; + } + + public void setIntent(String intent) { + this.intent = intent; + } + + public int getIntent_confidence() { + return intent_confidence; + } + + public void setIntent_confidence(int intent_confidence) { + this.intent_confidence = intent_confidence; + } + + public List getSlots() { + if (slots == null) { + return new ArrayList<>(); + } + return slots; + } + + public void setSlots(List slots) { + this.slots = slots; + } + + public static class SlotsBean { + /** + * begin : 0 + * confidence : 100 + * length : 2 + * merge_method : updated + * name : user_action + * normalized_word : 打开 + * original_word : 打开 + * session_offset : 0 + * sub_slots : [] + * word_type : + */ + + private int begin; + private int confidence; + private int length; + private String merge_method; + private String name; + private String normalized_word; + private String original_word; + private int session_offset; + private String word_type; + private List sub_slots; + + public int getBegin() { + return begin; + } + + public void setBegin(int begin) { + this.begin = begin; + } + + public int getConfidence() { + return confidence; + } + + public void setConfidence(int confidence) { + this.confidence = confidence; + } + + public int getLength() { + return length; + } + + public void setLength(int length) { + this.length = length; + } + + public String getMerge_method() { + return merge_method == null ? "" : merge_method; + } + + public void setMerge_method(String merge_method) { + this.merge_method = merge_method; + } + + public String getName() { + return name == null ? "" : name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNormalized_word() { + return normalized_word == null ? "" : normalized_word; + } + + public void setNormalized_word(String normalized_word) { + this.normalized_word = normalized_word; + } + + public String getOriginal_word() { + return original_word == null ? "" : original_word; + } + + public void setOriginal_word(String original_word) { + this.original_word = original_word; + } + + public int getSession_offset() { + return session_offset; + } + + public void setSession_offset(int session_offset) { + this.session_offset = session_offset; + } + + public String getWord_type() { + return word_type == null ? "" : word_type; + } + + public void setWord_type(String word_type) { + this.word_type = word_type; + } + + public List getSub_slots() { + if (sub_slots == null) { + return new ArrayList<>(); + } + return sub_slots; + } + + public void setSub_slots(List sub_slots) { + this.sub_slots = sub_slots; + } + } + } + + public static class ActionListBean { + /** + * action_id : fail_action + * confidence : 100 + * custom_reply : + * refine_detail : {"clarify_reason":"","interact":"","option_list":[]} + * say : 我不知道应该怎么答复您。 + * type : failure + */ + + private String action_id; + private int confidence; + private String custom_reply; + private ResultBean.ResponseBean.ActionListBean.RefineDetailBean refine_detail; + private String say; + private String type; + + public String getAction_id() { + return action_id == null ? "" : action_id; + } + + public void setAction_id(String action_id) { + this.action_id = action_id; + } + + public int getConfidence() { + return confidence; + } + + public void setConfidence(int confidence) { + this.confidence = confidence; + } + + public String getCustom_reply() { + return custom_reply == null ? "" : custom_reply; + } + + public void setCustom_reply(String custom_reply) { + this.custom_reply = custom_reply; + } + + public ResultBean.ResponseBean.ActionListBean.RefineDetailBean getRefine_detail() { + return refine_detail; + } + + public void setRefine_detail(ResultBean.ResponseBean.ActionListBean.RefineDetailBean refine_detail) { + this.refine_detail = refine_detail; + } + + public String getSay() { + return say == null ? "" : say; + } + + public void setSay(String say) { + this.say = say; + } + + public String getType() { + return type == null ? "" : type; + } + + public void setType(String type) { + this.type = type; + } + + public static class RefineDetailBean { + /** + * clarify_reason : + * interact : + * option_list : [] + */ + + private String clarify_reason; + private String interact; + private List option_list; + + public String getClarify_reason() { + return clarify_reason == null ? "" : clarify_reason; + } + + public void setClarify_reason(String clarify_reason) { + this.clarify_reason = clarify_reason; + } + + public String getInteract() { + return interact == null ? "" : interact; + } + + public void setInteract(String interact) { + this.interact = interact; + } + + public List getOption_list() { + if (option_list == null) { + return new ArrayList<>(); + } + return option_list; + } + + public void setOption_list(List option_list) { + this.option_list = option_list; + } + } + } + } + } + + /*public List actionList = new ArrayList<>(); + + public Schema schema; + + public String sessionId; + + + public static class Action { + public String actionId; + public ActionType actionType; + public List argList = new ArrayList<>(); + // public CodeAction codeAction; + public int confidence; + public List exeStatusList = new ArrayList<>(); + public List hintList = new ArrayList(); + public String mainExe; + public String say; + } + + public static class ActionType { + public String target; + public String targetDetail; + public String type; + public String typeDetail; + } + + // public static class CodeAction {} + + public static class Schema { + public List botMergedSlots = new ArrayList(); + public String currentQueryInent; + public int intentConfidence; + }*/ + +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/model/DynamicParams.java b/app/src/main/java/com/yonsz/z1/baiduai/model/DynamicParams.java new file mode 100644 index 0000000..5ac6bda --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/model/DynamicParams.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.model; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +public class DynamicParams implements RequestParams { + + private Map params = new HashMap<>(); + private Map fileMap = new HashMap<>(); + + @Override + public Map getFileParams() { + return fileMap; + } + + @Override + public Map getStringParams() { + return params; + } + + public void putParam(String key, String value) { + if (value != null) { + params.put(key, value); + } + } + + public void putParam(String key, int value) { + + params.put(key, String.valueOf(value)); + } + + public void putParam(String key, boolean value) { + if (value) { + putParam(key, "true"); + } else { + putParam(key, "false"); + } + } + + public void putFile(String key, File file) { + fileMap.put(key, file); + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/model/RegParams.java b/app/src/main/java/com/yonsz/z1/baiduai/model/RegParams.java new file mode 100644 index 0000000..e2d067d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/model/RegParams.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.model; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +@SuppressWarnings("unused") +public class RegParams implements RequestParams { + + private Map params = new HashMap<>(); + private Map fileMap = new HashMap<>(); + + + @Override + public Map getFileParams() { + return fileMap; + } + + @Override + public Map getStringParams() { + return params; + } + + private String uid; + private String groupId; + + private String userInfo; + + + public void setUid(String uid) { + putParam("uid", uid); + } + + + public void setGroupId(String groupId) { + + putParam("group_id", groupId); + } + + public void setBase64Img(String base64Img) { + putParam("image", base64Img); + } + + public void setUserInfo(String userInfo) { + putParam("user_info", userInfo); + } + + public void setToken(String token) { + putParam("access_token", token); + } + + public void setImageFile(File imageFile) { + fileMap.put(imageFile.getName(), imageFile); + } + + private void putParam(String key, String value) { + if (value != null) { + params.put(key, value); + } else { + params.remove(key); + } + } + + private void putParam(String key, boolean value) { + if (value) { + putParam(key, "true"); + } else { + putParam(key, "false"); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/model/RegResult.java b/app/src/main/java/com/yonsz/z1/baiduai/model/RegResult.java new file mode 100644 index 0000000..6831712 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/model/RegResult.java @@ -0,0 +1,10 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.model; + +@SuppressWarnings("unused") +public class RegResult extends ResponseResult { + +} + diff --git a/app/src/main/java/com/yonsz/z1/baiduai/model/RequestParams.java b/app/src/main/java/com/yonsz/z1/baiduai/model/RequestParams.java new file mode 100644 index 0000000..05080cf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/model/RequestParams.java @@ -0,0 +1,13 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.model; + +import java.io.File; +import java.util.Map; + +public interface RequestParams { + + Map getFileParams(); + Map getStringParams(); +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/model/ResponseResult.java b/app/src/main/java/com/yonsz/z1/baiduai/model/ResponseResult.java new file mode 100644 index 0000000..5e068a5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/model/ResponseResult.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.model; + +public class ResponseResult { + + + private long logId; + + public long getLogId() { + return logId; + } + + public void setLogId(long logId) { + this.logId = logId; + } + + public String jsonRes; + + public String getJsonRes() { + return jsonRes; + } + + public void setJsonRes(String jsonRes) { + this.jsonRes = jsonRes; + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/model/Scene.java b/app/src/main/java/com/yonsz/z1/baiduai/model/Scene.java new file mode 100644 index 0000000..babfee5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/model/Scene.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.model; + +/** + * Created by wangtianfei01 on 17/8/7. + */ + +public class Scene { + + private int id; + + private String name; + + public Scene(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/parser/AccessTokenParser.java b/app/src/main/java/com/yonsz/z1/baiduai/parser/AccessTokenParser.java new file mode 100644 index 0000000..5d3bc43 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/parser/AccessTokenParser.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.parser; + +import com.yonsz.z1.baiduai.exception.UnitError; +import com.yonsz.z1.baiduai.model.AccessToken; + +import org.json.JSONException; +import org.json.JSONObject; + +public class AccessTokenParser implements Parser { + @Override + public AccessToken parse(String json) throws UnitError { + try { + AccessToken accessToken = new AccessToken(); + accessToken.setJson(json); + JSONObject jsonObject = new JSONObject(json); + + if (jsonObject != null) { + + accessToken.setAccessToken(jsonObject.optString("access_token")); + accessToken.setExpiresIn(jsonObject.optInt("expires_in")); + return accessToken; + } + } catch (JSONException e) { + e.printStackTrace(); + UnitError error = new UnitError(UnitError.ErrorCode.JSON_PARSE_ERROR, "Json parse error", e); + throw error; + } + return null; + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/parser/CommunicateParser.java b/app/src/main/java/com/yonsz/z1/baiduai/parser/CommunicateParser.java new file mode 100644 index 0000000..e8667a6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/parser/CommunicateParser.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.parser; + +import com.yonsz.z1.baiduai.exception.UnitError; +import com.yonsz.z1.baiduai.model.CommunicateResponse; +import com.yonsz.z1.utils.ToastUtil; + +import org.json.JSONException; +import org.json.JSONObject; + +public class CommunicateParser implements Parser { + + @Override + public CommunicateResponse parse(String json) throws UnitError { + ToastUtil.i("xx", "CommunicateParser:" + json); + try { + JSONObject jsonObject = new JSONObject(json); + + /*if (jsonObject.has("error_code")) { + UnitError error = new UnitError(jsonObject.optInt("error_code"), jsonObject.optString("error_msg")); + throw error; + }*/ + if (jsonObject.getInt("error_code")!=0) { + UnitError error = new UnitError(jsonObject.optInt("error_code"), jsonObject.optString("error_msg")); + throw error; + } + + CommunicateResponse result = new CommunicateResponse(); + /*result.(jsonObject.optLong("log_id")); + result.setJsonRes(json); + + JSONObject resultObject = jsonObject.getJSONObject("result"); + List actionList = result.actionList; + JSONArray actionListArray = resultObject.optJSONArray("action_list"); + if (actionListArray != null) { + for (int i = 0; i < actionListArray.length(); i++) { + JSONObject actionListObject = actionListArray.optJSONObject(i); + if (actionListObject == null) { + continue; + } + CommunicateResponse.Action action = new CommunicateResponse.Action(); + action.actionId = actionListObject.optString("action_id"); + JSONObject actionTypeObject = actionListObject.optJSONObject("action_type"); + + action.actionType = new CommunicateResponse.ActionType(); + action.actionType.target = actionTypeObject.optString("act_target"); + action.actionType.targetDetail = actionTypeObject.optString("act_target_detail"); + action.actionType.type = actionTypeObject.optString("act_type"); + action.actionType.typeDetail = actionTypeObject.optString("act_type_detail"); + + action.confidence = actionListObject.optInt("confidence"); + action.say = actionListObject.optString("say"); + action.mainExe = actionListObject.optString("main_exe"); + + JSONArray hintListArray = actionListObject.optJSONArray("hint_list"); + if (hintListArray != null) { + for (int j = 0; j < hintListArray.length(); j++) { + JSONObject hintQuery = hintListArray.optJSONObject(j); + if (hintQuery != null) { + action.hintList.add(hintQuery.optString("hint_query")); + } + } + } + + actionList.add(action); + } + } + + result.sessionId = resultObject.optString("session_id");*/ + return result; + } catch (JSONException e) { + e.printStackTrace(); + UnitError error = new UnitError(UnitError.ErrorCode.JSON_PARSE_ERROR, "Json parse error:" + json, e); + throw error; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/parser/DefaultParser.java b/app/src/main/java/com/yonsz/z1/baiduai/parser/DefaultParser.java new file mode 100644 index 0000000..82de4b1 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/parser/DefaultParser.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.parser; + +import android.util.Log; +import com.yonsz.z1.baiduai.exception.UnitError; +import com.yonsz.z1.baiduai.model.ResponseResult; + +import org.json.JSONException; +import org.json.JSONObject; + +public class DefaultParser implements Parser { + + @Override + public ResponseResult parse(String json) throws UnitError { + Log.e("xx", "DefaultParser:" + json); + try { + JSONObject jsonObject = new JSONObject(json); + + if (jsonObject.has("error_code")) { + UnitError error = new UnitError(jsonObject.optInt("error_code"), jsonObject.optString("error_msg")); + throw error; + } + + ResponseResult result = new ResponseResult(); + result.setLogId(jsonObject.optLong("log_id")); + result.setJsonRes(json); + + return result; + } catch (JSONException e) { + e.printStackTrace(); + UnitError error = new UnitError(UnitError.ErrorCode.JSON_PARSE_ERROR, "Json parse error:" + json, e); + throw error; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/parser/Parser.java b/app/src/main/java/com/yonsz/z1/baiduai/parser/Parser.java new file mode 100644 index 0000000..ad54845 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/parser/Parser.java @@ -0,0 +1,14 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.parser; + +import com.yonsz.z1.baiduai.exception.UnitError; + +/** + * JSON解析 + * @param + */ +public interface Parser { + T parse(String json) throws UnitError; +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/utils/FileBase64Encoder.java b/app/src/main/java/com/yonsz/z1/baiduai/utils/FileBase64Encoder.java new file mode 100644 index 0000000..7467b54 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/utils/FileBase64Encoder.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.utils; + +import android.util.Base64; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +public class FileBase64Encoder { + public void setInputFile(File file) throws FileNotFoundException { + this.inputStream = new FileInputStream(file); + } + + private InputStream inputStream; + // should be multiplication of 3 and 4; + private byte[] buffer = new byte[24 * 1024]; + + public byte[] encode() { + int readNumber; + try { + readNumber = inputStream.read(buffer); + if (readNumber == -1) { + closeInputStream(); + return null; + } + } catch (IOException e) { + closeInputStream(); + e.printStackTrace(); + return null; + } + return Base64.encode(buffer, 0, readNumber, Base64.DEFAULT); + } + + private void closeInputStream() { + try { + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/utils/HttpUtil.java b/app/src/main/java/com/yonsz/z1/baiduai/utils/HttpUtil.java new file mode 100644 index 0000000..0323ea5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/utils/HttpUtil.java @@ -0,0 +1,179 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.utils; + +import android.os.Handler; +import android.os.Looper; +import android.text.TextUtils; + +import com.yonsz.z1.baiduai.APIService; +import com.yonsz.z1.baiduai.exception.UnitError; +import com.yonsz.z1.baiduai.listener.OnResultListener; +import com.yonsz.z1.baiduai.model.AccessToken; +import com.yonsz.z1.baiduai.parser.AccessTokenParser; + +import java.io.IOException; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +/** + * 使用okhttp请求tokeh和调用服务 + */ +public class HttpUtil { + + private static volatile HttpUtil instance; + private OkHttpClient client; + private Handler handler; + + private HttpUtil() { + } + + public static HttpUtil getInstance() { + if (instance == null) { + synchronized (HttpUtil.class) { + if (instance == null) { + instance = new HttpUtil(); + } + } + } + return instance; + } + + public void init() { + client = new OkHttpClient(); + handler = new Handler(Looper.getMainLooper()); + } + + public void post(String path, String params, final OnResultListener + listener) { + + // JsonRequestBody body = new JsonRequestBody(); + // + // body.setStringParams(params); + + RequestBody body = RequestBody.create(MediaType.parse("application/json"), params); + final Request request = new Request.Builder() + .url(path) + .post(body) + .build(); + + if (client == null) { + UnitError err = new UnitError(-999, "okhttp inner error"); + listener.onError(err); + return; + } + + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + e.printStackTrace(); + final UnitError error = new UnitError(UnitError.ErrorCode.NETWORK_REQUEST_ERROR, + "network request error", e); + handler.post(new Runnable() { + @Override + public void run() { + listener.onError(error); + } + }); + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + final String responseString = response.body().string(); + final T result; + if (call != null) { + handler.post(new Runnable() { + @Override + public void run() { + listener.onStringResult(responseString); + } + }); + } + /*try { + result = parser.parse(responseString); + handler.post(new Runnable() { + @Override + public void run() { + listener.onResult(result); + } + }); + } catch (UnitError ocrError) { + ocrError.printStackTrace(); + }*/ + } + }); + } + + public void getAccessToken(final OnResultListener listener, String url, String param) { + + final AccessTokenParser accessTokenParser = new AccessTokenParser(); + RequestBody body = RequestBody.create(MediaType.parse("text/html"), param); + final Request request = new Request.Builder() + .url(url) + .post(body) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + e.printStackTrace(); + UnitError error = new UnitError(UnitError.ErrorCode.NETWORK_REQUEST_ERROR, "network request error", e); + listener.onError(error); + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + if (response == null || response.body() == null || TextUtils.isEmpty(response.toString())) { + throwError(listener, UnitError.ErrorCode.ACCESS_TOKEN_PARSE_ERROR, + "token is parse error, please rerequest token"); + } + try { + AccessToken accessToken = accessTokenParser.parse(response.body().string()); + if (accessToken != null) { + APIService.getInstance().setAccessToken(accessToken.getAccessToken()); + listener.onResult(accessToken); + } else { + throwError(listener, UnitError.ErrorCode.ACCESS_TOKEN_PARSE_ERROR, + "token is parse error, please rerequest token"); + } + } catch (UnitError error) { + error.printStackTrace(); + listener.onError(error); + } + } + }); + + } + + /** + * throw error + * + * @param errorCode + * @param msg + * @param listener + */ + private void throwError(final OnResultListener listener, int errorCode, String msg) { + final UnitError error = new UnitError(errorCode, msg); + handler.post(new Runnable() { + @Override + public void run() { + listener.onError(error); + } + }); + } + + /** + * 释放资源 + */ + public void release() { + client = null; + handler = null; + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/utils/JsonRequestBody.java b/app/src/main/java/com/yonsz/z1/baiduai/utils/JsonRequestBody.java new file mode 100644 index 0000000..3f55e8b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/utils/JsonRequestBody.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.utils; + +import java.io.IOException; + +import okhttp3.MediaType; +import okhttp3.RequestBody; +import okio.BufferedSink; + +public class JsonRequestBody extends RequestBody { + + private static final MediaType CONTENT_TYPE = + MediaType.parse("application/json"); + + private static final String FORM_ENCODE_SET = " \"':;<=>@[]^`{}|/\\?#&!$(),~"; + + private String stringParams; + + public void setStringParams(String params) { + this.stringParams = params; + } + + @Override + public MediaType contentType() { + return CONTENT_TYPE; + } + + @Override + public void writeTo(BufferedSink sink) throws IOException { + sink.writeUtf8(Util.canonicalize(stringParams, FORM_ENCODE_SET, false, false)); + sink.close(); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/utils/Util.java b/app/src/main/java/com/yonsz/z1/baiduai/utils/Util.java new file mode 100644 index 0000000..8b6e3ae --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/utils/Util.java @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.utils; + +import android.util.Log; + +import java.math.BigInteger; +import java.security.MessageDigest; + +import okio.Buffer; + +// copied from OKHttp +public class Util { + private static final char[] HEX_DIGITS = {'0', '1', '2', '3', + '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + + private static boolean percentEncoded(String encoded, int pos, int limit) { + return pos + 2 < limit + && encoded.charAt(pos) == '%' + && decodeHexDigit(encoded.charAt(pos + 1)) != -1 + && decodeHexDigit(encoded.charAt(pos + 2)) != -1; + } + + private static int decodeHexDigit(char c) { + if (c >= '0' && c <= '9') { + return c - '0'; + } + if (c >= 'a' && c <= 'f') { + return c - 'a' + 10; + } + if (c >= 'A' && c <= 'F') { + return c - 'A' + 10; + } + return -1; + } + + /** + * Returns a substring of {@code input} on the range {@code [pos..limit)} with the following + * transformations: + *
    + *
  • Tabs, newlines, form feeds and carriage returns are skipped. + *
  • In queries, ' ' is encoded to '+' and '+' is encoded to "%2B". + *
  • Characters in {@code encodeSet} are percent-encoded. + *
  • Control characters and non-ASCII characters are percent-encoded. + *
  • All other characters are copied without transformation. + *
+ * + * @param alreadyEncoded true to leave '%' as-is; false to convert it to '%25'. + * @param strict true to encode '%' if it is not the prefix of a valid percent encoding. + * @param plusIsSpace true to encode '+' as "%2B" if it is not already encoded. + * @param asciiOnly true to encode all non-ASCII codepoints. + */ + private static String canonicalize(String input, int pos, int limit, String encodeSet, + boolean alreadyEncoded, boolean strict, boolean plusIsSpace, boolean asciiOnly) { + int codePoint; + for (int i = pos; i < limit; i += Character.charCount(codePoint)) { + codePoint = input.codePointAt(i); + if (codePoint < 0x20 + || codePoint == 0x7f + || codePoint >= 0x80 && asciiOnly + || encodeSet.indexOf(codePoint) != -1 + || codePoint == '%' && (!alreadyEncoded || strict && !percentEncoded(input, i, limit)) + || codePoint == '+' && plusIsSpace) { + // Slow path: the character at i requires encoding! + Buffer out = new Buffer(); + out.writeUtf8(input, pos, i); + canonicalize(out, input, i, limit, encodeSet, alreadyEncoded, strict, plusIsSpace, + asciiOnly); + return out.readUtf8(); + } + } + + // Fast path: no characters in [pos..limit) required encoding. + return input.substring(pos, limit); + } + + private static void canonicalize(Buffer out, String input, int pos, int limit, String encodeSet, + boolean alreadyEncoded, boolean strict, boolean plusIsSpace, boolean asciiOnly) { + Buffer utf8Buffer = null; // Lazily allocated. + int codePoint; + for (int i = pos; i < limit; i += Character.charCount(codePoint)) { + codePoint = input.codePointAt(i); + if (alreadyEncoded + && (codePoint == '\t' || codePoint == '\n' || codePoint == '\f' || codePoint == '\r')) { + // TODO Skip this character. + Log.d("e", "codePoint:" + codePoint); + // TODO delete this + } else if (codePoint == '+' && plusIsSpace) { + // Encode '+' as '%2B' since we permit ' ' to be encoded as either '+' or '%20'. + out.writeUtf8(alreadyEncoded ? "+" : "%2B"); + } else if (codePoint < 0x20 + || codePoint == 0x7f + || codePoint >= 0x80 && asciiOnly + || encodeSet.indexOf(codePoint) != -1 + || codePoint == '%' && (!alreadyEncoded || strict && !percentEncoded(input, i, limit))) { + // Percent encode this character. + if (utf8Buffer == null) { + utf8Buffer = new Buffer(); + } + utf8Buffer.writeUtf8CodePoint(codePoint); + while (!utf8Buffer.exhausted()) { + int b = utf8Buffer.readByte() & 0xff; + out.writeByte('%'); + out.writeByte(HEX_DIGITS[(b >> 4) & 0xf]); + out.writeByte(HEX_DIGITS[b & 0xf]); + } + } else { + // This character doesn't need encoding. Just copy it over. + out.writeUtf8CodePoint(codePoint); + } + } + } + + static String canonicalize(String input, String encodeSet, boolean alreadyEncoded, boolean strict) { + return canonicalize( + input, 0, input.length(), encodeSet, alreadyEncoded, strict, true, true); + } + + /** + * 对字符串md5加密 + * + * @param str + * + * @return + */ + public static String md5(String str) { + try { + // 生成一个MD5加密计算摘要 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 计算md5函数 + md.update(str.getBytes()); + return new BigInteger(1, md.digest()).toString(16); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/view/RippleImageView.java b/app/src/main/java/com/yonsz/z1/baiduai/view/RippleImageView.java new file mode 100644 index 0000000..7e296b5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/view/RippleImageView.java @@ -0,0 +1,199 @@ +package com.yonsz.z1.baiduai.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Handler; +import android.os.Message; +import android.util.AttributeSet; +import android.util.Log; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.view.animation.AnimationSet; +import android.view.animation.ScaleAnimation; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import com.yonsz.z1.R; + +/** + * Description : + * Author : liujun + * Email : liujin2son@163.com + * Date : $(DATE) + */ +public class RippleImageView extends RelativeLayout { + + private static final int SHOW_SPACING_TIME = 700; + private static final int MSG_WAVE2_ANIMATION = 1; + private static final int MSG_WAVE3_ANIMATION = 2; + private static final int IMAMGEVIEW_SIZE = 80; + /** + * 三张波纹图片 + */ + private static final int SIZE = 3; + + /** + * 动画默认循环播放时间 + */ + private int show_spacing_time = SHOW_SPACING_TIME; + /** + * 初始化动画集 + */ + private AnimationSet[] mAnimationSet = new AnimationSet[SIZE]; + /** + * 水波纹图片 + */ + private ImageView[] imgs = new ImageView[SIZE]; + /** + * 背景图片 + */ + private ImageView img_bg; + /** + * 水波纹和背景图片的大小 + */ + private float imageViewWidth = IMAMGEVIEW_SIZE; + private float imageViewHeigth = IMAMGEVIEW_SIZE; + + private boolean isWaveNow = false; + + private Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_WAVE2_ANIMATION: + imgs[MSG_WAVE2_ANIMATION].startAnimation(mAnimationSet[MSG_WAVE2_ANIMATION]); + break; + case MSG_WAVE3_ANIMATION: + imgs[MSG_WAVE2_ANIMATION].startAnimation(mAnimationSet[MSG_WAVE3_ANIMATION]); + break; + } + + } + }; + + + public RippleImageView(Context context) { + super(context); + initView(context); + } + + public RippleImageView(Context context, AttributeSet attrs) { + super(context, attrs); + getAttributeSet(context, attrs); + initView(context); + } + + private static int dip2px(Context context, float dipValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dipValue * scale + 0.5f); + } + + /** + * 获取xml属性 + * + * @param context + * @param attrs + */ + private void getAttributeSet(Context context, AttributeSet attrs) { + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.custume_ripple_imageview); + + show_spacing_time = typedArray.getInt(R.styleable.custume_ripple_imageview_show_spacing_time, SHOW_SPACING_TIME); + imageViewWidth = typedArray.getDimension(R.styleable.custume_ripple_imageview_imageViewWidth, IMAMGEVIEW_SIZE); + imageViewHeigth = typedArray.getDimension(R.styleable.custume_ripple_imageview_imageViewHeigth, IMAMGEVIEW_SIZE); + Log.d("TAG", "show_spacing_time=" + show_spacing_time + "mm imageViewWidth=" + imageViewWidth + "px imageViewHeigth=" + imageViewHeigth + "px"); + typedArray.recycle(); + } + + private void initView(Context context) { + setLayout(context); + for (int i = 0; i < imgs.length; i++) { + mAnimationSet[i] = initAnimationSet(); + } + } + + /** + * 开始动态布局 + */ + private void setLayout(Context context) { + LayoutParams params = new LayoutParams(dip2px(context, imageViewWidth), dip2px(context, imageViewHeigth)); + //添加一个规则 + params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); + /**添加水波纹图片*/ + for (int i = 0; i < SIZE; i++) { + imgs[i] = new ImageView(context); + imgs[i].setImageResource(R.mipmap.point_empty); + addView(imgs[i], params); + } + LayoutParams params_bg = new LayoutParams(dip2px(context, imageViewWidth) + 10, dip2px(context, imageViewHeigth) + 10); + //添加一个规则 + params_bg.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); + /**添加背景图片*/ + img_bg = new ImageView(context); + img_bg.setImageResource(R.drawable.icon_voice); + addView(img_bg, params_bg); + } + + /** + * 初始化动画集 + * + * @return + */ + private AnimationSet initAnimationSet() { + AnimationSet as = new AnimationSet(true); + //缩放度:变大两倍 + ScaleAnimation sa = new ScaleAnimation(1f, 2f, 1f, 2f, + ScaleAnimation.RELATIVE_TO_SELF, 0.5f, + ScaleAnimation.RELATIVE_TO_SELF, 0.5f); + sa.setDuration(show_spacing_time * 3); + sa.setRepeatCount(Animation.INFINITE);// 设置循环 + //透明度 + AlphaAnimation aa = new AlphaAnimation(1, 0.1f); + aa.setDuration(show_spacing_time * 3); + aa.setRepeatCount(Animation.INFINITE);//设置循环 + as.addAnimation(sa); + as.addAnimation(aa); + return as; + } + + //============================对外暴露的public方法========================================= + + /** + * 开始水波纹动画 + */ + public void startWaveAnimation() { + imgs[0].startAnimation(mAnimationSet[0]); + mHandler.sendEmptyMessageDelayed(MSG_WAVE2_ANIMATION, show_spacing_time); + mHandler.sendEmptyMessageDelayed(MSG_WAVE3_ANIMATION, show_spacing_time * 2); + isWaveNow = true; + } + + /** + * 停止水波纹动画 + */ + public void stopWaveAnimation() { + for (int i = 0; i < imgs.length; i++) { + imgs[i].clearAnimation(); + } + isWaveNow = false; + } + + //是否显示动画了 + public boolean isWaveAnimation() { + return isWaveNow; + } + + /** + * 获取播放的速度 + */ + public int getShow_spacing_time() { + return show_spacing_time; + } + + /** + * 设计播放的速度,默认是800毫秒 + */ + public void setShow_spacing_time(int show_spacing_time) { + this.show_spacing_time = show_spacing_time; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/view/RippleView.java b/app/src/main/java/com/yonsz/z1/baiduai/view/RippleView.java new file mode 100644 index 0000000..43f070e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/view/RippleView.java @@ -0,0 +1,238 @@ +package com.yonsz.z1.baiduai.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.util.AttributeSet; +import android.view.View; + +import com.yonsz.z1.R; +import com.yonsz.z1.utils.DensityUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * 涟漪效果 + *

+ * Created by zhuwentao on 2018-03-07. + */ +public class RippleView extends View { + + private Context mContext; + + // 画笔对象 + private Paint mPaint; + + // View宽 + private float mWidth; + + // View高 + private float mHeight; + + // 声波的圆圈集合 + private List mRipples; + + private int sqrtNumber; + + // 圆圈扩散的速度 + private int mSpeed; + + // 圆圈之间的密度 + private int mDensity; + + // 圆圈的颜色 + private int mColor; + + // 圆圈是否为填充模式 + private boolean mIsFill; + + // 圆圈是否为渐变模式 + private boolean mIsAlpha; + + public RippleView(Context context) { + this(context, null); + } + + public RippleView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public RippleView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + // 获取用户配置属性 + TypedArray tya = context.obtainStyledAttributes(attrs, R.styleable.mRippleView); + mColor = tya.getColor(R.styleable.mRippleView_cColor, Color.BLUE); + mSpeed = tya.getInt(R.styleable.mRippleView_cSpeed, 1); + mDensity = tya.getInt(R.styleable.mRippleView_cDensity, 10); + mIsFill = tya.getBoolean(R.styleable.mRippleView_cIsFill, false); + mIsAlpha = tya.getBoolean(R.styleable.mRippleView_cIsAlpha, false); + tya.recycle(); + + init(); + } + + private void init() { + mContext = getContext(); + + // 设置画笔样式 + mPaint = new Paint(); + mPaint.setColor(mColor); + mPaint.setStrokeWidth(DensityUtil.dip2px(mContext, 1)); + if (mIsFill) { + mPaint.setStyle(Paint.Style.FILL); + } else { + mPaint.setStyle(Paint.Style.STROKE); + } + mPaint.setStrokeCap(Paint.Cap.ROUND); + mPaint.setAntiAlias(true); + + // 添加第一个圆圈 + mRipples = new ArrayList<>(); + Circle c = new Circle(0, 255); + mRipples.add(c); + + mDensity = DensityUtil.dip2px(mContext, mDensity); + + // 设置View的圆为半透明 + setBackgroundColor(Color.TRANSPARENT); + } + + @Override + public void onDraw(Canvas canvas) { + super.onDraw(canvas); + + // 内切正方形 + drawInCircle(canvas); + + // 外切正方形 + // drawOutCircle(canvas); + } + + /** + * 圆到宽度 + * + * @param canvas + */ + private void drawInCircle(Canvas canvas) { + canvas.save(); + + // 处理每个圆的宽度和透明度 + for (int i = 0; i < mRipples.size(); i++) { + Circle c = mRipples.get(i); + mPaint.setAlpha(c.alpha);// (透明)0~255(不透明) + canvas.drawCircle(mWidth / 2, mHeight / 2, c.width - mPaint.getStrokeWidth(), mPaint); + + // 当圆超出View的宽度后删除 + if (c.width > mWidth / 2) { + mRipples.remove(i); + } else { + // 计算不透明的数值,这里有个小知识,就是如果不加上double的话,255除以一个任意比它大的数都将是0 + if (mIsAlpha) { + double alpha = 255 - c.width * (255 / ((double) mWidth / 2)); + c.alpha = (int) alpha; + } + // 修改这个值控制速度 + c.width += mSpeed; + } + } + + + // 里面添加圆 + if (mRipples.size() > 0) { + // 控制第二个圆出来的间距 + if (mRipples.get(mRipples.size() - 1).width > DensityUtil.dip2px(mContext, mDensity)) { + mRipples.add(new Circle(0, 255)); + } + } + + + invalidate(); + + canvas.restore(); + } + + + /** + * 圆到对角线 + * + * @param canvas + */ + private void drawOutCircle(Canvas canvas) { + canvas.save(); + + // 使用勾股定律求得一个外切正方形中心点离角的距离 + sqrtNumber = (int) (Math.sqrt(mWidth * mWidth + mHeight * mHeight) / 2); + + // 变大 + for (int i = 0; i < mRipples.size(); i++) { + + // 启动圆圈 + Circle c = mRipples.get(i); + mPaint.setAlpha(c.alpha);// (透明)0~255(不透明) + canvas.drawCircle(mWidth / 2, mHeight / 2, c.width - mPaint.getStrokeWidth(), mPaint); + + // 当圆超出对角线后删掉 + if (c.width > sqrtNumber) { + mRipples.remove(i); + } else { + // 计算不透明的度数 + double degree = 255 - c.width * (255 / (double) sqrtNumber); + c.alpha = (int) degree; + c.width += 1; + } + } + + // 里面添加圆 + if (mRipples.size() > 0) { + // 控制第二个圆出来的间距 + if (mRipples.get(mRipples.size() - 1).width == 50) { + mRipples.add(new Circle(0, 255)); + } + } + invalidate(); + canvas.restore(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int myWidthSpecMode = MeasureSpec.getMode(widthMeasureSpec); + int myWidthSpecSize = MeasureSpec.getSize(widthMeasureSpec); + int myHeightSpecMode = MeasureSpec.getMode(heightMeasureSpec); + int myHeightSpecSize = MeasureSpec.getSize(heightMeasureSpec); + + // 获取宽度 + if (myWidthSpecMode == MeasureSpec.EXACTLY) { + // match_parent + mWidth = myWidthSpecSize; + } else { + // wrap_content + mWidth = DensityUtil.dip2px(mContext, 120); + } + + // 获取高度 + if (myHeightSpecMode == MeasureSpec.EXACTLY) { + mHeight = myHeightSpecSize; + } else { + // wrap_content + mHeight = DensityUtil.dip2px(mContext, 120); + } + + // 设置该view的宽高 + setMeasuredDimension((int) mWidth, (int) mHeight); + } + + + class Circle { + int width; + int alpha; + + Circle(int width, int alpha) { + this.width = width; + this.alpha = alpha; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/baiduai/view/RoundImageView.java b/app/src/main/java/com/yonsz/z1/baiduai/view/RoundImageView.java new file mode 100644 index 0000000..7831b7b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/view/RoundImageView.java @@ -0,0 +1,182 @@ +package com.yonsz.z1.baiduai.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.NinePatchDrawable; +import android.util.AttributeSet; +import android.widget.ImageView; + +import com.yonsz.z1.R; + +/** + * Created by Administrator on 2018/12/17. + */ + +public class RoundImageView extends ImageView { + private int mBorderThickness = 0; + private Context mContext; + private int defaultColor = 0xFFFFFFFF; + // 如果只有其中一个有值,则只画一个圆形边框 + private int mBorderOutsideColor = 0; + private int mBorderInsideColor = 0; + // 控件默认长、宽 + private int defaultWidth = 0; + private int defaultHeight = 0; + public RoundImageView(Context context) { + super(context); + mContext = context; + } + public RoundImageView(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + setCustomAttributes(attrs); + } + public RoundImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mContext = context; + setCustomAttributes(attrs); + } + private void setCustomAttributes(AttributeSet attrs) { + TypedArray a = mContext.obtainStyledAttributes(attrs, + R.styleable.roundedimageview); + mBorderThickness = a.getDimensionPixelSize( + R.styleable.roundedimageview_border_thickness, 0); + mBorderOutsideColor = a + .getColor(R.styleable.roundedimageview_border_outside_color, + defaultColor); + mBorderInsideColor = a.getColor( + R.styleable.roundedimageview_border_inside_color, defaultColor); + } + @Override + protected void onDraw(Canvas canvas) { + Drawable drawable = getDrawable(); + if (drawable == null) { + return; + } + if (getWidth() == 0 || getHeight() == 0) { + return; + } + this.measure(0, 0); + if (drawable.getClass() == NinePatchDrawable.class) + return; + Bitmap b = ((BitmapDrawable) drawable).getBitmap(); + Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); + if (defaultWidth == 0) { + defaultWidth = getWidth(); + } + if (defaultHeight == 0) { + defaultHeight = getHeight(); + } + int radius = 0; + if (mBorderInsideColor != defaultColor + && mBorderOutsideColor != defaultColor) {// 定义画两个边框,分别为外圆边框和内圆边框 + radius = (defaultWidth < defaultHeight ? defaultWidth + : defaultHeight) / 2 - 2 * mBorderThickness; + // 画内圆 + drawCircleBorder(canvas, radius + mBorderThickness / 2, + mBorderInsideColor); + // 画外圆 + drawCircleBorder(canvas, radius + mBorderThickness + + mBorderThickness / 2, mBorderOutsideColor); + } else if (mBorderInsideColor != defaultColor + && mBorderOutsideColor == defaultColor) {// 定义画一个边框 + radius = (defaultWidth < defaultHeight ? defaultWidth + : defaultHeight) / 2 - mBorderThickness; + drawCircleBorder(canvas, radius + mBorderThickness / 2, + mBorderInsideColor); + } else if (mBorderInsideColor == defaultColor + && mBorderOutsideColor != defaultColor) {// 定义画一个边框 + radius = (defaultWidth < defaultHeight ? defaultWidth + : defaultHeight) / 2 - mBorderThickness; + drawCircleBorder(canvas, radius + mBorderThickness / 2, + mBorderOutsideColor); + } else {// 没有边框 + radius = (defaultWidth < defaultHeight ? defaultWidth + : defaultHeight) / 2; + } + Bitmap roundBitmap = getCroppedRoundBitmap(bitmap, radius); + canvas.drawBitmap(roundBitmap, defaultWidth / 2 - radius, defaultHeight + / 2 - radius, null); + } + /** + * 获取裁剪后的圆形图片 + */ + public Bitmap getCroppedRoundBitmap(Bitmap bmp, int radius) { + Bitmap scaledSrcBmp; + int diameter = radius * 2; + // 为了防止宽高不相等,造成圆形图片变形,因此截取长方形中处于中间位置最大的正方形图片 + int bmpWidth = bmp.getWidth(); + int bmpHeight = bmp.getHeight(); + int squareWidth = 0, squareHeight = 0; + int x = 0, y = 0; + Bitmap squareBitmap; + if (bmpHeight > bmpWidth) {// 高大于宽 + squareWidth = squareHeight = bmpWidth; + x = 0; + y = (bmpHeight - bmpWidth) / 2; + // 截取正方形图片 + squareBitmap = Bitmap.createBitmap(bmp, x, y, squareWidth, + squareHeight); + } else if (bmpHeight < bmpWidth) {// 宽大于高 + squareWidth = squareHeight = bmpHeight; + x = (bmpWidth - bmpHeight) / 2; + y = 0; + squareBitmap = Bitmap.createBitmap(bmp, x, y, squareWidth, + squareHeight); + } else { + squareBitmap = bmp; + } + if (squareBitmap.getWidth() != diameter + || squareBitmap.getHeight() != diameter) { + scaledSrcBmp = Bitmap.createScaledBitmap(squareBitmap, diameter, + diameter, true); + } else { + scaledSrcBmp = squareBitmap; + } + Bitmap output = Bitmap.createBitmap(scaledSrcBmp.getWidth(), + scaledSrcBmp.getHeight(), + Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(output); + Paint paint = new Paint(); + Rect rect = new Rect(0, 0, scaledSrcBmp.getWidth(), + scaledSrcBmp.getHeight()); + paint.setAntiAlias(true); + paint.setFilterBitmap(true); + paint.setDither(true); + canvas.drawARGB(0, 0, 0, 0); + canvas.drawCircle(scaledSrcBmp.getWidth() / 2, + scaledSrcBmp.getHeight() / 2, + scaledSrcBmp.getWidth() / 2, + paint); + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + canvas.drawBitmap(scaledSrcBmp, rect, rect, paint); + bmp = null; + squareBitmap = null; + scaledSrcBmp = null; + return output; + } + /** + * 边缘画圆 + */ + private void drawCircleBorder(Canvas canvas, int radius, int color) { + Paint paint = new Paint(); +/* 去锯齿 */ + paint.setAntiAlias(true); + paint.setFilterBitmap(true); + paint.setDither(true); + paint.setColor(color); +/* 设置paint的 style 为STROKE:空心 */ + paint.setStyle(Paint.Style.STROKE); +/* 设置paint的外框宽度 */ + paint.setStrokeWidth(mBorderThickness); + canvas.drawCircle(defaultWidth / 2, defaultHeight / 2, radius, paint); + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/view/WhewView.java b/app/src/main/java/com/yonsz/z1/baiduai/view/WhewView.java new file mode 100644 index 0000000..84c699f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/view/WhewView.java @@ -0,0 +1,99 @@ +package com.yonsz.z1.baiduai.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.util.AttributeSet; +import android.view.View; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2018/12/17. + */ + +public class WhewView extends View { + private Paint paint; + private int maxWidth = 255; + // 是否运行 + private boolean isStarting = false; + private List alphaList = new ArrayList(); + private List startWidthList = new ArrayList(); + + public WhewView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + // TODO Auto-generated constructor stub + init(); + } + + public WhewView(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + init(); + } + + public WhewView(Context context) { + super(context); + // TODO Auto-generated constructor stub + init(); + } + + private void init() { + paint = new Paint(); + // 设置博文的颜色 + paint.setColor(0x0059ccf5); + alphaList.add("255");// 圆心的不透明度 + startWidthList.add("0"); + } + + @Override + public void onDraw(Canvas canvas) { + super.onDraw(canvas); + setBackgroundColor(Color.TRANSPARENT);// 颜色:完全透明 + // 依次绘制 同心圆 + for (int i = 0; i < alphaList.size(); i++) { + int alpha = Integer.parseInt(alphaList.get(i)); + // 圆半径 + int startWidth = Integer.parseInt(startWidthList.get(i)); + paint.setAlpha(alpha); + // 这个半径决定你想要多大的扩散面积 + canvas.drawCircle(getWidth() / 2, getHeight() / 2, startWidth + 50, + paint); + // 同心圆扩散 + if (isStarting && alpha > 0 && startWidth < maxWidth) { + alphaList.set(i, (alpha - 1) + ""); + startWidthList.set(i, (startWidth + 1) + ""); + } + } + if (isStarting + && Integer + .parseInt(startWidthList.get(startWidthList.size() - 1)) == maxWidth / 5) { + alphaList.add("255"); + startWidthList.add("0"); + } + // 同心圆数量达到10个,删除最外层圆 + if (isStarting && startWidthList.size() == 10) { + startWidthList.remove(0); + alphaList.remove(0); + } + // 刷新界面 + invalidate(); + } + + // 执行动画 + public void start() { + isStarting = true; + } + + // 停止动画 + public void stop() { + isStarting = false; + } + + // 判断是都在不在执行 + public boolean isStarting() { + return isStarting; + } +} diff --git a/app/src/main/java/com/yonsz/z1/baiduai/widget/BasePopupWindow.java b/app/src/main/java/com/yonsz/z1/baiduai/widget/BasePopupWindow.java new file mode 100644 index 0000000..74ea340 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/baiduai/widget/BasePopupWindow.java @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2017 Baidu, Inc. All Rights Reserved. + */ +package com.yonsz.z1.baiduai.widget; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.PopupWindow; + +public abstract class BasePopupWindow { + protected Context context; + protected View contentView; + protected PopupWindow mInstance; + + public BasePopupWindow(Context c, int layoutRes, int w, int h) { + context = c; + contentView = LayoutInflater.from(c).inflate(layoutRes, null, false); + + initView(); + initEvent(); + + mInstance = new PopupWindow(contentView, w, h, true); + + initWindow(); + } + + public View getContentView() { return contentView; } + public PopupWindow getPopupWindow() { return mInstance; } + + protected abstract void initView(); + protected abstract void initEvent(); + protected void initWindow() { + mInstance.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + mInstance.setOutsideTouchable(true); + mInstance.setTouchable(true); + } + + public void showBashOfAnchor(View anchor, LayoutGravity layoutGravity, int xmerge, int ymerge) { + int[] offset = layoutGravity.getOffset(anchor, mInstance); + mInstance.showAsDropDown(anchor, offset[0]+xmerge, offset[1]+ymerge); + } + + public void showAsDropDown(View anchor, int xoff, int yoff) { + mInstance.showAsDropDown(anchor, xoff, yoff); + } + + public void showAtLocation(View parent, int gravity, int x, int y) { + mInstance.showAtLocation(parent, gravity, x, y); + } + + public static class LayoutGravity { + private int layoutGravity; + // waring, don't change the order of these constants! + public static final int ALIGN_LEFT=0x1; + public static final int ALIGN_ABOVE=0x2; + public static final int ALIGN_RIGHT=0x4; + public static final int ALIGN_BOTTOM=0x8; + public static final int TO_LEFT=0x10; + public static final int TO_ABOVE=0x20; + public static final int TO_RIGHT=0x40; + public static final int TO_BOTTOM=0x80; + public static final int CENTER_HORI=0x100; + public static final int CENTER_VERT=0x200; + + public LayoutGravity(int gravity) { + layoutGravity=gravity; + } + + public int getLayoutGravity() { return layoutGravity; } + public void setLayoutGravity(int gravity) { layoutGravity=gravity; } + + public void setHoriGravity(int gravity) { + layoutGravity&=(0x2+0x8+0x20+0x80+0x200); + layoutGravity|=gravity; + } + public void setVertGravity(int gravity) { + layoutGravity&=(0x1+0x4+0x10+0x40+0x100); + layoutGravity|=gravity; + } + + public boolean isParamFit(int param) { + return (layoutGravity & param) > 0; + } + + public int getHoriParam() { + for(int i=0x1; i<=0x100; i=i<<2) + if(isParamFit(i)) + return i; + return ALIGN_LEFT; + } + + public int getVertParam() { + for(int i=0x2; i<=0x200; i=i<<2) + if(isParamFit(i)) + return i; + return TO_BOTTOM; + } + + public int[] getOffset(View anchor, PopupWindow window) { + int anchWidth=anchor.getWidth(); + int anchHeight=anchor.getHeight(); + + int winWidth=window.getWidth(); + int winHeight=window.getHeight(); + View view=window.getContentView(); + if(winWidth<=0) + winWidth=view.getWidth(); + if(winHeight<=0) + winHeight=view.getHeight(); + + int xoff=0; + int yoff=0; + + switch (getHoriParam()) { + case ALIGN_LEFT: + xoff=0; break; + case ALIGN_RIGHT: + xoff=anchWidth-winWidth; break; + case TO_LEFT: + xoff=-winWidth; break; + case TO_RIGHT: + xoff=anchWidth; break; + case CENTER_HORI: + xoff=(anchWidth-winWidth)/2; break; + default:break; + } + switch (getVertParam()) { + case ALIGN_ABOVE: + yoff=-anchHeight; break; + case ALIGN_BOTTOM: + yoff=-winHeight; break; + case TO_ABOVE: + yoff=-anchHeight-winHeight; break; + case TO_BOTTOM: + yoff=0; break; + case CENTER_VERT: + yoff=(-winHeight-anchHeight)/2; break; + default:break; + } + return new int[]{ xoff, yoff }; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/chat/BaseChatActivity.java b/app/src/main/java/com/yonsz/z1/chat/BaseChatActivity.java new file mode 100644 index 0000000..29b8727 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/BaseChatActivity.java @@ -0,0 +1,911 @@ +package com.yonsz.z1.chat; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Message; +import android.provider.MediaStore; +import android.support.v4.view.ViewPager; +import android.text.Spannable; +import android.text.TextUtils; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.chat.adapter.DataAdapter; +import com.yonsz.z1.chat.adapter.ExpressionAdapter; +import com.yonsz.z1.chat.adapter.ExpressionPagerAdapter; +import com.yonsz.z1.chat.common.ChatConst; +import com.yonsz.z1.chat.db.ChatDbManager; +import com.yonsz.z1.chat.db.ChatMessageBean; +import com.yonsz.z1.chat.utils.FileSaveUtil; +import com.yonsz.z1.chat.utils.ImageCheckoutUtil; +import com.yonsz.z1.chat.utils.KeyBoardUtils; +import com.yonsz.z1.chat.utils.PictureUtil; +import com.yonsz.z1.chat.utils.ScreenUtil; +import com.yonsz.z1.chat.utils.SmileUtils; +import com.yonsz.z1.chat.widget.AudioRecordButton; +import com.yonsz.z1.chat.widget.ChatBottomView; +import com.yonsz.z1.chat.widget.ExpandGridView; +import com.yonsz.z1.chat.widget.HeadIconSelectorView; +import com.yonsz.z1.chat.widget.MediaManager; +import com.yonsz.z1.chat.widget.pulltorefresh.PullToRefreshLayout; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity4.VoiceChatEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.listpopupwindow.RankingPopupWindow; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.yonsz.z1.net.Constans.GET_DEVICEVOICE_CHATLIST_FAIL; +import static com.yonsz.z1.net.Constans.GET_DEVICEVOICE_CHATLIST_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; + +/** + * Created by Administrator on 2018/8/28. + */ + +public abstract class BaseChatActivity extends BaseActivity { + public static final int SEND_OK = 0x1110; + public static final int REFRESH = 0x0011; + public static final int RECERIVE_OK = 0x1111; + public static final int PULL_TO_REFRESH_DOWN = 0x0111; + private static final int SDK_PERMISSION_REQUEST = 127; + private static final int IMAGE_SIZE = 100 * 1024;// 300kb + public PullToRefreshLayout pullList; + public boolean isDown = false; + public int position; //加载滚动刷新位置 + public int bottomStatusHeight = 0; + public int listSlideHeight = 0;//滑动距离 + public TextView send_emoji_icon; + public ImageView emoji; + public ImageView mess_iv; + public ImageView voiceIv; + public ListView mess_lv; + public ChatBottomView tbbv; + public AudioRecordButton voiceBtn; + public EditText mEditTextContent; + public ViewPager expressionViewpager; + public LinearLayout emoji_group; + public View activityRootView; + public String userName = "test";//聊天对象昵称 + public String item[] = {"你好!", "我正忙着呢,等等", "有啥事吗?", "有时间聊聊吗", "再见!"}; + public List tblist = new ArrayList(); + public List pagelist = new ArrayList(); + public ChatDbManager mChatDbManager; + public int page = 0; + public int number = 10; + public ArrayList imageList = new ArrayList();//adapter图片数据 + public HashMap imagePosition = new HashMap();//图片下标位置 + public int nowPage = 1; + RankingPopupWindow mWindow; + RankingPopupWindow.Listener listener; + private int pageSize = 1; + private TitleView mTitleView; + private boolean CAN_WRITE_EXTERNAL_STORAGE = true; + private boolean CAN_RECORD_AUDIO = true; + private DataAdapter adapter; + private File mCurrentPhotoFile; + private Toast mToast; + private String permissionInfo; + private String camPicPath; + private List reslist; + private List deviceNumList; + private DeviceSimpleEntity deviceSimpleEntity; + private int showPosition = 0; + private View.OnKeyListener onKeyListener = new View.OnKeyListener() { + + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_ENTER + && event.getAction() == KeyEvent.ACTION_DOWN) { + sendMessage(""); + return true; + } + return false; + } + }; + + @SuppressLint("SimpleDateFormat") + public static String returnTime() { + SimpleDateFormat sDateFormat = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + String date = sDateFormat.format(new java.util.Date()); + return date; + } + + public void onEventMainThread(AppControlEvent event) { + String msg = event.getMsg(); + NettyEntity nettyEntity = JSON.parseObject(msg.toString(), NettyEntity.class); + String macId = nettyEntity.getMacId(); + if (macId.equals(deviceSimpleEntity.getData().get(showPosition).getZiId())) { + /*sendMessage(nettyEntity.getVoice()); + receriveMsgText(nettyEntity.getReply());*/ + } + } + + /** + * 发送文本消息 + */ + protected abstract void sendMessage(String message); + + protected abstract void receriveMsgText(String message); + + /** + * 发送图片文件 + * + * @param filePath + */ + protected abstract void sendImage(String filePath); + + /** + * 发送语音消息 + * + * @param seconds + * @param filePath + */ + protected abstract void sendVoice(float seconds, String filePath); + + protected abstract void loadRecords(List pagelist); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_chat); + findView(); + initpop(); + init(); + // after andrioid m,must request Permiision on runtime + getPersimmions(); + getUserDevices4SimpleInfo(); + } + + @Override + protected void onDestroy() { + MediaManager.pause(); + MediaManager.release(); + cancelToast(); + super.onDestroy(); + } + + protected void findView() { + pullList = (PullToRefreshLayout) findViewById(R.id.content_lv); + activityRootView = findViewById(R.id.layout_tongbao_rl); + mEditTextContent = (EditText) findViewById(R.id.mess_et); + mess_iv = (ImageView) findViewById(R.id.mess_iv); + emoji = (ImageView) findViewById(R.id.emoji); + voiceIv = (ImageView) findViewById(R.id.voice_iv); + expressionViewpager = (ViewPager) findViewById(R.id.vPager); + voiceBtn = (AudioRecordButton) findViewById(R.id.voice_btn); + emoji_group = (LinearLayout) findViewById(R.id.emoji_group); + send_emoji_icon = (TextView) findViewById(R.id.send_emoji_icon); + tbbv = (ChatBottomView) findViewById(R.id.other_lv); + // initActionBar(); + mTitleView = (TitleView) findViewById(R.id.title_chat); + mTitleView.clearBackGroud(); + mTitleView.setHead(R.string.talk_record); + // mTitleView.setHeadFuntionTxt("设备A1--" + ">"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + String headFuntionTxt = mTitleView.getHeadFuntionTxt(); +// initListItem(deviceNumList, 0, headFuntionTxt.substring(0, headFuntionTxt.length() - 1)); + } + + @Override + public void onFunctionText() { + + } + }); + } + + protected void init() { + mEditTextContent.setOnKeyListener(onKeyListener); + mChatDbManager = new ChatDbManager(); + PullToRefreshLayout.pulltorefreshNotifier pullNotifier = new PullToRefreshLayout.pulltorefreshNotifier() { + @Override + public void onPull() { + // TODO Auto-generated method stub + downLoad(); + } + }; + pullList.setpulltorefreshNotifier(pullNotifier); + voiceIv.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + if (voiceBtn.getVisibility() == View.GONE) { + emoji.setBackgroundResource(R.mipmap.emoji); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + mEditTextContent.setVisibility(View.GONE); + emoji_group.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + mess_lv.setVisibility(View.GONE); + voiceBtn.setVisibility(View.VISIBLE); + KeyBoardUtils.hideKeyBoard(BaseChatActivity.this, + mEditTextContent); + voiceIv.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + } else { + mEditTextContent.setVisibility(View.VISIBLE); + voiceBtn.setVisibility(View.GONE); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + KeyBoardUtils.showKeyBoard(BaseChatActivity.this, mEditTextContent); + } + } + + }); + mess_iv.setOnClickListener(new View.OnClickListener() { + + @SuppressLint("NewApi") + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + emoji_group.setVisibility(View.GONE); + if (tbbv.getVisibility() == View.GONE + && mess_lv.getVisibility() == View.GONE) { + mEditTextContent.setVisibility(View.VISIBLE); + mess_iv.setFocusable(true); + voiceBtn.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + tbbv.setVisibility(View.VISIBLE); + KeyBoardUtils.hideKeyBoard(BaseChatActivity.this, + mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + } else { + tbbv.setVisibility(View.GONE); + KeyBoardUtils.showKeyBoard(BaseChatActivity.this, mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + if (mess_lv.getVisibility() != View.GONE) { + mess_lv.setVisibility(View.GONE); + KeyBoardUtils.showKeyBoard(BaseChatActivity.this, mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + } + } + } + }); + send_emoji_icon.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + sendMessage(""); + } + + }); + tbbv.setOnHeadIconClickListener(new HeadIconSelectorView.OnHeadIconClickListener() { + + @SuppressLint("InlinedApi") + @Override + public void onClick(int from) { + switch (from) { + case ChatBottomView.FROM_CAMERA: + if (!CAN_WRITE_EXTERNAL_STORAGE) { + Toast.makeText(BaseChatActivity.this, "权限未开通\n请到设置中开通相册权限", Toast.LENGTH_SHORT).show(); + } else { + final String state = Environment.getExternalStorageState(); + if (Environment.MEDIA_MOUNTED.equals(state)) { + camPicPath = getSavePicPath(); + Intent openCameraIntent = new Intent( + MediaStore.ACTION_IMAGE_CAPTURE); + Uri uri = Uri.fromFile(new File(camPicPath)); + openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); + startActivityForResult(openCameraIntent, + ChatBottomView.FROM_CAMERA); + } else { + showToast("请检查内存卡"); + } + } + break; + case ChatBottomView.FROM_GALLERY: + if (!CAN_WRITE_EXTERNAL_STORAGE) { + Toast.makeText(BaseChatActivity.this, "权限未开通\n请到设置中开通相册权限", Toast.LENGTH_SHORT).show(); + } else { + String status = Environment.getExternalStorageState(); + if (status.equals(Environment.MEDIA_MOUNTED)) {// 判断是否有SD卡 + Intent intent = new Intent(); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + intent.setAction(Intent.ACTION_GET_CONTENT); + } else { + intent.setAction(Intent.ACTION_OPEN_DOCUMENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.putExtra("crop", "true"); + intent.putExtra("scale", "true"); + intent.putExtra("scaleUpIfNeeded", true); + } + intent.setType("image/*"); + startActivityForResult(intent, + ChatBottomView.FROM_GALLERY); + } else { + showToast("没有SD卡"); + } + } + break; + + case ChatBottomView.FROM_PHRASE: + if (mess_lv.getVisibility() == View.GONE) { + tbbv.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + mess_lv.setVisibility(View.VISIBLE); + KeyBoardUtils.hideKeyBoard(BaseChatActivity.this, + mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + } + } + } + + }); + emoji.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + mess_lv.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + if (emoji_group.getVisibility() == View.GONE) { + mEditTextContent.setVisibility(View.VISIBLE); + voiceBtn.setVisibility(View.GONE); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + emoji_group.setVisibility(View.VISIBLE); + emoji.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + KeyBoardUtils.hideKeyBoard(BaseChatActivity.this, + mEditTextContent); + } else { + emoji_group.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + KeyBoardUtils.showKeyBoard(BaseChatActivity.this, mEditTextContent); + } + } + }); + // 表情list + reslist = getExpressionRes(40); + // 初始化表情viewpager + List views = new ArrayList(); + View gv1 = getGridChildView(1); + View gv2 = getGridChildView(2); + views.add(gv1); + views.add(gv2); + expressionViewpager.setAdapter(new ExpressionPagerAdapter(views)); + + mEditTextContent.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + emoji_group.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + mess_lv.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + } + + }); + + mess_lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + // TODO Auto-generated method stub + mEditTextContent.setText(item[arg2]); + sendMessage(""); + } + + }); + // controlKeyboardLayout(activityRootView, pullList); + bottomStatusHeight = ScreenUtil.getNavigationBarHeight(this); + //加载本地聊天记录 + page = (int) mChatDbManager.getPages(number); + } + + + @TargetApi(23) + protected void getPersimmions() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + ArrayList permissions = new ArrayList(); + // 读写权限 + if (addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; + } + // 麦克风权限 + if (addPermission(permissions, Manifest.permission.RECORD_AUDIO)) { + permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; + } + if (permissions.size() > 0) { + requestPermissions(permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST); + } + } + } + + @TargetApi(23) + private boolean addPermission(ArrayList permissionsList, String permission) { + if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { // 如果应用没有获得对应权限,则添加到列表中,准备批量申请 + if (shouldShowRequestPermissionRationale(permission)) { + return true; + } else { + permissionsList.add(permission); + return false; + } + + } else { + return true; + } + } + + @TargetApi(23) + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + // TODO Auto-generated method stub + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + switch (requestCode) { + case SDK_PERMISSION_REQUEST: + Map perms = new HashMap(); + // Initial + perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED); + perms.put(Manifest.permission.RECORD_AUDIO, PackageManager.PERMISSION_GRANTED); + // Fill with results + for (int i = 0; i < permissions.length; i++) + perms.put(permissions[i], grantResults[i]); + // Check for ACCESS_FINE_LOCATION + if (perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + // Permission Denied + CAN_WRITE_EXTERNAL_STORAGE = false; + Toast.makeText(this, "禁用图片权限将导致发送图片功能无法使用!", Toast.LENGTH_SHORT) + .show(); + } + if (perms.get(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { + CAN_RECORD_AUDIO = false; + Toast.makeText(this, "禁用录制音频权限将导致语音功能无法使用!", Toast.LENGTH_SHORT) + .show(); + } + break; + default: + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + } + + /** + * 常用语列表初始化 + */ + @SuppressLint({"NewApi", "InflateParams"}) + private void initpop() { + mess_lv = (ListView) findViewById(R.id.mess_lv); + adapter = new DataAdapter(this, item); + mess_lv.setAdapter(adapter); + } + + private void downLoad() { + // if (!isDown) { + if (nowPage < pageSize) { + new Thread(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + nowPage++; + getDeviceVoiceChatList(nowPage, deviceSimpleEntity.getData().get(showPosition).getZiId()); + } + }).start(); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + tbbv.setVisibility(View.GONE); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + switch (requestCode) { + case ChatBottomView.FROM_CAMERA: + FileInputStream is = null; + try { + is = new FileInputStream(camPicPath); + File camFile = new File(camPicPath); // 图片文件路径 + if (camFile.exists()) { + int size = ImageCheckoutUtil + .getImageSize(ImageCheckoutUtil + .getLoacalBitmap(camPicPath)); + if (size > IMAGE_SIZE) { + showDialog(camPicPath); + } else { + sendImage(camPicPath); + } + } else { + showToast("该文件不存在!"); + } + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + // 关闭流 + try { + is.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + break; + case ChatBottomView.FROM_GALLERY: + Uri uri = data.getData(); + String path = FileSaveUtil.getPath(getApplicationContext(), uri); + mCurrentPhotoFile = new File(path); // 图片文件路径 + if (mCurrentPhotoFile.exists()) { + int size = ImageCheckoutUtil.getImageSize(ImageCheckoutUtil.getLoacalBitmap(path)); + if (size > IMAGE_SIZE) { + showDialog(path); + } else { + sendImage(path); + } + } else { + showToast("该文件不存在!"); + } + + break; + } + } else if (resultCode == RESULT_CANCELED) { + // Toast.makeText(this, "操作取消", Toast.LENGTH_SHORT).show(); + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { + finish(); + return true; + } + return super.onKeyDown(keyCode, event); + } + + /** + * 界面复位 + */ + protected void reset() { + emoji_group.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + mess_lv.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + } + + public void showToast(String text) { + if (mToast == null) { + mToast = Toast.makeText(this, text, Toast.LENGTH_SHORT); + } else { + mToast.setText(text); + mToast.setDuration(Toast.LENGTH_SHORT); + } + mToast.show(); + } + + public void cancelToast() { + if (mToast != null) { + mToast.cancel(); + } + } + + /** + * 获取表情的gridview的子view + * + * @param i + * @return + */ + private View getGridChildView(int i) { + View view = View.inflate(this, R.layout.layout_expression_gridview, null); + ExpandGridView gv = (ExpandGridView) view.findViewById(R.id.gridview); + List list = new ArrayList(); + if (i == 1) { + List list1 = reslist.subList(0, 20); + list.addAll(list1); + } else if (i == 2) { + list.addAll(reslist.subList(20, reslist.size())); + } + list.add("delete_expression"); + final ExpressionAdapter expressionAdapter = new ExpressionAdapter(this, + 1, list); + gv.setAdapter(expressionAdapter); + gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + String filename = expressionAdapter.getItem(position); + try { + // 文字输入框可见时,才可输入表情 + // 按住说话可见,不让输入表情 + if (filename != "delete_expression") { // 不是删除键,显示表情 + // 这里用的反射,所以混淆的时候不要混淆SmileUtils这个类 + @SuppressWarnings("rawtypes") + Class clz = Class + .forName("com.maxi.chatdemo.utils.SmileUtils"); + Field field = clz.getField(filename); + String oriContent = mEditTextContent.getText() + .toString(); + int index = Math.max( + mEditTextContent.getSelectionStart(), 0); + StringBuilder sBuilder = new StringBuilder(oriContent); + Spannable insertEmotion = SmileUtils.getSmiledText( + BaseChatActivity.this, + (String) field.get(null)); + sBuilder.insert(index, insertEmotion); + mEditTextContent.setText(sBuilder.toString()); + mEditTextContent.setSelection(index + + insertEmotion.length()); + } else { // 删除文字或者表情 + if (!TextUtils.isEmpty(mEditTextContent.getText())) { + + int selectionStart = mEditTextContent + .getSelectionStart();// 获取光标的位置 + if (selectionStart > 0) { + String body = mEditTextContent.getText() + .toString(); + String tempStr = body.substring(0, + selectionStart); + int i = tempStr.lastIndexOf("[");// 获取最后一个表情的位置 + if (i != -1) { + CharSequence cs = tempStr.substring(i, + selectionStart); + if (SmileUtils.containsKey(cs.toString())) + mEditTextContent.getEditableText() + .delete(i, selectionStart); + else + mEditTextContent.getEditableText() + .delete(selectionStart - 1, + selectionStart); + } else { + mEditTextContent.getEditableText().delete( + selectionStart - 1, selectionStart); + } + } + } + + } + } catch (Exception e) { + } + + } + }); + return view; + } + + public List getExpressionRes(int getSum) { + List reslist = new ArrayList(); + for (int x = 1; x <= getSum; x++) { + String filename = "f" + x; + reslist.add(filename); + } + return reslist; + + } + + private void showDialog(final String path) { + new Thread(new Runnable() { + + @Override + public void run() { + // // TODO Auto-generated method stub + try { + String GalPicPath = getSavePicPath(); + Bitmap bitmap = PictureUtil.compressSizeImage(path); + boolean isSave = FileSaveUtil.saveBitmap( + PictureUtil.reviewPicRotate(bitmap, GalPicPath), + GalPicPath); + File file = new File(GalPicPath); + if (file.exists() && isSave) { + sendImage(GalPicPath); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + + private String getSavePicPath() { + final String dir = FileSaveUtil.SD_CARD_PATH + "image_data/"; + try { + FileSaveUtil.createSDDirectory(dir); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + String fileName = String.valueOf(System.currentTimeMillis() + ".png"); + return dir + fileName; + } + + public ChatMessageBean getTbub(String username, int type, + String Content, String imageIconUrl, String imageUrl, + String imageLocal, String userVoicePath, String userVoiceUrl, + Float userVoiceTime, @ChatConst.SendState int sendState) { + ChatMessageBean tbub = new ChatMessageBean(); + tbub.setUserName(username); + String time = returnTime(); + tbub.setTime(time); + tbub.setType(type); + tbub.setUserContent(Content); + tbub.setImageIconUrl(imageIconUrl); + tbub.setImageUrl(imageUrl); + tbub.setUserVoicePath(userVoicePath); + tbub.setUserVoiceUrl(userVoiceUrl); + tbub.setUserVoiceTime(userVoiceTime); + tbub.setSendState(sendState); + tbub.setImageLocal(imageLocal); + mChatDbManager.insert(tbub); + + return tbub; + } + + private void getUserDevices4SimpleInfo() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestPostByAsynew(NetWorkUrl.GET_USERDEVICES4_SIMPLEINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getUserDevices4", "SolidVersionActivity onSuccess()" + respone); + DeviceSimpleEntity obj = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void getDeviceVoiceChatList(int pageNo, String ziId) { + /* HashMap map = new HashMap<>(); + map.put("pageNo", pageNo + "");//控制类型,1:语音控制,2:app控制 + map.put("macId", ziId); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynew(NetWorkUrl.GET_DEVICEVOICE_CHATLIST, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("getDeviceVoiceChatList", "onSuccess: " + respone); + VoiceChatEntity obj = JSON.parseObject(respone, VoiceChatEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_DEVICEVOICE_CHATLIST_SUCCESS: + // TODO: 2018/8/31 设置数据 + VoiceChatEntity voiceChatEntity = (VoiceChatEntity) msg.obj; + /*pageSize = voiceChatEntity.getObj().getPageSize(); + if (pagelist != null) { + pagelist.clear(); + } + for (int i = voiceChatEntity.getObj().getList().size() - 1; i >= 0; i--) { + ChatMessageBean toMessageBean = new ChatMessageBean(); + toMessageBean.setType(ChatListViewAdapter.TO_USER_MSG); + toMessageBean.setTime(voiceChatEntity.getObj().getList().get(i).getCreateDate()); + toMessageBean.setUserContent(voiceChatEntity.getObj().getList().get(i).getControlTitle()); + toMessageBean.setExceptionType(voiceChatEntity.getObj().getList().get(i).getExceptionType()); + + ChatMessageBean fromMessageBean = new ChatMessageBean(); + fromMessageBean.setType(ChatListViewAdapter.FROM_USER_MSG); + fromMessageBean.setTime(voiceChatEntity.getObj().getList().get(i).getCreateDate()); + fromMessageBean.setUserContent(voiceChatEntity.getObj().getList().get(i).getReply()); + fromMessageBean.setExceptionType(voiceChatEntity.getObj().getList().get(i).getExceptionType()); + fromMessageBean.setUserName(voiceChatEntity.getObj().getList().get(i).getZiName()); + pagelist.add(toMessageBean); + pagelist.add(fromMessageBean); + }*/ + loadRecords(pagelist); + break; + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + deviceSimpleEntity = (DeviceSimpleEntity) msg.obj; + if (null != deviceSimpleEntity.getData()) { + mTitleView.setHeadFuntionTxt(deviceSimpleEntity.getData().get(0).getZiName() + ">"); + getDeviceVoiceChatList(nowPage, deviceSimpleEntity.getData().get(0).getZiId()); + deviceNumList = new ArrayList<>(); + deviceNumList.clear(); + for (int i = 0; i < deviceSimpleEntity.getData().size(); i++) { + deviceNumList.add(deviceSimpleEntity.getData().get(i).getZiName()); + } + } + break; + } + } + + /*private void initListItem(final List list, final int flag, final String selectName) { + //生成Listener和清空 + setPopupWindowListener(); + mWindow = null; + //显示popupwindow + mWindow = new RankingPopupWindow(this, list, selectName, listener, mTitleView, flag); + }*/ + + private void setPopupWindowListener() { + listener = null; + listener = new RankingPopupWindow.Listener() { + @Override + public void onPopupWindowDismissListener() { + //消失时的操作 + } + + @Override + public void onItemClickListener(int position) { + //点击Item时的操作 + if (showPosition != position) { + showPosition = position; + mTitleView.setHeadFuntionTxt(deviceSimpleEntity.getData().get(position).getZiName() + ">"); + //查询第一页 + nowPage = 1; + getDeviceVoiceChatList(nowPage, deviceSimpleEntity.getData().get(position).getZiId()); + } + } + }; + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/BaseChatFragment.java b/app/src/main/java/com/yonsz/z1/chat/BaseChatFragment.java new file mode 100644 index 0000000..01166d6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/BaseChatFragment.java @@ -0,0 +1,1254 @@ +package com.yonsz.z1.chat; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.net.Uri; +import android.net.wifi.WifiManager; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.provider.MediaStore; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.support.v4.view.ViewPager; +import android.text.Spannable; +import android.text.TextUtils; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.AsxAddDeviceListActivity; +import com.yonsz.z1.chat.adapter.ChatListViewAdapter; +import com.yonsz.z1.chat.adapter.DataAdapter; +import com.yonsz.z1.chat.adapter.ExpressionAdapter; +import com.yonsz.z1.chat.adapter.ExpressionPagerAdapter; +import com.yonsz.z1.chat.common.ChatConst; +import com.yonsz.z1.chat.db.ChatDbManager; +import com.yonsz.z1.chat.db.ChatMessageBean; +import com.yonsz.z1.chat.utils.FileSaveUtil; +import com.yonsz.z1.chat.utils.ImageCheckoutUtil; +import com.yonsz.z1.chat.utils.KeyBoardUtils; +import com.yonsz.z1.chat.utils.PictureUtil; +import com.yonsz.z1.chat.utils.ScreenUtil; +import com.yonsz.z1.chat.utils.SmileUtils; +import com.yonsz.z1.chat.widget.AudioRecordButton; +import com.yonsz.z1.chat.widget.ChatBottomView; +import com.yonsz.z1.chat.widget.ExpandGridView; +import com.yonsz.z1.chat.widget.HeadIconSelectorView; +import com.yonsz.z1.chat.widget.MediaManager; +import com.yonsz.z1.chat.widget.pulltorefresh.PullToRefreshLayout; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.database.entity.entity4.PhoneChatInfoEntity; +import com.yonsz.z1.database.entity.entity4.VoiceChatEntity; +import com.yonsz.z1.device.deviceadd.ConnectWifiActivity; +import com.yonsz.z1.device.deviceadd.NoWifiConnectActicity; +import com.yonsz.z1.homemanage.HomeManageActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.DateUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.listpopupwindow.RankingPopupWindow; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.lang.ref.WeakReference; +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import de.greenrobot.event.EventBus; + +import static android.app.Activity.RESULT_CANCELED; +import static android.app.Activity.RESULT_OK; +import static android.content.Context.WIFI_SERVICE; +import static com.yonsz.z1.net.Constans.EXECUTE_PHONE_FAIL; +import static com.yonsz.z1.net.Constans.GET_DEVICEVOICE_CHATLIST_FAIL; +import static com.yonsz.z1.net.Constans.GET_DEVICEVOICE_CHATLIST_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumList; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.Constans.isUseDefFlag; +import static com.yonsz.z1.net.NetWorkUrl.PHONE_MESSAGE_LIST; +import static com.yonsz.z1.net.NetWorkUrl.PHONE_USER_INFO; +import static com.yonsz.z1.version5.MainFragment5.setDefaultHouse; + +/** + * Created by Administrator on 2018/8/28. + */ + +public abstract class BaseChatFragment extends android.support.v4.app.Fragment implements View.OnClickListener { + public static final int SEND_OK = 0x1110; + public static final int REFRESH = 0x0011; + public static final int RECERIVE_OK = 0x1111; + public static final int PULL_TO_REFRESH_DOWN = 0x0111; + private static final int SDK_PERMISSION_REQUEST = 127; + private static final int IMAGE_SIZE = 100 * 1024;// 300kb + public static String deviceNumListRightNow = ""; + public PullToRefreshLayout pullList; + public boolean isDown = false; + public int position; //加载滚动刷新位置 + public int bottomStatusHeight = 0; + public int listSlideHeight = 0;//滑动距离 + public TextView send_emoji_icon; + public ImageView emoji; + public ImageView mess_iv; + public ImageView voiceIv; + public ListView mess_lv; + public ChatBottomView tbbv; + public AudioRecordButton voiceBtn; + public EditText mEditTextContent; + public ViewPager expressionViewpager; + public LinearLayout emoji_group; + public View activityRootView; + public String userName = "test";//聊天对象昵称 + public String item[] = {"你好!", "我正忙着呢,等等", "有啥事吗?", "有时间聊聊吗", "再见!"}; + public List tblist = new ArrayList(); + public List pagelist = new ArrayList(); + public ChatDbManager mChatDbManager; + public int page = 0; + public int number = 10; + public ArrayList imageList = new ArrayList();//adapter图片数据 + public HashMap imagePosition = new HashMap();//图片下标位置 + public int nowPage = 1; + RankingPopupWindow mWindow; + RankingPopupWindow.Listener listener; + private View fragView; + private UIHandle mHandler; + private int pageSize = 1; + private TitleView mTitleView; + private boolean CAN_WRITE_EXTERNAL_STORAGE = true; + private boolean CAN_RECORD_AUDIO = true; + private DataAdapter adapter; + private File mCurrentPhotoFile; + private Toast mToast; + private String permissionInfo; + private String camPicPath; + private List reslist; + private List deviceNumListRight; + private DeviceSimpleEntity deviceSimpleEntity; + private int showPosition = 0; + private RelativeLayout noDeviceRl; + private ImageView addDeviceIv; + private View.OnKeyListener onKeyListener = new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_ENTER + && event.getAction() == KeyEvent.ACTION_DOWN) { + // sendMessage(""); + return true; + } + return false; + } + }; + + @SuppressLint("SimpleDateFormat") + public static String returnTime() { + SimpleDateFormat sDateFormat = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + String date = sDateFormat.format(new java.util.Date()); + return date; + } + + public void onEventMainThread(AppControlEvent event) { + String msg = event.getMsg(); + NettyEntity nettyEntity = JSON.parseObject(msg.toString(), NettyEntity.class); + String macId = nettyEntity.getMacId(); + if (showPosition == 0 && nettyEntity.getCmdType().equals("voiceControll")) { + boolean isThisHouse = false; + for (int i = 0; i < deviceSimpleEntity.getData().size(); i++) { + if (deviceSimpleEntity.getData().get(i).getZiId().equals(macId)) { + isThisHouse = true; + } + } + if (isThisHouse) { + sendMessage(nettyEntity.getVoice(), nettyEntity.getExceptionType()); + receriveMsgText(nettyEntity.getReply(), nettyEntity.getDeviceVersion(), nettyEntity.getExceptionType(), nettyEntity.getMacId()); + } + } else if (null != deviceSimpleEntity.getData() && macId.equals(deviceSimpleEntity.getData().get(showPosition).getZiId()) && nettyEntity.getCmdType().equals("voiceControll")) { + if (null != nettyEntity.getExceptionType()) { + sendMessage(nettyEntity.getVoice(), nettyEntity.getExceptionType()); + receriveMsgText(nettyEntity.getReply(), nettyEntity.getDeviceVersion(), nettyEntity.getExceptionType(), nettyEntity.getMacId()); + } + } else if (nettyEntity.getCmdType().equals("chatMessage")) { + if (nettyEntity.getContext().getHouseId().equals(SharedpreferencesUtil.get(Constans.HOUSEID, ""))) { + if (null != nettyEntity.getExceptionType() && showPosition == 0) { + //这里根据新的数据结构显示对话 + switch (nettyEntity.getContext().getSenderType()) { + case 2: + sendMessage(nettyEntity.getContext().getContent(), nettyEntity.getExceptionType()); + break; + case 3: + receriveMsgText(nettyEntity.getContext().getContent(), nettyEntity.getDeviceVersion(), nettyEntity.getExceptionType(), nettyEntity.getContext().getZiId()); + break; + } + // receriveMsgText(nettyEntity.getContext().getContent(), "3", nettyEntity.getExceptionType(), ""); + } + } + } + } + + public void onEventMainThread(ChooseHomeEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("1") || msg.equals("2")) { + // mTitleView.setHomeNameTxt(MainFragment4.homeListEntity.getData().get(deviceNumListPosition).getName()); + /* if (homeListEntity.getData().get(deviceNumListPosition).getName().length() > 9) { + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName().substring(0, 6) + "…"); + } else { + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + }*/ + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + // isQueryHouses = true; + nowPage = 1; + getUserDevices4SimpleInfo(); + } + } + + /** + * 发送文本消息 + */ + protected abstract void sendMessage(String message, String exceptionType); + + protected abstract void receriveMsgText(String message, String deviceVersion, String exceptionType, String macId); + + /** + * 发送图片文件 + * + * @param filePath + */ + protected abstract void sendImage(String filePath); + + /** + * 发送语音消息 + * + * @param seconds + * @param filePath + */ + protected abstract void sendVoice(float seconds, String filePath); + + protected abstract void loadRecords(List pagelist); + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_chat, null); + findView(); + initpop(); + init(); + // after andrioid m,must request Permiision on runtime + getPersimmions(); + return fragView; + } + + @Override + public void onDestroy() { + MediaManager.pause(); + MediaManager.release(); + cancelToast(); + EventBus.getDefault().unregister(this); + super.onDestroy(); + } + + protected void findView() { + deviceNumListRight = new ArrayList<>(); + noDeviceRl = (RelativeLayout) fragView.findViewById(R.id.rl_no_device); + addDeviceIv = (ImageView) fragView.findViewById(R.id.iv_no_device_add); + pullList = (PullToRefreshLayout) fragView.findViewById(R.id.content_lv); + activityRootView = fragView.findViewById(R.id.layout_tongbao_rl); + mEditTextContent = (EditText) fragView.findViewById(R.id.mess_et); + mess_iv = (ImageView) fragView.findViewById(R.id.mess_iv); + emoji = (ImageView) fragView.findViewById(R.id.emoji); + voiceIv = (ImageView) fragView.findViewById(R.id.voice_iv); + expressionViewpager = (ViewPager) fragView.findViewById(R.id.vPager); + voiceBtn = (AudioRecordButton) fragView.findViewById(R.id.voice_btn); + emoji_group = (LinearLayout) fragView.findViewById(R.id.emoji_group); + send_emoji_icon = (TextView) fragView.findViewById(R.id.send_emoji_icon); + tbbv = (ChatBottomView) fragView.findViewById(R.id.other_lv); + // initActionBar(); + mTitleView = (TitleView) fragView.findViewById(R.id.title_chat); + mTitleView.showBackGroud3(); + mTitleView.showBackGroud4(); + mTitleView.setHead("交互记录"); +// mTitleView.setHeadHomeVisible(R.drawable.icon_home_house1); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + // TODO: 2018/9/14 +// initListItem(deviceNumList, 0, mTitleView.getHomeNameTxt()); + getActivity().finish(); + } + + @Override + public void onFunction() { + if (TextUtils.isEmpty(mTitleView.getHeadFuntionTxt())) { + return; + } + String headFuntionTxt = mTitleView.getHeadFuntionTxt(); + initListItem(deviceNumListRight, 1, headFuntionTxt.substring(0, headFuntionTxt.length() - 1)); + } + + @Override + public void onFunctionText() { + + } + }); + } + + protected void init() { + addDeviceIv.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (AppIdUtil.isBaseZhiKong()) { + Intent intent = new Intent(getActivity(), AsxAddDeviceListActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + if (null != homeListEntity && !TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + intent.putExtra("floorList", homeListEntity.getData().get(deviceNumListPosition).getFloorList()); + } else { + intent.putExtra("floorList", ""); + } + getActivity().startActivity(intent); + } else { + WifiManager wifimanager; + wifimanager = (WifiManager) getActivity().getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(getActivity(), ConnectWifiActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "BaseChatFragment"); + startActivity(intent); + } else { + Intent intent = new Intent(getActivity(), NoWifiConnectActicity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "BaseChatFragment"); + startActivity(intent); + } + } + } + }); + mEditTextContent.setOnKeyListener(onKeyListener); + mChatDbManager = new ChatDbManager(); + PullToRefreshLayout.pulltorefreshNotifier pullNotifier = new PullToRefreshLayout.pulltorefreshNotifier() { + @Override + public void onPull() { + // TODO Auto-generated method stub + downLoad(); + } + }; + pullList.setpulltorefreshNotifier(pullNotifier); + voiceIv.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + if (voiceBtn.getVisibility() == View.GONE) { + emoji.setBackgroundResource(R.mipmap.emoji); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + mEditTextContent.setVisibility(View.GONE); + emoji_group.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + mess_lv.setVisibility(View.GONE); + voiceBtn.setVisibility(View.VISIBLE); + KeyBoardUtils.hideKeyBoard(getContext(), + mEditTextContent); + voiceIv.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + } else { + mEditTextContent.setVisibility(View.VISIBLE); + voiceBtn.setVisibility(View.GONE); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + KeyBoardUtils.showKeyBoard(getContext(), mEditTextContent); + } + } + + }); + mess_iv.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // TODO Auto-generated method stub + emoji_group.setVisibility(View.GONE); + if (tbbv.getVisibility() == View.GONE + && mess_lv.getVisibility() == View.GONE) { + mEditTextContent.setVisibility(View.VISIBLE); + mess_iv.setFocusable(true); + voiceBtn.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + tbbv.setVisibility(View.VISIBLE); + KeyBoardUtils.hideKeyBoard(getContext(), + mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + } else { + tbbv.setVisibility(View.GONE); + KeyBoardUtils.showKeyBoard(getContext(), mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + if (mess_lv.getVisibility() != View.GONE) { + mess_lv.setVisibility(View.GONE); + KeyBoardUtils.showKeyBoard(getContext(), mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + } + } + } + }); + send_emoji_icon.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + // sendMessage(""); + } + + }); + tbbv.setOnHeadIconClickListener(new HeadIconSelectorView.OnHeadIconClickListener() { + + @SuppressLint("InlinedApi") + @Override + public void onClick(int from) { + switch (from) { + case ChatBottomView.FROM_CAMERA: + if (!CAN_WRITE_EXTERNAL_STORAGE) { + Toast.makeText(getContext(), "权限未开通\n请到设置中开通相册权限", Toast.LENGTH_SHORT).show(); + } else { + final String state = Environment.getExternalStorageState(); + if (Environment.MEDIA_MOUNTED.equals(state)) { + camPicPath = getSavePicPath(); + Intent openCameraIntent = new Intent( + MediaStore.ACTION_IMAGE_CAPTURE); + Uri uri = Uri.fromFile(new File(camPicPath)); + openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); + startActivityForResult(openCameraIntent, + ChatBottomView.FROM_CAMERA); + } else { + showToast("请检查内存卡"); + } + } + break; + case ChatBottomView.FROM_GALLERY: + if (!CAN_WRITE_EXTERNAL_STORAGE) { + Toast.makeText(getContext(), "权限未开通\n请到设置中开通相册权限", Toast.LENGTH_SHORT).show(); + } else { + String status = Environment.getExternalStorageState(); + if (status.equals(Environment.MEDIA_MOUNTED)) {// 判断是否有SD卡 + Intent intent = new Intent(); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + intent.setAction(Intent.ACTION_GET_CONTENT); + } else { + intent.setAction(Intent.ACTION_OPEN_DOCUMENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.putExtra("crop", "true"); + intent.putExtra("scale", "true"); + intent.putExtra("scaleUpIfNeeded", true); + } + intent.setType("image/*"); + startActivityForResult(intent, + ChatBottomView.FROM_GALLERY); + } else { + showToast("没有SD卡"); + } + } + break; + + case ChatBottomView.FROM_PHRASE: + if (mess_lv.getVisibility() == View.GONE) { + tbbv.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + mess_lv.setVisibility(View.VISIBLE); + KeyBoardUtils.hideKeyBoard(getContext(), + mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + } + } + } + + }); + emoji.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // TODO Auto-generated method stub + mess_lv.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + if (emoji_group.getVisibility() == View.GONE) { + mEditTextContent.setVisibility(View.VISIBLE); + voiceBtn.setVisibility(View.GONE); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + emoji_group.setVisibility(View.VISIBLE); + emoji.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + KeyBoardUtils.hideKeyBoard(getContext(), + mEditTextContent); + } else { + emoji_group.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + KeyBoardUtils.showKeyBoard(getContext(), mEditTextContent); + } + } + }); + // 表情list + reslist = getExpressionRes(40); + // 初始化表情viewpager + List views = new ArrayList(); + View gv1 = getGridChildView(1); + View gv2 = getGridChildView(2); + views.add(gv1); + views.add(gv2); + expressionViewpager.setAdapter(new ExpressionPagerAdapter(views)); + + mEditTextContent.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + emoji_group.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + mess_lv.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + } + + }); + + mess_lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + // TODO Auto-generated method stub + mEditTextContent.setText(item[arg2]); + // sendMessage(""); + } + + }); + // controlKeyboardLayout(activityRootView, pullList); + bottomStatusHeight = ScreenUtil.getNavigationBarHeight(getContext()); + //加载本地聊天记录 + page = (int) mChatDbManager.getPages(number); + + nowPage = 1; + getUserDevices4SimpleInfo(); + } + + + @TargetApi(23) + protected void getPersimmions() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + ArrayList permissions = new ArrayList(); + // 读写权限 + if (addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; + } + // 麦克风权限 + if (addPermission(permissions, Manifest.permission.RECORD_AUDIO)) { + permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; + } + if (permissions.size() > 0) { + requestPermissions(permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST); + } + } + } + + @TargetApi(23) + private boolean addPermission(ArrayList permissionsList, String permission) { + /*if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { // 如果应用没有获得对应权限,则添加到列表中,准备批量申请 + if (shouldShowRequestPermissionRationale(permission)) { + return true; + } else { + permissionsList.add(permission); + return false; + } + + } else { + return true; + }*/ + return false; + } + + @TargetApi(23) + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + // TODO Auto-generated method stub + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + switch (requestCode) { + case SDK_PERMISSION_REQUEST: + Map perms = new HashMap(); + // Initial + perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED); + perms.put(Manifest.permission.RECORD_AUDIO, PackageManager.PERMISSION_GRANTED); + // Fill with results + for (int i = 0; i < permissions.length; i++) + perms.put(permissions[i], grantResults[i]); + // Check for ACCESS_FINE_LOCATION + if (perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + // Permission Denied + CAN_WRITE_EXTERNAL_STORAGE = false; + Toast.makeText(getContext(), "禁用图片权限将导致发送图片功能无法使用!", Toast.LENGTH_SHORT) + .show(); + } + if (perms.get(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { + CAN_RECORD_AUDIO = false; + Toast.makeText(getContext(), "禁用录制音频权限将导致语音功能无法使用!", Toast.LENGTH_SHORT) + .show(); + } + break; + default: + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + } + + /** + * 常用语列表初始化 + */ + @SuppressLint({"NewApi", "InflateParams"}) + private void initpop() { + mess_lv = (ListView) fragView.findViewById(R.id.mess_lv); + adapter = new DataAdapter(getContext(), item); + mess_lv.setAdapter(adapter); + } + + private void downLoad() { + // if (!isDown) { + if (nowPage < pageSize) { + new Thread(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + nowPage++; + // getDeviceVoiceChatList(nowPage, deviceSimpleEntity.getData().get(showPosition).getZiId()); + getList(nowPage, showPosition, "1"); + } + }).start(); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + tbbv.setVisibility(View.GONE); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + switch (requestCode) { + case ChatBottomView.FROM_CAMERA: + FileInputStream is = null; + try { + is = new FileInputStream(camPicPath); + File camFile = new File(camPicPath); // 图片文件路径 + if (camFile.exists()) { + int size = ImageCheckoutUtil + .getImageSize(ImageCheckoutUtil + .getLoacalBitmap(camPicPath)); + if (size > IMAGE_SIZE) { + showDialog(camPicPath); + } else { + sendImage(camPicPath); + } + } else { + showToast("该文件不存在!"); + } + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + // 关闭流 + try { + is.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + break; + case ChatBottomView.FROM_GALLERY: + Uri uri = data.getData(); + String path = FileSaveUtil.getPath(getContext(), uri); + mCurrentPhotoFile = new File(path); // 图片文件路径 + if (mCurrentPhotoFile.exists()) { + int size = ImageCheckoutUtil.getImageSize(ImageCheckoutUtil.getLoacalBitmap(path)); + if (size > IMAGE_SIZE) { + showDialog(path); + } else { + sendImage(path); + } + } else { + showToast("该文件不存在!"); + } + + break; + } + } else if (resultCode == RESULT_CANCELED) { + // Toast.makeText(this, "操作取消", Toast.LENGTH_SHORT).show(); + } + } + + /** + * 界面复位 + */ + protected void reset() { + emoji_group.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + mess_lv.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + } + + public void showToast(String text) { + if (mToast == null) { + mToast = Toast.makeText(getContext(), text, Toast.LENGTH_SHORT); + } else { + mToast.setText(text); + mToast.setDuration(Toast.LENGTH_SHORT); + } + mToast.show(); + } + + public void cancelToast() { + if (mToast != null) { + mToast.cancel(); + } + } + + /** + * 获取表情的gridview的子view + * + * @param i + * @return + */ + private View getGridChildView(int i) { + View view = View.inflate(getContext(), R.layout.layout_expression_gridview, null); + ExpandGridView gv = (ExpandGridView) view.findViewById(R.id.gridview); + List list = new ArrayList(); + if (i == 1) { + List list1 = reslist.subList(0, 20); + list.addAll(list1); + } else if (i == 2) { + list.addAll(reslist.subList(20, reslist.size())); + } + list.add("delete_expression"); + final ExpressionAdapter expressionAdapter = new ExpressionAdapter(getActivity(), + 1, list); + gv.setAdapter(expressionAdapter); + gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + String filename = expressionAdapter.getItem(position); + try { + // 文字输入框可见时,才可输入表情 + // 按住说话可见,不让输入表情 + if (filename != "delete_expression") { // 不是删除键,显示表情 + // 这里用的反射,所以混淆的时候不要混淆SmileUtils这个类 + @SuppressWarnings("rawtypes") + Class clz = Class + .forName("com.maxi.chatdemo.utils.SmileUtils"); + Field field = clz.getField(filename); + String oriContent = mEditTextContent.getText() + .toString(); + int index = Math.max( + mEditTextContent.getSelectionStart(), 0); + StringBuilder sBuilder = new StringBuilder(oriContent); + Spannable insertEmotion = SmileUtils.getSmiledText( + getContext(), + (String) field.get(null)); + sBuilder.insert(index, insertEmotion); + mEditTextContent.setText(sBuilder.toString()); + mEditTextContent.setSelection(index + + insertEmotion.length()); + } else { // 删除文字或者表情 + if (!TextUtils.isEmpty(mEditTextContent.getText())) { + + int selectionStart = mEditTextContent + .getSelectionStart();// 获取光标的位置 + if (selectionStart > 0) { + String body = mEditTextContent.getText() + .toString(); + String tempStr = body.substring(0, + selectionStart); + int i = tempStr.lastIndexOf("[");// 获取最后一个表情的位置 + if (i != -1) { + CharSequence cs = tempStr.substring(i, + selectionStart); + if (SmileUtils.containsKey(cs.toString())) + mEditTextContent.getEditableText() + .delete(i, selectionStart); + else + mEditTextContent.getEditableText() + .delete(selectionStart - 1, + selectionStart); + } else { + mEditTextContent.getEditableText().delete( + selectionStart - 1, selectionStart); + } + } + } + + } + } catch (Exception e) { + } + + } + }); + return view; + } + + public List getExpressionRes(int getSum) { + List reslist = new ArrayList(); + for (int x = 1; x <= getSum; x++) { + String filename = "f" + x; + reslist.add(filename); + } + return reslist; + + } + + private void showDialog(final String path) { + new Thread(new Runnable() { + + @Override + public void run() { + // // TODO Auto-generated method stub + try { + String GalPicPath = getSavePicPath(); + Bitmap bitmap = PictureUtil.compressSizeImage(path); + boolean isSave = FileSaveUtil.saveBitmap( + PictureUtil.reviewPicRotate(bitmap, GalPicPath), + GalPicPath); + File file = new File(GalPicPath); + if (file.exists() && isSave) { + sendImage(GalPicPath); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + + private String getSavePicPath() { + final String dir = FileSaveUtil.SD_CARD_PATH + "image_data/"; + try { + FileSaveUtil.createSDDirectory(dir); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + String fileName = String.valueOf(System.currentTimeMillis() + ".png"); + return dir + fileName; + } + + public ChatMessageBean getTbub(String username, int type, + String Content, String imageIconUrl, String imageUrl, + String imageLocal, String userVoicePath, String userVoiceUrl, + Float userVoiceTime, @ChatConst.SendState int sendState, String exceptionType) { + ChatMessageBean tbub = new ChatMessageBean(); + tbub.setUserName(username); + String time = returnTime(); + tbub.setTime(time); + tbub.setType(type); + tbub.setUserContent(Content); + tbub.setImageIconUrl(imageIconUrl); + tbub.setImageUrl(imageUrl); + tbub.setUserVoicePath(userVoicePath); + tbub.setUserVoiceUrl(userVoiceUrl); + tbub.setUserVoiceTime(userVoiceTime); + tbub.setSendState(sendState); + tbub.setImageLocal(imageLocal); + if (!TextUtils.isEmpty(exceptionType)) { + tbub.setExceptionType(Integer.parseInt(exceptionType)); + } + mChatDbManager.insert(tbub); + return tbub; + } + + private void getUserDevices4SimpleInfo() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + netWorkUtil.requestPostByAsynew(NetWorkUrl.GET_USERDEVICES4_SIMPLEINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getUserDevices4", "SolidVersionActivity onSuccess()" + respone); + DeviceSimpleEntity obj = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void getList(int page, int position, String scopeType) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (null != SharedpreferencesUtil.get(Constans.HOUSEID, "")) { + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + } else { + return; + } + if (position != 0 && showPosition > 0) { + map.put("ziId", deviceSimpleEntity.getData().get(position).getZiId()); + map.put("scopeType", "2"); + } else { + map.put("ziId", ""); + map.put("scopeType", ""); + } + map.put("page", page + ""); + map.put("limit", "20"); + netWorkUtil.requestGetByAsy(PHONE_MESSAGE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getList", "onSuccess: " + respone); + VoiceChatEntity obj = JSON.parseObject(respone, VoiceChatEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_DEVICEVOICE_CHATLIST_SUCCESS: + // TODO: 2018/8/31 设置数据 + VoiceChatEntity voiceChatEntity = (VoiceChatEntity) msg.obj; + pageSize = voiceChatEntity.getData().getPages(); + if (pagelist != null) { + pagelist.clear(); + } + if (null != voiceChatEntity.getData().getRecords()) { + for (int i = voiceChatEntity.getData().getRecords().size() - 1; i >= 0; i--) { + VoiceChatEntity.DataBean.RecordsBean recordsBean = voiceChatEntity.getData().getRecords().get(i); + switch (recordsBean.getSenderType()) { + case 1://系统 + case 3://小艾 + case 4://机器人 + case 5://帮助 + ChatMessageBean fromMessageBean = new ChatMessageBean(); + fromMessageBean.setType(ChatListViewAdapter.FROM_USER_MSG); + String s = DateUtil.timeStamp2Date(String.valueOf(recordsBean.getCreateDate()), ""); + fromMessageBean.setTime(s); + fromMessageBean.setUserContent(recordsBean.getContent()); + fromMessageBean.setExceptionType(recordsBean.getMessageType()); + fromMessageBean.setSenderType(recordsBean.getSenderType()); + if (recordsBean.getSenderType() == 3) { + fromMessageBean.setUserId(recordsBean.getZiId()); + } else { + fromMessageBean.setUserId(recordsBean.getUserId()); + } + /*fromMessageBean.setUserName(voiceChatEntity.getObj().getList().get(i).getZiName()); + fromMessageBean.setDeviceVersion(voiceChatEntity.getObj().getList().get(i).getDeviceVersion()); + fromMessageBean.setAddressId(voiceChatEntity.getObj().getList().get(i).getAddressId());*/ + pagelist.add(fromMessageBean); + break; + case 2://用户 + ChatMessageBean toMessageBean = new ChatMessageBean(); + toMessageBean.setType(ChatListViewAdapter.TO_USER_MSG); + String s1 = DateUtil.timeStamp2Date(String.valueOf(recordsBean.getCreateDate()), ""); + toMessageBean.setTime(String.valueOf(s1)); + toMessageBean.setUserContent(recordsBean.getContent()); + toMessageBean.setExceptionType(recordsBean.getMessageType()); + toMessageBean.setSenderType(recordsBean.getSenderType()); + if (recordsBean.getSenderType() == 3) { + toMessageBean.setUserId(recordsBean.getZiId()); + } else { + toMessageBean.setUserId(recordsBean.getUserId()); + } + // toMessageBean.setAddressId(voiceChatEntity.getObj().getList().get(i).getAddressId()); + pagelist.add(toMessageBean); + break; + } + Calendar calendar = Calendar.getInstance(); + String hour = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)); + String s1 = SharedpreferencesUtil.get("lastHour", ""); + if (recordsBean.getSenderType() == 3) { + String s = SharedpreferencesUtil.get(recordsBean.getZiId() + "_" + recordsBean.getSenderType(), ""); + if (TextUtils.isEmpty(s) || TextUtils.isEmpty(s1) || !hour.equals(s1)) { + getPhoneChatInfo(recordsBean.getZiId(), recordsBean.getSenderType()); + } + } else { + if (!TextUtils.isEmpty(recordsBean.getUserId())) { + String s = SharedpreferencesUtil.get(recordsBean.getUserId() + "_" + recordsBean.getSenderType(), ""); + if (TextUtils.isEmpty(s) || TextUtils.isEmpty(s1) || !hour.equals(s1)) { + getPhoneChatInfo(recordsBean.getUserId(), recordsBean.getSenderType()); + } + } + } + } + } + if (nowPage == 1 && pagelist.size() == 0) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// HH:mm:ss + //获取当前时间 + Date date = new Date(System.currentTimeMillis()); + ChatMessageBean fromMessageBean = new ChatMessageBean(); + fromMessageBean.setTime(simpleDateFormat.format(date)); + fromMessageBean.setType(ChatListViewAdapter.FROM_USER_MSG); + fromMessageBean.setUserContent("您与设备还没有对话"); + fromMessageBean.setSenderType(1); + fromMessageBean.setExceptionType(0); + fromMessageBean.setUserName(""); + pagelist.add(fromMessageBean); + } + loadRecords(pagelist); + break; + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + deviceSimpleEntity = (DeviceSimpleEntity) msg.obj; + if (null != deviceSimpleEntity.getData() && deviceSimpleEntity.getData().size() > 0) { + pullList.setVisibility(View.VISIBLE); + noDeviceRl.setVisibility(View.GONE); + + DeviceSimpleEntity.DataBean dataBean = new DeviceSimpleEntity.DataBean(); + dataBean.setZiId(""); + dataBean.setAddressId(""); + dataBean.setZiName(""); + dataBean.setDeviceVersion(""); + deviceSimpleEntity.getData().add(0, dataBean); + + /* String deviceAddress = getDeviceAddress(deviceSimpleEntity.getData().get(0).getAddressId()); + mTitleView.setHeadFuntionTxtAndSise(deviceAddress + "的" + deviceSimpleEntity.getData().get(0).getZiName() + ">"); + deviceNumListRightNow = deviceAddress + "的" + deviceSimpleEntity.getData().get(0).getZiName();*/ + mTitleView.setHeadFuntionTxtAndSise("全部>"); + deviceNumListRightNow = "全部"; + // getDeviceVoiceChatList(nowPage, deviceSimpleEntity.getData().get(0).getZiId()); + getList(nowPage, 0, "1"); + deviceNumListRight.clear(); + deviceNumListRight.add("全部"); + for (int i = 1; i < deviceSimpleEntity.getData().size(); i++) { + String deviceAddress1 = AddressNameUtil.getAddressName(deviceSimpleEntity.getData().get(i).getAddressId()); + deviceNumListRight.add(deviceAddress1 + "的" + deviceSimpleEntity.getData().get(i).getZiName()); + } + } else { + pullList.setVisibility(View.GONE); + noDeviceRl.setVisibility(View.VISIBLE); + nowPage = 1; + mTitleView.setHeadFuntionTxtAndSise(""); + deviceNumListRight.clear(); + pagelist.clear(); + loadRecords(pagelist); + } + break; + case QUERY_HOUSES_SUCCESS: + homeListEntity = (HomeListEntity) msg.obj; + deviceNumList.clear(); + if (null != homeListEntity.getData()) { + if (deviceNumListPosition > homeListEntity.getData().size() - 1) { + deviceNumListPosition = 0; + } + deviceNumList.clear(); + for (int i = 0; i < homeListEntity.getData().size(); i++) { + if (homeListEntity.getData().get(i).getDefFlag() == 1) { + if (isUseDefFlag) { + deviceNumListPosition = i; + } + } + deviceNumList.add(homeListEntity.getData().get(i).getName()); + } +// deviceNumList.add(getString(R.string.home_manage)); + + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + } + EventBus.getDefault().post( + new ChooseHomeEvent("3")); + getUserDevices4SimpleInfo(); + break; + } + } + + private void initListItem(final List list, final int flag, final String selectName) { + //生成Listener和清空 + setPopupWindowListener(flag); + mWindow = null; + //显示popupwindow + mWindow = new RankingPopupWindow(getActivity(), list, selectName, listener, mTitleView, flag); + } + + private void setPopupWindowListener(final int flag) { + listener = null; + listener = new RankingPopupWindow.Listener() { + @Override + public void onPopupWindowDismissListener() { + //消失时的操作 + } + + @Override + public void onItemClickListener(int position) { + //点击Item时的操作 + if (flag == 1) { + if (showPosition != position) { + showPosition = position; + deviceNumListRightNow = deviceNumListRight.get(showPosition); + if (deviceNumListRightNow.length() > 8) { + mTitleView.setHeadFuntionTxtAndSise(deviceNumListRightNow.substring(0, 8) + ">"); + } else { + mTitleView.setHeadFuntionTxtAndSise(deviceNumListRightNow + ">"); + } + //查询第一页 + nowPage = 1; + // getDeviceVoiceChatList(nowPage, deviceSimpleEntity.getData().get(position).getZiId()); + getList(nowPage, showPosition, "1"); + } + } else { + if (position == deviceNumList.size() - 1) { + Intent intent = new Intent(getContext(), HomeManageActivity.class); + startActivity(intent); + } else { + isUseDefFlag = false; + deviceNumListPosition = position; + showPosition = 0; + /*if (deviceNumList.get(position).length() > 9) { + mTitleView.setHomeNameTxt(deviceNumList.get(position).substring(0, 6) + "…"); + } else { + mTitleView.setHomeNameTxt(deviceNumList.get(position)); + }*/ + mTitleView.setHomeNameTxt(deviceNumList.get(position)); + setDefaultHouse(); + queryHouses(); + } + } + } + }; + } + + private void getPhoneChatInfo(final String userId, final int senderType) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("id", userId); + map.put("senderType", senderType + ""); + netWorkUtil.requestGetByAsy(PHONE_USER_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getPhoneChatInfo", "onSuccess()" + respone); + PhoneChatInfoEntity obj = JSON.parseObject(respone, PhoneChatInfoEntity.class); + if (1 == obj.getFlag()) { + SharedpreferencesUtil.save(userId + "_" + senderType, respone); + Calendar calendar = Calendar.getInstance(); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + SharedpreferencesUtil.save("lastHour", String.valueOf(hour)); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void queryHouses() { + HashMap map = new HashMap<>(); + map.put("autoCreate", "0"); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.QUERY_HOUSES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryHouses2", "UpdatePwActivity onSuccess()" + respone); + HomeListEntity obj = JSON.parseObject(respone, HomeListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(BaseChatFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + BaseChatFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/ChatFragment.java b/app/src/main/java/com/yonsz/z1/chat/ChatFragment.java new file mode 100644 index 0000000..59f00ce --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/ChatFragment.java @@ -0,0 +1,483 @@ +package com.yonsz.z1.chat; + +import android.graphics.Rect; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewTreeObserver; + +import com.yonsz.z1.chat.adapter.ChatListViewAdapter; +import com.yonsz.z1.chat.adapter.ChatRecyclerAdapter; +import com.yonsz.z1.chat.animator.SlideInOutBottomItemAnimator; +import com.yonsz.z1.chat.common.ChatConst; +import com.yonsz.z1.chat.db.ChatMessageBean; +import com.yonsz.z1.chat.utils.KeyBoardUtils; +import com.yonsz.z1.chat.widget.AudioRecordButton; +import com.yonsz.z1.chat.widget.pulltorefresh.PullToRefreshRecyclerView; +import com.yonsz.z1.chat.widget.pulltorefresh.WrapContentLinearLayoutManager; +import com.yonsz.z1.chat.widget.pulltorefresh.base.PullToRefreshView; + +import java.lang.ref.WeakReference; +import java.util.List; + +public class ChatFragment extends MainChatFragment { + /** + * 接收文字 + */ + String content = ""; + /** + * 发送图片 + */ + int i = 0; + /** + * 接收图片 + */ + String filePath = ""; + /** + * 接收语音 + */ + float seconds = 0.0f; + String voiceFilePath = ""; + private PullToRefreshRecyclerView myList; + private ChatRecyclerAdapter tbAdapter; + private SendMessageHandler sendMessageHandler; + private WrapContentLinearLayoutManager wcLinearLayoutManger; + /** + * 为了模拟接收延迟 + */ + private Handler receriveHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case 0: + // receriveMsgText(content); + break; + case 1: + receriveImageText(filePath); + break; + case 2: + receriveVoiceText(seconds, voiceFilePath); + break; + default: + break; + } + } + }; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + protected void findView() { + super.findView(); + pullList.setSlideView(new PullToRefreshView(getContext()).getSlideView(PullToRefreshView.RECYCLERVIEW)); + myList = (PullToRefreshRecyclerView) pullList.returnMylist(); + } + + + @Override + public void onDestroy() { + tblist.clear(); + tbAdapter.notifyDataSetChanged(); + myList.setAdapter(null); + sendMessageHandler.removeCallbacksAndMessages(null); + super.onDestroy(); + } + + @Override + protected void init() { + // setTitle("RecyclerView"); + tbAdapter = new ChatRecyclerAdapter(getContext(), tblist); + wcLinearLayoutManger = new WrapContentLinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false); + myList.setLayoutManager(wcLinearLayoutManger); + myList.setItemAnimator(new SlideInOutBottomItemAnimator(myList)); + myList.setAdapter(tbAdapter); + sendMessageHandler = new SendMessageHandler(this); + tbAdapter.isPicRefresh = true; + tbAdapter.notifyDataSetChanged(); + tbAdapter.setSendErrorListener(new ChatRecyclerAdapter.SendErrorListener() { + + @Override + public void onClick(int position) { + // TODO Auto-generated method stub + ChatMessageBean tbub = tblist.get(position); + if (tbub.getType() == ChatRecyclerAdapter.TO_USER_VOICE) { + sendVoice(tbub.getUserVoiceTime(), tbub.getUserVoicePath()); + tblist.remove(position); + } else if (tbub.getType() == ChatRecyclerAdapter.TO_USER_IMG) { + sendImage(tbub.getImageLocal()); + tblist.remove(position); + } + } + + }); + tbAdapter.setVoiceIsReadListener(new ChatRecyclerAdapter.VoiceIsRead() { + + @Override + public void voiceOnClick(int position) { + // TODO Auto-generated method stub + for (int i = 0; i < tbAdapter.unReadPosition.size(); i++) { + if (tbAdapter.unReadPosition.get(i).equals(position + "")) { + tbAdapter.unReadPosition.remove(i); + break; + } + } + } + + }); + voiceBtn.setAudioFinishRecorderListener(new AudioRecordButton.AudioFinishRecorderListener() { + + @Override + public void onFinished(float seconds, String filePath) { + // TODO Auto-generated method stub + sendVoice(seconds, filePath); + } + + @Override + public void onStart() { + // TODO Auto-generated method stub + tbAdapter.stopPlayVoice(); + } + }); + myList.setOnScrollListener(new RecyclerView.OnScrollListener() { + + @Override + public void onScrollStateChanged(RecyclerView view, int scrollState) { + // TODO Auto-generated method stub + switch (scrollState) { + case RecyclerView.SCROLL_STATE_IDLE: + tbAdapter.handler.removeCallbacksAndMessages(null); + tbAdapter.setIsGif(true); + tbAdapter.isPicRefresh = false; + tbAdapter.notifyDataSetChanged(); + break; + case RecyclerView.SCROLL_STATE_DRAGGING: + tbAdapter.handler.removeCallbacksAndMessages(null); + tbAdapter.setIsGif(false); + tbAdapter.isPicRefresh = true; + reset(); + KeyBoardUtils.hideKeyBoard(getContext(), + mEditTextContent); + break; + default: + break; + } + } + + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + } + }); + controlKeyboardLayout(activityRootView, pullList); + super.init(); + } + + /** + * @param root 最外层布局 + * @param needToScrollView 要滚动的布局,就是说在键盘弹出的时候,你需要试图滚动上去的View,在键盘隐藏的时候,他又会滚动到原来的位置的布局 + */ + private void controlKeyboardLayout(final View root, final View needToScrollView) { + root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + + private Rect r = new Rect(); + + @Override + public void onGlobalLayout() { + //获取当前界面可视部分 + getActivity().getWindow().getDecorView().getWindowVisibleDisplayFrame(r); + //获取屏幕的高度 + int screenHeight = getActivity().getWindow().getDecorView().getRootView().getHeight(); + //此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数 + int heightDifference = screenHeight - r.bottom; + int recyclerHeight = 0; + if (wcLinearLayoutManger != null) { + recyclerHeight = wcLinearLayoutManger.getRecyclerHeight(); + } + if (heightDifference == 0 || heightDifference == bottomStatusHeight) { + needToScrollView.scrollTo(0, 0); + } else { + if (heightDifference < recyclerHeight) { + int contentHeight = wcLinearLayoutManger == null ? 0 : wcLinearLayoutManger.getHeight(); + if (recyclerHeight < contentHeight) { + listSlideHeight = heightDifference - (contentHeight - recyclerHeight); + needToScrollView.scrollTo(0, listSlideHeight); + } else { + listSlideHeight = heightDifference; + needToScrollView.scrollTo(0, listSlideHeight); + } + } else { + listSlideHeight = 0; + } + } + } + }); + } + + @Override + protected void loadRecords(List pagelist) { + isDown = true; + if (nowPage == 1) { + tblist.clear(); + } + // pagelist = mChatDbManager.loadPages(page, number); + position = pagelist.size(); + if (pagelist.size() != 0) { + pagelist.addAll(tblist); + tblist.clear(); + tblist.addAll(pagelist); + if (imageList != null) { + imageList.clear(); + } + if (imagePosition != null) { + imagePosition.clear(); + } + int key = 0; + int position = 0; + for (ChatMessageBean cmb : tblist) { + if (cmb.getType() == ChatListViewAdapter.FROM_USER_IMG || cmb.getType() == ChatListViewAdapter.TO_USER_IMG) { + imageList.add(cmb.getImageLocal()); + imagePosition.put(key, position); + position++; + } + key++; + } + tbAdapter.setImageList(imageList); + tbAdapter.setImagePosition(imagePosition); + sendMessageHandler.sendEmptyMessage(PULL_TO_REFRESH_DOWN); + /*if (page == 0) { + pullList.refreshComplete(); + pullList.setPullGone(); + } else { + page--; + }*/ + } else { + if (page == 0) { + pullList.refreshComplete(); + // TODO: 2018/11/27 先把不能下拉给注释掉 + // pullList.setPullGone(); + } + } + } + + /** + * 发送文字右边 + */ + @Override + protected void sendMessage(final String message, final String exceptionType) { + new Thread(new Runnable() { + @Override + public void run() { + String content; + if (TextUtils.isEmpty(mEditTextContent.getText().toString())) { + content = message; + } else { + content = mEditTextContent.getText().toString(); + } + tblist.add(getTbub(userName, ChatListViewAdapter.TO_USER_MSG, content, null, null, + null, null, null, 0f, ChatConst.COMPLETED, exceptionType)); + sendMessageHandler.sendEmptyMessage(SEND_OK); + ChatFragment.this.content = content; + // receriveHandler.sendEmptyMessageDelayed(0, 1000); + } + }).start(); + } + + /** + * 发送文字左边 + */ + @Override + protected void receriveMsgText(final String content, final String deviceVersion, final String exceptionType, final String macId) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + String message = content; + ChatMessageBean tbub = new ChatMessageBean(); + tbub.setUserName(userName); + String time = returnTime(); + tbub.setUserContent(message); + tbub.setTime(time); + tbub.setDeviceVersion(deviceVersion); + if (!TextUtils.isEmpty(exceptionType)) { + tbub.setExceptionType(Integer.parseInt(exceptionType)); + } + tbub.setUserName(macId); + tbub.setUserId(macId); + tbub.setType(ChatListViewAdapter.FROM_USER_MSG); + tblist.add(tbub); + sendMessageHandler.sendEmptyMessage(RECERIVE_OK); + mChatDbManager.insert(tbub); + } + }).start(); + } + + + /*private void receriveMsgText(final String content) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + String message = content; + ChatMessageBean tbub = new ChatMessageBean(); + tbub.setUserName(userName); + String time = returnTime(); + tbub.setUserContent(message); + tbub.setTime(time); + tbub.setType(ChatListViewAdapter.FROM_USER_MSG); + tblist.add(tbub); + sendMessageHandler.sendEmptyMessage(RECERIVE_OK); + mChatDbManager.insert(tbub); + } + }).start(); + }*/ + + @Override + protected void sendImage(final String filePath) { + new Thread(new Runnable() { + @Override + public void run() { + if (i == 0) { + tblist.add(getTbub(userName, ChatListViewAdapter.TO_USER_IMG, null, null, null, filePath, null, null, + 0f, ChatConst.SENDING, null)); + } else if (i == 1) { + tblist.add(getTbub(userName, ChatListViewAdapter.TO_USER_IMG, null, null, null, filePath, null, null, + 0f, ChatConst.SENDERROR, null)); + } else if (i == 2) { + tblist.add(getTbub(userName, ChatListViewAdapter.TO_USER_IMG, null, null, null, filePath, null, null, + 0f, ChatConst.COMPLETED, null)); + i = -1; + } + imageList.add(tblist.get(tblist.size() - 1).getImageLocal()); + imagePosition.put(tblist.size() - 1, imageList.size() - 1); + sendMessageHandler.sendEmptyMessage(SEND_OK); + ChatFragment.this.filePath = filePath; + receriveHandler.sendEmptyMessageDelayed(1, 3000); + i++; + } + }).start(); + } + + private void receriveImageText(final String filePath) { + new Thread(new Runnable() { + @Override + public void run() { + ChatMessageBean tbub = new ChatMessageBean(); + tbub.setUserName(userName); + String time = returnTime(); + tbub.setTime(time); + tbub.setImageLocal(filePath); + tbub.setType(ChatListViewAdapter.FROM_USER_IMG); + tblist.add(tbub); + imageList.add(tblist.get(tblist.size() - 1).getImageLocal()); + imagePosition.put(tblist.size() - 1, imageList.size() - 1); + sendMessageHandler.sendEmptyMessage(RECERIVE_OK); + mChatDbManager.insert(tbub); + } + }).start(); + } + + /** + * 发送语音 + */ + @Override + protected void sendVoice(final float seconds, final String filePath) { + new Thread(new Runnable() { + @Override + public void run() { + tblist.add(getTbub(userName, ChatListViewAdapter.TO_USER_VOICE, null, null, null, null, filePath, + null, seconds, ChatConst.SENDING, null)); + sendMessageHandler.sendEmptyMessage(SEND_OK); + ChatFragment.this.seconds = seconds; + voiceFilePath = filePath; + receriveHandler.sendEmptyMessageDelayed(2, 3000); + } + }).start(); + } + + private void receriveVoiceText(final float seconds, final String filePath) { + new Thread(new Runnable() { + @Override + public void run() { + ChatMessageBean tbub = new ChatMessageBean(); + tbub.setUserName(userName); + String time = returnTime(); + tbub.setTime(time); + tbub.setUserVoiceTime(seconds); + tbub.setUserVoicePath(filePath); + tbAdapter.unReadPosition.add(tblist.size() + ""); + tbub.setType(ChatListViewAdapter.FROM_USER_VOICE); + tblist.add(tbub); + sendMessageHandler.sendEmptyMessage(RECERIVE_OK); + mChatDbManager.insert(tbub); + } + }).start(); + } + + @Override + public void onClick(View v) { + + } + + static class SendMessageHandler extends Handler { + WeakReference mActivity; + + SendMessageHandler(ChatFragment activity) { + mActivity = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + ChatFragment theActivity = mActivity.get(); + if (theActivity != null) { + switch (msg.what) { + case REFRESH: + theActivity.tbAdapter.isPicRefresh = true; + theActivity.tbAdapter.notifyDataSetChanged(); + int position = theActivity.tbAdapter.getItemCount() - 1 < 0 ? 0 : theActivity.tbAdapter.getItemCount() - 1; + theActivity.myList.smoothScrollToPosition(position); + break; + case SEND_OK: + theActivity.mEditTextContent.setText(""); + theActivity.tbAdapter.isPicRefresh = true; + theActivity.tbAdapter.notifyItemInserted(theActivity.tblist + .size() - 1); + theActivity.myList.smoothScrollToPosition(theActivity.tbAdapter.getItemCount() - 1); + break; + case RECERIVE_OK: + theActivity.tbAdapter.isPicRefresh = true; + theActivity.tbAdapter.notifyItemInserted(theActivity.tblist + .size() - 1); + theActivity.myList.smoothScrollToPosition(theActivity.tbAdapter.getItemCount() - 1); + break; + case PULL_TO_REFRESH_DOWN: + theActivity.pullList.refreshComplete(); + theActivity.tbAdapter.notifyDataSetChanged(); + theActivity.myList.smoothScrollToPosition(theActivity.position - 1); + theActivity.isDown = false; + break; + default: + break; + } + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/ImageViewActivity.java b/app/src/main/java/com/yonsz/z1/chat/ImageViewActivity.java new file mode 100644 index 0000000..39dc636 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/ImageViewActivity.java @@ -0,0 +1,113 @@ +package com.yonsz.z1.chat; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import android.support.v4.view.ViewPager.OnPageChangeListener; +import android.widget.TextView; +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.List; + +public class ImageViewActivity extends FragmentActivity { + private ArrayList imageList; + private List fragList; + private ViewPager imageVp; + private TextView currentTv; + private TextView totalTv; + private int currentPage; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Intent intent = getIntent(); + Bundle bundle = intent.getExtras(); + if (bundle != null) { + if (bundle.containsKey("images")) { + imageList = bundle.getStringArrayList("images"); + } + if (bundle.containsKey("clickedIndex")) { + currentPage = bundle.getInt("clickedIndex"); + } + } + setContentView(R.layout.activity_images_view); + findView(); + init(); + } + + private void init() { + totalTv.setText("/" + imageList.size()); + fragList = new ArrayList(); + for (int i = 0; i < imageList.size(); i++) { + ImageViewFragment imageVF = new ImageViewFragment(); + imageVF.setImageUrl(imageList.get(i)); + fragList.add(imageVF); + } + // 类似缓存 + imageVp.setOffscreenPageLimit(imageList.size()); + imageVp.setAdapter(new ImageViewFPAdapter(getSupportFragmentManager())); + imageVp.setOnPageChangeListener(new OnPageChangeListener() { + + @Override + public void onPageSelected(int index) { + currentPage = index; + currentTv.setText((index + 1) + ""); + fragList.get(currentPage).onPause(); // 调用切换前Fargment的onPause() + if (fragList.get(index).isAdded()) { + fragList.get(index).onResume(); // 调用切换后Fargment的onResume() + } + } + + @Override + public void onPageScrolled(int arg0, float arg1, int arg2) { + + } + + @Override + public void onPageScrollStateChanged(int arg0) { + + } + }); + imageVp.setCurrentItem(currentPage); + currentTv.setText((currentPage + 1) + ""); + } + + protected void findView() { + imageVp = (ViewPager) findViewById(R.id.images_vp); + currentTv = (TextView) findViewById(R.id.imageView_current_tv); + totalTv = (TextView) findViewById(R.id.imageView_total_tv); + } + + class ImageViewFPAdapter extends FragmentPagerAdapter { + protected FragmentManager fm; + + public ImageViewFPAdapter(FragmentManager fm) { + super(fm); + this.fm = fm; + } + + @Override + public Fragment getItem(int arg0) { + return fragList.get(arg0); + } + + @Override + public int getCount() { + return fragList.size(); + } + } + + @Override + protected void onDestroy() { + if (fragList.size() > 0) { + for (Fragment fragment : fragList) + fragment.onDestroy(); + } + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/ImageViewFragment.java b/app/src/main/java/com/yonsz/z1/chat/ImageViewFragment.java new file mode 100644 index 0000000..529b993 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/ImageViewFragment.java @@ -0,0 +1,71 @@ +package com.yonsz.z1.chat; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.support.v4.app.Fragment; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ProgressBar; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.animation.GlideAnimation; +import com.bumptech.glide.request.target.SimpleTarget; +import com.polites.android.GestureImageView; +import com.yonsz.z1.R; + +public class ImageViewFragment extends Fragment { + private String imageUrl; + private ProgressBar loadBar; + private GestureImageView imageGiv; + + public View onCreateView(android.view.LayoutInflater inflater, + android.view.ViewGroup container, + android.os.Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.layout_images_view_item, container, + false); + init(view); + loadImage(imageUrl); + return view; + } + + private void init(View mView) { + loadBar = (ProgressBar) mView.findViewById(R.id.imageView_loading_pb); + imageGiv = (GestureImageView) mView + .findViewById(R.id.imageView_item_giv); + imageGiv.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + getActivity().finish(); + } + }); + } + + public void loadImage(String url) { + if (url.startsWith("http://")) { + Glide.with(this).load(url).asBitmap().into(new SimpleTarget() { + @Override + public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { + if (resource != null) { + imageGiv.setImageBitmap(resource); + loadBar.setVisibility(View.GONE); + imageGiv.setVisibility(View.VISIBLE); + } + } + }); + } else { + imageGiv.setImageBitmap(BitmapFactory.decodeFile(url)); + loadBar.setVisibility(View.GONE); + imageGiv.setVisibility(View.VISIBLE); + } + } + + public String getImageUrl() { + return imageUrl; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/MainChatFragment.java b/app/src/main/java/com/yonsz/z1/chat/MainChatFragment.java new file mode 100644 index 0000000..f22636a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/MainChatFragment.java @@ -0,0 +1,1249 @@ +package com.yonsz.z1.chat; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.net.Uri; +import android.net.wifi.WifiManager; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.provider.MediaStore; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.support.v4.view.ViewPager; +import android.text.Spannable; +import android.text.TextUtils; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.AsxAddDeviceListActivity; +import com.yonsz.z1.chat.adapter.ChatListViewAdapter; +import com.yonsz.z1.chat.adapter.DataAdapter; +import com.yonsz.z1.chat.adapter.ExpressionAdapter; +import com.yonsz.z1.chat.adapter.ExpressionPagerAdapter; +import com.yonsz.z1.chat.common.ChatConst; +import com.yonsz.z1.chat.db.ChatDbManager; +import com.yonsz.z1.chat.db.ChatMessageBean; +import com.yonsz.z1.chat.utils.FileSaveUtil; +import com.yonsz.z1.chat.utils.ImageCheckoutUtil; +import com.yonsz.z1.chat.utils.KeyBoardUtils; +import com.yonsz.z1.chat.utils.PictureUtil; +import com.yonsz.z1.chat.utils.ScreenUtil; +import com.yonsz.z1.chat.utils.SmileUtils; +import com.yonsz.z1.chat.widget.AudioRecordButton; +import com.yonsz.z1.chat.widget.ChatBottomView; +import com.yonsz.z1.chat.widget.ExpandGridView; +import com.yonsz.z1.chat.widget.HeadIconSelectorView; +import com.yonsz.z1.chat.widget.MediaManager; +import com.yonsz.z1.chat.widget.pulltorefresh.PullToRefreshLayout; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.database.entity.entity4.PhoneChatInfoEntity; +import com.yonsz.z1.database.entity.entity4.VoiceChatEntity; +import com.yonsz.z1.device.deviceadd.ConnectWifiActivity; +import com.yonsz.z1.device.deviceadd.NoWifiConnectActicity; +import com.yonsz.z1.homemanage.HomeManageActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.DateUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.listpopupwindow.RankingPopupWindow; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.lang.ref.WeakReference; +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import de.greenrobot.event.EventBus; + +import static android.app.Activity.RESULT_CANCELED; +import static android.app.Activity.RESULT_OK; +import static android.content.Context.WIFI_SERVICE; +import static com.yonsz.z1.net.Constans.EXECUTE_PHONE_FAIL; +import static com.yonsz.z1.net.Constans.GET_DEVICEVOICE_CHATLIST_FAIL; +import static com.yonsz.z1.net.Constans.GET_DEVICEVOICE_CHATLIST_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumList; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.Constans.isUseDefFlag; +import static com.yonsz.z1.net.NetWorkUrl.PHONE_MESSAGE_LIST; +import static com.yonsz.z1.net.NetWorkUrl.PHONE_USER_INFO; +import static com.yonsz.z1.version5.MainFragment5.setDefaultHouse; + +/** + * Created by Administrator on 2018/8/28. + */ + +public abstract class MainChatFragment extends android.support.v4.app.Fragment implements View.OnClickListener { + public static final int SEND_OK = 0x1110; + public static final int REFRESH = 0x0011; + public static final int RECERIVE_OK = 0x1111; + public static final int PULL_TO_REFRESH_DOWN = 0x0111; + private static final int SDK_PERMISSION_REQUEST = 127; + private static final int IMAGE_SIZE = 100 * 1024;// 300kb + public static String deviceNumListRightNow = ""; + public PullToRefreshLayout pullList; + public boolean isDown = false; + public int position; //加载滚动刷新位置 + public int bottomStatusHeight = 0; + public int listSlideHeight = 0;//滑动距离 + public TextView send_emoji_icon; + public ImageView emoji; + public ImageView mess_iv; + public ImageView voiceIv; + public ListView mess_lv; + public ChatBottomView tbbv; + public AudioRecordButton voiceBtn; + public EditText mEditTextContent; + public ViewPager expressionViewpager; + public LinearLayout emoji_group; + public View activityRootView; + public String userName = "test";//聊天对象昵称 + public String item[] = {"你好!", "我正忙着呢,等等", "有啥事吗?", "有时间聊聊吗", "再见!"}; + public List tblist = new ArrayList(); + public List pagelist = new ArrayList(); + public ChatDbManager mChatDbManager; + public int page = 0; + public int number = 10; + public ArrayList imageList = new ArrayList();//adapter图片数据 + public HashMap imagePosition = new HashMap();//图片下标位置 + public int nowPage = 1; + RankingPopupWindow mWindow; + RankingPopupWindow.Listener listener; + private View fragView; + private UIHandle mHandler; + private int pageSize = 1; + private TitleView mTitleView; + private boolean CAN_WRITE_EXTERNAL_STORAGE = true; + private boolean CAN_RECORD_AUDIO = true; + private DataAdapter adapter; + private File mCurrentPhotoFile; + private Toast mToast; + private String permissionInfo; + private String camPicPath; + private List reslist; + private List deviceNumListRight; + private DeviceSimpleEntity deviceSimpleEntity; + private int showPosition = 0; + private RelativeLayout noDeviceRl; + private ImageView addDeviceIv; + private View.OnKeyListener onKeyListener = new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_ENTER + && event.getAction() == KeyEvent.ACTION_DOWN) { + // sendMessage(""); + return true; + } + return false; + } + }; + + @SuppressLint("SimpleDateFormat") + public static String returnTime() { + SimpleDateFormat sDateFormat = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + String date = sDateFormat.format(new Date()); + return date; + } + + public void onEventMainThread(AppControlEvent event) { + String msg = event.getMsg(); + NettyEntity nettyEntity = JSON.parseObject(msg.toString(), NettyEntity.class); + String macId = nettyEntity.getMacId(); + if (showPosition == 0 && nettyEntity.getCmdType().equals("voiceControll")) { + boolean isThisHouse = false; + for (int i = 0; i < deviceSimpleEntity.getData().size(); i++) { + if (deviceSimpleEntity.getData().get(i).getZiId().equals(macId)) { + isThisHouse = true; + } + } + if (isThisHouse) { + sendMessage(nettyEntity.getVoice(), nettyEntity.getExceptionType()); + receriveMsgText(nettyEntity.getReply(), nettyEntity.getDeviceVersion(), nettyEntity.getExceptionType(), nettyEntity.getMacId()); + } + } else if (null != deviceSimpleEntity.getData() && macId.equals(deviceSimpleEntity.getData().get(showPosition).getZiId()) && nettyEntity.getCmdType().equals("voiceControll")) { + if (null != nettyEntity.getExceptionType()) { + sendMessage(nettyEntity.getVoice(), nettyEntity.getExceptionType()); + receriveMsgText(nettyEntity.getReply(), nettyEntity.getDeviceVersion(), nettyEntity.getExceptionType(), nettyEntity.getMacId()); + } + } else if (nettyEntity.getCmdType().equals("chatMessage")) { + if (nettyEntity.getContext().getHouseId().equals(SharedpreferencesUtil.get(Constans.HOUSEID, ""))) { + if (null != nettyEntity.getExceptionType() && showPosition == 0) { + //这里根据新的数据结构显示对话 + switch (nettyEntity.getContext().getSenderType()) { + case 2: + sendMessage(nettyEntity.getContext().getContent(), nettyEntity.getExceptionType()); + break; + case 3: + receriveMsgText(nettyEntity.getContext().getContent(), nettyEntity.getDeviceVersion(), nettyEntity.getExceptionType(), nettyEntity.getContext().getZiId()); + break; + } + // receriveMsgText(nettyEntity.getContext().getContent(), "3", nettyEntity.getExceptionType(), ""); + } + } + } + } + + public void onEventMainThread(ChooseHomeEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("1") || msg.equals("2")) { + // mTitleView.setHomeNameTxt(MainFragment4.homeListEntity.getData().get(deviceNumListPosition).getName()); + /*if (homeListEntity.getData().get(deviceNumListPosition).getName().length() > 9) { + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName().substring(0, 6) + "…"); + } else { + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + }*/ + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + // isQueryHouses = true; + nowPage = 1; + getUserDevices4SimpleInfo(); + } + } + + /** + * 发送文本消息 + */ + protected abstract void sendMessage(String message, String exceptionType); + + protected abstract void receriveMsgText(String message, String deviceVersion, String exceptionType, String macId); + + /** + * 发送图片文件 + * + * @param filePath + */ + protected abstract void sendImage(String filePath); + + /** + * 发送语音消息 + * + * @param seconds + * @param filePath + */ + protected abstract void sendVoice(float seconds, String filePath); + + protected abstract void loadRecords(List pagelist); + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_main_chat, null); + findView(); + initpop(); + init(); + // after andrioid m,must request Permiision on runtime + getPersimmions(); + return fragView; + } + + @Override + public void onDestroy() { + MediaManager.pause(); + MediaManager.release(); + cancelToast(); + EventBus.getDefault().unregister(this); + super.onDestroy(); + } + + protected void findView() { + deviceNumListRight = new ArrayList<>(); + noDeviceRl = (RelativeLayout) fragView.findViewById(R.id.rl_no_device); + addDeviceIv = (ImageView) fragView.findViewById(R.id.iv_no_device_add); + pullList = (PullToRefreshLayout) fragView.findViewById(R.id.content_lv); + activityRootView = fragView.findViewById(R.id.layout_tongbao_rl); + mEditTextContent = (EditText) fragView.findViewById(R.id.mess_et); + mess_iv = (ImageView) fragView.findViewById(R.id.mess_iv); + emoji = (ImageView) fragView.findViewById(R.id.emoji); + voiceIv = (ImageView) fragView.findViewById(R.id.voice_iv); + expressionViewpager = (ViewPager) fragView.findViewById(R.id.vPager); + voiceBtn = (AudioRecordButton) fragView.findViewById(R.id.voice_btn); + emoji_group = (LinearLayout) fragView.findViewById(R.id.emoji_group); + send_emoji_icon = (TextView) fragView.findViewById(R.id.send_emoji_icon); + tbbv = (ChatBottomView) fragView.findViewById(R.id.other_lv); + // initActionBar(); + mTitleView = (TitleView) fragView.findViewById(R.id.title_chat); + mTitleView.showBackGroud3(); + mTitleView.showBackGroud4(); + mTitleView.setHeadHomeVisible(R.drawable.icon_home_house1); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + // TODO: 2018/9/14 +// initListItem(deviceNumList, 0, mTitleView.getHomeNameTxt()); + } + + @Override + public void onFunction() { + if (TextUtils.isEmpty(mTitleView.getHeadFuntionTxt())) { + return; + } + String headFuntionTxt = mTitleView.getHeadFuntionTxt(); + initListItem(deviceNumListRight, 1, headFuntionTxt.substring(0, headFuntionTxt.length() - 1)); + } + + @Override + public void onFunctionText() { + + } + }); + } + + protected void init() { + addDeviceIv.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (AppIdUtil.isBaseZhiKong()) { + Intent intent = new Intent(getActivity(), AsxAddDeviceListActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + if (null != homeListEntity && !TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + intent.putExtra("floorList", homeListEntity.getData().get(deviceNumListPosition).getFloorList()); + } else { + intent.putExtra("floorList", ""); + } + getActivity().startActivity(intent); + } else { + WifiManager wifimanager; + wifimanager = (WifiManager) getActivity().getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(getActivity(), ConnectWifiActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "MainChatFragment"); + startActivity(intent); + } else { + Intent intent = new Intent(getActivity(), NoWifiConnectActicity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "MainChatFragment"); + startActivity(intent); + } + } + } + }); + mEditTextContent.setOnKeyListener(onKeyListener); + mChatDbManager = new ChatDbManager(); + PullToRefreshLayout.pulltorefreshNotifier pullNotifier = new PullToRefreshLayout.pulltorefreshNotifier() { + @Override + public void onPull() { + // TODO Auto-generated method stub + downLoad(); + } + }; + pullList.setpulltorefreshNotifier(pullNotifier); + voiceIv.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + if (voiceBtn.getVisibility() == View.GONE) { + emoji.setBackgroundResource(R.mipmap.emoji); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + mEditTextContent.setVisibility(View.GONE); + emoji_group.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + mess_lv.setVisibility(View.GONE); + voiceBtn.setVisibility(View.VISIBLE); + KeyBoardUtils.hideKeyBoard(getContext(), + mEditTextContent); + voiceIv.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + } else { + mEditTextContent.setVisibility(View.VISIBLE); + voiceBtn.setVisibility(View.GONE); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + KeyBoardUtils.showKeyBoard(getContext(), mEditTextContent); + } + } + + }); + mess_iv.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // TODO Auto-generated method stub + emoji_group.setVisibility(View.GONE); + if (tbbv.getVisibility() == View.GONE + && mess_lv.getVisibility() == View.GONE) { + mEditTextContent.setVisibility(View.VISIBLE); + mess_iv.setFocusable(true); + voiceBtn.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + tbbv.setVisibility(View.VISIBLE); + KeyBoardUtils.hideKeyBoard(getContext(), + mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + } else { + tbbv.setVisibility(View.GONE); + KeyBoardUtils.showKeyBoard(getContext(), mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + if (mess_lv.getVisibility() != View.GONE) { + mess_lv.setVisibility(View.GONE); + KeyBoardUtils.showKeyBoard(getContext(), mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + } + } + } + }); + send_emoji_icon.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + // sendMessage(""); + } + + }); + tbbv.setOnHeadIconClickListener(new HeadIconSelectorView.OnHeadIconClickListener() { + + @SuppressLint("InlinedApi") + @Override + public void onClick(int from) { + switch (from) { + case ChatBottomView.FROM_CAMERA: + if (!CAN_WRITE_EXTERNAL_STORAGE) { + Toast.makeText(getContext(), "权限未开通\n请到设置中开通相册权限", Toast.LENGTH_SHORT).show(); + } else { + final String state = Environment.getExternalStorageState(); + if (Environment.MEDIA_MOUNTED.equals(state)) { + camPicPath = getSavePicPath(); + Intent openCameraIntent = new Intent( + MediaStore.ACTION_IMAGE_CAPTURE); + Uri uri = Uri.fromFile(new File(camPicPath)); + openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); + startActivityForResult(openCameraIntent, + ChatBottomView.FROM_CAMERA); + } else { + showToast("请检查内存卡"); + } + } + break; + case ChatBottomView.FROM_GALLERY: + if (!CAN_WRITE_EXTERNAL_STORAGE) { + Toast.makeText(getContext(), "权限未开通\n请到设置中开通相册权限", Toast.LENGTH_SHORT).show(); + } else { + String status = Environment.getExternalStorageState(); + if (status.equals(Environment.MEDIA_MOUNTED)) {// 判断是否有SD卡 + Intent intent = new Intent(); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + intent.setAction(Intent.ACTION_GET_CONTENT); + } else { + intent.setAction(Intent.ACTION_OPEN_DOCUMENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.putExtra("crop", "true"); + intent.putExtra("scale", "true"); + intent.putExtra("scaleUpIfNeeded", true); + } + intent.setType("image/*"); + startActivityForResult(intent, + ChatBottomView.FROM_GALLERY); + } else { + showToast("没有SD卡"); + } + } + break; + + case ChatBottomView.FROM_PHRASE: + if (mess_lv.getVisibility() == View.GONE) { + tbbv.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + mess_lv.setVisibility(View.VISIBLE); + KeyBoardUtils.hideKeyBoard(getContext(), + mEditTextContent); + mess_iv.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + } + } + } + + }); + emoji.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // TODO Auto-generated method stub + mess_lv.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + if (emoji_group.getVisibility() == View.GONE) { + mEditTextContent.setVisibility(View.VISIBLE); + voiceBtn.setVisibility(View.GONE); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + emoji_group.setVisibility(View.VISIBLE); + emoji.setBackgroundResource(R.mipmap.chatting_setmode_keyboard_btn_normal); + KeyBoardUtils.hideKeyBoard(getContext(), + mEditTextContent); + } else { + emoji_group.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + KeyBoardUtils.showKeyBoard(getContext(), mEditTextContent); + } + } + }); + // 表情list + reslist = getExpressionRes(40); + // 初始化表情viewpager + List views = new ArrayList(); + View gv1 = getGridChildView(1); + View gv2 = getGridChildView(2); + views.add(gv1); + views.add(gv2); + expressionViewpager.setAdapter(new ExpressionPagerAdapter(views)); + + mEditTextContent.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + emoji_group.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + mess_lv.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + } + + }); + + mess_lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + // TODO Auto-generated method stub + mEditTextContent.setText(item[arg2]); + // sendMessage(""); + } + + }); + // controlKeyboardLayout(activityRootView, pullList); + bottomStatusHeight = ScreenUtil.getNavigationBarHeight(getContext()); + //加载本地聊天记录 + page = (int) mChatDbManager.getPages(number); + } + + + @TargetApi(23) + protected void getPersimmions() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + ArrayList permissions = new ArrayList(); + // 读写权限 + if (addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; + } + // 麦克风权限 + if (addPermission(permissions, Manifest.permission.RECORD_AUDIO)) { + permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; + } + if (permissions.size() > 0) { + requestPermissions(permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST); + } + } + } + + @TargetApi(23) + private boolean addPermission(ArrayList permissionsList, String permission) { + /*if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { // 如果应用没有获得对应权限,则添加到列表中,准备批量申请 + if (shouldShowRequestPermissionRationale(permission)) { + return true; + } else { + permissionsList.add(permission); + return false; + } + + } else { + return true; + }*/ + return false; + } + + @TargetApi(23) + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + // TODO Auto-generated method stub + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + switch (requestCode) { + case SDK_PERMISSION_REQUEST: + Map perms = new HashMap(); + // Initial + perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED); + perms.put(Manifest.permission.RECORD_AUDIO, PackageManager.PERMISSION_GRANTED); + // Fill with results + for (int i = 0; i < permissions.length; i++) + perms.put(permissions[i], grantResults[i]); + // Check for ACCESS_FINE_LOCATION + if (perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + // Permission Denied + CAN_WRITE_EXTERNAL_STORAGE = false; + Toast.makeText(getContext(), "禁用图片权限将导致发送图片功能无法使用!", Toast.LENGTH_SHORT) + .show(); + } + if (perms.get(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { + CAN_RECORD_AUDIO = false; + Toast.makeText(getContext(), "禁用录制音频权限将导致语音功能无法使用!", Toast.LENGTH_SHORT) + .show(); + } + break; + default: + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + } + + /** + * 常用语列表初始化 + */ + @SuppressLint({"NewApi", "InflateParams"}) + private void initpop() { + mess_lv = (ListView) fragView.findViewById(R.id.mess_lv); + adapter = new DataAdapter(getContext(), item); + mess_lv.setAdapter(adapter); + } + + private void downLoad() { + // if (!isDown) { + if (nowPage < pageSize) { + new Thread(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + nowPage++; + // getDeviceVoiceChatList(nowPage, deviceSimpleEntity.getData().get(showPosition).getZiId()); + getList(nowPage, showPosition, "1"); + } + }).start(); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + tbbv.setVisibility(View.GONE); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + switch (requestCode) { + case ChatBottomView.FROM_CAMERA: + FileInputStream is = null; + try { + is = new FileInputStream(camPicPath); + File camFile = new File(camPicPath); // 图片文件路径 + if (camFile.exists()) { + int size = ImageCheckoutUtil + .getImageSize(ImageCheckoutUtil + .getLoacalBitmap(camPicPath)); + if (size > IMAGE_SIZE) { + showDialog(camPicPath); + } else { + sendImage(camPicPath); + } + } else { + showToast("该文件不存在!"); + } + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + // 关闭流 + try { + is.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + break; + case ChatBottomView.FROM_GALLERY: + Uri uri = data.getData(); + String path = FileSaveUtil.getPath(getContext(), uri); + mCurrentPhotoFile = new File(path); // 图片文件路径 + if (mCurrentPhotoFile.exists()) { + int size = ImageCheckoutUtil.getImageSize(ImageCheckoutUtil.getLoacalBitmap(path)); + if (size > IMAGE_SIZE) { + showDialog(path); + } else { + sendImage(path); + } + } else { + showToast("该文件不存在!"); + } + + break; + } + } else if (resultCode == RESULT_CANCELED) { + // Toast.makeText(this, "操作取消", Toast.LENGTH_SHORT).show(); + } + } + + /** + * 界面复位 + */ + protected void reset() { + emoji_group.setVisibility(View.GONE); + tbbv.setVisibility(View.GONE); + mess_lv.setVisibility(View.GONE); + emoji.setBackgroundResource(R.mipmap.emoji); + mess_iv.setBackgroundResource(R.mipmap.tb_more); + voiceIv.setBackgroundResource(R.mipmap.voice_btn_normal); + } + + public void showToast(String text) { + if (mToast == null) { + mToast = Toast.makeText(getContext(), text, Toast.LENGTH_SHORT); + } else { + mToast.setText(text); + mToast.setDuration(Toast.LENGTH_SHORT); + } + mToast.show(); + } + + public void cancelToast() { + if (mToast != null) { + mToast.cancel(); + } + } + + /** + * 获取表情的gridview的子view + * + * @param i + * @return + */ + private View getGridChildView(int i) { + View view = View.inflate(getContext(), R.layout.layout_expression_gridview, null); + ExpandGridView gv = (ExpandGridView) view.findViewById(R.id.gridview); + List list = new ArrayList(); + if (i == 1) { + List list1 = reslist.subList(0, 20); + list.addAll(list1); + } else if (i == 2) { + list.addAll(reslist.subList(20, reslist.size())); + } + list.add("delete_expression"); + final ExpressionAdapter expressionAdapter = new ExpressionAdapter(getActivity(), + 1, list); + gv.setAdapter(expressionAdapter); + gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + String filename = expressionAdapter.getItem(position); + try { + // 文字输入框可见时,才可输入表情 + // 按住说话可见,不让输入表情 + if (filename != "delete_expression") { // 不是删除键,显示表情 + // 这里用的反射,所以混淆的时候不要混淆SmileUtils这个类 + @SuppressWarnings("rawtypes") + Class clz = Class + .forName("com.maxi.chatdemo.utils.SmileUtils"); + Field field = clz.getField(filename); + String oriContent = mEditTextContent.getText() + .toString(); + int index = Math.max( + mEditTextContent.getSelectionStart(), 0); + StringBuilder sBuilder = new StringBuilder(oriContent); + Spannable insertEmotion = SmileUtils.getSmiledText( + getContext(), + (String) field.get(null)); + sBuilder.insert(index, insertEmotion); + mEditTextContent.setText(sBuilder.toString()); + mEditTextContent.setSelection(index + + insertEmotion.length()); + } else { // 删除文字或者表情 + if (!TextUtils.isEmpty(mEditTextContent.getText())) { + + int selectionStart = mEditTextContent + .getSelectionStart();// 获取光标的位置 + if (selectionStart > 0) { + String body = mEditTextContent.getText() + .toString(); + String tempStr = body.substring(0, + selectionStart); + int i = tempStr.lastIndexOf("[");// 获取最后一个表情的位置 + if (i != -1) { + CharSequence cs = tempStr.substring(i, + selectionStart); + if (SmileUtils.containsKey(cs.toString())) + mEditTextContent.getEditableText() + .delete(i, selectionStart); + else + mEditTextContent.getEditableText() + .delete(selectionStart - 1, + selectionStart); + } else { + mEditTextContent.getEditableText().delete( + selectionStart - 1, selectionStart); + } + } + } + + } + } catch (Exception e) { + } + + } + }); + return view; + } + + public List getExpressionRes(int getSum) { + List reslist = new ArrayList(); + for (int x = 1; x <= getSum; x++) { + String filename = "f" + x; + reslist.add(filename); + } + return reslist; + + } + + private void showDialog(final String path) { + new Thread(new Runnable() { + + @Override + public void run() { + // // TODO Auto-generated method stub + try { + String GalPicPath = getSavePicPath(); + Bitmap bitmap = PictureUtil.compressSizeImage(path); + boolean isSave = FileSaveUtil.saveBitmap( + PictureUtil.reviewPicRotate(bitmap, GalPicPath), + GalPicPath); + File file = new File(GalPicPath); + if (file.exists() && isSave) { + sendImage(GalPicPath); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + + private String getSavePicPath() { + final String dir = FileSaveUtil.SD_CARD_PATH + "image_data/"; + try { + FileSaveUtil.createSDDirectory(dir); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + String fileName = String.valueOf(System.currentTimeMillis() + ".png"); + return dir + fileName; + } + + public ChatMessageBean getTbub(String username, int type, + String Content, String imageIconUrl, String imageUrl, + String imageLocal, String userVoicePath, String userVoiceUrl, + Float userVoiceTime, @ChatConst.SendState int sendState, String exceptionType) { + ChatMessageBean tbub = new ChatMessageBean(); + tbub.setUserName(username); + String time = returnTime(); + tbub.setTime(time); + tbub.setType(type); + tbub.setUserContent(Content); + tbub.setImageIconUrl(imageIconUrl); + tbub.setImageUrl(imageUrl); + tbub.setUserVoicePath(userVoicePath); + tbub.setUserVoiceUrl(userVoiceUrl); + tbub.setUserVoiceTime(userVoiceTime); + tbub.setSendState(sendState); + tbub.setImageLocal(imageLocal); + if (!TextUtils.isEmpty(exceptionType)) { + tbub.setExceptionType(Integer.parseInt(exceptionType)); + } + mChatDbManager.insert(tbub); + return tbub; + } + + private void getUserDevices4SimpleInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + netWorkUtil.requestPostByAsynew(NetWorkUrl.GET_USERDEVICES4_SIMPLEINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getUserDevices4", "SolidVersionActivity onSuccess()" + respone); + DeviceSimpleEntity obj = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getList(int page, int position, String scopeType) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (null != SharedpreferencesUtil.get(Constans.HOUSEID, "")) { + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + } else { + return; + } + if (position != 0 && showPosition > 0) { + map.put("ziId", deviceSimpleEntity.getData().get(position).getZiId()); + map.put("scopeType", "2"); + } else { + map.put("ziId", ""); + map.put("scopeType", ""); + } + map.put("page", page + ""); + map.put("limit", "20"); + netWorkUtil.requestGetByAsy(PHONE_MESSAGE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("", "onSuccess: " + respone); + VoiceChatEntity obj = JSON.parseObject(respone, VoiceChatEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_DEVICEVOICE_CHATLIST_SUCCESS: + // TODO: 2018/8/31 设置数据 + VoiceChatEntity voiceChatEntity = (VoiceChatEntity) msg.obj; + pageSize = voiceChatEntity.getData().getPages(); + if (pagelist != null) { + pagelist.clear(); + } + if (null != voiceChatEntity.getData().getRecords()) { + for (int i = voiceChatEntity.getData().getRecords().size() - 1; i >= 0; i--) { + VoiceChatEntity.DataBean.RecordsBean recordsBean = voiceChatEntity.getData().getRecords().get(i); + switch (recordsBean.getSenderType()) { + case 1://系统 + case 3://小艾 + case 4://机器人 + case 5://帮助 + case 6://第三方音响 + ChatMessageBean fromMessageBean = new ChatMessageBean(); + fromMessageBean.setType(ChatListViewAdapter.FROM_USER_MSG); + String s = DateUtil.timeStamp2Date(String.valueOf(recordsBean.getCreateDate()), ""); + fromMessageBean.setTime(s); + fromMessageBean.setUserContent(recordsBean.getContent()); + fromMessageBean.setExceptionType(recordsBean.getMessageType()); + fromMessageBean.setSenderType(recordsBean.getSenderType()); + fromMessageBean.setImageIconUrl(recordsBean.getAvatar()); + fromMessageBean.setUserName(recordsBean.getName()); + if (recordsBean.getSenderType() == 3) { + fromMessageBean.setUserId(recordsBean.getZiId()); + } else { + fromMessageBean.setUserId(recordsBean.getUserId()); + } + /*fromMessageBean.setUserName(voiceChatEntity.getObj().getList().get(i).getZiName()); + fromMessageBean.setDeviceVersion(voiceChatEntity.getObj().getList().get(i).getDeviceVersion()); + fromMessageBean.setAddressId(voiceChatEntity.getObj().getList().get(i).getAddressId());*/ + pagelist.add(fromMessageBean); + break; + case 2://用户 + ChatMessageBean toMessageBean = new ChatMessageBean(); + toMessageBean.setType(ChatListViewAdapter.TO_USER_MSG); + String s1 = DateUtil.timeStamp2Date(String.valueOf(recordsBean.getCreateDate()), ""); + toMessageBean.setTime(String.valueOf(s1)); + toMessageBean.setUserContent(recordsBean.getContent()); + toMessageBean.setExceptionType(recordsBean.getMessageType()); + toMessageBean.setSenderType(recordsBean.getSenderType()); + if (recordsBean.getSenderType() == 3) { + toMessageBean.setUserId(recordsBean.getZiId()); + } else { + toMessageBean.setUserId(recordsBean.getUserId()); + } + // toMessageBean.setAddressId(voiceChatEntity.getObj().getList().get(i).getAddressId()); + pagelist.add(toMessageBean); + break; + } + Calendar calendar = Calendar.getInstance(); + String hour = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)); + String s1 = SharedpreferencesUtil.get("lastHour", ""); + if (recordsBean.getSenderType() == 3) { + String s = SharedpreferencesUtil.get(recordsBean.getZiId() + "_" + recordsBean.getSenderType(), ""); + if (TextUtils.isEmpty(s) || TextUtils.isEmpty(s1) || !hour.equals(s1)) { + getPhoneChatInfo(recordsBean.getZiId(), recordsBean.getSenderType()); + } + } else { + if (!TextUtils.isEmpty(recordsBean.getUserId())) { + String s = SharedpreferencesUtil.get(recordsBean.getUserId() + "_" + recordsBean.getSenderType(), ""); + if (TextUtils.isEmpty(s) || TextUtils.isEmpty(s1) || !hour.equals(s1)) { + getPhoneChatInfo(recordsBean.getUserId(), recordsBean.getSenderType()); + } + } + } + } + } + if (nowPage == 1 && pagelist.size() == 0) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// HH:mm:ss + //获取当前时间 + Date date = new Date(System.currentTimeMillis()); + ChatMessageBean fromMessageBean = new ChatMessageBean(); + fromMessageBean.setTime(simpleDateFormat.format(date)); + fromMessageBean.setType(ChatListViewAdapter.FROM_USER_MSG); + fromMessageBean.setUserContent("您与设备还没有对话"); + fromMessageBean.setSenderType(1); + fromMessageBean.setExceptionType(0); + fromMessageBean.setUserName(""); + pagelist.add(fromMessageBean); + } + loadRecords(pagelist); + break; + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + deviceSimpleEntity = (DeviceSimpleEntity) msg.obj; + if (null != deviceSimpleEntity.getData() && deviceSimpleEntity.getData().size() > 0) { + pullList.setVisibility(View.VISIBLE); + noDeviceRl.setVisibility(View.GONE); + + DeviceSimpleEntity.DataBean dataBean = new DeviceSimpleEntity.DataBean(); + dataBean.setZiId(""); + dataBean.setAddressId(""); + dataBean.setZiName(""); + dataBean.setDeviceVersion(""); + deviceSimpleEntity.getData().add(0, dataBean); + + /* String deviceAddress = getDeviceAddress(deviceSimpleEntity.getData().get(0).getAddressId()); + mTitleView.setHeadFuntionTxtAndSise(deviceAddress + "的" + deviceSimpleEntity.getData().get(0).getZiName() + ">"); + deviceNumListRightNow = deviceAddress + "的" + deviceSimpleEntity.getData().get(0).getZiName();*/ + mTitleView.setHeadFuntionTxtAndSise("全部>"); + deviceNumListRightNow = "全部"; + // getDeviceVoiceChatList(nowPage, deviceSimpleEntity.getData().get(0).getZiId()); + getList(nowPage, 0, "1"); + deviceNumListRight.clear(); + deviceNumListRight.add("全部"); + for (int i = 1; i < deviceSimpleEntity.getData().size(); i++) { + String deviceAddress1 = AddressNameUtil.getAddressName(deviceSimpleEntity.getData().get(i).getAddressId()); + deviceNumListRight.add(deviceAddress1 + "的" + deviceSimpleEntity.getData().get(i).getZiName()); + } + } else { + pullList.setVisibility(View.GONE); + noDeviceRl.setVisibility(View.VISIBLE); + nowPage = 1; + mTitleView.setHeadFuntionTxtAndSise(""); + deviceNumListRight.clear(); + pagelist.clear(); + loadRecords(pagelist); + } + break; + case QUERY_HOUSES_SUCCESS: + homeListEntity = (HomeListEntity) msg.obj; + deviceNumList.clear(); + if (null != homeListEntity.getData()) { + if (deviceNumListPosition > homeListEntity.getData().size() - 1) { + deviceNumListPosition = 0; + } + deviceNumList.clear(); + for (int i = 0; i < homeListEntity.getData().size(); i++) { + if (homeListEntity.getData().get(i).getDefFlag() == 1) { + if (isUseDefFlag) { + deviceNumListPosition = i; + } + } + deviceNumList.add(homeListEntity.getData().get(i).getName()); + } +// deviceNumList.add(getString(R.string.home_manage)); + + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + } + EventBus.getDefault().post( + new ChooseHomeEvent("3")); + getUserDevices4SimpleInfo(); + break; + } + } + + private void initListItem(final List list, final int flag, final String selectName) { + //生成Listener和清空 + setPopupWindowListener(flag); + mWindow = null; + //显示popupwindow + mWindow = new RankingPopupWindow(getActivity(), list, selectName, listener, mTitleView, flag); + } + + private void setPopupWindowListener(final int flag) { + listener = null; + listener = new RankingPopupWindow.Listener() { + @Override + public void onPopupWindowDismissListener() { + //消失时的操作 + } + + @Override + public void onItemClickListener(int position) { + //点击Item时的操作 + if (flag == 1) { + if (showPosition != position) { + showPosition = position; + deviceNumListRightNow = deviceNumListRight.get(showPosition); + mTitleView.setHeadFuntionTxtAndSise(deviceNumListRightNow + ">"); + //查询第一页 + nowPage = 1; + // getDeviceVoiceChatList(nowPage, deviceSimpleEntity.getData().get(position).getZiId()); + getList(nowPage, showPosition, "1"); + } + } else { + if (position == deviceNumList.size() - 1) { + Intent intent = new Intent(getContext(), HomeManageActivity.class); + startActivity(intent); + } else { + isUseDefFlag = false; + deviceNumListPosition = position; + showPosition = 0; + /*if (deviceNumList.get(position).length() > 9) { + mTitleView.setHomeNameTxt(deviceNumList.get(position).substring(0, 6) + "…"); + } else { + mTitleView.setHomeNameTxt(deviceNumList.get(position)); + }*/ + mTitleView.setHomeNameTxt(deviceNumList.get(position)); + setDefaultHouse(); + queryHouses(); + } + } + } + }; + } + + private void getPhoneChatInfo(final String userId, final int senderType) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("id", userId); + map.put("senderType", senderType + ""); + netWorkUtil.requestGetByAsy(PHONE_USER_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getPhoneChatInfo", "onSuccess()" + respone); + PhoneChatInfoEntity obj = JSON.parseObject(respone, PhoneChatInfoEntity.class); + if (1 == obj.getFlag()) { + SharedpreferencesUtil.save(userId + "_" + senderType, respone); + Calendar calendar = Calendar.getInstance(); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + SharedpreferencesUtil.save("lastHour", String.valueOf(hour)); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void queryHouses() { + HashMap map = new HashMap<>(); + map.put("autoCreate", "0"); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.QUERY_HOUSES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryHouses2", "UpdatePwActivity onSuccess()" + respone); + HomeListEntity obj = JSON.parseObject(respone, HomeListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(MainChatFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + MainChatFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/RecyclerViewChatFragment.java b/app/src/main/java/com/yonsz/z1/chat/RecyclerViewChatFragment.java new file mode 100644 index 0000000..75eb5db --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/RecyclerViewChatFragment.java @@ -0,0 +1,483 @@ +package com.yonsz.z1.chat; + +import android.graphics.Rect; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewTreeObserver; + +import com.yonsz.z1.chat.adapter.ChatListViewAdapter; +import com.yonsz.z1.chat.adapter.ChatRecyclerAdapter; +import com.yonsz.z1.chat.animator.SlideInOutBottomItemAnimator; +import com.yonsz.z1.chat.common.ChatConst; +import com.yonsz.z1.chat.db.ChatMessageBean; +import com.yonsz.z1.chat.utils.KeyBoardUtils; +import com.yonsz.z1.chat.widget.AudioRecordButton; +import com.yonsz.z1.chat.widget.pulltorefresh.PullToRefreshRecyclerView; +import com.yonsz.z1.chat.widget.pulltorefresh.WrapContentLinearLayoutManager; +import com.yonsz.z1.chat.widget.pulltorefresh.base.PullToRefreshView; + +import java.lang.ref.WeakReference; +import java.util.List; + +public class RecyclerViewChatFragment extends BaseChatFragment { + /** + * 接收文字 + */ + String content = ""; + /** + * 发送图片 + */ + int i = 0; + /** + * 接收图片 + */ + String filePath = ""; + /** + * 接收语音 + */ + float seconds = 0.0f; + String voiceFilePath = ""; + private PullToRefreshRecyclerView myList; + private ChatRecyclerAdapter tbAdapter; + private SendMessageHandler sendMessageHandler; + private WrapContentLinearLayoutManager wcLinearLayoutManger; + /** + * 为了模拟接收延迟 + */ + private Handler receriveHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case 0: + // receriveMsgText(content); + break; + case 1: + receriveImageText(filePath); + break; + case 2: + receriveVoiceText(seconds, voiceFilePath); + break; + default: + break; + } + } + }; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + protected void findView() { + super.findView(); + pullList.setSlideView(new PullToRefreshView(getContext()).getSlideView(PullToRefreshView.RECYCLERVIEW)); + myList = (PullToRefreshRecyclerView) pullList.returnMylist(); + } + + + @Override + public void onDestroy() { + tblist.clear(); + tbAdapter.notifyDataSetChanged(); + myList.setAdapter(null); + sendMessageHandler.removeCallbacksAndMessages(null); + super.onDestroy(); + } + + @Override + protected void init() { + // setTitle("RecyclerView"); + tbAdapter = new ChatRecyclerAdapter(getContext(), tblist); + wcLinearLayoutManger = new WrapContentLinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false); + myList.setLayoutManager(wcLinearLayoutManger); + myList.setItemAnimator(new SlideInOutBottomItemAnimator(myList)); + myList.setAdapter(tbAdapter); + sendMessageHandler = new SendMessageHandler(this); + tbAdapter.isPicRefresh = true; + tbAdapter.notifyDataSetChanged(); + tbAdapter.setSendErrorListener(new ChatRecyclerAdapter.SendErrorListener() { + + @Override + public void onClick(int position) { + // TODO Auto-generated method stub + ChatMessageBean tbub = tblist.get(position); + if (tbub.getType() == ChatRecyclerAdapter.TO_USER_VOICE) { + sendVoice(tbub.getUserVoiceTime(), tbub.getUserVoicePath()); + tblist.remove(position); + } else if (tbub.getType() == ChatRecyclerAdapter.TO_USER_IMG) { + sendImage(tbub.getImageLocal()); + tblist.remove(position); + } + } + + }); + tbAdapter.setVoiceIsReadListener(new ChatRecyclerAdapter.VoiceIsRead() { + + @Override + public void voiceOnClick(int position) { + // TODO Auto-generated method stub + for (int i = 0; i < tbAdapter.unReadPosition.size(); i++) { + if (tbAdapter.unReadPosition.get(i).equals(position + "")) { + tbAdapter.unReadPosition.remove(i); + break; + } + } + } + + }); + voiceBtn.setAudioFinishRecorderListener(new AudioRecordButton.AudioFinishRecorderListener() { + + @Override + public void onFinished(float seconds, String filePath) { + // TODO Auto-generated method stub + sendVoice(seconds, filePath); + } + + @Override + public void onStart() { + // TODO Auto-generated method stub + tbAdapter.stopPlayVoice(); + } + }); + myList.setOnScrollListener(new RecyclerView.OnScrollListener() { + + @Override + public void onScrollStateChanged(RecyclerView view, int scrollState) { + // TODO Auto-generated method stub + switch (scrollState) { + case RecyclerView.SCROLL_STATE_IDLE: + tbAdapter.handler.removeCallbacksAndMessages(null); + tbAdapter.setIsGif(true); + tbAdapter.isPicRefresh = false; + tbAdapter.notifyDataSetChanged(); + break; + case RecyclerView.SCROLL_STATE_DRAGGING: + tbAdapter.handler.removeCallbacksAndMessages(null); + tbAdapter.setIsGif(false); + tbAdapter.isPicRefresh = true; + reset(); + KeyBoardUtils.hideKeyBoard(getContext(), + mEditTextContent); + break; + default: + break; + } + } + + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + } + }); + controlKeyboardLayout(activityRootView, pullList); + super.init(); + } + + /** + * @param root 最外层布局 + * @param needToScrollView 要滚动的布局,就是说在键盘弹出的时候,你需要试图滚动上去的View,在键盘隐藏的时候,他又会滚动到原来的位置的布局 + */ + private void controlKeyboardLayout(final View root, final View needToScrollView) { + root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + + private Rect r = new Rect(); + + @Override + public void onGlobalLayout() { + //获取当前界面可视部分 + getActivity().getWindow().getDecorView().getWindowVisibleDisplayFrame(r); + //获取屏幕的高度 + int screenHeight = getActivity().getWindow().getDecorView().getRootView().getHeight(); + //此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数 + int heightDifference = screenHeight - r.bottom; + int recyclerHeight = 0; + if (wcLinearLayoutManger != null) { + recyclerHeight = wcLinearLayoutManger.getRecyclerHeight(); + } + if (heightDifference == 0 || heightDifference == bottomStatusHeight) { + needToScrollView.scrollTo(0, 0); + } else { + if (heightDifference < recyclerHeight) { + int contentHeight = wcLinearLayoutManger == null ? 0 : wcLinearLayoutManger.getHeight(); + if (recyclerHeight < contentHeight) { + listSlideHeight = heightDifference - (contentHeight - recyclerHeight); + needToScrollView.scrollTo(0, listSlideHeight); + } else { + listSlideHeight = heightDifference; + needToScrollView.scrollTo(0, listSlideHeight); + } + } else { + listSlideHeight = 0; + } + } + } + }); + } + + @Override + protected void loadRecords(List pagelist) { + isDown = true; + if (nowPage == 1) { + tblist.clear(); + } + // pagelist = mChatDbManager.loadPages(page, number); + position = pagelist.size(); + if (pagelist.size() != 0) { + pagelist.addAll(tblist); + tblist.clear(); + tblist.addAll(pagelist); + if (imageList != null) { + imageList.clear(); + } + if (imagePosition != null) { + imagePosition.clear(); + } + int key = 0; + int position = 0; + for (ChatMessageBean cmb : tblist) { + if (cmb.getType() == ChatListViewAdapter.FROM_USER_IMG || cmb.getType() == ChatListViewAdapter.TO_USER_IMG) { + imageList.add(cmb.getImageLocal()); + imagePosition.put(key, position); + position++; + } + key++; + } + tbAdapter.setImageList(imageList); + tbAdapter.setImagePosition(imagePosition); + sendMessageHandler.sendEmptyMessage(PULL_TO_REFRESH_DOWN); + /*if (page == 0) { + pullList.refreshComplete(); + pullList.setPullGone(); + } else { + page--; + }*/ + } else { + if (page == 0) { + pullList.refreshComplete(); + // TODO: 2018/11/27 先把不能下拉给注释掉 + // pullList.setPullGone(); + } + } + } + + /** + * 发送文字右边 + */ + @Override + protected void sendMessage(final String message, final String exceptionType) { + new Thread(new Runnable() { + @Override + public void run() { + String content; + if (TextUtils.isEmpty(mEditTextContent.getText().toString())) { + content = message; + } else { + content = mEditTextContent.getText().toString(); + } + tblist.add(getTbub(userName, ChatListViewAdapter.TO_USER_MSG, content, null, null, + null, null, null, 0f, ChatConst.COMPLETED, exceptionType)); + sendMessageHandler.sendEmptyMessage(SEND_OK); + RecyclerViewChatFragment.this.content = content; + // receriveHandler.sendEmptyMessageDelayed(0, 1000); + } + }).start(); + } + + /** + * 发送文字左边 + */ + @Override + protected void receriveMsgText(final String content, final String deviceVersion, final String exceptionType, final String macId) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + String message = content; + ChatMessageBean tbub = new ChatMessageBean(); + tbub.setUserName(userName); + String time = returnTime(); + tbub.setUserContent(message); + tbub.setTime(time); + tbub.setDeviceVersion(deviceVersion); + if (!TextUtils.isEmpty(exceptionType)) { + tbub.setExceptionType(Integer.parseInt(exceptionType)); + } + tbub.setUserName(macId); + tbub.setUserId(macId); + tbub.setType(ChatListViewAdapter.FROM_USER_MSG); + tblist.add(tbub); + sendMessageHandler.sendEmptyMessage(RECERIVE_OK); + mChatDbManager.insert(tbub); + } + }).start(); + } + + + /*private void receriveMsgText(final String content) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + String message = content; + ChatMessageBean tbub = new ChatMessageBean(); + tbub.setUserName(userName); + String time = returnTime(); + tbub.setUserContent(message); + tbub.setTime(time); + tbub.setType(ChatListViewAdapter.FROM_USER_MSG); + tblist.add(tbub); + sendMessageHandler.sendEmptyMessage(RECERIVE_OK); + mChatDbManager.insert(tbub); + } + }).start(); + }*/ + + @Override + protected void sendImage(final String filePath) { + new Thread(new Runnable() { + @Override + public void run() { + if (i == 0) { + tblist.add(getTbub(userName, ChatListViewAdapter.TO_USER_IMG, null, null, null, filePath, null, null, + 0f, ChatConst.SENDING, null)); + } else if (i == 1) { + tblist.add(getTbub(userName, ChatListViewAdapter.TO_USER_IMG, null, null, null, filePath, null, null, + 0f, ChatConst.SENDERROR, null)); + } else if (i == 2) { + tblist.add(getTbub(userName, ChatListViewAdapter.TO_USER_IMG, null, null, null, filePath, null, null, + 0f, ChatConst.COMPLETED, null)); + i = -1; + } + imageList.add(tblist.get(tblist.size() - 1).getImageLocal()); + imagePosition.put(tblist.size() - 1, imageList.size() - 1); + sendMessageHandler.sendEmptyMessage(SEND_OK); + RecyclerViewChatFragment.this.filePath = filePath; + receriveHandler.sendEmptyMessageDelayed(1, 3000); + i++; + } + }).start(); + } + + private void receriveImageText(final String filePath) { + new Thread(new Runnable() { + @Override + public void run() { + ChatMessageBean tbub = new ChatMessageBean(); + tbub.setUserName(userName); + String time = returnTime(); + tbub.setTime(time); + tbub.setImageLocal(filePath); + tbub.setType(ChatListViewAdapter.FROM_USER_IMG); + tblist.add(tbub); + imageList.add(tblist.get(tblist.size() - 1).getImageLocal()); + imagePosition.put(tblist.size() - 1, imageList.size() - 1); + sendMessageHandler.sendEmptyMessage(RECERIVE_OK); + mChatDbManager.insert(tbub); + } + }).start(); + } + + /** + * 发送语音 + */ + @Override + protected void sendVoice(final float seconds, final String filePath) { + new Thread(new Runnable() { + @Override + public void run() { + tblist.add(getTbub(userName, ChatListViewAdapter.TO_USER_VOICE, null, null, null, null, filePath, + null, seconds, ChatConst.SENDING, null)); + sendMessageHandler.sendEmptyMessage(SEND_OK); + RecyclerViewChatFragment.this.seconds = seconds; + voiceFilePath = filePath; + receriveHandler.sendEmptyMessageDelayed(2, 3000); + } + }).start(); + } + + private void receriveVoiceText(final float seconds, final String filePath) { + new Thread(new Runnable() { + @Override + public void run() { + ChatMessageBean tbub = new ChatMessageBean(); + tbub.setUserName(userName); + String time = returnTime(); + tbub.setTime(time); + tbub.setUserVoiceTime(seconds); + tbub.setUserVoicePath(filePath); + tbAdapter.unReadPosition.add(tblist.size() + ""); + tbub.setType(ChatListViewAdapter.FROM_USER_VOICE); + tblist.add(tbub); + sendMessageHandler.sendEmptyMessage(RECERIVE_OK); + mChatDbManager.insert(tbub); + } + }).start(); + } + + @Override + public void onClick(View v) { + + } + + static class SendMessageHandler extends Handler { + WeakReference mActivity; + + SendMessageHandler(RecyclerViewChatFragment activity) { + mActivity = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + RecyclerViewChatFragment theActivity = mActivity.get(); + if (theActivity != null) { + switch (msg.what) { + case REFRESH: + theActivity.tbAdapter.isPicRefresh = true; + theActivity.tbAdapter.notifyDataSetChanged(); + int position = theActivity.tbAdapter.getItemCount() - 1 < 0 ? 0 : theActivity.tbAdapter.getItemCount() - 1; + theActivity.myList.smoothScrollToPosition(position); + break; + case SEND_OK: + theActivity.mEditTextContent.setText(""); + theActivity.tbAdapter.isPicRefresh = true; + theActivity.tbAdapter.notifyItemInserted(theActivity.tblist + .size() - 1); + theActivity.myList.smoothScrollToPosition(theActivity.tbAdapter.getItemCount() - 1); + break; + case RECERIVE_OK: + theActivity.tbAdapter.isPicRefresh = true; + theActivity.tbAdapter.notifyItemInserted(theActivity.tblist + .size() - 1); + theActivity.myList.smoothScrollToPosition(theActivity.tbAdapter.getItemCount() - 1); + break; + case PULL_TO_REFRESH_DOWN: + theActivity.pullList.refreshComplete(); + theActivity.tbAdapter.notifyDataSetChanged(); + theActivity.myList.smoothScrollToPosition(theActivity.position - 1); + theActivity.isDown = false; + break; + default: + break; + } + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/adapter/ChatListViewAdapter.java b/app/src/main/java/com/yonsz/z1/chat/adapter/ChatListViewAdapter.java new file mode 100644 index 0000000..c4b09ff --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/adapter/ChatListViewAdapter.java @@ -0,0 +1,824 @@ +package com.yonsz.z1.chat.adapter; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.AnimationDrawable; +import android.media.MediaPlayer; +import android.os.Handler; +import android.os.Message; +import android.util.DisplayMetrics; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.LinearInterpolator; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.chat.ImageViewActivity; +import com.yonsz.z1.chat.common.ChatConst; +import com.yonsz.z1.chat.db.ChatMessageBean; +import com.yonsz.z1.chat.utils.FileSaveUtil; +import com.yonsz.z1.chat.utils.ImageCheckoutUtil; +import com.yonsz.z1.chat.widget.BubbleImageView; +import com.yonsz.z1.chat.widget.GifTextView; +import com.yonsz.z1.chat.widget.MediaManager; +import com.yonsz.z1.listener.NoDoubleClickListener; + +import java.io.File; +import java.lang.ref.WeakReference; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * Created by Mao Jiqing on 2016/9/28. + */ +public class ChatListViewAdapter extends BaseAdapter { + public static final int FROM_USER_MSG = 0;//接收消息类型 + public static final int TO_USER_MSG = 1;//发送消息类型 + public static final int FROM_USER_IMG = 2;//接收消息类型 + public static final int TO_USER_IMG = 3;//发送消息类型 + public static final int FROM_USER_VOICE = 4;//接收消息类型 + public static final int TO_USER_VOICE = 5;//发送消息类型 + public MyHandler handler; + public List unReadPosition = new ArrayList(); + public boolean isPicRefresh = true; + private Context context; + private List userList = new ArrayList(); + private ArrayList imageList = new ArrayList(); + private HashMap imagePosition = new HashMap(); + private int mMinItemWith;// 设置对话框的最大宽度和最小宽度 + private int mMaxItemWith; + private Animation an; + private SendErrorListener sendErrorListener; + private VoiceIsRead voiceIsRead; + private int voicePlayPosition = -1; + private LayoutInflater mLayoutInflater; + private boolean isGif = true; + + public ChatListViewAdapter(Context context) { + this.context = context; + mLayoutInflater = LayoutInflater.from(context); + // 获取系统宽度 + WindowManager wManager = (WindowManager) context + .getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics outMetrics = new DisplayMetrics(); + wManager.getDefaultDisplay().getMetrics(outMetrics); + mMaxItemWith = (int) (outMetrics.widthPixels * 0.5f); + mMinItemWith = (int) (outMetrics.widthPixels * 0.15f); + handler = new MyHandler(this); + } + + @SuppressLint("SimpleDateFormat") + public static String returnTime() { + SimpleDateFormat sDateFormat = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + String date = sDateFormat.format(new java.util.Date()); + return date; + } + + public void setSendErrorListener(SendErrorListener sendErrorListener) { + this.sendErrorListener = sendErrorListener; + } + + public void setVoiceIsReadListener(VoiceIsRead voiceIsRead) { + this.voiceIsRead = voiceIsRead; + } + + public void setIsGif(boolean isGif) { + this.isGif = isGif; + } + + public void setUserList(List userList) { + this.userList = userList; + } + + public void setImageList(ArrayList imageList) { + this.imageList = imageList; + } + + public void setImagePosition(HashMap imagePosition) { + this.imagePosition = imagePosition; + } + + @Override + public int getCount() { + return userList.size(); + } + + @Override + public Object getItem(int i) { + return userList.get(i); + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public int getItemViewType(int position) { + // TODO Auto-generated method stub + return userList.get(position).getType(); + } + + @Override + public int getViewTypeCount() { + // TODO Auto-generated method stub + return 6; + } + + @SuppressLint("InflateParams") + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + ChatMessageBean tbub = userList.get(i); + switch (getItemViewType(i)) { + case FROM_USER_MSG: + FromUserMsgViewHolder holder; + if (view == null) { + holder = new FromUserMsgViewHolder(); + view = mLayoutInflater.inflate(R.layout.layout_msgfrom_list_item, null); + holder.headicon = (ImageView) view + .findViewById(R.id.tb_other_user_icon); + holder.chat_time = (TextView) view.findViewById(R.id.chat_time); + holder.content = (GifTextView) view.findViewById(R.id.content); + view.setTag(holder); + } else { + holder = (FromUserMsgViewHolder) view.getTag(); + } + fromMsgUserLayout((FromUserMsgViewHolder) holder, tbub, i); + break; + case FROM_USER_IMG: + FromUserImageViewHolder holder1; + if (view == null) { + holder1 = new FromUserImageViewHolder(); + view = mLayoutInflater.inflate(R.layout.layout_imagefrom_list_item, null); + holder1.headicon = (ImageView) view + .findViewById(R.id.tb_other_user_icon); + holder1.chat_time = (TextView) view.findViewById(R.id.chat_time); + holder1.image_Msg = (BubbleImageView) view + .findViewById(R.id.image_message); + view.setTag(holder1); + } else { + holder1 = (FromUserImageViewHolder) view.getTag(); + } + fromImgUserLayout((FromUserImageViewHolder) holder1, tbub, i); + break; + case FROM_USER_VOICE: + FromUserVoiceViewHolder holder2; + if (view == null) { + holder2 = new FromUserVoiceViewHolder(); + view = mLayoutInflater.inflate(R.layout.layout_voicefrom_list_item, null); + holder2.headicon = (ImageView) view + .findViewById(R.id.tb_other_user_icon); + holder2.chat_time = (TextView) view.findViewById(R.id.chat_time); + holder2.voice_group = (LinearLayout) view + .findViewById(R.id.voice_group); + holder2.voice_time = (TextView) view + .findViewById(R.id.voice_time); + holder2.receiver_voice_unread = (View) view + .findViewById(R.id.receiver_voice_unread); + holder2.voice_image = (FrameLayout) view + .findViewById(R.id.voice_receiver_image); + holder2.voice_anim = (View) view + .findViewById(R.id.id_receiver_recorder_anim); + view.setTag(holder2); + } else { + holder2 = (FromUserVoiceViewHolder) view.getTag(); + } + fromVoiceUserLayout((FromUserVoiceViewHolder) holder2, tbub, i); + break; + case TO_USER_MSG: + ToUserMsgViewHolder holder3; + if (view == null) { + holder3 = new ToUserMsgViewHolder(); + view = mLayoutInflater.inflate(R.layout.layout_msgto_list_item, null); + holder3.headicon = (ImageView) view + .findViewById(R.id.tb_my_user_icon); + holder3.chat_time = (TextView) view + .findViewById(R.id.mychat_time); + holder3.content = (GifTextView) view + .findViewById(R.id.mycontent); + holder3.sendFailImg = (ImageView) view + .findViewById(R.id.mysend_fail_img); + view.setTag(holder3); + } else { + holder3 = (ToUserMsgViewHolder) view.getTag(); + } + toMsgUserLayout((ToUserMsgViewHolder) holder3, tbub, i); + break; + case TO_USER_IMG: + ToUserImgViewHolder holder4; + if (view == null) { + holder4 = new ToUserImgViewHolder(); + view = mLayoutInflater.inflate(R.layout.layout_imageto_list_item, null); + holder4.headicon = (ImageView) view + .findViewById(R.id.tb_my_user_icon); + holder4.chat_time = (TextView) view + .findViewById(R.id.mychat_time); + holder4.sendFailImg = (ImageView) view + .findViewById(R.id.mysend_fail_img); + holder4.image_group = (LinearLayout) view + .findViewById(R.id.image_group); + holder4.image_Msg = (BubbleImageView) view + .findViewById(R.id.image_message); + view.setTag(holder4); + } else { + holder4 = (ToUserImgViewHolder) view.getTag(); + } + toImgUserLayout((ToUserImgViewHolder) holder4, tbub, i); + break; + case TO_USER_VOICE: + ToUserVoiceViewHolder holder5; + if (view == null) { + holder5 = new ToUserVoiceViewHolder(); + view = mLayoutInflater.inflate(R.layout.layout_voiceto_list_item, null); + holder5.headicon = (ImageView) view + .findViewById(R.id.tb_my_user_icon); + holder5.chat_time = (TextView) view + .findViewById(R.id.mychat_time); + holder5.voice_group = (LinearLayout) view + .findViewById(R.id.voice_group); + holder5.voice_time = (TextView) view + .findViewById(R.id.voice_time); + holder5.voice_image = (FrameLayout) view + .findViewById(R.id.voice_image); + holder5.voice_anim = (View) view + .findViewById(R.id.id_recorder_anim); + holder5.sendFailImg = (ImageView) view + .findViewById(R.id.mysend_fail_img); + view.setTag(holder5); + } else { + holder5 = (ToUserVoiceViewHolder) view.getTag(); + } + toVoiceUserLayout((ToUserVoiceViewHolder) holder5, tbub, i); + break; + } + + return view; + } + + private void fromMsgUserLayout(final FromUserMsgViewHolder holder, final ChatMessageBean tbub, final int position) { + holder.headicon.setBackgroundResource(R.drawable.icon_voice_a1); + /* time */ + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + holder.content.setVisibility(View.VISIBLE); + holder.content.setSpanText(handler, tbub.getUserContent(), isGif); + } + + private void fromImgUserLayout(final FromUserImageViewHolder holder, final ChatMessageBean tbub, final int position) { + holder.headicon.setBackgroundResource(R.drawable.icon_voice_a1); + /* time */ + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + if (isPicRefresh) { + // holder.image_Msg.setImageBitmap(null); + final String imageSrc = tbub.getImageLocal() == null ? "" : tbub + .getImageLocal(); + final String imageUrlSrc = tbub.getImageUrl() == null ? "" : tbub + .getImageUrl(); + final String imageIconUrl = tbub.getImageIconUrl() == null ? "" + : tbub.getImageIconUrl(); + File file = new File(imageSrc); + final boolean hasLocal = !imageSrc.equals("") + && FileSaveUtil.isFileExists(file); + int res; + res = R.drawable.chatfrom_bg_focused; + if (hasLocal) { + holder.image_Msg.setLocalImageBitmap(ImageCheckoutUtil.getLoacalBitmap(imageSrc), + res); + } else { + holder.image_Msg.load(imageIconUrl, res, R.mipmap.cygs_cs); + } + holder.image_Msg.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // TODO Auto-generated method stub + stopPlayVoice(); + Intent intent = new Intent(context, ImageViewActivity.class); + intent.putStringArrayListExtra("images", imageList); + intent.putExtra("clickedIndex", imagePosition.get(position)); + context.startActivity(intent); + } + + }); + } + + } + + private void fromVoiceUserLayout(final FromUserVoiceViewHolder holder, final ChatMessageBean tbub, final int position) { + holder.headicon.setBackgroundResource(R.drawable.icon_voice_a1); + /* time */ + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + + holder.voice_group.setVisibility(View.VISIBLE); + if (holder.receiver_voice_unread != null) + holder.receiver_voice_unread.setVisibility(View.GONE); + if (holder.receiver_voice_unread != null && unReadPosition != null) { + for (String unRead : unReadPosition) { + if (unRead.equals(position + "")) { + holder.receiver_voice_unread + .setVisibility(View.VISIBLE); + break; + } + } + } + AnimationDrawable drawable; + holder.voice_anim.setId(position); + if (position == voicePlayPosition) { + holder.voice_anim + .setBackgroundResource(R.mipmap.receiver_voice_node_playing003); + holder.voice_anim + .setBackgroundResource(R.drawable.voice_play_receiver); + drawable = (AnimationDrawable) holder.voice_anim + .getBackground(); + drawable.start(); + } else { + holder.voice_anim + .setBackgroundResource(R.mipmap.receiver_voice_node_playing003); + } + holder.voice_group.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (holder.receiver_voice_unread != null) + holder.receiver_voice_unread.setVisibility(View.GONE); + holder.voice_anim + .setBackgroundResource(R.mipmap.receiver_voice_node_playing003); + stopPlayVoice(); + voicePlayPosition = holder.voice_anim.getId(); + AnimationDrawable drawable; + holder.voice_anim + .setBackgroundResource(R.drawable.voice_play_receiver); + drawable = (AnimationDrawable) holder.voice_anim + .getBackground(); + drawable.start(); + String voicePath = tbub.getUserVoicePath() == null ? "" : tbub + .getUserVoicePath(); + File file = new File(voicePath); + if (!(!voicePath.equals("") && FileSaveUtil + .isFileExists(file))) { + voicePath = tbub.getUserVoiceUrl() == null ? "" + : tbub.getUserVoiceUrl(); + } + if (voiceIsRead != null) { + voiceIsRead.voiceOnClick(position); + } + MediaManager.playSound(voicePath, + new MediaPlayer.OnCompletionListener() { + + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayPosition = -1; + holder.voice_anim + .setBackgroundResource(R.mipmap.receiver_voice_node_playing003); + } + }); + } + + }); + float voiceTime = tbub.getUserVoiceTime(); + BigDecimal b = new BigDecimal(voiceTime); + float f1 = b.setScale(1, BigDecimal.ROUND_HALF_UP).floatValue(); + holder.voice_time.setText(f1 + "\""); + ViewGroup.LayoutParams lParams = holder.voice_image + .getLayoutParams(); + lParams.width = (int) (mMinItemWith + mMaxItemWith / 60f + * tbub.getUserVoiceTime()); + holder.voice_image.setLayoutParams(lParams); + } + + private void toMsgUserLayout(final ToUserMsgViewHolder holder, final ChatMessageBean tbub, final int position) { + holder.headicon.setBackgroundResource(R.drawable.icon_voice_owner); + holder.headicon.setImageDrawable(context.getResources() + .getDrawable(R.drawable.icon_voice_owner)); + /* time */ + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + + holder.content.setVisibility(View.VISIBLE); + holder.content.setSpanText(handler, tbub.getUserContent(), isGif); + } + + private void toImgUserLayout(final ToUserImgViewHolder holder, final ChatMessageBean tbub, final int position) { + holder.headicon.setBackgroundResource(R.drawable.icon_voice_owner); + switch (tbub.getSendState()) { + case ChatConst.SENDING: + an = AnimationUtils.loadAnimation(context, + R.anim.update_loading_progressbar_anim); + LinearInterpolator lin = new LinearInterpolator(); + an.setInterpolator(lin); + an.setRepeatCount(-1); + holder.sendFailImg + .setBackgroundResource(R.mipmap.xsearch_loading); + holder.sendFailImg.startAnimation(an); + an.startNow(); + holder.sendFailImg.setVisibility(View.VISIBLE); + break; + + case ChatConst.COMPLETED: + holder.sendFailImg.clearAnimation(); + holder.sendFailImg.setVisibility(View.GONE); + break; + + case ChatConst.SENDERROR: + holder.sendFailImg.clearAnimation(); + holder.sendFailImg + .setBackgroundResource(R.mipmap.msg_state_fail_resend_pressed); + holder.sendFailImg.setVisibility(View.VISIBLE); + holder.sendFailImg.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // TODO Auto-generated method stub + if (sendErrorListener != null) { + sendErrorListener.onClick(position); + } + } + + }); + break; + default: + break; + } + holder.headicon.setImageDrawable(context.getResources() + .getDrawable(R.drawable.icon_voice_owner)); + + /* time */ + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + + if (isPicRefresh) { + // holder.image_Msg.setImageBitmap(null); + holder.image_group.setVisibility(View.VISIBLE); + final String imageSrc = tbub.getImageLocal() == null ? "" : tbub + .getImageLocal(); + final String imageUrlSrc = tbub.getImageUrl() == null ? "" : tbub + .getImageUrl(); + final String imageIconUrl = tbub.getImageIconUrl() == null ? "" + : tbub.getImageIconUrl(); + File file = new File(imageSrc); + final boolean hasLocal = !imageSrc.equals("") + && FileSaveUtil.isFileExists(file); + int res; + res = R.drawable.chatto_bg_focused; + if (hasLocal) { + holder.image_Msg.setLocalImageBitmap(ImageCheckoutUtil.getLoacalBitmap(imageSrc), + res); + } else { + holder.image_Msg.load(imageIconUrl, res, R.mipmap.cygs_cs); + } + holder.image_Msg.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + // TODO Auto-generated method stub + stopPlayVoice(); + Intent intent = new Intent(context, ImageViewActivity.class); + intent.putStringArrayListExtra("images", imageList); + intent.putExtra("clickedIndex", imagePosition.get(position)); + context.startActivity(intent); + } + + }); + } + } + + private void toVoiceUserLayout(final ToUserVoiceViewHolder holder, final ChatMessageBean tbub, final int position) { + holder.headicon.setBackgroundResource(R.drawable.icon_voice_owner); + switch (tbub.getSendState()) { + case ChatConst.SENDING: + an = AnimationUtils.loadAnimation(context, + R.anim.update_loading_progressbar_anim); + LinearInterpolator lin = new LinearInterpolator(); + an.setInterpolator(lin); + an.setRepeatCount(-1); + holder.sendFailImg + .setBackgroundResource(R.mipmap.xsearch_loading); + holder.sendFailImg.startAnimation(an); + an.startNow(); + holder.sendFailImg.setVisibility(View.VISIBLE); + break; + + case ChatConst.COMPLETED: + holder.sendFailImg.clearAnimation(); + holder.sendFailImg.setVisibility(View.GONE); + break; + + case ChatConst.SENDERROR: + holder.sendFailImg.clearAnimation(); + holder.sendFailImg + .setBackgroundResource(R.mipmap.msg_state_fail_resend_pressed); + holder.sendFailImg.setVisibility(View.VISIBLE); + holder.sendFailImg.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // TODO Auto-generated method stub + if (sendErrorListener != null) { + sendErrorListener.onClick(position); + } + } + + }); + break; + default: + break; + } + holder.headicon.setImageDrawable(context.getResources() + .getDrawable(R.drawable.icon_voice_owner)); + + /* time */ + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + holder.voice_group.setVisibility(View.VISIBLE); + if (holder.receiver_voice_unread != null) + holder.receiver_voice_unread.setVisibility(View.GONE); + if (holder.receiver_voice_unread != null && unReadPosition != null) { + for (String unRead : unReadPosition) { + if (unRead.equals(position + "")) { + holder.receiver_voice_unread + .setVisibility(View.VISIBLE); + break; + } + } + } + AnimationDrawable drawable; + holder.voice_anim.setId(position); + if (position == voicePlayPosition) { + holder.voice_anim.setBackgroundResource(R.mipmap.adj); + holder.voice_anim + .setBackgroundResource(R.drawable.voice_play_send); + drawable = (AnimationDrawable) holder.voice_anim + .getBackground(); + drawable.start(); + } else { + holder.voice_anim.setBackgroundResource(R.mipmap.adj); + } + holder.voice_group.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (holder.receiver_voice_unread != null) + holder.receiver_voice_unread.setVisibility(View.GONE); + holder.voice_anim.setBackgroundResource(R.mipmap.adj); + stopPlayVoice(); + voicePlayPosition = holder.voice_anim.getId(); + AnimationDrawable drawable; + holder.voice_anim + .setBackgroundResource(R.drawable.voice_play_send); + drawable = (AnimationDrawable) holder.voice_anim + .getBackground(); + drawable.start(); + String voicePath = tbub.getUserVoiceUrl() == null ? "" + : tbub.getUserVoiceUrl(); + if (voiceIsRead != null) { + voiceIsRead.voiceOnClick(position); + } + MediaManager.playSound(voicePath, + new MediaPlayer.OnCompletionListener() { + + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayPosition = -1; + holder.voice_anim + .setBackgroundResource(R.mipmap.adj); + } + }); + } + + }); + float voiceTime = tbub.getUserVoiceTime(); + BigDecimal b = new BigDecimal(voiceTime); + float f1 = b.setScale(1, BigDecimal.ROUND_HALF_UP).floatValue(); + holder.voice_time.setText(f1 + "\""); + ViewGroup.LayoutParams lParams = holder.voice_image + .getLayoutParams(); + lParams.width = (int) (mMinItemWith + mMaxItemWith / 60f + * tbub.getUserVoiceTime()); + holder.voice_image.setLayoutParams(lParams); + } + + @SuppressLint("SimpleDateFormat") + public String getTime(String time, String before) { + String show_time = null; + if (before != null) { + try { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + java.util.Date now = df.parse(time); + java.util.Date date = df.parse(before); + long l = now.getTime() - date.getTime(); + long day = l / (24 * 60 * 60 * 1000); + long hour = (l / (60 * 60 * 1000) - day * 24); + long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60); + if (min >= 1) { + show_time = time.substring(11); + } + } catch (Exception e) { + e.printStackTrace(); + } + } else { + show_time = time.substring(11); + } + String getDay = getDay(time); + if (show_time != null && getDay != null) + show_time = getDay + " " + show_time; + return show_time; + } + + @SuppressLint("SimpleDateFormat") + public String getDay(String time) { + String showDay = null; + String nowTime = returnTime(); + try { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + java.util.Date now = df.parse(nowTime); + java.util.Date date = df.parse(time); + long l = now.getTime() - date.getTime(); + long day = l / (24 * 60 * 60 * 1000); + if (day >= 365) { + showDay = time.substring(0, 10); + } else if (day >= 1 && day < 365) { + showDay = time.substring(5, 10); + } + } catch (Exception e) { + e.printStackTrace(); + } + return showDay; + } + + public void stopPlayVoice() { + if (voicePlayPosition != -1) { + View voicePlay = (View) ((Activity) context) + .findViewById(voicePlayPosition); + if (voicePlay != null) { + if (getItemViewType(voicePlayPosition) == FROM_USER_VOICE) { + voicePlay + .setBackgroundResource(R.mipmap.receiver_voice_node_playing003); + } else { + voicePlay.setBackgroundResource(R.mipmap.adj); + } + } + MediaManager.pause(); + voicePlayPosition = -1; + } + } + + public interface SendErrorListener { + public void onClick(int position); + } + + public interface VoiceIsRead { + public void voiceOnClick(int position); + } + + public static class MyHandler extends Handler { + private final WeakReference mTbAdapter; + + public MyHandler(ChatListViewAdapter tbAdapter) { + mTbAdapter = new WeakReference(tbAdapter); + } + + @Override + public void handleMessage(Message msg) { + ChatListViewAdapter tbAdapter = mTbAdapter.get(); + + if (tbAdapter != null) { + } + } + } + + public class FromUserMsgViewHolder { + public ImageView headicon; + public TextView chat_time; + public GifTextView content; + } + + public class FromUserImageViewHolder { + public ImageView headicon; + public TextView chat_time; + public BubbleImageView image_Msg; + } + + public class FromUserVoiceViewHolder { + public ImageView headicon; + public TextView chat_time; + public LinearLayout voice_group; + public TextView voice_time; + public FrameLayout voice_image; + public View receiver_voice_unread; + public View voice_anim; + } + + public class ToUserMsgViewHolder { + public ImageView headicon; + public TextView chat_time; + public GifTextView content; + public ImageView sendFailImg; + } + + public class ToUserImgViewHolder { + public ImageView headicon; + public TextView chat_time; + public LinearLayout image_group; + public BubbleImageView image_Msg; + public ImageView sendFailImg; + } + + public class ToUserVoiceViewHolder { + public ImageView headicon; + public TextView chat_time; + public LinearLayout voice_group; + public TextView voice_time; + public FrameLayout voice_image; + public View receiver_voice_unread; + public View voice_anim; + public ImageView sendFailImg; + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/adapter/ChatRecyclerAdapter.java b/app/src/main/java/com/yonsz/z1/chat/adapter/ChatRecyclerAdapter.java new file mode 100644 index 0000000..d4153cb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/adapter/ChatRecyclerAdapter.java @@ -0,0 +1,946 @@ +package com.yonsz.z1.chat.adapter; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.AnimationDrawable; +import android.media.MediaPlayer; +import android.os.Handler; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.LinearInterpolator; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.bumptech.glide.Glide; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.chat.ImageViewActivity; +import com.yonsz.z1.chat.common.ChatConst; +import com.yonsz.z1.chat.db.ChatMessageBean; +import com.yonsz.z1.chat.utils.FileSaveUtil; +import com.yonsz.z1.chat.widget.BubbleImageView; +import com.yonsz.z1.chat.widget.CustomShapeTransformation; +import com.yonsz.z1.chat.widget.GifTextView; +import com.yonsz.z1.chat.widget.MediaManager; +import com.yonsz.z1.database.entity.entity4.PhoneChatInfoEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.utils.DateUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.CircleImageView; + +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * Created by Mao Jiqing on 2016/9/29. + */ +public class ChatRecyclerAdapter extends + RecyclerView.Adapter { + public static final int FROM_USER_MSG = 0;//接收消息类型 + public static final int TO_USER_MSG = 1;//发送消息类型 + public static final int FROM_USER_IMG = 2;//接收消息类型 + public static final int TO_USER_IMG = 3;//发送消息类型 + public static final int FROM_USER_VOICE = 4;//接收消息类型 + public static final int TO_USER_VOICE = 5;//发送消息类型 + public Handler handler; + public List unReadPosition = new ArrayList(); + public boolean isPicRefresh = true; + private Context context; + private List userList = new ArrayList(); + private ArrayList imageList = new ArrayList(); + private HashMap imagePosition = new HashMap(); + private int mMinItemWith;// 设置对话框的最大宽度和最小宽度 + private int mMaxItemWith; + private Animation an; + private SendErrorListener sendErrorListener; + private VoiceIsRead voiceIsRead; + private int voicePlayPosition = -1; + private LayoutInflater mLayoutInflater; + private boolean isGif = true; + + public ChatRecyclerAdapter(Context context, List userList) { + this.context = context; + this.userList = userList; + mLayoutInflater = LayoutInflater.from(context); + // 获取系统宽度 + WindowManager wManager = (WindowManager) context + .getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics outMetrics = new DisplayMetrics(); + wManager.getDefaultDisplay().getMetrics(outMetrics); + mMaxItemWith = (int) (outMetrics.widthPixels * 0.5f); + mMinItemWith = (int) (outMetrics.widthPixels * 0.15f); + handler = new Handler(); + } + + @SuppressLint("SimpleDateFormat") + public static String returnTime() { + SimpleDateFormat sDateFormat = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + String date = sDateFormat.format(new java.util.Date()); + return date; + } + + public static Bitmap getLoacalBitmap(String url) { + try { + ByteArrayOutputStream out; + FileInputStream fis = new FileInputStream(url); + BufferedInputStream bis = new BufferedInputStream(fis); + out = new ByteArrayOutputStream(); + @SuppressWarnings("unused") + int hasRead = 0; + byte[] buffer = new byte[1024 * 2]; + while ((hasRead = bis.read(buffer)) > 0) { + // 读出多少数据,向输出流中写入多少 + out.write(buffer); + out.flush(); + } + out.close(); + fis.close(); + bis.close(); + byte[] data = out.toByteArray(); + // 长宽减半 + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inSampleSize = 3; + return BitmapFactory.decodeByteArray(data, 0, data.length, opts); + } catch (FileNotFoundException e) { + e.printStackTrace(); + return null; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + + public void setSendErrorListener(SendErrorListener sendErrorListener) { + this.sendErrorListener = sendErrorListener; + } + + public void setVoiceIsReadListener(VoiceIsRead voiceIsRead) { + this.voiceIsRead = voiceIsRead; + } + + public void setIsGif(boolean isGif) { + this.isGif = isGif; + } + + public void setImageList(ArrayList imageList) { + this.imageList = imageList; + } + + public void setImagePosition(HashMap imagePosition) { + this.imagePosition = imagePosition; + } + + /** + * @param parent + * @param viewType + * @return + */ + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = null; + RecyclerView.ViewHolder holder = null; + switch (viewType) { + case FROM_USER_MSG: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_msgfrom_list_item, parent, false); + holder = new FromUserMsgViewHolder(view); + break; + case FROM_USER_IMG: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_imagefrom_list_item, parent, false); + holder = new FromUserImageViewHolder(view); + break; + case FROM_USER_VOICE: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_voicefrom_list_item, parent, false); + holder = new FromUserVoiceViewHolder(view); + break; + case TO_USER_MSG: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_msgto_list_item, parent, false); + holder = new ToUserMsgViewHolder(view); + break; + case TO_USER_IMG: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_imageto_list_item, parent, false); + holder = new ToUserImgViewHolder(view); + break; + case TO_USER_VOICE: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_voiceto_list_item, parent, false); + holder = new ToUserVoiceViewHolder(view); + break; + } + return holder; + } + + /** + * @param holder + * @param position + */ + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + ChatMessageBean tbub = userList.get(position); + int itemViewType = getItemViewType(position); + switch (itemViewType) { + case FROM_USER_MSG: + fromMsgUserLayout((FromUserMsgViewHolder) holder, tbub, position); + break; + case FROM_USER_IMG: + fromImgUserLayout((FromUserImageViewHolder) holder, tbub, position); + break; + case FROM_USER_VOICE: + fromVoiceUserLayout((FromUserVoiceViewHolder) holder, tbub, position); + break; + case TO_USER_MSG: + toMsgUserLayout((ToUserMsgViewHolder) holder, tbub, position); + break; + case TO_USER_IMG: + toImgUserLayout((ToUserImgViewHolder) holder, tbub, position); + break; + case TO_USER_VOICE: + toVoiceUserLayout((ToUserVoiceViewHolder) holder, tbub, position); + break; + } + } + + @Override + public int getItemViewType(int position) { + return userList.get(position).getType(); + } + + @Override + public int getItemCount() { + return userList.size(); + } + + private void fromMsgUserLayout(final FromUserMsgViewHolder holder, final ChatMessageBean tbub, final int position) { + String userInfo = SharedpreferencesUtil.get(tbub.getUserId() + "_" + tbub.getSenderType(), ""); + if (tbub.getExceptionType() != 4) { + holder.content.setBackgroundResource(R.drawable.icon_dialog_right); + } else { + holder.content.setBackgroundResource(R.drawable.icon_dialog_error); + } + if (!TextUtils.isEmpty(userInfo)) { + PhoneChatInfoEntity obj = JSON.parseObject(userInfo, PhoneChatInfoEntity.class); + if (obj.getData().getSenderType() == 3 && null != obj.getData().getName() && !TextUtils.isEmpty(obj.getData().getName()) && !obj.getData().getName().equals("系统") && !obj.getData().getName().equals("机器人")) { + holder.deviceName.setVisibility(View.VISIBLE); + holder.deviceName.setText(obj.getData().getName()); + ImageLoader.getInstance().displayImage(obj.getData().getAvatar(), holder.headicon, UniKongApp.getHiApp().getImageLoaderOption()); + } else { + holder.deviceName.setVisibility(View.GONE); + holder.headicon.setImageResource(R.drawable.icon_voice_robot); + } + } else { + holder.deviceName.setVisibility(View.GONE); + holder.headicon.setImageResource(R.drawable.icon_voice_robot); + } + switch (tbub.getSenderType()) { + case 1://系统 + holder.headicon.setImageResource(R.drawable.icon_voice_robot); + break; + case 3://小艾 + if (!TextUtils.isEmpty(userInfo)) { + PhoneChatInfoEntity obj = JSON.parseObject(userInfo, PhoneChatInfoEntity.class); + if (obj.getData().getSenderType() == 3 && null != obj.getData().getName() && !TextUtils.isEmpty(obj.getData().getName()) && !obj.getData().getName().equals("系统") && !obj.getData().getName().equals("机器人")) { + holder.deviceName.setVisibility(View.VISIBLE); + holder.deviceName.setText(obj.getData().getName()); + ImageLoader.getInstance().displayImage(obj.getData().getAvatar(), holder.headicon, UniKongApp.getHiApp().getImageLoaderOption()); + } else { + holder.deviceName.setVisibility(View.GONE); + holder.headicon.setImageResource(R.drawable.icon_voice_robot); + } + } + break; + case 4://机器人 + holder.headicon.setImageResource(R.drawable.icon_voice_robot); + break; + case 5://帮助 + holder.headicon.setImageResource(R.drawable.icon_voice_help); + break; + case 6://第三方音箱 + holder.deviceName.setText(tbub.getUserName()); + holder.deviceName.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage(tbub.getImageIconUrl(), holder.headicon, UniKongApp.getHiApp().getImageLoaderOption()); + break; + default: + if (tbub.getUserId().equals(tbub.getUserName()) && !TextUtils.isEmpty(tbub.getUserName())) { + String useInfo = SharedpreferencesUtil.get(tbub.getUserId() + "_" + 3, ""); + if (!TextUtils.isEmpty(useInfo)) { + PhoneChatInfoEntity obj = JSON.parseObject(useInfo, PhoneChatInfoEntity.class); + if (!TextUtils.isEmpty(obj.getData().getName()) && !obj.getData().getName().equals("系统") && !obj.getData().getName().equals("机器人")) { + holder.deviceName.setVisibility(View.VISIBLE); + holder.deviceName.setText(obj.getData().getName()); + ImageLoader.getInstance().displayImage(obj.getData().getAvatar(), holder.headicon, UniKongApp.getHiApp().getImageLoaderOption()); + } else { + holder.deviceName.setVisibility(View.GONE); + holder.headicon.setImageResource(R.drawable.icon_voice_robot); + } + } else { + holder.deviceName.setVisibility(View.GONE); + holder.headicon.setImageResource(R.drawable.icon_voice_robot); + } + } else { + holder.deviceName.setVisibility(View.GONE); + holder.headicon.setImageResource(R.drawable.icon_voice_robot); + } + + /*if (tbub.getDeviceVersion().equals("2")) { + holder.headicon.setBackgroundResource(R.drawable.icon_voice_a2_online); + } else if (tbub.getDeviceVersion().equals("3")) { + holder.headicon.setBackgroundResource(R.drawable.icon_voice_robot); + } else { + holder.headicon.setBackgroundResource(R.drawable.icon_a1_online); + }*/ + break; + } + + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + holder.content.setVisibility(View.VISIBLE); + holder.content.setSpanText(handler, tbub.getUserContent(), isGif); + } + + private void toMsgUserLayout(final ToUserMsgViewHolder holder, final ChatMessageBean tbub, final int position) { + if (tbub.getSenderType() == 2 && !TextUtils.isEmpty(tbub.getUserId())) { + String userInfo = SharedpreferencesUtil.get(tbub.getUserId() + "_" + tbub.getSenderType(), ""); + if (!TextUtils.isEmpty(userInfo)) { + PhoneChatInfoEntity obj = JSON.parseObject(userInfo, PhoneChatInfoEntity.class); + if (!TextUtils.isEmpty(obj.getData().getAvatar())) { + ImageLoader.getInstance().displayImage(obj.getData().getAvatar(), holder.headicon, UniKongApp.getHiApp().getImageLoaderOption()); + holder.ownerName.setText(obj.getData().getName()); + } + holder.ownerName.setVisibility(View.VISIBLE); + } else { + holder.ownerName.setVisibility(View.GONE); + holder.headicon.setImageDrawable(context.getResources().getDrawable(R.drawable.icon_voice_owner)); + } + } else { + holder.ownerName.setVisibility(View.GONE); + holder.headicon.setImageDrawable(context.getResources().getDrawable(R.drawable.icon_voice_owner)); + } + /* time */ + if (tbub.getExceptionType() != 4) { + holder.content.setBackgroundResource(R.drawable.icon_dialog_right1); + } else { + holder.content.setBackgroundResource(R.drawable.icon_dialog_error1); + } + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + holder.content.setVisibility(View.VISIBLE); + holder.content.setSpanText(handler, tbub.getUserContent(), isGif); + } + + private void fromImgUserLayout(final FromUserImageViewHolder holder, final ChatMessageBean tbub, final int position) { + holder.headicon.setImageResource(R.drawable.icon_voice_robot); + /* time */ + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + // if (isPicRefresh) { + final String imageSrc = tbub.getImageLocal() == null ? "" : tbub + .getImageLocal(); + final String imageUrlSrc = tbub.getImageUrl() == null ? "" : tbub + .getImageUrl(); + final String imageIconUrl = tbub.getImageIconUrl() == null ? "" + : tbub.getImageIconUrl(); + File file = new File(imageSrc); + final boolean hasLocal = !imageSrc.equals("") + && FileSaveUtil.isFileExists(file); + int res; + res = R.drawable.chatfrom_bg_focused; + // Glide.with(context).load(imageSrc).transform(new CustomShapeTransformation(context, res)).into(holder.image_Msg); + Glide.with(context).load(imageSrc).placeholder(R.mipmap.cygs_cs).transform(new CustomShapeTransformation(context, res)).into(holder.image_Msg); + + holder.image_Msg.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // TODO Auto-generated method stub + stopPlayVoice(); + Intent intent = new Intent(context, ImageViewActivity.class); + intent.putStringArrayListExtra("images", imageList); + intent.putExtra("clickedIndex", imagePosition.get(position)); + context.startActivity(intent); + } + + }); + // } + + } + + private void fromVoiceUserLayout(final FromUserVoiceViewHolder holder, final ChatMessageBean tbub, final int position) { + holder.headicon.setImageResource(R.drawable.icon_voice_robot); + /* time */ + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + + holder.voice_group.setVisibility(View.VISIBLE); + if (holder.receiver_voice_unread != null) + holder.receiver_voice_unread.setVisibility(View.GONE); + if (holder.receiver_voice_unread != null && unReadPosition != null) { + for (String unRead : unReadPosition) { + if (unRead.equals(position + "")) { + holder.receiver_voice_unread + .setVisibility(View.VISIBLE); + break; + } + } + } + AnimationDrawable drawable; + holder.voice_anim.setId(position); + if (position == voicePlayPosition) { + holder.voice_anim + .setBackgroundResource(R.mipmap.receiver_voice_node_playing003); + holder.voice_anim + .setBackgroundResource(R.drawable.voice_play_receiver); + drawable = (AnimationDrawable) holder.voice_anim + .getBackground(); + drawable.start(); + } else { + holder.voice_anim + .setBackgroundResource(R.mipmap.receiver_voice_node_playing003); + } + holder.voice_group.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (holder.receiver_voice_unread != null) + holder.receiver_voice_unread.setVisibility(View.GONE); + holder.voice_anim + .setBackgroundResource(R.mipmap.receiver_voice_node_playing003); + stopPlayVoice(); + voicePlayPosition = holder.voice_anim.getId(); + AnimationDrawable drawable; + holder.voice_anim + .setBackgroundResource(R.drawable.voice_play_receiver); + drawable = (AnimationDrawable) holder.voice_anim + .getBackground(); + drawable.start(); + String voicePath = tbub.getUserVoicePath() == null ? "" : tbub + .getUserVoicePath(); + File file = new File(voicePath); + if (!(!voicePath.equals("") && FileSaveUtil + .isFileExists(file))) { + voicePath = tbub.getUserVoiceUrl() == null ? "" + : tbub.getUserVoiceUrl(); + } + if (voiceIsRead != null) { + voiceIsRead.voiceOnClick(position); + } + MediaManager.playSound(voicePath, + new MediaPlayer.OnCompletionListener() { + + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayPosition = -1; + holder.voice_anim + .setBackgroundResource(R.mipmap.receiver_voice_node_playing003); + } + }); + } + + }); + float voiceTime = tbub.getUserVoiceTime(); + BigDecimal b = new BigDecimal(voiceTime); + float f1 = b.setScale(1, BigDecimal.ROUND_HALF_UP).floatValue(); + holder.voice_time.setText(f1 + "\""); + ViewGroup.LayoutParams lParams = holder.voice_image + .getLayoutParams(); + lParams.width = (int) (mMinItemWith + mMaxItemWith / 60f + * tbub.getUserVoiceTime()); + holder.voice_image.setLayoutParams(lParams); + } + + private void toImgUserLayout(final ToUserImgViewHolder holder, final ChatMessageBean tbub, final int position) { + holder.headicon.setBackgroundResource(R.drawable.icon_voice_owner); + switch (tbub.getSendState()) { + case ChatConst.SENDING: + an = AnimationUtils.loadAnimation(context, + R.anim.update_loading_progressbar_anim); + LinearInterpolator lin = new LinearInterpolator(); + an.setInterpolator(lin); + an.setRepeatCount(-1); + holder.sendFailImg + .setBackgroundResource(R.mipmap.xsearch_loading); + holder.sendFailImg.startAnimation(an); + an.startNow(); + holder.sendFailImg.setVisibility(View.VISIBLE); + break; + + case ChatConst.COMPLETED: + holder.sendFailImg.clearAnimation(); + holder.sendFailImg.setVisibility(View.GONE); + break; + + case ChatConst.SENDERROR: + holder.sendFailImg.clearAnimation(); + holder.sendFailImg + .setBackgroundResource(R.mipmap.msg_state_fail_resend_pressed); + holder.sendFailImg.setVisibility(View.VISIBLE); + holder.sendFailImg.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // TODO Auto-generated method stub + if (sendErrorListener != null) { + sendErrorListener.onClick(position); + } + } + + }); + break; + default: + break; + } + // holder.headicon.setImageDrawable(context.getResources() + // .getDrawable(R.mipmap.grzx_tx_s)); + + /* time */ + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + + // if (isPicRefresh) { + holder.image_group.setVisibility(View.VISIBLE); + final String imageSrc = tbub.getImageLocal() == null ? "" : tbub + .getImageLocal(); + final String imageUrlSrc = tbub.getImageUrl() == null ? "" : tbub + .getImageUrl(); + final String imageIconUrl = tbub.getImageIconUrl() == null ? "" + : tbub.getImageIconUrl(); + File file = new File(imageSrc); + final boolean hasLocal = !imageSrc.equals("") + && FileSaveUtil.isFileExists(file); + int res; + res = R.drawable.chatto_bg_focused; + // Glide.with(context).load(imageSrc).transform(new CustomShapeTransformation(context, res)).into(holder.image_Msg); + Glide.with(context).load(imageSrc).placeholder(R.mipmap.cygs_cs).transform(new CustomShapeTransformation(context, res)).into(holder.image_Msg); + + holder.image_Msg.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + // TODO Auto-generated method stub + stopPlayVoice(); + Intent intent = new Intent(context, ImageViewActivity.class); + intent.putStringArrayListExtra("images", imageList); + intent.putExtra("clickedIndex", imagePosition.get(position)); + context.startActivity(intent); + } + + }); + // } + } + + private void toVoiceUserLayout(final ToUserVoiceViewHolder holder, final ChatMessageBean tbub, final int position) { + holder.headicon.setBackgroundResource(R.drawable.icon_voice_owner); + switch (tbub.getSendState()) { + case ChatConst.SENDING: + an = AnimationUtils.loadAnimation(context, + R.anim.update_loading_progressbar_anim); + LinearInterpolator lin = new LinearInterpolator(); + an.setInterpolator(lin); + an.setRepeatCount(-1); + holder.sendFailImg + .setBackgroundResource(R.mipmap.xsearch_loading); + holder.sendFailImg.startAnimation(an); + an.startNow(); + holder.sendFailImg.setVisibility(View.VISIBLE); + break; + + case ChatConst.COMPLETED: + holder.sendFailImg.clearAnimation(); + holder.sendFailImg.setVisibility(View.GONE); + break; + + case ChatConst.SENDERROR: + holder.sendFailImg.clearAnimation(); + holder.sendFailImg + .setBackgroundResource(R.mipmap.msg_state_fail_resend_pressed); + holder.sendFailImg.setVisibility(View.VISIBLE); + holder.sendFailImg.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // TODO Auto-generated method stub + if (sendErrorListener != null) { + sendErrorListener.onClick(position); + } + } + + }); + break; + default: + break; + } + holder.headicon.setImageDrawable(context.getResources() + .getDrawable(R.drawable.icon_voice_owner)); + + /* time */ + if (position != 0) { + String showTime = getTime(tbub.getTime(), userList.get(position - 1) + .getTime()); + if (showTime != null) { + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } else { + holder.chat_time.setVisibility(View.GONE); + } + } else { + String showTime = getTime(tbub.getTime(), null); + holder.chat_time.setVisibility(View.VISIBLE); + holder.chat_time.setText(showTime); + } + holder.voice_group.setVisibility(View.VISIBLE); + if (holder.receiver_voice_unread != null) + holder.receiver_voice_unread.setVisibility(View.GONE); + if (holder.receiver_voice_unread != null && unReadPosition != null) { + for (String unRead : unReadPosition) { + if (unRead.equals(position + "")) { + holder.receiver_voice_unread + .setVisibility(View.VISIBLE); + break; + } + } + } + AnimationDrawable drawable; + holder.voice_anim.setId(position); + if (position == voicePlayPosition) { + holder.voice_anim.setBackgroundResource(R.mipmap.adj); + holder.voice_anim + .setBackgroundResource(R.drawable.voice_play_send); + drawable = (AnimationDrawable) holder.voice_anim + .getBackground(); + drawable.start(); + } else { + holder.voice_anim.setBackgroundResource(R.mipmap.adj); + } + holder.voice_group.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (holder.receiver_voice_unread != null) + holder.receiver_voice_unread.setVisibility(View.GONE); + holder.voice_anim.setBackgroundResource(R.mipmap.adj); + stopPlayVoice(); + voicePlayPosition = holder.voice_anim.getId(); + AnimationDrawable drawable; + holder.voice_anim + .setBackgroundResource(R.drawable.voice_play_send); + drawable = (AnimationDrawable) holder.voice_anim + .getBackground(); + drawable.start(); + String voicePath = tbub.getUserVoiceUrl() == null ? "" + : tbub.getUserVoiceUrl(); + if (voiceIsRead != null) { + voiceIsRead.voiceOnClick(position); + } + MediaManager.playSound(voicePath, + new MediaPlayer.OnCompletionListener() { + + @Override + public void onCompletion(MediaPlayer mp) { + voicePlayPosition = -1; + holder.voice_anim + .setBackgroundResource(R.mipmap.adj); + } + }); + } + + }); + float voiceTime = tbub.getUserVoiceTime(); + BigDecimal b = new BigDecimal(voiceTime); + float f1 = b.setScale(1, BigDecimal.ROUND_HALF_UP).floatValue(); + holder.voice_time.setText(f1 + "\""); + ViewGroup.LayoutParams lParams = holder.voice_image + .getLayoutParams(); + lParams.width = (int) (mMinItemWith + mMaxItemWith / 60f + * tbub.getUserVoiceTime()); + holder.voice_image.setLayoutParams(lParams); + } + + @SuppressLint("SimpleDateFormat") + public String getTime(String time, String before) { + String show_time = null; + if (before != null) { + try { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + java.util.Date now = df.parse(time); + java.util.Date date = df.parse(before); + long l = now.getTime() - date.getTime(); + long day = l / (24 * 60 * 60 * 1000); + long hour = (l / (60 * 60 * 1000) - day * 24); + long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60); + if (min >= 3) { + show_time = time.substring(11); + } + } catch (Exception e) { + e.printStackTrace(); + } + } else { + show_time = time.substring(11); + } + String dateStr = DateUtil.getDateStr(time); + String getDay = getDay(time); + if (show_time != null && dateStr != null) + show_time = dateStr + " " + show_time; + return show_time; + } + + @SuppressLint("SimpleDateFormat") + public String getDay(String time) { + String showDay = null; + String nowTime = returnTime(); + try { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + java.util.Date now = df.parse(nowTime); + java.util.Date date = df.parse(time); + long l = now.getTime() - date.getTime(); + long day = l / (24 * 60 * 60 * 1000); + if (day >= 365) { + showDay = time.substring(0, 10); + } else if (day >= 1 && day < 365) { + showDay = time.substring(5, 10); + } + } catch (Exception e) { + e.printStackTrace(); + } + return showDay; + } + + public void stopPlayVoice() { + if (voicePlayPosition != -1) { + View voicePlay = (View) ((Activity) context) + .findViewById(voicePlayPosition); + if (voicePlay != null) { + if (getItemViewType(voicePlayPosition) == FROM_USER_VOICE) { + voicePlay + .setBackgroundResource(R.mipmap.receiver_voice_node_playing003); + } else { + voicePlay.setBackgroundResource(R.mipmap.adj); + } + } + MediaManager.pause(); + voicePlayPosition = -1; + } + } + + public interface SendErrorListener { + public void onClick(int position); + } + + public interface VoiceIsRead { + public void voiceOnClick(int position); + } + + class FromUserMsgViewHolder extends RecyclerView.ViewHolder { + private ImageView headicon; + private TextView chat_time; + private GifTextView content; + private TextView deviceName; + + public FromUserMsgViewHolder(View view) { + super(view); + headicon = (ImageView) view + .findViewById(R.id.tb_other_user_icon); + chat_time = (TextView) view.findViewById(R.id.chat_time); + deviceName = (TextView) view.findViewById(R.id.tv_device_icon); + content = (GifTextView) view.findViewById(R.id.content); + } + } + + class ToUserMsgViewHolder extends RecyclerView.ViewHolder { + private CircleImageView headicon; + private TextView chat_time; + private GifTextView content; + private ImageView sendFailImg; + private TextView ownerName; + + public ToUserMsgViewHolder(View view) { + super(view); + headicon = (CircleImageView) view + .findViewById(R.id.tb_my_user_icon); + chat_time = (TextView) view + .findViewById(R.id.mychat_time); + ownerName = (TextView) view + .findViewById(R.id.tv_owner_name); + content = (GifTextView) view + .findViewById(R.id.mycontent); + sendFailImg = (ImageView) view + .findViewById(R.id.mysend_fail_img); + } + } + + class FromUserImageViewHolder extends RecyclerView.ViewHolder { + private ImageView headicon; + private TextView chat_time; + private BubbleImageView image_Msg; + + public FromUserImageViewHolder(View view) { + super(view); + headicon = (ImageView) view + .findViewById(R.id.tb_other_user_icon); + chat_time = (TextView) view.findViewById(R.id.chat_time); + image_Msg = (BubbleImageView) view + .findViewById(R.id.image_message); + } + } + + class FromUserVoiceViewHolder extends RecyclerView.ViewHolder { + private ImageView headicon; + private TextView chat_time; + private LinearLayout voice_group; + private TextView voice_time; + private FrameLayout voice_image; + private View receiver_voice_unread; + private View voice_anim; + private View view_null; + + public FromUserVoiceViewHolder(View view) { + super(view); + headicon = (ImageView) view + .findViewById(R.id.tb_other_user_icon); + chat_time = (TextView) view.findViewById(R.id.chat_time); + voice_group = (LinearLayout) view + .findViewById(R.id.voice_group); + voice_time = (TextView) view + .findViewById(R.id.voice_time); + receiver_voice_unread = (View) view + .findViewById(R.id.receiver_voice_unread); + voice_image = (FrameLayout) view + .findViewById(R.id.voice_receiver_image); + voice_anim = (View) view + .findViewById(R.id.id_receiver_recorder_anim); + } + } + + class ToUserImgViewHolder extends RecyclerView.ViewHolder { + private ImageView headicon; + private TextView chat_time; + private LinearLayout image_group; + private BubbleImageView image_Msg; + private ImageView sendFailImg; + + public ToUserImgViewHolder(View view) { + super(view); + headicon = (ImageView) view + .findViewById(R.id.tb_my_user_icon); + chat_time = (TextView) view + .findViewById(R.id.mychat_time); + sendFailImg = (ImageView) view + .findViewById(R.id.mysend_fail_img); + image_group = (LinearLayout) view + .findViewById(R.id.image_group); + image_Msg = (BubbleImageView) view + .findViewById(R.id.image_message); + } + } + + class ToUserVoiceViewHolder extends RecyclerView.ViewHolder { + private ImageView headicon; + private TextView chat_time; + private LinearLayout voice_group; + private TextView voice_time; + private FrameLayout voice_image; + private View receiver_voice_unread; + private View voice_anim; + private ImageView sendFailImg; + + public ToUserVoiceViewHolder(View view) { + super(view); + headicon = (ImageView) view + .findViewById(R.id.tb_my_user_icon); + chat_time = (TextView) view + .findViewById(R.id.mychat_time); + voice_group = (LinearLayout) view + .findViewById(R.id.voice_group); + voice_time = (TextView) view + .findViewById(R.id.voice_time); + voice_image = (FrameLayout) view + .findViewById(R.id.voice_image); + voice_anim = (View) view + .findViewById(R.id.id_recorder_anim); + sendFailImg = (ImageView) view + .findViewById(R.id.mysend_fail_img); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/adapter/DataAdapter.java b/app/src/main/java/com/yonsz/z1/chat/adapter/DataAdapter.java new file mode 100644 index 0000000..d34ee6b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/adapter/DataAdapter.java @@ -0,0 +1,62 @@ +package com.yonsz.z1.chat.adapter; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import com.yonsz.z1.R; + +public class DataAdapter extends BaseAdapter { + + private String[] title; + private Context context; + public DataAdapter(Context context, String[] title) { + super(); + this.context = context; + this.title = title; + } + + @Override + public int getCount() { + return title.length; + } + + @Override + public Object getItem(int position) { + return title[position]; + } + + @Override + public long getItemId(int position) { + return position; + } + + @SuppressLint("InflateParams") + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + holder = new ViewHolder(); + convertView = LayoutInflater.from(context) + .inflate(R.layout.layout_mess_iv_listitem, null); + holder.money_Tv = (TextView) convertView + .findViewById(R.id.title); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.money_Tv.setText(title[position]); + return convertView; + } + + class ViewHolder { + + TextView money_Tv; + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/adapter/ExpressionAdapter.java b/app/src/main/java/com/yonsz/z1/chat/adapter/ExpressionAdapter.java new file mode 100644 index 0000000..d36c81b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/adapter/ExpressionAdapter.java @@ -0,0 +1,47 @@ +/** + * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. + * + * 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.yonsz.z1.chat.adapter; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import com.yonsz.z1.R; + +import java.util.List; + +public class ExpressionAdapter extends ArrayAdapter { + + public ExpressionAdapter(Context context, int textViewResourceId, List objects) { + super(context, textViewResourceId, objects); + } + + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if(convertView == null){ + convertView = View.inflate(getContext(), R.layout.layout_row_expression, null); + } + + ImageView imageView = (ImageView) convertView.findViewById(R.id.iv_expression); + + String filename = getItem(position); + int resId = getContext().getResources().getIdentifier(filename, "mipmap", getContext().getPackageName()); + imageView.setImageResource(resId); + + return convertView; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/adapter/ExpressionPagerAdapter.java b/app/src/main/java/com/yonsz/z1/chat/adapter/ExpressionPagerAdapter.java new file mode 100644 index 0000000..bf3cf60 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/adapter/ExpressionPagerAdapter.java @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. + * + * 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.yonsz.z1.chat.adapter; + +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.view.View; + +import java.util.List; + +public class ExpressionPagerAdapter extends PagerAdapter { + + private List views; + + public ExpressionPagerAdapter(List views) { + this.views = views; + } + + @Override + public int getCount() { + return views.size(); + } + + @Override + public boolean isViewFromObject(View arg0, Object arg1) { + return arg0 == arg1; + } + + @Override + public Object instantiateItem(View arg0, int arg1) { + ((ViewPager) arg0).addView(views.get(arg1)); + return views.get(arg1); + } + + @Override + public void destroyItem(View arg0, int arg1, Object arg2) { + ((ViewPager) arg0).removeView(views.get(arg1)); + + } + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/animator/BaseItemAnimator.java b/app/src/main/java/com/yonsz/z1/chat/animator/BaseItemAnimator.java new file mode 100644 index 0000000..73bf437 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/animator/BaseItemAnimator.java @@ -0,0 +1,611 @@ +package com.yonsz.z1.chat.animator; + +import android.animation.TimeInterpolator; +import android.animation.ValueAnimator; +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPropertyAnimatorCompat; +import android.support.v4.view.ViewPropertyAnimatorListener; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.SimpleItemAnimator; +import android.view.View; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Mao Jiqing on 2016/9/30. + */ +public abstract class BaseItemAnimator extends SimpleItemAnimator { + + /** + * RecyclerView + */ + protected RecyclerView mRecyclerView; + + //------------------------------------------------------------ + // Constructor + //------------------------------------------------------------ + + public BaseItemAnimator(RecyclerView recyclerView){ + mRecyclerView = recyclerView; + } + + //------------------------------------------------------------ + // Default Item Animator + //------------------------------------------------------------ + private static final boolean DEBUG = false; + + private ArrayList mPendingRemovals = new ArrayList<>(); + private ArrayList mPendingAdditions = new ArrayList<>(); + private ArrayList mPendingMoves = new ArrayList<>(); + private ArrayList mPendingChanges = new ArrayList<>(); + + private ArrayList> mAdditionsList = new ArrayList<>(); + private ArrayList> mMovesList = new ArrayList<>(); + private ArrayList> mChangesList = new ArrayList<>(); + + protected ArrayList mAddAnimations = new ArrayList<>(); + protected ArrayList mMoveAnimations = new ArrayList<>(); + protected ArrayList mRemoveAnimations = new ArrayList<>(); + protected ArrayList mChangeAnimations = new ArrayList<>(); + + private static class MoveInfo { + public RecyclerView.ViewHolder holder; + public int fromX, fromY, toX, toY; + + private MoveInfo(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) { + this.holder = holder; + this.fromX = fromX; + this.fromY = fromY; + this.toX = toX; + this.toY = toY; + } + } + + private static class ChangeInfo { + public RecyclerView.ViewHolder oldHolder, newHolder; + public int fromX, fromY, toX, toY; + private ChangeInfo(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder) { + this.oldHolder = oldHolder; + this.newHolder = newHolder; + } + + private ChangeInfo(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, + int fromX, int fromY, int toX, int toY) { + this(oldHolder, newHolder); + this.fromX = fromX; + this.fromY = fromY; + this.toX = toX; + this.toY = toY; + } + + @Override + public String toString() { + return "ChangeInfo{" + + "oldHolder=" + oldHolder + + ", newHolder=" + newHolder + + ", fromX=" + fromX + + ", fromY=" + fromY + + ", toX=" + toX + + ", toY=" + toY + + '}'; + } + } + + + @Override + public void runPendingAnimations() { + boolean removalsPending = !mPendingRemovals.isEmpty(); + boolean movesPending = !mPendingMoves.isEmpty(); + boolean changesPending = !mPendingChanges.isEmpty(); + boolean additionsPending = !mPendingAdditions.isEmpty(); + if (!removalsPending && !movesPending && !additionsPending && !changesPending) { + // nothing to animate + return; + } + // First, remove stuff + for (RecyclerView.ViewHolder holder : mPendingRemovals) { + animateRemoveImpl(holder); + } + mPendingRemovals.clear(); + // Next, move stuff + if (movesPending) { + final ArrayList moves = new ArrayList<>(); + moves.addAll(mPendingMoves); + mMovesList.add(moves); + mPendingMoves.clear(); + Runnable mover = new Runnable() { + @Override + public void run() { + for (MoveInfo moveInfo : moves) { + animateMoveImpl(moveInfo.holder, moveInfo.fromX, moveInfo.fromY, + moveInfo.toX, moveInfo.toY); + } + moves.clear(); + mMovesList.remove(moves); + } + }; + if (removalsPending) { + View view = moves.get(0).holder.itemView; + ViewCompat.postOnAnimationDelayed(view, mover, getRemoveDuration()); + } else { + mover.run(); + } + } + // Next, change stuff, to run in parallel with move animations + if (changesPending) { + final ArrayList changes = new ArrayList<>(); + changes.addAll(mPendingChanges); + mChangesList.add(changes); + mPendingChanges.clear(); + Runnable changer = new Runnable() { + @Override + public void run() { + for (ChangeInfo change : changes) { + animateChangeImpl(change); + } + changes.clear(); + mChangesList.remove(changes); + } + }; + if (removalsPending) { + RecyclerView.ViewHolder holder = changes.get(0).oldHolder; + ViewCompat.postOnAnimationDelayed(holder.itemView, changer, getRemoveDuration()); + } else { + changer.run(); + } + } + // Next, add stuff + if (additionsPending) { + final ArrayList additions = new ArrayList<>(); + additions.addAll(mPendingAdditions); + mAdditionsList.add(additions); + mPendingAdditions.clear(); + Runnable adder = new Runnable() { + public void run() { + for (RecyclerView.ViewHolder holder : additions) { + animateAddImpl(holder); + } + additions.clear(); + mAdditionsList.remove(additions); + } + }; + if (removalsPending || movesPending || changesPending) { + long removeDuration = removalsPending ? getRemoveDuration() : 0; + long moveDuration = movesPending ? getMoveDuration() : 0; + long changeDuration = changesPending ? getChangeDuration() : 0; + long totalDelay = removeDuration + Math.max(moveDuration, changeDuration); + View view = additions.get(0).itemView; + ViewCompat.postOnAnimationDelayed(view, adder, totalDelay); + } else { + adder.run(); + } + } + } + + @Override + public boolean animateAdd(final RecyclerView.ViewHolder holder) { + resetAnimation(holder); + prepareAnimateAdd(holder); + ViewCompat.setAlpha(holder.itemView, 0); + mPendingAdditions.add(holder); + return true; + } + + protected abstract void prepareAnimateAdd(final RecyclerView.ViewHolder holder); + + protected abstract void animateAddImpl(final RecyclerView.ViewHolder holder); + + @Override + public boolean animateRemove(final RecyclerView.ViewHolder holder) { + resetAnimation(holder); + mPendingRemovals.add(holder); + return true; + } + + protected abstract void animateRemoveImpl(final RecyclerView.ViewHolder holder); + + @Override + public boolean animateMove(final RecyclerView.ViewHolder holder, int fromX, int fromY, + int toX, int toY) { + final View view = holder.itemView; + fromX += ViewCompat.getTranslationX(holder.itemView); + fromY += ViewCompat.getTranslationY(holder.itemView); + resetAnimation(holder); + int deltaX = toX - fromX; + int deltaY = toY - fromY; + if (deltaX == 0 && deltaY == 0) { + dispatchMoveFinished(holder); + return false; + } + if (deltaX != 0) { + ViewCompat.setTranslationX(view, -deltaX); + } + if (deltaY != 0) { + ViewCompat.setTranslationY(view, -deltaY); + } + mPendingMoves.add(new MoveInfo(holder, fromX, fromY, toX, toY)); + return true; + } + + + private void animateMoveImpl(final RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) { + final View view = holder.itemView; + final int deltaX = toX - fromX; + final int deltaY = toY - fromY; + if (deltaX != 0) { + ViewCompat.animate(view).translationX(0); + } + if (deltaY != 0) { + ViewCompat.animate(view).translationY(0); + } + // TODO: make EndActions end listeners instead, since end actions aren't called when + // vpas are canceled (and can't end them. why?) + // need listener functionality in VPACompat for this. Ick. + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view); + mMoveAnimations.add(holder); + animation.setDuration(getMoveDuration()).setListener(new VpaListenerAdapter() { + @Override + public void onAnimationStart(View view) { + dispatchMoveStarting(holder); + } + @Override + public void onAnimationCancel(View view) { + if (deltaX != 0) { + ViewCompat.setTranslationX(view, 0); + } + if (deltaY != 0) { + ViewCompat.setTranslationY(view, 0); + } + } + @Override + public void onAnimationEnd(View view) { + animation.setListener(null); + dispatchMoveFinished(holder); + mMoveAnimations.remove(holder); + dispatchFinishedWhenDone(); + } + }).start(); + } + + @Override + public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, + int fromX, int fromY, int toX, int toY) { + if (oldHolder == newHolder) { + // Don't know how to run change animations when the same view holder is re-used. + // run a move animation to handle position changes. + return animateMove(oldHolder, fromX, fromY, toX, toY); + } + final float prevTranslationX = ViewCompat.getTranslationX(oldHolder.itemView); + final float prevTranslationY = ViewCompat.getTranslationY(oldHolder.itemView); + final float prevAlpha = ViewCompat.getAlpha(oldHolder.itemView); + resetAnimation(oldHolder); + int deltaX = (int) (toX - fromX - prevTranslationX); + int deltaY = (int) (toY - fromY - prevTranslationY); + // recover prev translation state after ending animation + ViewCompat.setTranslationX(oldHolder.itemView, prevTranslationX); + ViewCompat.setTranslationY(oldHolder.itemView, prevTranslationY); + ViewCompat.setAlpha(oldHolder.itemView, prevAlpha); + if (newHolder != null) { + // carry over translation values + resetAnimation(newHolder); + ViewCompat.setTranslationX(newHolder.itemView, -deltaX); + ViewCompat.setTranslationY(newHolder.itemView, -deltaY); + ViewCompat.setAlpha(newHolder.itemView, 0); + } + mPendingChanges.add(new ChangeInfo(oldHolder, newHolder, fromX, fromY, toX, toY)); + return true; + } + + private void animateChangeImpl(final ChangeInfo changeInfo) { + final RecyclerView.ViewHolder holder = changeInfo.oldHolder; + final View view = holder == null ? null : holder.itemView; + final RecyclerView.ViewHolder newHolder = changeInfo.newHolder; + final View newView = newHolder != null ? newHolder.itemView : null; + if (view != null) { + final ViewPropertyAnimatorCompat oldViewAnim = ViewCompat.animate(view).setDuration( + getChangeDuration()); + mChangeAnimations.add(changeInfo.oldHolder); + oldViewAnim.translationX(changeInfo.toX - changeInfo.fromX); + oldViewAnim.translationY(changeInfo.toY - changeInfo.fromY); + oldViewAnim.alpha(0).setListener(new VpaListenerAdapter() { + @Override + public void onAnimationStart(View view) { + dispatchChangeStarting(changeInfo.oldHolder, true); + } + + @Override + public void onAnimationEnd(View view) { + oldViewAnim.setListener(null); + ViewCompat.setAlpha(view, 1); + ViewCompat.setTranslationX(view, 0); + ViewCompat.setTranslationY(view, 0); + dispatchChangeFinished(changeInfo.oldHolder, true); + mChangeAnimations.remove(changeInfo.oldHolder); + dispatchFinishedWhenDone(); + } + }).start(); + } + if (newView != null) { + final ViewPropertyAnimatorCompat newViewAnimation = ViewCompat.animate(newView); + mChangeAnimations.add(changeInfo.newHolder); + newViewAnimation.translationX(0).translationY(0).setDuration(getChangeDuration()). + alpha(1).setListener(new VpaListenerAdapter() { + @Override + public void onAnimationStart(View view) { + dispatchChangeStarting(changeInfo.newHolder, false); + } + @Override + public void onAnimationEnd(View view) { + newViewAnimation.setListener(null); + ViewCompat.setAlpha(newView, 1); + ViewCompat.setTranslationX(newView, 0); + ViewCompat.setTranslationY(newView, 0); + dispatchChangeFinished(changeInfo.newHolder, false); + mChangeAnimations.remove(changeInfo.newHolder); + dispatchFinishedWhenDone(); + } + }).start(); + } + } + + private void endChangeAnimation(List infoList, RecyclerView.ViewHolder item) { + for (int i = infoList.size() - 1; i >= 0; i--) { + ChangeInfo changeInfo = infoList.get(i); + if (endChangeAnimationIfNecessary(changeInfo, item)) { + if (changeInfo.oldHolder == null && changeInfo.newHolder == null) { + infoList.remove(changeInfo); + } + } + } + } + + private void endChangeAnimationIfNecessary(ChangeInfo changeInfo) { + if (changeInfo.oldHolder != null) { + endChangeAnimationIfNecessary(changeInfo, changeInfo.oldHolder); + } + if (changeInfo.newHolder != null) { + endChangeAnimationIfNecessary(changeInfo, changeInfo.newHolder); + } + } + private boolean endChangeAnimationIfNecessary(ChangeInfo changeInfo, RecyclerView.ViewHolder item) { + boolean oldItem = false; + if (changeInfo.newHolder == item) { + changeInfo.newHolder = null; + } else if (changeInfo.oldHolder == item) { + changeInfo.oldHolder = null; + oldItem = true; + } else { + return false; + } + ViewCompat.setAlpha(item.itemView, 1); + ViewCompat.setTranslationX(item.itemView, 0); + ViewCompat.setTranslationY(item.itemView, 0); + dispatchChangeFinished(item, oldItem); + return true; + } + + @Override + public void endAnimation(RecyclerView.ViewHolder item) { + final View view = item.itemView; + // this will trigger end callback which should set properties to their target values. + ViewCompat.animate(view).cancel(); + // TODO if some other animations are chained to end, how do we cancel them as well? + for (int i = mPendingMoves.size() - 1; i >= 0; i--) { + MoveInfo moveInfo = mPendingMoves.get(i); + if (moveInfo.holder == item) { + ViewCompat.setTranslationY(view, 0); + ViewCompat.setTranslationX(view, 0); + dispatchMoveFinished(item); + mPendingMoves.remove(i); + } + } + endChangeAnimation(mPendingChanges, item); + if (mPendingRemovals.remove(item)) { + ViewCompat.setAlpha(view, 1); + dispatchRemoveFinished(item); + } + if (mPendingAdditions.remove(item)) { + ViewCompat.setAlpha(view, 1); + dispatchAddFinished(item); + } + + for (int i = mChangesList.size() - 1; i >= 0; i--) { + ArrayList changes = mChangesList.get(i); + endChangeAnimation(changes, item); + if (changes.isEmpty()) { + mChangesList.remove(i); + } + } + for (int i = mMovesList.size() - 1; i >= 0; i--) { + ArrayList moves = mMovesList.get(i); + for (int j = moves.size() - 1; j >= 0; j--) { + MoveInfo moveInfo = moves.get(j); + if (moveInfo.holder == item) { + ViewCompat.setTranslationY(view, 0); + ViewCompat.setTranslationX(view, 0); + dispatchMoveFinished(item); + moves.remove(j); + if (moves.isEmpty()) { + mMovesList.remove(i); + } + break; + } + } + } + for (int i = mAdditionsList.size() - 1; i >= 0; i--) { + ArrayList additions = mAdditionsList.get(i); + if (additions.remove(item)) { + ViewCompat.setAlpha(view, 1); + dispatchAddFinished(item); + if (additions.isEmpty()) { + mAdditionsList.remove(i); + } + } + } + + // animations should be ended by the cancel above. + //noinspection PointlessBooleanExpression,ConstantConditions + if (mRemoveAnimations.remove(item) && DEBUG) { + throw new IllegalStateException("after animation is cancelled, item should not be in " + + "mRemoveAnimations list"); + } + + //noinspection PointlessBooleanExpression,ConstantConditions + if (mAddAnimations.remove(item) && DEBUG) { + throw new IllegalStateException("after animation is cancelled, item should not be in " + + "mAddAnimations list"); + } + + //noinspection PointlessBooleanExpression,ConstantConditions + if (mChangeAnimations.remove(item) && DEBUG) { + throw new IllegalStateException("after animation is cancelled, item should not be in " + + "mChangeAnimations list"); + } + + //noinspection PointlessBooleanExpression,ConstantConditions + if (mMoveAnimations.remove(item) && DEBUG) { + throw new IllegalStateException("after animation is cancelled, item should not be in " + + "mMoveAnimations list"); + } + dispatchFinishedWhenDone(); + } + + private void resetAnimation(RecyclerView.ViewHolder holder) { + /*AnimatorCompatHelper.clearInterpolator(holder.itemView); + endAnimation(holder);*/ + + TimeInterpolator mDefaultInterpolator = new ValueAnimator().getInterpolator(); + holder.itemView.animate().setInterpolator(mDefaultInterpolator); + } + + @Override + public boolean isRunning() { + return (!mPendingAdditions.isEmpty() || + !mPendingChanges.isEmpty() || + !mPendingMoves.isEmpty() || + !mPendingRemovals.isEmpty() || + !mMoveAnimations.isEmpty() || + !mRemoveAnimations.isEmpty() || + !mAddAnimations.isEmpty() || + !mChangeAnimations.isEmpty() || + !mMovesList.isEmpty() || + !mAdditionsList.isEmpty() || + !mChangesList.isEmpty()); + } + + /** + * Check the state of currently pending and running animations. If there are none + * pending/running, call {@link #dispatchAnimationsFinished()} to notify any + * listeners. + */ + protected void dispatchFinishedWhenDone() { + if (!isRunning()) { + dispatchAnimationsFinished(); + } + } + + @Override + public void endAnimations() { + int count = mPendingMoves.size(); + for (int i = count - 1; i >= 0; i--) { + MoveInfo item = mPendingMoves.get(i); + View view = item.holder.itemView; + ViewCompat.setTranslationY(view, 0); + ViewCompat.setTranslationX(view, 0); + dispatchMoveFinished(item.holder); + mPendingMoves.remove(i); + } + count = mPendingRemovals.size(); + for (int i = count - 1; i >= 0; i--) { + RecyclerView.ViewHolder item = mPendingRemovals.get(i); + dispatchRemoveFinished(item); + mPendingRemovals.remove(i); + } + count = mPendingAdditions.size(); + for (int i = count - 1; i >= 0; i--) { + RecyclerView.ViewHolder item = mPendingAdditions.get(i); + View view = item.itemView; + ViewCompat.setAlpha(view, 1); + dispatchAddFinished(item); + mPendingAdditions.remove(i); + } + count = mPendingChanges.size(); + for (int i = count - 1; i >= 0; i--) { + endChangeAnimationIfNecessary(mPendingChanges.get(i)); + } + mPendingChanges.clear(); + if (!isRunning()) { + return; + } + + int listCount = mMovesList.size(); + for (int i = listCount - 1; i >= 0; i--) { + ArrayList moves = mMovesList.get(i); + count = moves.size(); + for (int j = count - 1; j >= 0; j--) { + MoveInfo moveInfo = moves.get(j); + RecyclerView.ViewHolder item = moveInfo.holder; + View view = item.itemView; + ViewCompat.setTranslationY(view, 0); + ViewCompat.setTranslationX(view, 0); + dispatchMoveFinished(moveInfo.holder); + moves.remove(j); + if (moves.isEmpty()) { + mMovesList.remove(moves); + } + } + } + listCount = mAdditionsList.size(); + for (int i = listCount - 1; i >= 0; i--) { + ArrayList additions = mAdditionsList.get(i); + count = additions.size(); + for (int j = count - 1; j >= 0; j--) { + RecyclerView.ViewHolder item = additions.get(j); + View view = item.itemView; + ViewCompat.setAlpha(view, 1); + dispatchAddFinished(item); + additions.remove(j); + if (additions.isEmpty()) { + mAdditionsList.remove(additions); + } + } + } + listCount = mChangesList.size(); + for (int i = listCount - 1; i >= 0; i--) { + ArrayList changes = mChangesList.get(i); + count = changes.size(); + for (int j = count - 1; j >= 0; j--) { + endChangeAnimationIfNecessary(changes.get(j)); + if (changes.isEmpty()) { + mChangesList.remove(changes); + } + } + } + + cancelAll(mRemoveAnimations); + cancelAll(mMoveAnimations); + cancelAll(mAddAnimations); + cancelAll(mChangeAnimations); + + dispatchAnimationsFinished(); + } + + void cancelAll(List viewHolders) { + for (int i = viewHolders.size() - 1; i >= 0; i--) { + ViewCompat.animate(viewHolders.get(i).itemView).cancel(); + } + } + + + protected static class VpaListenerAdapter implements ViewPropertyAnimatorListener { + @Override + public void onAnimationStart(View view) {} + + @Override + public void onAnimationEnd(View view) {} + + @Override + public void onAnimationCancel(View view) {} + }; +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/chat/animator/SlideInOutBottomItemAnimator.java b/app/src/main/java/com/yonsz/z1/chat/animator/SlideInOutBottomItemAnimator.java new file mode 100644 index 0000000..424d7b2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/animator/SlideInOutBottomItemAnimator.java @@ -0,0 +1,91 @@ +package com.yonsz.z1.chat.animator; + +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPropertyAnimatorCompat; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +/** + * Created by Mao Jiqing on 2016/9/30. + */ +public class SlideInOutBottomItemAnimator extends BaseItemAnimator { + + private float mOriginalY; + private float mDeltaY; + + public SlideInOutBottomItemAnimator(RecyclerView recyclerView) { + super(recyclerView); + } + + protected void animateRemoveImpl(final RecyclerView.ViewHolder holder) { + final View view = holder.itemView; + + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view); + mRemoveAnimations.add(holder); + animation.setDuration(getRemoveDuration()) + .alpha(0) + .translationY(+mDeltaY) + .setListener(new VpaListenerAdapter() { + @Override + public void onAnimationStart(View view) { + dispatchRemoveStarting(holder); + } + + @Override + public void onAnimationEnd(View view) { + animation.setListener(null); + ViewCompat.setAlpha(view, 1); + ViewCompat.setTranslationY(view, +mDeltaY); + dispatchRemoveFinished(holder); + mRemoveAnimations.remove(holder); + dispatchFinishedWhenDone(); + } + }).start(); + } + + @Override + protected void prepareAnimateAdd(RecyclerView.ViewHolder holder) { + retrieveItemPosition(holder); + ViewCompat.setTranslationY(holder.itemView, +mDeltaY); + } + + protected void animateAddImpl(final RecyclerView.ViewHolder holder) { + final View view = holder.itemView; + + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view); + mAddAnimations.add(holder); + animation.translationY(0) + .alpha(1) + .setDuration(getAddDuration()) + .setListener(new VpaListenerAdapter() { + @Override + public void onAnimationStart(View view) { + dispatchAddStarting(holder); + } + + @Override + public void onAnimationCancel(View view) { + ViewCompat.setAlpha(view, 1); + ViewCompat.setTranslationY(view, 0); + } + + @Override + public void onAnimationEnd(View view) { + animation.setListener(null); + ViewCompat.setAlpha(view, 1); + ViewCompat.setTranslationY(view, 0); + dispatchAddFinished(holder); + mAddAnimations.remove(holder); + dispatchFinishedWhenDone(); + } + }).start(); + } + + + private void retrieveItemPosition(final RecyclerView.ViewHolder holder) { + mOriginalY = mRecyclerView.getLayoutManager().getDecoratedTop(holder.itemView); + mDeltaY = mRecyclerView.getHeight() - mOriginalY; + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/chat/common/ChatConst.java b/app/src/main/java/com/yonsz/z1/chat/common/ChatConst.java new file mode 100644 index 0000000..a70bab2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/common/ChatConst.java @@ -0,0 +1,23 @@ +package com.yonsz.z1.chat.common; + +import android.support.annotation.IntDef; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Created by Mao Jiqing on 2016/10/15. + */ + +public class ChatConst { + public static final String LISTVIEW_DATABASE_NAME = "listview.db"; + public static final String RECYCLER_DATABASE_NAME = "recycler.db"; + public static final int SENDING = 0; + public static final int COMPLETED = 1; + public static final int SENDERROR = 2; + + @IntDef({SENDING, COMPLETED, SENDERROR}) + @Retention(RetentionPolicy.SOURCE) + public @interface SendState { + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/db/ChatDbManager.java b/app/src/main/java/com/yonsz/z1/chat/db/ChatDbManager.java new file mode 100644 index 0000000..1bb3980 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/db/ChatDbManager.java @@ -0,0 +1,17 @@ +package com.yonsz.z1.chat.db; + + +import com.yonsz.z1.chat.db.base.BaseManager; + +import org.greenrobot.greendao.AbstractDao; + +/** + * Created by Mao Jiqing on 2016/10/15. + */ + +public class ChatDbManager extends BaseManager { + @Override + public AbstractDao getAbstractDao() { + return daoSession.getChatMessageBeanDao(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/db/ChatMessageBean.java b/app/src/main/java/com/yonsz/z1/chat/db/ChatMessageBean.java new file mode 100644 index 0000000..9338911 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/db/ChatMessageBean.java @@ -0,0 +1,231 @@ +package com.yonsz.z1.chat.db; + +import com.yonsz.z1.chat.common.ChatConst; + +import org.greenrobot.greendao.annotation.Entity; +import org.greenrobot.greendao.annotation.Generated; +import org.greenrobot.greendao.annotation.Id; +import org.greenrobot.greendao.annotation.Property; + +/** + * Created by Mao Jiqing on 2016/10/15. + */ + + +@Entity +public class ChatMessageBean { + @Id + private Long id; + @Property(nameInDb = "UserId") + private String UserId; + @Property(nameInDb = "UserName") + private String UserName; + @Property(nameInDb = "UserHeadIcon") + private String UserHeadIcon; + @Property(nameInDb = "UserContent") + private String UserContent; + @Property(nameInDb = "time") + private String time; + @Property(nameInDb = "type") + private int type; + @Property(nameInDb = "messagetype") + private int messagetype; + @Property(nameInDb = "UserVoiceTime") + private float UserVoiceTime; + @Property(nameInDb = "UserVoicePath") + private String UserVoicePath; + @Property(nameInDb = "UserVoiceUrl") + private String UserVoiceUrl; + @Property(nameInDb = "sendState") + private @ChatConst.SendState + int sendState; + @Property(nameInDb = "imageUrl") + private String imageUrl; + @Property(nameInDb = "imageIconUrl") + private String imageIconUrl; + @Property(nameInDb = "imageLocal") + private String imageLocal; + private int exceptionType; + private int senderType; + private String deviceVersion; + private int addressId; + + @Generated(hash = 1463432601) + public ChatMessageBean(Long id, String UserId, String UserName, + String UserHeadIcon, String UserContent, String time, int type, + int messagetype, float UserVoiceTime, String UserVoicePath, + String UserVoiceUrl, int sendState, String imageUrl, + String imageIconUrl, String imageLocal) { + this.id = id; + this.UserId = UserId; + this.UserName = UserName; + this.UserHeadIcon = UserHeadIcon; + this.UserContent = UserContent; + this.time = time; + this.type = type; + this.messagetype = messagetype; + this.UserVoiceTime = UserVoiceTime; + this.UserVoicePath = UserVoicePath; + this.UserVoiceUrl = UserVoiceUrl; + this.sendState = sendState; + this.imageUrl = imageUrl; + this.imageIconUrl = imageIconUrl; + this.imageLocal = imageLocal; + } + + public int getSenderType() { + return senderType; + } + + public void setSenderType(int senderType) { + this.senderType = senderType; + } + + public int getAddressId() { + return addressId; + } + + public void setAddressId(int addressId) { + this.addressId = addressId; + } + + @Generated(hash = 1557449535) + public ChatMessageBean() { + } + + public String getDeviceVersion() { + return deviceVersion == null ? "" : deviceVersion; + } + + public void setDeviceVersion(String deviceVersion) { + this.deviceVersion = deviceVersion; + } + + public int getExceptionType() { + return exceptionType; + } + + public void setExceptionType(int exceptionType) { + this.exceptionType = exceptionType; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUserId() { + return UserId == null ? "" : UserId; + } + + public void setUserId(String userId) { + UserId = userId; + } + + public String getUserName() { + return UserName == null ? "" : UserName; + } + + public void setUserName(String userName) { + UserName = userName; + } + + public String getUserHeadIcon() { + return UserHeadIcon == null ? "" : UserHeadIcon; + } + + public void setUserHeadIcon(String userHeadIcon) { + UserHeadIcon = userHeadIcon; + } + + public String getUserContent() { + return UserContent == null ? "" : UserContent; + } + + public void setUserContent(String userContent) { + UserContent = userContent; + } + + public String getTime() { + return time == null ? "" : time; + } + + public void setTime(String time) { + this.time = time; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public int getMessagetype() { + return messagetype; + } + + public void setMessagetype(int messagetype) { + this.messagetype = messagetype; + } + + public float getUserVoiceTime() { + return UserVoiceTime; + } + + public void setUserVoiceTime(float userVoiceTime) { + UserVoiceTime = userVoiceTime; + } + + public String getUserVoicePath() { + return UserVoicePath == null ? "" : UserVoicePath; + } + + public void setUserVoicePath(String userVoicePath) { + UserVoicePath = userVoicePath; + } + + public String getUserVoiceUrl() { + return UserVoiceUrl == null ? "" : UserVoiceUrl; + } + + public void setUserVoiceUrl(String userVoiceUrl) { + UserVoiceUrl = userVoiceUrl; + } + + public int getSendState() { + return sendState; + } + + public void setSendState(int sendState) { + this.sendState = sendState; + } + + public String getImageUrl() { + return imageUrl == null ? "" : imageUrl; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + public String getImageIconUrl() { + return imageIconUrl == null ? "" : imageIconUrl; + } + + public void setImageIconUrl(String imageIconUrl) { + this.imageIconUrl = imageIconUrl; + } + + public String getImageLocal() { + return imageLocal == null ? "" : imageLocal; + } + + public void setImageLocal(String imageLocal) { + this.imageLocal = imageLocal; + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/db/ChatMessageBeanDao.java b/app/src/main/java/com/yonsz/z1/chat/db/ChatMessageBeanDao.java new file mode 100644 index 0000000..9e2989c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/db/ChatMessageBeanDao.java @@ -0,0 +1,278 @@ +package com.yonsz.z1.chat.db; + +import android.database.Cursor; +import android.database.sqlite.SQLiteStatement; + +import org.greenrobot.greendao.AbstractDao; +import org.greenrobot.greendao.Property; +import org.greenrobot.greendao.database.Database; +import org.greenrobot.greendao.database.DatabaseStatement; +import org.greenrobot.greendao.internal.DaoConfig; + +// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. + +/** + * DAO for table "CHAT_MESSAGE_BEAN". +*/ +public class ChatMessageBeanDao extends AbstractDao { + + public static final String TABLENAME = "CHAT_MESSAGE_BEAN"; + + /** + * Properties of entity ChatMessageBean.
+ * Can be used for QueryBuilder and for referencing column names. + */ + public static class Properties { + public final static Property Id = new Property(0, Long.class, "id", true, "_id"); + public final static Property UserId = new Property(1, String.class, "UserId", false, "UserId"); + public final static Property UserName = new Property(2, String.class, "UserName", false, "UserName"); + public final static Property UserHeadIcon = new Property(3, String.class, "UserHeadIcon", false, "UserHeadIcon"); + public final static Property UserContent = new Property(4, String.class, "UserContent", false, "UserContent"); + public final static Property Time = new Property(5, String.class, "time", false, "time"); + public final static Property Type = new Property(6, int.class, "type", false, "type"); + public final static Property Messagetype = new Property(7, int.class, "messagetype", false, "messagetype"); + public final static Property UserVoiceTime = new Property(8, float.class, "UserVoiceTime", false, "UserVoiceTime"); + public final static Property UserVoicePath = new Property(9, String.class, "UserVoicePath", false, "UserVoicePath"); + public final static Property UserVoiceUrl = new Property(10, String.class, "UserVoiceUrl", false, "UserVoiceUrl"); + public final static Property SendState = new Property(11, int.class, "sendState", false, "sendState"); + public final static Property ImageUrl = new Property(12, String.class, "imageUrl", false, "imageUrl"); + public final static Property ImageIconUrl = new Property(13, String.class, "imageIconUrl", false, "imageIconUrl"); + public final static Property ImageLocal = new Property(14, String.class, "imageLocal", false, "imageLocal"); + } + + + public ChatMessageBeanDao(DaoConfig config) { + super(config); + } + + public ChatMessageBeanDao(DaoConfig config, DaoSession daoSession) { + super(config, daoSession); + } + + /** Creates the underlying database table. */ + public static void createTable(Database db, boolean ifNotExists) { + String constraint = ifNotExists? "IF NOT EXISTS ": ""; + db.execSQL("CREATE TABLE " + constraint + "\"CHAT_MESSAGE_BEAN\" (" + // + "\"_id\" INTEGER PRIMARY KEY ," + // 0: id + "\"UserId\" TEXT," + // 1: UserId + "\"UserName\" TEXT," + // 2: UserName + "\"UserHeadIcon\" TEXT," + // 3: UserHeadIcon + "\"UserContent\" TEXT," + // 4: UserContent + "\"time\" TEXT," + // 5: time + "\"type\" INTEGER NOT NULL ," + // 6: type + "\"messagetype\" INTEGER NOT NULL ," + // 7: messagetype + "\"UserVoiceTime\" REAL NOT NULL ," + // 8: UserVoiceTime + "\"UserVoicePath\" TEXT," + // 9: UserVoicePath + "\"UserVoiceUrl\" TEXT," + // 10: UserVoiceUrl + "\"sendState\" INTEGER NOT NULL ," + // 11: sendState + "\"imageUrl\" TEXT," + // 12: imageUrl + "\"imageIconUrl\" TEXT," + // 13: imageIconUrl + "\"imageLocal\" TEXT);"); // 14: imageLocal + } + + /** Drops the underlying database table. */ + public static void dropTable(Database db, boolean ifExists) { + String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"CHAT_MESSAGE_BEAN\""; + db.execSQL(sql); + } + + @Override + protected final void bindValues(DatabaseStatement stmt, ChatMessageBean entity) { + stmt.clearBindings(); + + Long id = entity.getId(); + if (id != null) { + stmt.bindLong(1, id); + } + + String UserId = entity.getUserId(); + if (UserId != null) { + stmt.bindString(2, UserId); + } + + String UserName = entity.getUserName(); + if (UserName != null) { + stmt.bindString(3, UserName); + } + + String UserHeadIcon = entity.getUserHeadIcon(); + if (UserHeadIcon != null) { + stmt.bindString(4, UserHeadIcon); + } + + String UserContent = entity.getUserContent(); + if (UserContent != null) { + stmt.bindString(5, UserContent); + } + + String time = entity.getTime(); + if (time != null) { + stmt.bindString(6, time); + } + stmt.bindLong(7, entity.getType()); + stmt.bindLong(8, entity.getMessagetype()); + stmt.bindDouble(9, entity.getUserVoiceTime()); + + String UserVoicePath = entity.getUserVoicePath(); + if (UserVoicePath != null) { + stmt.bindString(10, UserVoicePath); + } + + String UserVoiceUrl = entity.getUserVoiceUrl(); + if (UserVoiceUrl != null) { + stmt.bindString(11, UserVoiceUrl); + } + stmt.bindLong(12, entity.getSendState()); + + String imageUrl = entity.getImageUrl(); + if (imageUrl != null) { + stmt.bindString(13, imageUrl); + } + + String imageIconUrl = entity.getImageIconUrl(); + if (imageIconUrl != null) { + stmt.bindString(14, imageIconUrl); + } + + String imageLocal = entity.getImageLocal(); + if (imageLocal != null) { + stmt.bindString(15, imageLocal); + } + } + + @Override + protected final void bindValues(SQLiteStatement stmt, ChatMessageBean entity) { + stmt.clearBindings(); + + Long id = entity.getId(); + if (id != null) { + stmt.bindLong(1, id); + } + + String UserId = entity.getUserId(); + if (UserId != null) { + stmt.bindString(2, UserId); + } + + String UserName = entity.getUserName(); + if (UserName != null) { + stmt.bindString(3, UserName); + } + + String UserHeadIcon = entity.getUserHeadIcon(); + if (UserHeadIcon != null) { + stmt.bindString(4, UserHeadIcon); + } + + String UserContent = entity.getUserContent(); + if (UserContent != null) { + stmt.bindString(5, UserContent); + } + + String time = entity.getTime(); + if (time != null) { + stmt.bindString(6, time); + } + stmt.bindLong(7, entity.getType()); + stmt.bindLong(8, entity.getMessagetype()); + stmt.bindDouble(9, entity.getUserVoiceTime()); + + String UserVoicePath = entity.getUserVoicePath(); + if (UserVoicePath != null) { + stmt.bindString(10, UserVoicePath); + } + + String UserVoiceUrl = entity.getUserVoiceUrl(); + if (UserVoiceUrl != null) { + stmt.bindString(11, UserVoiceUrl); + } + stmt.bindLong(12, entity.getSendState()); + + String imageUrl = entity.getImageUrl(); + if (imageUrl != null) { + stmt.bindString(13, imageUrl); + } + + String imageIconUrl = entity.getImageIconUrl(); + if (imageIconUrl != null) { + stmt.bindString(14, imageIconUrl); + } + + String imageLocal = entity.getImageLocal(); + if (imageLocal != null) { + stmt.bindString(15, imageLocal); + } + } + + @Override + public Long readKey(Cursor cursor, int offset) { + return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); + } + + @Override + public ChatMessageBean readEntity(Cursor cursor, int offset) { + ChatMessageBean entity = new ChatMessageBean( // + cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id + cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // UserId + cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // UserName + cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // UserHeadIcon + cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // UserContent + cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // time + cursor.getInt(offset + 6), // type + cursor.getInt(offset + 7), // messagetype + cursor.getFloat(offset + 8), // UserVoiceTime + cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9), // UserVoicePath + cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10), // UserVoiceUrl + cursor.getInt(offset + 11), // sendState + cursor.isNull(offset + 12) ? null : cursor.getString(offset + 12), // imageUrl + cursor.isNull(offset + 13) ? null : cursor.getString(offset + 13), // imageIconUrl + cursor.isNull(offset + 14) ? null : cursor.getString(offset + 14) // imageLocal + ); + return entity; + } + + @Override + public void readEntity(Cursor cursor, ChatMessageBean entity, int offset) { + entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); + entity.setUserId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); + entity.setUserName(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); + entity.setUserHeadIcon(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); + entity.setUserContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); + entity.setTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); + entity.setType(cursor.getInt(offset + 6)); + entity.setMessagetype(cursor.getInt(offset + 7)); + entity.setUserVoiceTime(cursor.getFloat(offset + 8)); + entity.setUserVoicePath(cursor.isNull(offset + 9) ? null : cursor.getString(offset + 9)); + entity.setUserVoiceUrl(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10)); + entity.setSendState(cursor.getInt(offset + 11)); + entity.setImageUrl(cursor.isNull(offset + 12) ? null : cursor.getString(offset + 12)); + entity.setImageIconUrl(cursor.isNull(offset + 13) ? null : cursor.getString(offset + 13)); + entity.setImageLocal(cursor.isNull(offset + 14) ? null : cursor.getString(offset + 14)); + } + + @Override + protected final Long updateKeyAfterInsert(ChatMessageBean entity, long rowId) { + entity.setId(rowId); + return rowId; + } + + @Override + public Long getKey(ChatMessageBean entity) { + if(entity != null) { + return entity.getId(); + } else { + return null; + } + } + + @Override + public boolean hasKey(ChatMessageBean entity) { + return entity.getId() != null; + } + + @Override + protected final boolean isEntityUpdateable() { + return true; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/db/DaoMaster.java b/app/src/main/java/com/yonsz/z1/chat/db/DaoMaster.java new file mode 100644 index 0000000..c8497d3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/db/DaoMaster.java @@ -0,0 +1,97 @@ +package com.yonsz.z1.chat.db; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteDatabase.CursorFactory; +import android.util.Log; + +import org.greenrobot.greendao.AbstractDaoMaster; +import org.greenrobot.greendao.database.Database; +import org.greenrobot.greendao.database.DatabaseOpenHelper; +import org.greenrobot.greendao.database.StandardDatabase; +import org.greenrobot.greendao.identityscope.IdentityScopeType; + + +// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. + +/** + * Master of DAO (schema version 1): knows all DAOs. + */ +public class DaoMaster extends AbstractDaoMaster { + public static final int SCHEMA_VERSION = 1; + + /** Creates underlying database table using DAOs. */ + public static void createAllTables(Database db, boolean ifNotExists) { + ChatMessageBeanDao.createTable(db, ifNotExists); + } + + /** Drops underlying database table using DAOs. */ + public static void dropAllTables(Database db, boolean ifExists) { + ChatMessageBeanDao.dropTable(db, ifExists); + } + + /** + * WARNING: Drops all table on Upgrade! Use only during development. + * Convenience method using a {@link DevOpenHelper}. + */ + public static DaoSession newDevSession(Context context, String name) { + Database db = new DevOpenHelper(context, name).getWritableDb(); + DaoMaster daoMaster = new DaoMaster(db); + return daoMaster.newSession(); + } + + public DaoMaster(SQLiteDatabase db) { + this(new StandardDatabase(db)); + } + + public DaoMaster(Database db) { + super(db, SCHEMA_VERSION); + registerDaoClass(ChatMessageBeanDao.class); + } + + public DaoSession newSession() { + return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); + } + + public DaoSession newSession(IdentityScopeType type) { + return new DaoSession(db, type, daoConfigMap); + } + + /** + * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - + */ + public static abstract class OpenHelper extends DatabaseOpenHelper { + public OpenHelper(Context context, String name) { + super(context, name, SCHEMA_VERSION); + } + + public OpenHelper(Context context, String name, CursorFactory factory) { + super(context, name, factory, SCHEMA_VERSION); + } + + @Override + public void onCreate(Database db) { + Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); + createAllTables(db, false); + } + } + + /** WARNING: Drops all table on Upgrade! Use only during development. */ + public static class DevOpenHelper extends OpenHelper { + public DevOpenHelper(Context context, String name) { + super(context, name); + } + + public DevOpenHelper(Context context, String name, CursorFactory factory) { + super(context, name, factory); + } + + @Override + public void onUpgrade(Database db, int oldVersion, int newVersion) { + Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); + dropAllTables(db, true); + onCreate(db); + } + } + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/db/DaoSession.java b/app/src/main/java/com/yonsz/z1/chat/db/DaoSession.java new file mode 100644 index 0000000..7c57ade --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/db/DaoSession.java @@ -0,0 +1,45 @@ +package com.yonsz.z1.chat.db; + + +import org.greenrobot.greendao.AbstractDao; +import org.greenrobot.greendao.AbstractDaoSession; +import org.greenrobot.greendao.database.Database; +import org.greenrobot.greendao.identityscope.IdentityScopeType; +import org.greenrobot.greendao.internal.DaoConfig; + +import java.util.Map; + +// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. + +/** + * {@inheritDoc} + * + * @see org.greenrobot.greendao.AbstractDaoSession + */ +public class DaoSession extends AbstractDaoSession { + + private final DaoConfig chatMessageBeanDaoConfig; + + private final ChatMessageBeanDao chatMessageBeanDao; + + public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> + daoConfigMap) { + super(db); + + chatMessageBeanDaoConfig = daoConfigMap.get(ChatMessageBeanDao.class).clone(); + chatMessageBeanDaoConfig.initIdentityScope(type); + + chatMessageBeanDao = new ChatMessageBeanDao(chatMessageBeanDaoConfig, this); + + registerDao(ChatMessageBean.class, chatMessageBeanDao); + } + + public void clear() { + chatMessageBeanDaoConfig.clearIdentityScope(); + } + + public ChatMessageBeanDao getChatMessageBeanDao() { + return chatMessageBeanDao; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/db/base/BaseManager.java b/app/src/main/java/com/yonsz/z1/chat/db/base/BaseManager.java new file mode 100644 index 0000000..eb6975d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/db/base/BaseManager.java @@ -0,0 +1,358 @@ +package com.yonsz.z1.chat.db.base; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteException; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import com.yonsz.z1.chat.db.DaoMaster; +import com.yonsz.z1.chat.db.DaoSession; +import com.yonsz.z1.chat.db.interfaces.IDatabase; + +import org.greenrobot.greendao.AbstractDao; +import org.greenrobot.greendao.query.Query; +import org.greenrobot.greendao.query.QueryBuilder; + +import java.util.Collection; +import java.util.List; + + +/** + * Created by Mao Jiqing on 2016/10/15. + */ + +public abstract class BaseManager implements IDatabase { + private static final String DEFAULT_DATABASE_NAME = "maxi.db"; + private static DaoMaster.DevOpenHelper mHelper; + protected static DaoSession daoSession; + + /** + * 初始化OpenHelper + * + * @param context + */ + public static void initOpenHelper(@NonNull Context context) { + mHelper = getOpenHelper(context, DEFAULT_DATABASE_NAME); + openWritableDb(); + } + + /** + * 初始化OpenHelper + * + * @param context + * @param dataBaseName + */ + public static void initOpenHelper(@NonNull Context context, @NonNull String dataBaseName) { + mHelper = getOpenHelper(context, dataBaseName); + openWritableDb(); + } + + /** + * Query for readable DB + */ + protected static void openReadableDb() throws SQLiteException { + daoSession = new DaoMaster(getReadableDatabase()).newSession(); + } + + /** + * Query for writable DB + */ + protected static void openWritableDb() throws SQLiteException { + daoSession = new DaoMaster(getWritableDatabase()).newSession(); + } + + private static SQLiteDatabase getWritableDatabase() { + return mHelper.getWritableDatabase(); + } + + private static SQLiteDatabase getReadableDatabase() { + return mHelper.getReadableDatabase(); + } + + /** + * 在applicaiton中初始化DatabaseHelper + */ + private static DaoMaster.DevOpenHelper getOpenHelper(@NonNull Context context, @Nullable String dataBaseName) { + closeDbConnections(); + return new DaoMaster.DevOpenHelper(context, dataBaseName, null); + } + + /** + * 只关闭helper就好,看源码就知道helper关闭的时候会关闭数据库 + */ + public static void closeDbConnections() { + if (mHelper != null) { + mHelper.close(); + mHelper = null; + } + if (daoSession != null) { + daoSession.clear(); + daoSession = null; + } + } + + @Override + public void clearDaoSession() { + if (daoSession != null) { + daoSession.clear(); + daoSession = null; + } + } + + @Override + public boolean dropDatabase() { + try { + openWritableDb(); + } catch (Exception e) { + return false; + } + return true; + } + + @Override + public boolean insert(@NonNull M m) { + try { + if (m == null) + return false; + openWritableDb(); + getAbstractDao().insert(m); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public boolean insertOrReplace(@NonNull M m) { + try { + if (m == null) + return false; + openWritableDb(); + getAbstractDao().insertOrReplace(m); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public boolean delete(@NonNull M m) { + try { + if (m == null) + return false; + openWritableDb(); + getAbstractDao().delete(m); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public boolean deleteByKey(K key) { + try { + if (key.toString().isEmpty()) + return false; + openWritableDb(); + getAbstractDao().deleteByKey(key); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public boolean deleteByKeyInTx(K... key) { + try { + openWritableDb(); + getAbstractDao().deleteByKeyInTx(key); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public boolean deleteList(List mList) { + try { + if (mList == null || mList.size() == 0) + return false; + openWritableDb(); + getAbstractDao().deleteInTx(mList); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public boolean deleteAll() { + try { + openWritableDb(); + getAbstractDao().deleteAll(); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public boolean update(@NonNull M m) { + try { + if (m == null) + return false; + openWritableDb(); + getAbstractDao().update(m); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public boolean updateInTx(M... m) { + try { + if (m == null) + return false; + openWritableDb(); + getAbstractDao().updateInTx(m); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public boolean updateList(List mList) { + try { + if (mList == null || mList.size() == 0) + return false; + openWritableDb(); + getAbstractDao().updateInTx(mList); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public M selectByPrimaryKey(@NonNull K key) { + try { + openReadableDb(); + return getAbstractDao().load(key); + } catch (SQLiteException e) { + return null; + } + } + + @Override + public List loadAll() { + openReadableDb(); + return getAbstractDao().loadAll(); + } + + @Override + public List loadPages(int page, int number) { + openReadableDb(); + return getAbstractDao().queryBuilder() + .offset(page * number).limit(number).list(); + } + + @Override + public long getPages(int number) { + long count = getAbstractDao().queryBuilder().count(); + long page = count / number; + if (page > 0 && count % number == 0) { + return page - 1; + } + return page; + } + + @Override + public boolean refresh(@NonNull M m) { + try { + if (m == null) + return false; + openWritableDb(); + getAbstractDao().refresh(m); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public void runInTx(Runnable runnable) { + try { + openWritableDb(); + daoSession.runInTx(runnable); + } catch (SQLiteException e) { + } + } + + @Override + public boolean insertList(@NonNull List list) { + try { + if (list == null || list.size() == 0) + return false; + openWritableDb(); + getAbstractDao().insertInTx(list); + } catch (SQLiteException e) { + return false; + } + return true; + } + + /** + * @param list + * @return + */ + @Override + public boolean insertOrReplaceList(@NonNull List list) { + try { + if (list == null || list.size() == 0) + return false; + openWritableDb(); + getAbstractDao().insertOrReplaceInTx(list); + } catch (SQLiteException e) { + return false; + } + return true; + } + + @Override + public QueryBuilder getQueryBuilder() { + openReadableDb(); + return getAbstractDao().queryBuilder(); + } + + /** + * @param where + * @param selectionArg + * @return + */ + @Override + public List queryRaw(String where, String... selectionArg) { + openReadableDb(); + return getAbstractDao().queryRaw(where, selectionArg); + } + + public Query queryRawCreate(String where, Object... selectionArg) { + openReadableDb(); + return getAbstractDao().queryRawCreate(where, selectionArg); + } + + public Query queryRawCreateListArgs(String where, Collection selectionArg) { + openReadableDb(); + return getAbstractDao().queryRawCreateListArgs(where, selectionArg); + } + + /** + * 获取Dao + * + * @return + */ + public abstract AbstractDao getAbstractDao(); + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/db/interfaces/IDatabase.java b/app/src/main/java/com/yonsz/z1/chat/db/interfaces/IDatabase.java new file mode 100644 index 0000000..b7ace22 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/db/interfaces/IDatabase.java @@ -0,0 +1,98 @@ +package com.yonsz.z1.chat.db.interfaces; + +import android.support.annotation.NonNull; + +import org.greenrobot.greendao.query.QueryBuilder; + +import java.util.List; + +/** + * Created by Mao Jiqing on 2016/10/15. + */ + +public interface IDatabase { + boolean insert(M m); + + boolean delete(M m); + + boolean deleteByKey(K key); + + boolean deleteList(List mList); + + boolean deleteByKeyInTx(K... key); + + boolean deleteAll(); + + boolean insertOrReplace(@NonNull M m); + + boolean update(M m); + + boolean updateInTx(M... m); + + boolean updateList(List mList); + + M selectByPrimaryKey(K key); + + List loadAll(); + + /** + * 分页加载 + * @param page 设定当前页数 + * @param number 设定一页显示数量 + * @return + */ + List loadPages(int page, int number); + + /** + * 获取分页数 + * @param number 设定一页显示数量 + * @return + */ + long getPages(int number); + + boolean refresh(M m); + + /** + * 清理缓存 + */ + void clearDaoSession(); + + /** + * Delete all tables and content from our database + */ + boolean dropDatabase(); + + /** + * 事务 + */ + void runInTx(Runnable runnable); + + /** + * 添加集合 + * + * @param mList + */ + boolean insertList(List mList); + + /** + * 添加集合 + * + * @param mList + */ + boolean insertOrReplaceList(List mList); + + /** + * 自定义查询 + * + * @return + */ + QueryBuilder getQueryBuilder(); + + /** + * @param where + * @param selectionArg + * @return + */ + List queryRaw(String where, String... selectionArg); + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/utils/AudioManager.java b/app/src/main/java/com/yonsz/z1/chat/utils/AudioManager.java new file mode 100644 index 0000000..b83b36b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/utils/AudioManager.java @@ -0,0 +1,215 @@ +package com.yonsz.z1.chat.utils; + +import android.media.MediaRecorder; +import android.os.Handler; + +import java.io.File; +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +public class AudioManager { + /** + * 录音的时候出错 + */ + public static final int MSG_ERROR_AUDIO_RECORD = -4; + private MediaRecorder mRecorder; + private String mDirString; + private String mCurrentFilePathString; + private Handler handler; + private boolean isPrepared;// 是否准备好了 + + /** + * 单例化的方法 1 先声明一个static 类型的变量a 2 在声明默认的构造函数 3 再用public synchronized static + * 类名 getInstance() { if(a==null) { a=new 类();} return a; } 或者用以下的方法 + */ + + /** + * 单例化这个类 + */ + private static AudioManager mInstance; + + private AudioManager(String dir) { + mDirString = dir; + } + + public static AudioManager getInstance(String dir) { + if (mInstance == null) { + synchronized (AudioManager.class) { + if (mInstance == null) { + mInstance = new AudioManager(dir); + + } + } + } + return mInstance; + + } + + public void setHandle(Handler handler) { + this.handler = handler; + } + + /** + * 回调函数,准备完毕,准备好后,button才会开始显示录音框 + * + */ + public interface AudioStageListener { + void wellPrepared(); + } + + public AudioStageListener mListener; + + public void setOnAudioStageListener(AudioStageListener listener) { + mListener = listener; + } + + public void setVocDir(String dir) { + mDirString = dir; + } + + // 准备方法 + @SuppressWarnings("deprecation") + public void prepareAudio() { + try { + // 一开始应该是false的 + isPrepared = false; + + File dir = new File(mDirString); + if (!dir.exists()) { + dir.mkdirs(); + } + + String fileNameString = generalFileName(); + File file = new File(dir, fileNameString); + + mCurrentFilePathString = file.getAbsolutePath(); + + mRecorder = new MediaRecorder(); + // 设置输出文件 + mRecorder.setOutputFile(file.getAbsolutePath()); + // 设置meidaRecorder的音频源是麦克风 + mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); + // 设置文件音频的输出格式为amr + mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); + // 设置音频的编码格式为amr + mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); + + // 严格遵守google官方api给出的mediaRecorder的状态流程图 + mRecorder.prepare(); + + mRecorder.start(); + // 准备结束 + // 已经准备好了,可以录制了 + if (mListener != null) { + mListener.wellPrepared(); + } + isPrepared = true; + + } catch (IllegalStateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + if (handler != null) { + handler.sendEmptyMessage(MSG_ERROR_AUDIO_RECORD); + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + if (handler != null) { + handler.sendEmptyMessage(MSG_ERROR_AUDIO_RECORD); + } + } catch (Exception e) { + e.printStackTrace(); + if (handler != null) { + handler.sendEmptyMessage(MSG_ERROR_AUDIO_RECORD); + } + } + + } + + /** + * 随机生成文件的名称 + * + * @return + */ + private String generalFileName() { + // TODO Auto-generated method stub + + return UUID.randomUUID().toString() + ".amr"; + } + + private int vocAuthority[] = new int[10]; + private int vocNum = 0; + private boolean check = true; + + // 获得声音的level + public int getVoiceLevel(int maxLevel) { + // mRecorder.getMaxAmplitude()这个是音频的振幅范围,值域是0-32767 + if (isPrepared) { + try { + int vocLevel = mRecorder.getMaxAmplitude(); + if (check) { + if (vocNum >= 10) { + Set set = new HashSet(); + for (int i = 0; i < vocNum; i++) { + set.add(vocAuthority[i]); + } + if (set.size() == 1) { + if (handler != null) + handler.sendEmptyMessage(MSG_ERROR_AUDIO_RECORD); + vocNum = 0; + vocAuthority = null; + vocAuthority = new int[10]; + } else { + check = false; + } + } else { + vocAuthority[vocNum] = vocLevel; + vocNum++; + } + } + return maxLevel * vocLevel / 32768 + 1; + } catch (Exception e) { + // TODO Auto-generated catch block + if (handler != null) + handler.sendEmptyMessage(MSG_ERROR_AUDIO_RECORD); + } + } + + return 1; + } + + // 释放资源 + public void release() { + // 严格按照api流程进行 + if (null != mRecorder) { + isPrepared = false; + try { + mRecorder.stop(); + mRecorder.release(); + } catch (Exception e) { + e.printStackTrace(); + } + mRecorder = null; + } + } + + // 取消,因为prepare时产生了一个文件,所以cancel方法应该要删除这个文件, + // 这是与release的方法的区别 + public void cancel() { + release(); + if (mCurrentFilePathString != null) { + File file = new File(mCurrentFilePathString); + file.delete(); + mCurrentFilePathString = null; + } + + } + + public String getCurrentFilePath() { + // TODO Auto-generated method stub + return mCurrentFilePathString; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/utils/FaceData.java b/app/src/main/java/com/yonsz/z1/chat/utils/FaceData.java new file mode 100644 index 0000000..67d90f7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/utils/FaceData.java @@ -0,0 +1,99 @@ +package com.yonsz.z1.chat.utils; + +import com.yonsz.z1.R; + +import java.util.HashMap; +import java.util.Map; + +public class FaceData { + public static final String f1 = "[:f1]"; + public static final String f2 = "[:f2]"; + public static final String f3 = "[:f3]"; + public static final String f4 = "[:f4]"; + public static final String f5 = "[:f5]"; + public static final String f6 = "[:f6]"; + public static final String f7 = "[:f7]"; + public static final String f8 = "[:f8]"; + public static final String f9 = "[:f9]"; + public static final String f10 = "[:f10]"; + public static final String f11 = "[:f11]"; + public static final String f12 = "[:f12]"; + public static final String f13 = "[:f13]"; + public static final String f14 = "[:f14]"; + public static final String f15 = "[:f15]"; + public static final String f16 = "[:f16]"; + public static final String f17 = "[:f17]"; + public static final String f18 = "[:f18]"; + public static final String f19 = "[:f19]"; + public static final String f20 = "[:f20]"; + public static final String f21 = "[:f21]"; + public static final String f22 = "[:f22]"; + public static final String f23 = "[:f23]"; + public static final String f24 = "[:f24]"; + public static final String f25 = "[:f25]"; + public static final String f26 = "[:f26]"; + public static final String f27 = "[:f27]"; + public static final String f28 = "[:f28]"; + public static final String f29 = "[:f29]"; + public static final String f30 = "[:f30]"; + public static final String f31 = "[:f31]"; + public static final String f32 = "[:f32]"; + public static final String f33 = "[:f33]"; + public static final String f34 = "[:f34]"; + public static final String f35 = "[:f35]"; + public static final String f36 = "[:f36]"; + public static final String f37 = "[:f37]"; + public static final String f38 = "[:f38]"; + public static final String f39 = "[:f39]"; + public static final String f40 = "[:f40]"; + public static Map gifFaceInfo = new HashMap(); + + static { + + addString(gifFaceInfo, f1, R.mipmap.f1); + addString(gifFaceInfo, f2, R.mipmap.f1); + addString(gifFaceInfo, f3, R.mipmap.f1); + addString(gifFaceInfo, f4, R.mipmap.f1); + addString(gifFaceInfo, f5, R.mipmap.f1); + addString(gifFaceInfo, f6, R.mipmap.f1); + addString(gifFaceInfo, f7, R.mipmap.f1); + addString(gifFaceInfo, f8, R.mipmap.f1); + addString(gifFaceInfo, f9, R.mipmap.f1); + addString(gifFaceInfo, f10, R.mipmap.f1); + addString(gifFaceInfo, f11, R.mipmap.f1); + addString(gifFaceInfo, f12, R.mipmap.f1); + addString(gifFaceInfo, f13, R.mipmap.f1); + addString(gifFaceInfo, f14, R.mipmap.f1); + addString(gifFaceInfo, f15, R.mipmap.f1); + addString(gifFaceInfo, f16, R.mipmap.f1); + addString(gifFaceInfo, f17, R.mipmap.f1); + addString(gifFaceInfo, f18, R.mipmap.f1); + addString(gifFaceInfo, f19, R.mipmap.f1); + addString(gifFaceInfo, f20, R.mipmap.f1); + addString(gifFaceInfo, f21, R.mipmap.f1); + addString(gifFaceInfo, f22, R.mipmap.f1); + addString(gifFaceInfo, f23, R.mipmap.f1); + addString(gifFaceInfo, f24, R.mipmap.f1); + addString(gifFaceInfo, f25, R.mipmap.f1); + addString(gifFaceInfo, f26, R.mipmap.f1); + addString(gifFaceInfo, f27, R.mipmap.f1); + addString(gifFaceInfo, f28, R.mipmap.f1); + addString(gifFaceInfo, f29, R.mipmap.f1); + addString(gifFaceInfo, f30, R.mipmap.f1); + addString(gifFaceInfo, f31, R.mipmap.f1); + addString(gifFaceInfo, f32, R.mipmap.f1); + addString(gifFaceInfo, f33, R.mipmap.f1); + addString(gifFaceInfo, f34, R.mipmap.f1); + addString(gifFaceInfo, f35, R.mipmap.f1); + addString(gifFaceInfo, f36, R.mipmap.f1); + addString(gifFaceInfo, f37, R.mipmap.f1); + addString(gifFaceInfo, f38, R.mipmap.f1); + addString(gifFaceInfo, f39, R.mipmap.f1); + addString(gifFaceInfo, f40, R.mipmap.f1); + } + + private static void addString(Map map, String smile, + int resource) { + map.put(smile, resource); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/chat/utils/FileSaveUtil.java b/app/src/main/java/com/yonsz/z1/chat/utils/FileSaveUtil.java new file mode 100644 index 0000000..e72a963 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/utils/FileSaveUtil.java @@ -0,0 +1,372 @@ +package com.yonsz.z1.chat.utils; + +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.DocumentsContract; +import android.provider.MediaStore; +import android.util.Base64; + +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +public class FileSaveUtil { + public static final String SD_CARD_PATH = Environment.getExternalStorageDirectory().toString() + "/MAXI/"; + + // public static final String saveFn = SD_CARD_PATH +// + "/user_chat_data/"; +// public static final String savelistFn = SD_CARD_PATH +// + "/user_chat_data/chatList/"; +// public static final String savechannelFn = SD_CARD_PATH +// + "/user_chat_data/channel_id/"; +// public static final String saveUnReadFn = SD_CARD_PATH +// + "/user_chat_data/UnRead/"; + public static final String voice_dir = SD_CARD_PATH + + "/voice_data/"; + + /** + * SD卡是否存在 + **/ + private boolean hasSD = false; + /** + * 当前程序包的路径 + **/ + private String FILESPATH; + + public static boolean isFileExists(File file) { + if (!file.exists()) { + return false; + } + return true; + } + + /** + * 获取文件夹下的所有文件名 + */ + public static List getFileName(String fileName) { + List fileList = new ArrayList(); + String path = fileName; // 路径 + File f = new File(path); + if (!f.exists()) { + System.out.println(path + " not exists"); + return null; + } + + File fa[] = f.listFiles(); + for (int i = 0; i < fa.length; i++) { + File fs = fa[i]; + if (!fs.isDirectory()) { + fileList.add(fs.getName()); + } + } + return fileList; + } + + /** + * 在SD卡上创建文件 + * + * @throws IOException + */ + public static File createSDFile(String fileName) throws IOException { + File file = new File(fileName); + if (!isFileExists(file)) + if (file.isDirectory()) { + file.mkdirs(); + } else { + file.createNewFile(); + } + return file; + } + + /** + * 在SD卡上创建文件夹 + * + * @throws IOException + */ + public static File createSDDirectory(String fileName) throws IOException { + File file = new File(fileName); + if (!isFileExists(file)) + file.mkdirs(); + return file; + } + +// /** +// * @content 存储内容 +// * @file 文件目录 +// * @isAppend 是否追加 +// */ +// public synchronized static void writeString(String content, String file, boolean isAppend) { +// try { +// createSDDirectory(saveFn); +// createSDDirectory(savelistFn); +// createSDDirectory(savechannelFn); +// byte[] data = content.getBytes("utf-8"); +// writeBytes(file, data, isAppend); +// } catch (Exception e) { +// System.out.println(e.getMessage()); +// } +// +// } + + public synchronized static boolean writeBytes(String filePath, byte[] data, + boolean isAppend) { + try { + FileOutputStream fos; + if (isAppend) + fos = new FileOutputStream(filePath, true); + else + fos = new FileOutputStream(filePath); + fos.write(data); + fos.close(); + return true; + } catch (Exception e) { + System.out.println(e.getMessage()); + } + return false; + } + + /** + * 读取SD卡中文本文件 + * + * @param fileName + * @return + */ + public synchronized static String readSDFile(String fileName) { + StringBuffer sb = new StringBuffer(); + File f1 = new File(fileName); + String str = null; + try { + InputStream is = new FileInputStream(f1); + InputStreamReader input = new InputStreamReader(is, "UTF-8"); + @SuppressWarnings("resource") + BufferedReader reader = new BufferedReader(input); + while ((str = reader.readLine()) != null) { + sb.append(str); + } + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return sb.toString(); + } + + public String getFILESPATH() { + return FILESPATH; + } + + public boolean hasSD() { + return hasSD; + } + + /** + * 删除单个文件 + * + * @param filePath 被删除文件的文件名 + * @return 文件删除成功返回true,否则返回false + */ + public static boolean deleteFile(String filePath) { + File file = new File(filePath); + if (file.isFile() && file.exists()) { + return file.delete(); + } + return false; + } + + /** + * 删除文件夹以及目录下的文件 + * + * @param filePath 被删除目录的文件路径 + * @return 目录删除成功返回true,否则返回false + */ + public static boolean deleteDirectory(String filePath) { + boolean flag = false; + // 如果filePath不以文件分隔符结尾,自动添加文件分隔符 + if (!filePath.endsWith(File.separator)) { + filePath = filePath + File.separator; + } + File dirFile = new File(filePath); + if (!dirFile.exists() || !dirFile.isDirectory()) { + return false; + } + flag = true; + File[] files = dirFile.listFiles(); + // 遍历删除文件夹下的所有文件(包括子目录) + for (int i = 0; i < files.length; i++) { + if (files[i].isFile()) { + // 删除子文件 + flag = deleteFile(files[i].getAbsolutePath()); + if (!flag) + break; + } else { + // 删除子目录 + flag = deleteDirectory(files[i].getAbsolutePath()); + if (!flag) + break; + } + } + if (!flag) + return false; + // 删除当前空目录 + return dirFile.delete(); + } + + public static boolean saveBitmap(Bitmap bm, String picName) { + try { + File f = new File(picName); + if (f.exists()) { + f.delete(); + } + FileOutputStream out = new FileOutputStream(f); + bm.compress(Bitmap.CompressFormat.PNG, 100, out); + out.flush(); + out.close(); + return true; + } catch (FileNotFoundException e) { + e.printStackTrace(); + return false; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + /** + * 把文件转换成base64 + * + * @param path + * @return + */ + public static String encodeBase64File(String path) throws Exception { + byte[] videoBytes; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + @SuppressWarnings("resource") + FileInputStream fis = new FileInputStream(new File(path)); + byte[] buf = new byte[1024]; + int n; + while (-1 != (n = fis.read(buf))) + baos.write(buf, 0, n); + videoBytes = baos.toByteArray(); + return Base64.encodeToString(videoBytes, Base64.NO_WRAP); + } + + /** + * 根据相册媒体库路径转换成sd卡路径 + * + * @param context + * @param uri + * @return + */ + @TargetApi(Build.VERSION_CODES.KITKAT) + public static String getPath(final Context context, final Uri uri) { + final boolean isOverKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; + // DocumentProvider + if (isOverKitKat && DocumentsContract.isDocumentUri(context, uri)) { + // ExternalStorageProvider + if (isExternalStorageDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + if ("primary".equalsIgnoreCase(type)) { + return Environment.getExternalStorageDirectory() + "/" + + split[1]; + } + } + // DownloadsProvider + else if (isDownloadsDocument(uri)) { + final String id = DocumentsContract.getDocumentId(uri); + final Uri contentUri = ContentUris.withAppendedId( + Uri.parse("content://downloads/public_downloads"), + Long.valueOf(id)); + return getDataColumn(context, contentUri, null, null); + } + // MediaProvider + else if (isMediaDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + Uri contentUri = null; + if ("image".equals(type)) { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + } else if ("video".equals(type)) { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + } else if ("audio".equals(type)) { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + } + final String selection = "_id=?"; + final String[] selectionArgs = new String[]{split[1]}; + return getDataColumn(context, contentUri, selection, + selectionArgs); + } + } + // MediaStore (and general) + else if ("content".equalsIgnoreCase(uri.getScheme())) { + // Return the remote address + if (isGooglePhotosUri(uri)) + return uri.getLastPathSegment(); + return getDataColumn(context, uri, null, null); + } + // File + else if ("file".equalsIgnoreCase(uri.getScheme())) { + return uri.getPath(); + } + return null; + } + + @SuppressLint("NewApi") + public static String getDataColumn(Context context, Uri uri, + String selection, String[] selectionArgs) { + Cursor cursor = null; + final String column = "_data"; + final String[] projection = {column}; + try { + cursor = context.getContentResolver().query(uri, projection, + selection, selectionArgs, null); + if (cursor != null && cursor.moveToFirst()) { + final int index = cursor.getColumnIndexOrThrow(column); + return cursor.getString(index); + } + } finally { + if (cursor != null) + cursor.close(); + } + return null; + } + + public static boolean isGooglePhotosUri(Uri uri) { + return "com.google.android.apps.photos.content".equals(uri + .getAuthority()); + } + + public static boolean isDownloadsDocument(Uri uri) { + return "com.android.providers.downloads.documents".equals(uri + .getAuthority()); + } + + public static boolean isMediaDocument(Uri uri) { + return "com.android.providers.media.documents".equals(uri + .getAuthority()); + } + + public static boolean isExternalStorageDocument(Uri uri) { + return "com.android.externalstorage.documents".equals(uri + .getAuthority()); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/chat/utils/GifOpenHelper.java b/app/src/main/java/com/yonsz/z1/chat/utils/GifOpenHelper.java new file mode 100644 index 0000000..b1fa906 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/utils/GifOpenHelper.java @@ -0,0 +1,625 @@ +package com.yonsz.z1.chat.utils; + +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; + +import java.io.InputStream; +import java.util.Vector; + +//Handler for read & extract Bitmap from *.gif +public class GifOpenHelper { + + // to store *.gif data, Bitmap & delay + class GifFrame { + // to access image & delay w/o interface + public Bitmap image; + public int delay; + + public GifFrame(Bitmap im, int del) { + image = im; + delay = del; + } + + } + + // to define some error type + public static final int STATUS_OK = 0; + public static final int STATUS_FORMAT_ERROR = 1; + public static final int STATUS_OPEN_ERROR = 2; + + protected int status; + + protected InputStream in; + + protected int width; // full image width + protected int height; // full image height + protected boolean gctFlag; // global color table used + protected int gctSize; // size of global color table + protected int loopCount = 1; // iterations; 0 = repeat forever + + protected int[] gct; // global color table + protected int[] lct; // local color table + protected int[] act; // active color table + + protected int bgIndex; // background color index + protected int bgColor; // background color + protected int lastBgColor; // previous bg color + protected int pixelAspect; // pixel aspect ratio + + protected boolean lctFlag; // local color table flag + protected boolean interlace; // interlace flag + protected int lctSize; // local color table size + + protected int ix, iy, iw, ih; // current image rectangle + protected int lrx, lry, lrw, lrh; + protected Bitmap image; // current frame + protected Bitmap lastImage; // previous frame + protected int frameindex = 0; + + public int getFrameindex() { + return frameindex; + } + + public void setFrameindex(int frameindex) { + this.frameindex = frameindex; + if (frameindex > frames.size() - 1) { + frameindex = 0; + } + } + + protected byte[] block = new byte[256]; // current data block + protected int blockSize = 0; // block size + + // last graphic control extension info + protected int dispose = 0; + // 0=no action; 1=leave in place; 2=restore to bg; 3=restore to prev + protected int lastDispose = 0; + protected boolean transparency = false; // use transparent color + protected int delay = 0; // delay in milliseconds + protected int transIndex; // transparent color index + + protected static final int MaxStackSize = 4096; + // max decoder pixel stack size + + // LZW decoder working arrays + protected short[] prefix; + protected byte[] suffix; + protected byte[] pixelStack; + protected byte[] pixels; + + protected Vector frames; // frames read from current file + protected int frameCount; + + // to get its Width / Height + public int getWidth() { + return width; + } + + public int getHeigh() { + return height; + } + + /** + * Gets display duration for specified frame. + * + * @param n + * int index of frame + * @return delay in milliseconds + */ + public int getDelay(int n) { + delay = -1; + if ((n >= 0) && (n < frameCount)) { + delay = ((GifFrame) frames.elementAt(n)).delay; + } + return delay; + } + + public int getFrameCount() { + return frameCount; + } + + public Bitmap getImage() { + return getFrame(0); + } + + public int getLoopCount() { + return loopCount; + } + + protected void setPixels() { + int[] dest = new int[width * height]; + // fill in starting image contents based on last image's dispose code + if (lastDispose > 0) { + if (lastDispose == 3) { + // use image before last + int n = frameCount - 2; + if (n > 0) { + lastImage = getFrame(n - 1); + } else { + lastImage = null; + } + } + if (lastImage != null) { + lastImage.getPixels(dest, 0, width, 0, 0, width, height); + // copy pixels + if (lastDispose == 2) { + // fill last image rect area with background color + int c = 0; + if (!transparency) { + c = lastBgColor; + } + for (int i = 0; i < lrh; i++) { + int n1 = (lry + i) * width + lrx; + int n2 = n1 + lrw; + for (int k = n1; k < n2; k++) { + dest[k] = c; + } + } + } + } + } + + // copy each source line to the appropriate place in the destination + int pass = 1; + int inc = 8; + int iline = 0; + for (int i = 0; i < ih; i++) { + int line = i; + if (interlace) { + if (iline >= ih) { + pass++; + switch (pass) { + case 2: + iline = 4; + break; + case 3: + iline = 2; + inc = 4; + break; + case 4: + iline = 1; + inc = 2; + } + } + line = iline; + iline += inc; + } + line += iy; + if (line < height) { + int k = line * width; + int dx = k + ix; // start of line in dest + int dlim = dx + iw; // end of dest line + if ((k + width) < dlim) { + dlim = k + width; // past dest edge + } + int sx = i * iw; // start of line in source + while (dx < dlim) { + // map color and insert in destination + int index = ((int) pixels[sx++]) & 0xff; + int c = act[index]; + if (c != 0) { + dest[dx] = c; + } + dx++; + } + } + } + image = Bitmap.createBitmap(dest, width, height, Config.ARGB_4444); + } + + public Bitmap getFrame(int n) { + Bitmap im = null; + if ((n >= 0) && (n < frameCount)) { + im = ((GifFrame) frames.elementAt(n)).image; + } + return im; + } + + public Bitmap nextBitmap() { + frameindex++; + if (frameindex > frames.size() - 1) { + frameindex = 0; + } + return ((GifFrame) frames.elementAt(frameindex)).image; + } + + public int nextDelay() { + return ((GifFrame) frames.elementAt(frameindex)).delay; + } + + // to read & parse all *.gif stream + public int read(InputStream is) { + init(); + if (is != null) { + in = is; + + readHeader(); + if (!err()) { + readContents(); + if (frameCount < 0) { + status = STATUS_FORMAT_ERROR; + } + } + } else { + status = STATUS_OPEN_ERROR; + } + try { + is.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return status; + } + + protected void decodeImageData() { + int NullCode = -1; + int npix = iw * ih; + int available, clear, code_mask, code_size, end_of_information, in_code, old_code, bits, code, count, i, datum, data_size, first, top, bi, pi; + + if ((pixels == null) || (pixels.length < npix)) { + pixels = new byte[npix]; // allocate new pixel array + } + if (prefix == null) { + prefix = new short[MaxStackSize]; + } + if (suffix == null) { + suffix = new byte[MaxStackSize]; + } + if (pixelStack == null) { + pixelStack = new byte[MaxStackSize + 1]; + } + // Initialize GIF data stream decoder. + data_size = read(); + clear = 1 << data_size; + end_of_information = clear + 1; + available = clear + 2; + old_code = NullCode; + code_size = data_size + 1; + code_mask = (1 << code_size) - 1; + for (code = 0; code < clear; code++) { + prefix[code] = 0; + suffix[code] = (byte) code; + } + + // Decode GIF pixel stream. + datum = bits = count = first = top = pi = bi = 0; + for (i = 0; i < npix;) { + if (top == 0) { + if (bits < code_size) { + // Load bytes until there are enough bits for a code. + if (count == 0) { + // Read a new data block. + count = readBlock(); + if (count <= 0) { + break; + } + bi = 0; + } + datum += (((int) block[bi]) & 0xff) << bits; + bits += 8; + bi++; + count--; + continue; + } + // Get the next code. + code = datum & code_mask; + datum >>= code_size; + bits -= code_size; + + // Interpret the code + if ((code > available) || (code == end_of_information)) { + break; + } + if (code == clear) { + // Reset decoder. + code_size = data_size + 1; + code_mask = (1 << code_size) - 1; + available = clear + 2; + old_code = NullCode; + continue; + } + if (old_code == NullCode) { + pixelStack[top++] = suffix[code]; + old_code = code; + first = code; + continue; + } + in_code = code; + if (code == available) { + pixelStack[top++] = (byte) first; + code = old_code; + } + while (code > clear) { + pixelStack[top++] = suffix[code]; + code = prefix[code]; + } + first = ((int) suffix[code]) & 0xff; + // Add a new string to the string table, + if (available >= MaxStackSize) { + break; + } + pixelStack[top++] = (byte) first; + prefix[available] = (short) old_code; + suffix[available] = (byte) first; + available++; + if (((available & code_mask) == 0) + && (available < MaxStackSize)) { + code_size++; + code_mask += available; + } + old_code = in_code; + } + + // Pop a pixel off the pixel stack. + top--; + pixels[pi++] = pixelStack[top]; + i++; + } + for (i = pi; i < npix; i++) { + pixels[i] = 0; // clear missing pixels + } + } + + protected boolean err() { + return status != STATUS_OK; + } + + // to initia variable + public void init() { + status = STATUS_OK; + frameCount = 0; + frames = new Vector(); + gct = null; + lct = null; + } + + protected int read() { + int curByte = 0; + try { + curByte = in.read(); + } catch (Exception e) { + status = STATUS_FORMAT_ERROR; + } + return curByte; + } + + protected int readBlock() { + blockSize = read(); + int n = 0; + if (blockSize > 0) { + try { + int count = 0; + while (n < blockSize) { + count = in.read(block, n, blockSize - n); + if (count == -1) { + break; + } + n += count; + } + } catch (Exception e) { + e.printStackTrace(); + } + if (n < blockSize) { + status = STATUS_FORMAT_ERROR; + } + } + return n; + } + + // Global Color Table + protected int[] readColorTable(int ncolors) { + int nbytes = 3 * ncolors; + int[] tab = null; + byte[] c = new byte[nbytes]; + int n = 0; + try { + n = in.read(c); + } catch (Exception e) { + e.printStackTrace(); + } + if (n < nbytes) { + status = STATUS_FORMAT_ERROR; + } else { + tab = new int[256]; // max size to avoid bounds checks + int i = 0; + int j = 0; + while (i < ncolors) { + int r = ((int) c[j++]) & 0xff; + int g = ((int) c[j++]) & 0xff; + int b = ((int) c[j++]) & 0xff; + tab[i++] = 0xff000000 | (r << 16) | (g << 8) | b; + } + } + return tab; + } + + // Image Descriptor + protected void readContents() { + // read GIF file content blocks + boolean done = false; + while (!(done || err())) { + int code = read(); + switch (code) { + case 0x2C: // image separator + readImage(); + break; + case 0x21: // extension + code = read(); + switch (code) { + case 0xf9: // graphics control extension + readGraphicControlExt(); + break; + + case 0xff: // application extension + readBlock(); + String app = ""; + for (int i = 0; i < 11; i++) { + app += (char) block[i]; + } + if (app.equals("NETSCAPE2.0")) { + readNetscapeExt(); + } else { + skip(); // don't care + } + break; + default: // uninteresting extension + skip(); + } + break; + + case 0x3b: // terminator + done = true; + break; + + case 0x00: // bad byte, but keep going and see what happens + break; + default: + status = STATUS_FORMAT_ERROR; + } + } + } + + protected void readGraphicControlExt() { + read(); // block size + int packed = read(); // packed fields + dispose = (packed & 0x1c) >> 2; // disposal method + if (dispose == 0) { + dispose = 1; // elect to keep old image if discretionary + } + transparency = (packed & 1) != 0; + delay = readShort() * 10; // delay in milliseconds + transIndex = read(); // transparent color index + read(); // block terminator + } + + // to get Stream - Head + protected void readHeader() { + String id = ""; + for (int i = 0; i < 6; i++) { + id += (char) read(); + } + if (!id.startsWith("GIF")) { + status = STATUS_FORMAT_ERROR; + return; + } + readLSD(); + if (gctFlag && !err()) { + gct = readColorTable(gctSize); + bgColor = gct[bgIndex]; + } + } + + protected void readImage() { + // offset of X + ix = readShort(); // (sub)image position & size + // offset of Y + iy = readShort(); + // width of bitmap + iw = readShort(); + // height of bitmap + ih = readShort(); + + // Local Color Table Flag + int packed = read(); + lctFlag = (packed & 0x80) != 0; // 1 - local color table flag + + // Interlace Flag, to array with interwoven if ENABLE, with order + // otherwise + interlace = (packed & 0x40) != 0; // 2 - interlace flag + // 3 - sort flag + // 4-5 - reserved + lctSize = 2 << (packed & 7); // 6-8 - local color table size + if (lctFlag) { + lct = readColorTable(lctSize); // read table + act = lct; // make local table active + } else { + act = gct; // make global table active + if (bgIndex == transIndex) { + bgColor = 0; + } + } + int save = 0; + if (transparency) { + save = act[transIndex]; + act[transIndex] = 0; // set transparent color if specified + } + if (act == null) { + status = STATUS_FORMAT_ERROR; // no color table defined + } + if (err()) { + return; + } + decodeImageData(); // decode pixel data + skip(); + if (err()) { + return; + } + frameCount++; + // create new image to receive frame data + image = Bitmap.createBitmap(width, height, Config.ARGB_4444); + // createImage(width, height); + setPixels(); // transfer pixel data to image + frames.addElement(new GifFrame(image, delay)); // add image to frame + // list + if (transparency) { + act[transIndex] = save; + } + resetFrame(); + } + + // Logical Screen Descriptor + protected void readLSD() { + // logical screen size + width = readShort(); + height = readShort(); + // packed fields + int packed = read(); + gctFlag = (packed & 0x80) != 0; // 1 : global color table flag + // 2-4 : color resolution + // 5 : gct sort flag + gctSize = 2 << (packed & 7); // 6-8 : gct size + bgIndex = read(); // background color index + pixelAspect = read(); // pixel aspect ratio + } + + protected void readNetscapeExt() { + do { + readBlock(); + if (block[0] == 1) { + // loop count sub-block + int b1 = ((int) block[1]) & 0xff; + int b2 = ((int) block[2]) & 0xff; + loopCount = (b2 << 8) | b1; + } + } while ((blockSize > 0) && !err()); + } + + // read 8 bit data + protected int readShort() { + // read 16-bit value, LSB first + return read() | (read() << 8); + } + + protected void resetFrame() { + lastDispose = dispose; + lrx = ix; + lry = iy; + lrw = iw; + lrh = ih; + lastImage = image; + lastBgColor = bgColor; + dispose = 0; + transparency = false; + delay = 0; + lct = null; + } + + /** + * Skips variable length blocks up to and including next zero length block. + */ + protected void skip() { + do { + readBlock(); + } while ((blockSize > 0) && !err()); + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/utils/ImageCheckoutUtil.java b/app/src/main/java/com/yonsz/z1/chat/utils/ImageCheckoutUtil.java new file mode 100644 index 0000000..8d590aa --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/utils/ImageCheckoutUtil.java @@ -0,0 +1,61 @@ +package com.yonsz.z1.chat.utils; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; + +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; + +public class ImageCheckoutUtil { + /** + * 检测图片内存大小 + * + * @param data + * @return + */ + @SuppressLint("NewApi") + public static int getImageSize(Bitmap data) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) { + return data.getRowBytes() * data.getHeight(); + } else { + return data.getByteCount(); + } + } + + public static Bitmap getLoacalBitmap(String url) { + try { + ByteArrayOutputStream out; + FileInputStream fis = new FileInputStream(url); + BufferedInputStream bis = new BufferedInputStream(fis); + out = new ByteArrayOutputStream(); + @SuppressWarnings("unused") + int hasRead = 0; + byte[] buffer = new byte[1024 * 2]; + while ((hasRead = bis.read(buffer)) > 0) { + // 读出多少数据,向输出流中写入多少 + out.write(buffer); + out.flush(); + } + out.close(); + fis.close(); + bis.close(); + byte[] data = out.toByteArray(); + // 长宽减半 + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inSampleSize = 3; + return BitmapFactory.decodeByteArray(data, 0, data.length, opts); + } catch (FileNotFoundException e) { + e.printStackTrace(); + return null; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/utils/KeyBoardUtils.java b/app/src/main/java/com/yonsz/z1/chat/utils/KeyBoardUtils.java new file mode 100644 index 0000000..cb98499 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/utils/KeyBoardUtils.java @@ -0,0 +1,26 @@ +package com.yonsz.z1.chat.utils; + +import android.content.Context; +import android.view.View; +import android.view.inputmethod.InputMethodManager; + +/** + * Created by Mao Jiqing on 2016/9/28. + */ +public class KeyBoardUtils { + public static void hideKeyBoard(Context context, View view) { + InputMethodManager imm = (InputMethodManager) context + .getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); // 强制隐藏键盘 + } + + public static void showKeyBoard(Context context, View view) { + view.setFocusable(true); + view.setFocusableInTouchMode(true); + view.requestFocus(); + view.findFocus(); + InputMethodManager imm = (InputMethodManager) context + .getSystemService(Context.INPUT_METHOD_SERVICE); + imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/utils/PictureUtil.java b/app/src/main/java/com/yonsz/z1/chat/utils/PictureUtil.java new file mode 100644 index 0000000..3b2b796 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/utils/PictureUtil.java @@ -0,0 +1,157 @@ +package com.yonsz.z1.chat.utils; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.media.ExifInterface; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +public class PictureUtil { + + /** + * 计算图片的缩放值 + * + * @param options + * @param reqWidth + * @param reqHeight + * @return + */ + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + // Raw height and width of image + final int height = options.outHeight; + final int width = options.outWidth; + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + // Calculate ratios of height and width to requested height and + // width + final int heightRatio = Math.round((float) height + / (float) reqHeight); + final int widthRatio = Math.round((float) width / (float) reqWidth); + + // Choose the smallest ratio as inSampleSize value, this will + // guarantee + // a final image with both dimensions larger than or equal to the + // requested height and width. + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + } + + return inSampleSize; + } + + /** + * 根据路径获得图片并压缩返回bitmap用于显示 + * + * @param imagesrc + * @return + */ + public static Bitmap getSmallBitmap(String filePath) { + final BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeFile(filePath, options); + + // Calculate inSampleSize + options.inSampleSize = calculateInSampleSize(options, 320, 480); + + // Decode bitmap with inSampleSize set + options.inJustDecodeBounds = false; + + return BitmapFactory.decodeFile(filePath, options); + } + + /** + * 压缩大图片 + * @param srcPath + * @return + */ + public static Bitmap compressSizeImage(String srcPath) { + BitmapFactory.Options newOpts = new BitmapFactory.Options(); + //开始读入图片,此时把options.inJustDecodeBounds 设回true了 + newOpts.inJustDecodeBounds = true; + Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空 + + newOpts.inJustDecodeBounds = false; + int w = newOpts.outWidth; + int h = newOpts.outHeight; + //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为 + float hh = 800f;//这里设置高度为800f + float ww = 480f;//这里设置宽度为480f + //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可 + int be = 1;//be=1表示不缩放 + if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放 + be = (int) (newOpts.outWidth / ww); + } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放 + be = (int) (newOpts.outHeight / hh); + } + if (be <= 0) + be = 1; + newOpts.inSampleSize = be;//设置缩放比例 + //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了 + bitmap = BitmapFactory.decodeFile(srcPath, newOpts); + return compressImage(bitmap);//压缩好比例大小后再进行质量压缩 + } + + public static Bitmap compressImage(Bitmap image) { + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 + int options = 100; + while ( baos.toByteArray().length / 1024>100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩 + baos.reset();//重置baos即清空baos + image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中 + options -= 10;//每次都减少10 + } + ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中 + Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片 + return bitmap; + } + + /** + * 获取图片文件的信息,是否旋转了90度,如果是则反转 + * @param bitmap 需要旋转的图片 + * @param path 图片的路径 + */ + public static Bitmap reviewPicRotate(Bitmap bitmap, String path){ + int degree = getPicRotate(path); + if(degree!=0){ + Matrix m = new Matrix(); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + m.setRotate(degree); // 旋转angle度 + bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height,m, true);// 从新生成图片 + } + return bitmap; + } + + /** + * 读取图片文件旋转的角度 + * @param path 图片绝对路径 + * @return 图片旋转的角度 + */ + public static int getPicRotate(String path) { + int degree = 0; + try { + ExifInterface exifInterface = new ExifInterface(path); + int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); + switch (orientation) { + case ExifInterface.ORIENTATION_ROTATE_90: + degree = 90; + break; + case ExifInterface.ORIENTATION_ROTATE_180: + degree = 180; + break; + case ExifInterface.ORIENTATION_ROTATE_270: + degree = 270; + break; + } + } catch (IOException e) { + e.printStackTrace(); + } + return degree; + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/utils/ScreenUtil.java b/app/src/main/java/com/yonsz/z1/chat/utils/ScreenUtil.java new file mode 100644 index 0000000..c4e3329 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/utils/ScreenUtil.java @@ -0,0 +1,239 @@ +package com.yonsz.z1.chat.utils; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.Build; +import android.util.DisplayMetrics; +import android.view.Display; +import android.view.ViewConfiguration; +import android.view.Window; +import android.view.WindowManager; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class ScreenUtil { + + private static int screenWidth = 0; + + private static int screenHeight = 0; + private static int screenTotalHeight = 0; + private static int statusBarHeight = 0; + + private static final int TITLE_HEIGHT = 0; + + /** + */ + public static int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + /** + */ + public static int px2dip(Context context, float pxValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (pxValue / scale + 0.5f); + } + + public static int getScreenWidth(Context context) { +// if (screenWidth != 0) { +// return screenWidth; +// } + DisplayMetrics dm = new DisplayMetrics(); + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + wm.getDefaultDisplay().getMetrics(dm); + screenWidth = dm.widthPixels; + return screenWidth; + } + + public static int getScreenHeight(Context context) { +// if (screenHeight != 0) { +// return screenHeight; +// } + int top = 0; + if (context instanceof Activity) { + top = ((Activity) context).getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop(); + if (top == 0) { + top = (int) (TITLE_HEIGHT * getScreenDensity(context)); + } + } + DisplayMetrics dm = new DisplayMetrics(); + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + wm.getDefaultDisplay().getMetrics(dm); + screenHeight = dm.heightPixels - top; + return screenHeight; + } + + public static int getScreenTotalHeight(Context context) { + if (screenTotalHeight != 0) { + return screenTotalHeight; + } + DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); + screenTotalHeight = displayMetrics.heightPixels; + return screenTotalHeight; + } + public static float getScreenDensity(Context context) { + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics metric = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(metric); + return metric.density; + } + + public static float getScreenDensityDpi(Context context) { + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics metric = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(metric); + return metric.densityDpi; + } + public static int getStatusBarHeight(Context context) { + if (statusBarHeight != 0) { + return statusBarHeight; + } + Class c = null; + Object obj = null; + Field field = null; + int x = 0; + try { + c = Class.forName("com.android.internal.R$dimen"); + obj = c.newInstance(); + field = c.getField("status_bar_height"); + x = Integer.parseInt(field.get(obj).toString()); + statusBarHeight = context.getResources().getDimensionPixelSize(x); + } catch (Exception e1) { + e1.printStackTrace(); + } + return statusBarHeight; + } + public static boolean isTablet(Context context) { + return (context.getResources().getConfiguration().screenLayout + & Configuration.SCREENLAYOUT_SIZE_MASK) + >= Configuration.SCREENLAYOUT_SIZE_LARGE; + } + + + //获取屏幕原始尺寸高度,包括虚拟功能键高度 + public static int getDpi(Context context){ + int dpi = 0; + WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + Display display = windowManager.getDefaultDisplay(); + DisplayMetrics displayMetrics = new DisplayMetrics(); + @SuppressWarnings("rawtypes") + Class c; + try { + c = Class.forName("android.view.Display"); + @SuppressWarnings("unchecked") + Method method = c.getMethod("getRealMetrics",DisplayMetrics.class); + method.invoke(display, displayMetrics); + dpi=displayMetrics.heightPixels; + }catch(Exception e){ + e.printStackTrace(); + } + return dpi; + } + + /** + * 获取 虚拟按键的高度 + * @param context + * @return + */ + public static int getBottomStatusHeight(Context context){ + int totalHeight = getDpi(context); + + int contentHeight = getScreenHeight(context); + + return totalHeight - contentHeight; + } + + /** + * 标题栏高度 + * @return + */ + public static int getTitleHeight(Activity activity){ + return activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop(); + } + + /** + * 获得状态栏的高度 + * + * @param context + * @return + */ + public static int getStatusHeight(Context context) + { + + int statusHeight = -1; + try + { + Class clazz = Class.forName("com.android.internal.R$dimen"); + Object object = clazz.newInstance(); + int height = Integer.parseInt(clazz.getField("status_bar_height") + .get(object).toString()); + statusHeight = context.getResources().getDimensionPixelSize(height); + } catch (Exception e) + { + e.printStackTrace(); + } + return statusHeight; + } + + //获取虚拟按键的高度 + public static int getNavigationBarHeight(Context context) { + int result = 0; + if (hasNavBar(context)) { + Resources res = context.getResources(); + int resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android"); + if (resourceId > 0) { + result = res.getDimensionPixelSize(resourceId); + } + } + return result; + } + + /** + * 检查是否存在虚拟按键栏 + * + * @param context + * @return + */ + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + public static boolean hasNavBar(Context context) { + Resources res = context.getResources(); + int resourceId = res.getIdentifier("config_showNavigationBar", "bool", "android"); + if (resourceId != 0) { + boolean hasNav = res.getBoolean(resourceId); + // check override flag + String sNavBarOverride = getNavBarOverride(); + if ("1".equals(sNavBarOverride)) { + hasNav = false; + } else if ("0".equals(sNavBarOverride)) { + hasNav = true; + } + return hasNav; + } else { // fallback + return !ViewConfiguration.get(context).hasPermanentMenuKey(); + } + } + + /** + * 判断虚拟按键栏是否重写 + * + * @return + */ + private static String getNavBarOverride() { + String sNavBarOverride = null; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + try { + Class c = Class.forName("android.os.SystemProperties"); + Method m = c.getDeclaredMethod("get", String.class); + m.setAccessible(true); + sNavBarOverride = (String) m.invoke(null, "qemu.hw.mainkeys"); + } catch (Throwable e) { + } + } + return sNavBarOverride; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/chat/utils/SharedPreferencesUtils.java b/app/src/main/java/com/yonsz/z1/chat/utils/SharedPreferencesUtils.java new file mode 100644 index 0000000..db4938d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/utils/SharedPreferencesUtils.java @@ -0,0 +1,68 @@ +package com.yonsz.z1.chat.utils; + +import android.content.Context; +import android.content.SharedPreferences; + +/** + * Created by Mao Jiqing on 2016/10/10. + */ +public class SharedPreferencesUtils { + /** + * 保存在手机里面的文件名 + */ + private static final String FILE_NAME = "share_date"; + + /** + * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 + * + * @param context + * @param key + * @param object + */ + public static void setParam(Context context, String key, Object object) { + + String type = object.getClass().getSimpleName(); + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + + if ("String".equals(type)) { + editor.putString(key, (String) object); + } else if ("Integer".equals(type)) { + editor.putInt(key, (Integer) object); + } else if ("Boolean".equals(type)) { + editor.putBoolean(key, (Boolean) object); + } else if ("Float".equals(type)) { + editor.putFloat(key, (Float) object); + } else if ("Long".equals(type)) { + editor.putLong(key, (Long) object); + } + + editor.commit(); + } + + /** + * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 + * + * @param context + * @param key + * @param defaultObject + * @return + */ + public static Object getParam(Context context, String key, Object defaultObject) { + String type = defaultObject.getClass().getSimpleName(); + SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); + + if ("String".equals(type)) { + return sp.getString(key, (String) defaultObject); + } else if ("Integer".equals(type)) { + return sp.getInt(key, (Integer) defaultObject); + } else if ("Boolean".equals(type)) { + return sp.getBoolean(key, (Boolean) defaultObject); + } else if ("Float".equals(type)) { + return sp.getFloat(key, (Float) defaultObject); + } else if ("Long".equals(type)) { + return sp.getLong(key, (Long) defaultObject); + } + return null; + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/utils/SmileUtils.java b/app/src/main/java/com/yonsz/z1/chat/utils/SmileUtils.java new file mode 100644 index 0000000..b4d46f8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/utils/SmileUtils.java @@ -0,0 +1,177 @@ +/** + * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. + * + * 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 agrtbd 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. + * Stb the License for the specific language governing permissions and + * limitations under the License. + */ +package com.yonsz.z1.chat.utils; + +import android.content.Context; +import android.text.Spannable; +import android.text.Spannable.Factory; +import android.text.style.ImageSpan; + +import com.yonsz.z1.R; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class SmileUtils { + public static final String f1 = "[:f1]"; + public static final String f2 = "[:f2]"; + public static final String f3 = "[:f3]"; + public static final String f4 = "[:f4]"; + public static final String f5 = "[:f5]"; + public static final String f6 = "[:f6]"; + public static final String f7 = "[:f7]"; + public static final String f8 = "[:f8]"; + public static final String f9 = "[:f9]"; + public static final String f10 = "[:f10]"; + public static final String f11 = "[:f11]"; + public static final String f12 = "[:f12]"; + public static final String f13 = "[:f13]"; + public static final String f14 = "[:f14]"; + public static final String f15 = "[:f15]"; + public static final String f16 = "[:f16]"; + public static final String f17 = "[:f17]"; + public static final String f18 = "[:f18]"; + public static final String f19 = "[:f19]"; + public static final String f20 = "[:f20]"; + public static final String f21 = "[:f21]"; + public static final String f22 = "[:f22]"; + public static final String f23 = "[:f23]"; + public static final String f24 = "[:f24]"; + public static final String f25 = "[:f25]"; + public static final String f26 = "[:f26]"; + public static final String f27 = "[:f27]"; + public static final String f28 = "[:f28]"; + public static final String f29 = "[:f29]"; + public static final String f30 = "[:f30]"; + public static final String f31 = "[:f31]"; + public static final String f32 = "[:f32]"; + public static final String f33 = "[:f33]"; + public static final String f34 = "[:f34]"; + public static final String f35 = "[:f35]"; + public static final String f36 = "[:f36]"; + public static final String f37 = "[:f37]"; + public static final String f38 = "[:f38]"; + public static final String f39 = "[:f39]"; + public static final String f40 = "[:f40]"; + + private static final Factory spannableFactory = Factory + .getInstance(); + + private static final Map emoticons = new HashMap(); + + static { + + addPattern(emoticons, f1, R.mipmap.f1); + addPattern(emoticons, f2, R.mipmap.f1); + addPattern(emoticons, f3, R.mipmap.f1); + addPattern(emoticons, f4, R.mipmap.f1); + addPattern(emoticons, f5, R.mipmap.f1); + addPattern(emoticons, f6, R.mipmap.f1); + addPattern(emoticons, f7, R.mipmap.f1); + addPattern(emoticons, f8, R.mipmap.f1); + addPattern(emoticons, f9, R.mipmap.f1); + addPattern(emoticons, f10, R.mipmap.f1); + addPattern(emoticons, f11, R.mipmap.f1); + addPattern(emoticons, f12, R.mipmap.f1); + addPattern(emoticons, f13, R.mipmap.f1); + addPattern(emoticons, f14, R.mipmap.f1); + addPattern(emoticons, f15, R.mipmap.f1); + addPattern(emoticons, f16, R.mipmap.f1); + addPattern(emoticons, f17, R.mipmap.f1); + addPattern(emoticons, f18, R.mipmap.f1); + addPattern(emoticons, f19, R.mipmap.f1); + addPattern(emoticons, f20, R.mipmap.f1); + addPattern(emoticons, f21, R.mipmap.f1); + addPattern(emoticons, f22, R.mipmap.f1); + addPattern(emoticons, f23, R.mipmap.f1); + addPattern(emoticons, f24, R.mipmap.f1); + addPattern(emoticons, f25, R.mipmap.f1); + addPattern(emoticons, f26, R.mipmap.f1); + addPattern(emoticons, f27, R.mipmap.f1); + addPattern(emoticons, f28, R.mipmap.f1); + addPattern(emoticons, f29, R.mipmap.f1); + addPattern(emoticons, f30, R.mipmap.f1); + addPattern(emoticons, f31, R.mipmap.f1); + addPattern(emoticons, f32, R.mipmap.f1); + addPattern(emoticons, f33, R.mipmap.f1); + addPattern(emoticons, f34, R.mipmap.f1); + addPattern(emoticons, f35, R.mipmap.f1); + addPattern(emoticons, f36, R.mipmap.f1); + addPattern(emoticons, f37, R.mipmap.f1); + addPattern(emoticons, f38, R.mipmap.f1); + addPattern(emoticons, f39, R.mipmap.f1); + addPattern(emoticons, f40, R.mipmap.f1); + } + + private static void addPattern(Map map, String smile, + int resource) { + map.put(Pattern.compile(Pattern.quote(smile)), resource); + } + + /** + * replace existing spannable with smiles + * + * @param context + * @param spannable + * @return + */ + public static boolean addSmiles(Context context, Spannable spannable) { + boolean hasChanges = false; + for (Entry entry : emoticons.entrySet()) { + Matcher matcher = entry.getKey().matcher(spannable); + while (matcher.find()) { + boolean set = true; + for (ImageSpan span : spannable.getSpans(matcher.start(), + matcher.end(), ImageSpan.class)) + if (spannable.getSpanStart(span) >= matcher.start() + && spannable.getSpanEnd(span) <= matcher.end()) + spannable.removeSpan(span); + else { + set = false; + break; + } + if (set) { + hasChanges = true; + spannable.setSpan(new ImageSpan(context, entry.getValue()), + matcher.start(), matcher.end(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } + } + return hasChanges; + } + + public static Spannable getSmiledText(Context context, CharSequence text) { + Spannable spannable = spannableFactory.newSpannable(text); + addSmiles(context, spannable); + return spannable; + } + + public static boolean containsKey(String key) { + boolean b = false; + for (Entry entry : emoticons.entrySet()) { + Matcher matcher = entry.getKey().matcher(key); + if (matcher.find()) { + b = true; + break; + } + } + + return b; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/utils/ThreadPoolUtils.java b/app/src/main/java/com/yonsz/z1/chat/utils/ThreadPoolUtils.java new file mode 100644 index 0000000..f8ef67e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/utils/ThreadPoolUtils.java @@ -0,0 +1,57 @@ +package com.yonsz.z1.chat.utils; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.FutureTask; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * Created by Mao Jiqing on 2016/11/7. + */ + +public class ThreadPoolUtils { + //线程池核心线程数 + private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); + private static int CORE_POOL_SIZE = CPU_COUNT + 1; + //线程池最大线程数 + private static int MAX_POOL_SIZE = CPU_COUNT * 2 + 1; + //额外线程空状态生存时间 + private static int KEEP_ALIVE_TIME = 10000; + //阻塞队列。当核心线程都被占用,且阻塞队列已满的情况下,才会开启额外线程。 + private static BlockingQueue workQueue = new ArrayBlockingQueue(10); + //线程池 + private static ThreadPoolExecutor threadPool; + + private ThreadPoolUtils() { + } + + //线程工厂 + private static ThreadFactory threadFactory = new ThreadFactory() { + private final AtomicInteger integer = new AtomicInteger(); + + @Override + public Thread newThread(Runnable r) { + return new Thread(r, "myThreadPool thread:" + integer.getAndIncrement()); + } + }; + + static { + threadPool = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, + TimeUnit.SECONDS, workQueue, threadFactory); + } + + public static void execute(Runnable runnable) { + threadPool.execute(runnable); + } + + public static void execute(FutureTask futureTask) { + threadPool.execute(futureTask); + } + + public static void cancel(FutureTask futureTask) { + futureTask.cancel(true); + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/AudioRecordButton.java b/app/src/main/java/com/yonsz/z1/chat/widget/AudioRecordButton.java new file mode 100644 index 0000000..e2c4ea0 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/AudioRecordButton.java @@ -0,0 +1,334 @@ +package com.yonsz.z1.chat.widget; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.os.Handler; +import android.os.Message; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; +import com.yonsz.z1.R; +import com.yonsz.z1.chat.utils.AudioManager; +import com.yonsz.z1.chat.utils.FileSaveUtil; + +import java.io.File; +import java.io.IOException; +import java.math.BigDecimal; + +public class AudioRecordButton extends Button implements AudioManager.AudioStageListener { + private static final int STATE_NORMAL = 1; + private static final int STATE_RECORDING = 2; + private static final int STATE_WANT_TO_CANCEL = 3; + private static final int DISTANCE_Y_CANCEL = 50; + private static final int OVERTIME = 60; + private int mCurrentState = STATE_NORMAL; + // 已经开始录音 + private boolean isRecording = false; + private DialogManager mDialogManager; + private float mTime = 0; + // 是否触发了onlongclick,准备好了 + private boolean mReady; + private AudioManager mAudioManager; + private String saveDir = FileSaveUtil.voice_dir; + + private Handler mp3handler = new Handler() { + + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + switch (msg.what) { + case AudioManager.MSG_ERROR_AUDIO_RECORD: + Toast.makeText(getContext(), "录音权限被屏蔽或者录音设备损坏!\n请在设置中检查是否开启权限!", + Toast.LENGTH_SHORT).show(); + mDialogManager.dimissDialog(); + mAudioManager.cancel(); + reset(); + break; + default: + break; + } + } + + }; + + /** + * 先实现两个参数的构造方法,布局会默认引用这个构造方法, 用一个 构造参数的构造方法来引用这个方法 * @param context + */ + + public AudioRecordButton(Context context) { + this(context, null); + // TODO Auto-generated constructor stub + } + + public AudioRecordButton(Context context, AttributeSet attrs) { + super(context, attrs); + + mDialogManager = new DialogManager(getContext()); + + try { + FileSaveUtil.createSDDirectory(FileSaveUtil.voice_dir); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mAudioManager = AudioManager.getInstance(FileSaveUtil.voice_dir); + mAudioManager.setOnAudioStageListener(this); + mAudioManager.setHandle(mp3handler); + setOnLongClickListener(new OnLongClickListener() { + + @Override + public boolean onLongClick(View v) { + // TODO Auto-generated method + try { + FileSaveUtil.createSDDirectory(saveDir); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mAudioManager.setVocDir(saveDir); + mListener.onStart(); + mReady = true; + mAudioManager.prepareAudio(); + return false; + } + }); + // TODO Auto-generated constructor stub + } + + public void setSaveDir(String saveDir) { + this.saveDir = saveDir + saveDir; + } + + /** + * 录音完成后的回调,回调给activiy,可以获得mtime和文件的路径 + */ + public interface AudioFinishRecorderListener { + void onStart(); + + void onFinished(float seconds, String filePath); + } + + private AudioFinishRecorderListener mListener; + + public void setAudioFinishRecorderListener( + AudioFinishRecorderListener listener) { + mListener = listener; + } + + // 获取音量大小的runnable + private Runnable mGetVoiceLevelRunnable = new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + while (isRecording) { + try { + Thread.sleep(100); + mTime += 0.1f; + mhandler.sendEmptyMessage(MSG_VOICE_CHANGE); + if (mTime >= OVERTIME) { + mTime = 60; + mhandler.sendEmptyMessage(MSG_OVERTIME_SEND); + isRecording = false; + break; + } + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + }; + + // 准备三个常量 + private static final int MSG_AUDIO_PREPARED = 0X110; + private static final int MSG_VOICE_CHANGE = 0X111; + private static final int MSG_DIALOG_DIMISS = 0X112; + private static final int MSG_OVERTIME_SEND = 0X113; + + private Handler mhandler = new Handler() { + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_AUDIO_PREPARED: + // 显示应该是在audio end prepare之后回调 + if (isTouch) { + mTime = 0; + mDialogManager.showRecordingDialog(); + isRecording = true; + new Thread(mGetVoiceLevelRunnable).start(); + } + // 需要开启一个线程来变换音量 + break; + case MSG_VOICE_CHANGE: + mDialogManager.updateVoiceLevel(mAudioManager.getVoiceLevel(3)); + break; + case MSG_DIALOG_DIMISS: + isRecording = false; + mDialogManager.dimissDialog(); + break; + case MSG_OVERTIME_SEND: + mDialogManager.tooLong(); + mhandler.sendEmptyMessageDelayed(MSG_DIALOG_DIMISS, 1300);// 持续1.3s + if (mListener != null) {// 并且callbackActivity,保存录音 + File file = new File(mAudioManager.getCurrentFilePath()); + if (FileSaveUtil.isFileExists(file)) { + mListener.onFinished(mTime, + mAudioManager.getCurrentFilePath()); + }else{ + mp3handler.sendEmptyMessage(AudioManager.MSG_ERROR_AUDIO_RECORD); + } + } + isRecording = false; + reset();// 恢复标志位 + break; + } + }; + }; + + // 在这里面发送一个handler的消息 + @Override + public void wellPrepared() { + // TODO Auto-generated method stub + mhandler.sendEmptyMessage(MSG_AUDIO_PREPARED); + } + + /** + * 直接复写这个监听函数 + */ + private boolean isTouch = false; + + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent event) { + // TODO Auto-generated method stub + int action = event.getAction(); + int x = (int) event.getX(); + int y = (int) event.getY(); + + switch (action) { + case MotionEvent.ACTION_DOWN: + isTouch = true; + changeState(STATE_RECORDING); + break; + case MotionEvent.ACTION_MOVE: + + if (isRecording) { + + // 根据x,y来判断用户是否想要取消 + if (wantToCancel(x, y)) { + changeState(STATE_WANT_TO_CANCEL); + } else { + changeState(STATE_RECORDING); + } + + } + + break; + case MotionEvent.ACTION_UP: + // 首先判断是否有触发onlongclick事件,没有的话直接返回reset + isTouch = false; + if (!mReady) { + reset(); + return super.onTouchEvent(event); + } + // 如果按的时间太短,还没准备好或者时间录制太短,就离开了,则显示这个dialog + if (!isRecording || mTime < 0.6f) { + mDialogManager.tooShort(); + mAudioManager.cancel(); + mhandler.sendEmptyMessageDelayed(MSG_DIALOG_DIMISS, 1300);// 持续1.3s + } else if (mCurrentState == STATE_RECORDING) {// 正常录制结束 + mDialogManager.dimissDialog(); + mAudioManager.release();// release释放一个mediarecorder + if (mListener != null) {// 并且callbackActivity,保存录音 + BigDecimal b = new BigDecimal(mTime); + float f1 = b.setScale(1, BigDecimal.ROUND_HALF_UP) + .floatValue(); + File file = new File(mAudioManager.getCurrentFilePath()); + if (FileSaveUtil.isFileExists(file)) { + mListener.onFinished(f1,mAudioManager.getCurrentFilePath()); + }else{ + mp3handler.sendEmptyMessage(AudioManager.MSG_ERROR_AUDIO_RECORD); + } + } + } else if (mCurrentState == STATE_WANT_TO_CANCEL) { + mAudioManager.cancel(); + mDialogManager.dimissDialog(); + } + isRecording = false; + reset();// 恢复标志位 + + break; + case MotionEvent.ACTION_CANCEL: + isTouch = false; + reset(); + break; + + } + + return super.onTouchEvent(event); + } + + /** + * 回复标志位以及状态 + */ + private void reset() { + // TODO Auto-generated method stub + isRecording = false; + changeState(STATE_NORMAL); + mReady = false; + mTime = 0; + } + + private boolean wantToCancel(int x, int y) { + // TODO Auto-generated method stub + + if (x < 0 || x > getWidth()) {// 判断是否在左边,右边,上边,下边 + return true; + } + if (y < -DISTANCE_Y_CANCEL || y > getHeight() + DISTANCE_Y_CANCEL) { + return true; + } + + return false; + } + + private void changeState(int state) { + // TODO Auto-generated method stub + if (mCurrentState != state) { + mCurrentState = state; + switch (mCurrentState) { + case STATE_NORMAL: + setBackgroundResource(R.drawable.button_recordnormal); + setText(R.string.normal); + + break; + case STATE_RECORDING: + setBackgroundResource(R.drawable.button_recording); + setText(R.string.recording); + if (isRecording) { + mDialogManager.recording(); + // 复写dialog.recording(); + } + break; + + case STATE_WANT_TO_CANCEL: + setBackgroundResource(R.drawable.button_recording); + setText(R.string.want_to_cancle); + // dialog want to cancel + mDialogManager.wantToCancel(); + break; + + } + } + + } + + @Override + public boolean onPreDraw() { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/BubbleImageView.java b/app/src/main/java/com/yonsz/z1/chat/widget/BubbleImageView.java new file mode 100644 index 0000000..2b59115 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/BubbleImageView.java @@ -0,0 +1,138 @@ +package com.yonsz.z1.chat.widget; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.NinePatch; +import android.graphics.Paint; +import android.graphics.PorterDuff.Mode; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.Display; +import android.view.WindowManager; +import android.widget.ImageView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.animation.GlideAnimation; +import com.bumptech.glide.request.target.SimpleTarget; + +public class BubbleImageView extends ImageView { + private Context context; + private Bitmap iconBitmap; + private int res; + private static final int OK_INT = 0x0001; + private static final int ERROR_INT = 0x0000; + @SuppressLint("HandlerLeak") + private Handler bitmapHandler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case OK_INT: + Bitmap bitmap_bg = BitmapFactory.decodeResource(getResources(), + res); + final Bitmap bp = getRoundCornerImage(bitmap_bg, iconBitmap); + setImageBitmap(bp); + break; + case ERROR_INT: + break; + } + }; + }; + + public BubbleImageView(Context context) { + super(context); + this.context = context; + } + + public BubbleImageView(Context context, AttributeSet attrs) { + super(context, attrs); + this.context = context; + } + + public BubbleImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + this.context = context; + } + + public void load(String url, int res, int placeHolderPic) { + this.setImageResource(placeHolderPic); + this.res = res; + Glide.with(context).load(url).asBitmap().into(new SimpleTarget() { + @Override + public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { + if (resource != null) { + iconBitmap = resource; + bitmapHandler.sendEmptyMessage(OK_INT); + } + } + }); + } + + public void setLocalImageBitmap(Bitmap bm, int res) { + // TODO Auto-generated method stub + Bitmap bitmap_bg = BitmapFactory.decodeResource(getResources(), res); + final Bitmap bp = getRoundCornerImage(bitmap_bg, bm); + setImageBitmap(bp); + } + + public Bitmap getRoundCornerImage(Bitmap bitmap_bg, Bitmap bitmap_in) { + int width = bitmap_in.getWidth(); + int height = bitmap_in.getHeight(); + if(height != 0){ + double scale = (width * 1.00) / height; + if (width >= height) { + width = getBitmapWidth(); + height = (int) (width / scale); + } else { + height = getBitmapHeight(); + width = (int) (height * scale); + } + }else{ + width = 100; + height = 100; + } + Bitmap roundConcerImage = Bitmap.createBitmap(width, height, + Config.ARGB_8888); + Canvas canvas = new Canvas(roundConcerImage); + Paint paint = new Paint(); + Rect rect = new Rect(0, 0, width, height); + Rect rectF = new Rect(0, 0, bitmap_in.getWidth(), bitmap_in.getHeight()); + paint.setAntiAlias(true); + NinePatch patch = new NinePatch(bitmap_bg, + bitmap_bg.getNinePatchChunk(), null); + patch.draw(canvas, rect); + paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); + canvas.drawBitmap(bitmap_in, rectF, rect, paint); + return roundConcerImage; + } + + // 获取屏幕的宽度 + @SuppressWarnings("deprecation") + public int getScreenWidth(Context context) { + WindowManager manager = (WindowManager) context + .getSystemService(Context.WINDOW_SERVICE); + Display display = manager.getDefaultDisplay(); + return display.getWidth(); + } + + // 获取屏幕的高度 + @SuppressWarnings("deprecation") + public int getScreenHeight(Context context) { + WindowManager manager = (WindowManager) context + .getSystemService(Context.WINDOW_SERVICE); + Display display = manager.getDefaultDisplay(); + return display.getHeight(); + } + + public int getBitmapWidth() { + return getScreenWidth(context) / 3; + } + + public int getBitmapHeight() { + return getScreenHeight(context) / 4; + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/ChatBottomView.java b/app/src/main/java/com/yonsz/z1/chat/widget/ChatBottomView.java new file mode 100644 index 0000000..cab000c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/ChatBottomView.java @@ -0,0 +1,70 @@ +package com.yonsz.z1.chat.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.LinearLayout; + +import com.yonsz.z1.R; + +public class ChatBottomView extends LinearLayout { + private View baseView; + private LinearLayout imageGroup; + private LinearLayout cameraGroup; + private LinearLayout phraseGroup; + private HeadIconSelectorView.OnHeadIconClickListener onHeadIconClickListener; + public static final int FROM_CAMERA = 1; + public static final int FROM_GALLERY = 2; + public static final int FROM_PHRASE = 3; + public ChatBottomView(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + findView(); + init(); + } + + private void findView(){ + baseView = LayoutInflater.from(getContext()).inflate(R.layout.layout_tongbaobottom, this); + imageGroup = (LinearLayout) baseView.findViewById(R.id.image_bottom_group); + cameraGroup = (LinearLayout) baseView.findViewById(R.id.camera_group); + phraseGroup = (LinearLayout) baseView.findViewById(R.id.phrase_group); + } + private void init(){ + cameraGroup.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (null != onHeadIconClickListener) { + onHeadIconClickListener.onClick(FROM_CAMERA); + } + } + }); + imageGroup.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + if (null != onHeadIconClickListener) { + onHeadIconClickListener.onClick(FROM_GALLERY); + } + } + }); + phraseGroup.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + if (null != onHeadIconClickListener) { + onHeadIconClickListener.onClick(FROM_PHRASE); + } + } + }); + } + + public void setOnHeadIconClickListener( + HeadIconSelectorView.OnHeadIconClickListener onHeadIconClickListener) { + // TODO Auto-generated method stub + this.onHeadIconClickListener = onHeadIconClickListener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/CustomShapeTransformation.java b/app/src/main/java/com/yonsz/z1/chat/widget/CustomShapeTransformation.java new file mode 100644 index 0000000..cc8fae4 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/CustomShapeTransformation.java @@ -0,0 +1,110 @@ +package com.yonsz.z1.chat.widget; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.drawable.Drawable; +import android.support.v4.content.ContextCompat; +import android.view.Display; +import android.view.WindowManager; + +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; +import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; +import com.bumptech.glide.load.resource.bitmap.TransformationUtils; + + +/** + * Created by Mao Jiqing on 2016/11/4. + */ + +public class CustomShapeTransformation extends BitmapTransformation { + + private Paint mPaint; // 画笔 + private Context mContext; + private int mShapeRes; // 形状的drawable资源 + + public CustomShapeTransformation(Context context, int shapeRes) { + super(context); + mContext = context; + mShapeRes = shapeRes; + // 实例化Paint对象,并设置Xfermode为SRC_IN + mPaint = new Paint(); + mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + } + + @Override + // 复写该方法,完成图片的转换 + public Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { + // 获取到形状资源的Drawable对象 + Drawable shape = ContextCompat.getDrawable(mContext, mShapeRes); + int width = toTransform.getWidth(); + int height = toTransform.getHeight(); + if(height != 0){ + double scale = (width * 1.00) / height; + if (width >= height) { + width = getBitmapWidth(); + height = (int) (width / scale); + } else { + height = getBitmapHeight(); + width = (int) (height * scale); + } + }else{ + width = 100; + height = 100; + } + // 居中裁剪图片,调用Glide库中TransformationUtils类的centerCrop()方法完成裁剪,保证图片居中且填满 + final Bitmap toReuse = pool.get(width, height, toTransform.getConfig() != null + ? toTransform.getConfig() : Bitmap.Config.ARGB_8888); + Bitmap transformed = TransformationUtils.centerCrop(toReuse, toTransform, width, height); + if (toReuse != null && toReuse != transformed && !pool.put(toReuse)) { + toReuse.recycle(); + } + + // 根据算出的宽高新建Bitmap对象并设置到画布上 + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + // 设置形状的大小与图片的大小一致 + shape.setBounds(0, 0, width, height); + // 将图片画到画布上 + shape.draw(canvas); + // 将裁剪后的图片画得画布上 + canvas.drawBitmap(transformed, 0, 0, mPaint); + + return bitmap; + } + + @Override + public String getId() { + // 用于缓存的唯一标识符 + return "CustomShapeTransformation" + mShapeRes; + } + + // 获取屏幕的宽度 + @SuppressWarnings("deprecation") + public int getScreenWidth(Context context) { + WindowManager manager = (WindowManager) context + .getSystemService(Context.WINDOW_SERVICE); + Display display = manager.getDefaultDisplay(); + return display.getWidth(); + } + + // 获取屏幕的高度 + @SuppressWarnings("deprecation") + public int getScreenHeight(Context context) { + WindowManager manager = (WindowManager) context + .getSystemService(Context.WINDOW_SERVICE); + Display display = manager.getDefaultDisplay(); + return display.getHeight(); + } + + public int getBitmapWidth() { + return getScreenWidth(mContext) / 3; + } + + public int getBitmapHeight() { + return getScreenHeight(mContext) / 4; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/DialogManager.java b/app/src/main/java/com/yonsz/z1/chat/widget/DialogManager.java new file mode 100644 index 0000000..bf4059d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/DialogManager.java @@ -0,0 +1,149 @@ +package com.yonsz.z1.chat.widget; + +import android.annotation.SuppressLint; +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.chat.utils.ScreenUtil; + + +@SuppressLint("InflateParams") +public class DialogManager { + + /** + * 以下为dialog的初始化控件,包括其中的布局文件 + */ + + private Dialog mDialog; + + private ImageView mIcon; + private ImageView mVoice; + + private TextView mLable; + + private Context mContext; + + public DialogManager(Context context) { + // TODO Auto-generated constructor stub + mContext = context; + } + + public void showRecordingDialog() { + // TODO Auto-generated method stub + + mDialog = new Dialog(mContext, R.style.Theme_audioDialog); + mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + + // 用layoutinflater来引用布局 + LayoutInflater inflater = LayoutInflater.from(mContext); + View view = inflater.inflate(R.layout.layout_voice_dialog_manager, null); + mDialog.setContentView(view); + + mIcon = (ImageView) mDialog.findViewById(R.id.dialog_icon); + mVoice = (ImageView) mDialog.findViewById(R.id.dialog_voice); + mLable = (TextView) mDialog.findViewById(R.id.recorder_dialogtext); + + Window dialogWindow = mDialog.getWindow(); + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + int width = ScreenUtil.getScreenWidth(mContext) / 2; + lp.width = width; // 宽度 + lp.height = width; // 高度 + dialogWindow.setAttributes(lp); + mDialog.setCancelable(false); + mDialog.show(); + + } + + /** + * 设置正在录音时的dialog界面 + */ + public void recording() { + if (mDialog != null && mDialog.isShowing()) { + mIcon.setVisibility(View.GONE); + mVoice.setVisibility(View.VISIBLE); + mLable.setVisibility(View.VISIBLE); + mLable.setText(R.string.shouzhishanghua); + } + } + + /** + * 取消界面 + */ + public void wantToCancel() { + // TODO Auto-generated method stub + if (mDialog != null && mDialog.isShowing()) { + mIcon.setVisibility(View.VISIBLE); + mVoice.setVisibility(View.GONE); + mLable.setVisibility(View.VISIBLE); + + mIcon.setImageResource(R.mipmap.cancel); + mLable.setText(R.string.want_to_cancle); + } + + } + + // 时间过短 + public void tooShort() { + // TODO Auto-generated method stub + if (mDialog != null && mDialog.isShowing()) { + mIcon.setVisibility(View.VISIBLE); + mVoice.setVisibility(View.GONE); + mLable.setVisibility(View.VISIBLE); + + mIcon.setImageResource(R.mipmap.voice_to_short); + mLable.setText(R.string.tooshort); + } + + } + // 时间过长 + public void tooLong() { + // TODO Auto-generated method stub + if (mDialog != null && mDialog.isShowing()) { + mIcon.setVisibility(View.VISIBLE); + mVoice.setVisibility(View.GONE); + mLable.setVisibility(View.VISIBLE); + + mIcon.setImageResource(R.mipmap.voice_to_short); + mLable.setText(R.string.toolong); + } + + } + // 隐藏dialog + public void dimissDialog() { + // TODO Auto-generated method stub + + if (mDialog != null && mDialog.isShowing()) { + mDialog.dismiss(); + mDialog = null; + } + + } + + public void updateVoiceLevel(int level) { + // TODO Auto-generated method stub + + if (mDialog != null && mDialog.isShowing()) { + int resId; + if(level >= 1 && level < 2){ + resId = mContext.getResources().getIdentifier("tb_voice1", + "mipmap", mContext.getPackageName()); + }else if(level >= 2 && level < 3){ + resId = mContext.getResources().getIdentifier("tb_voice2", + "mipmap", mContext.getPackageName()); + }else{ + resId = mContext.getResources().getIdentifier("tb_voice3", + "mipmap", mContext.getPackageName()); + } + mVoice.setImageResource(resId); + } + + } + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/ExpandGridView.java b/app/src/main/java/com/yonsz/z1/chat/widget/ExpandGridView.java new file mode 100644 index 0000000..943e55d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/ExpandGridView.java @@ -0,0 +1,38 @@ +/** + * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. + * + * 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.yonsz.z1.chat.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.GridView; + +public class ExpandGridView extends GridView { + + public ExpandGridView(Context context) { + super(context); + } + + public ExpandGridView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + + @Override + public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); + super.onMeasure(widthMeasureSpec, expandSpec); + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/GifTextView.java b/app/src/main/java/com/yonsz/z1/chat/widget/GifTextView.java new file mode 100644 index 0000000..334ee4f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/GifTextView.java @@ -0,0 +1,301 @@ +package com.yonsz.z1.chat.widget; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Handler; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.style.ImageSpan; +import android.util.AttributeSet; +import android.widget.EditText; +import com.yonsz.z1.chat.utils.FaceData; +import com.yonsz.z1.chat.utils.GifOpenHelper; +import com.yonsz.z1.chat.utils.ScreenUtil; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class GifTextView extends EditText { + /** + * 注:如果获取的gif帧与帧之间的时间间隔都不相同,建议调个固定的,最好的方法是将gif图的间隔设置相同 + */ + private static final int DELAYED = 300; + + /** + * @author Dragon SpanInfo + * 类用于存储一个要显示的图片(动态或静态)的信息,包括分解后的每一帧mapList、替代文字的起始位置、终止位置 + * 、帧的总数、当前需要显示的帧、帧与帧之间的时间间隔 + */ + private class SpanInfo { + ArrayList mapList; + @SuppressWarnings("unused") + int start, end, frameCount, currentFrameIndex, delay; + + public SpanInfo() { + mapList = new ArrayList(); + start = end = frameCount = currentFrameIndex = delay = 0; + } + } + + /** + * spanInfoList 是一个SpanInfo的list ,用于处理一个TextView中出现多个要匹配的图片的情况 + */ + private ArrayList spanInfoList = null; + private Handler handler; // 用于处理从子线程TextView传来的消息 + private String myText; // 存储textView应该显示的文本 + + /** + * 这三个构造方法一个也不要少,否则会产生CastException,注意在这三个构造函数中都为spanInfoList实例化,可能有些浪费 + * ,但保证不会有空指针异常 + * + * @param context + * @param attrs + * @param defStyle + */ + @SuppressLint("NewApi") + public GifTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + // TODO Auto-generated constructor stub + // spanInfoList = new ArrayList(); + GifTextView.this.setFocusableInTouchMode(false); + } + + @SuppressLint("NewApi") + public GifTextView(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + // spanInfoList = new ArrayList(); + GifTextView.this.setFocusableInTouchMode(false); + } + + @SuppressLint("NewApi") + public GifTextView(Context context) { + super(context); + // TODO Auto-generated constructor stub + // spanInfoList = new ArrayList(); + GifTextView.this.setFocusableInTouchMode(false); + } + + /** + * 对要显示在textView上的文本进行解析,看看是否文本中有需要与Gif或者静态图片匹配的文本 若有,那么调用parseGif + * 对该文本对应的Gif图片进行解析 或者嗲用parseBmp解析静态图片 + * + * @param inputStr + */ + private boolean parseText(String inputStr) { + myText = inputStr; +// Pattern mPattern = Pattern.compile("\\[:..\\]|\\[:...\\]"); + Pattern mPattern = Pattern.compile("\\[[^\\]]+\\]"); + Matcher mMatcher = mPattern.matcher(inputStr); + boolean hasGif = false; + while (mMatcher.find()) { + String faceName = mMatcher.group(); + Integer faceId = null; + /** + * 这里匹配时用到了图片库,即一个专门存放图片id和其匹配的名称的静态对象,这两个静态对象放在了FaceData.java + * 中,并采用了静态块的方法进行了初始化,不会有空指针异常 + */ + if ((faceId = FaceData.gifFaceInfo.get(faceName)) != null) { + if (isGif) { + parseGif(faceId, mMatcher.start(), mMatcher.end()); + } else { + parseBmp(faceId, mMatcher.start(), mMatcher.end()); + } + } + hasGif = true; + } + return hasGif; + } + + /** + * 对静态图片进行解析: + * 创建一个SpanInfo对象,帧数设为1,按照下面的参数设置,最后不要忘记将SpanInfo对象添加进spanInfoList中, 否则不会显示 + * + * @param resourceId + * @param start + * @param end + */ + @SuppressWarnings("unused") + private void parseBmp(int resourceId, int start, int end) { + Bitmap bitmap = BitmapFactory.decodeResource(getContext() + .getResources(), resourceId); + ImageSpan imageSpan = new ImageSpan(getContext(), bitmap); + SpanInfo spanInfo = new SpanInfo(); + spanInfo.currentFrameIndex = 0; + spanInfo.frameCount = 1; + spanInfo.start = start; + spanInfo.end = end; + spanInfo.delay = 100; + spanInfo.mapList.add(bitmap); + spanInfoList.add(spanInfo); + + } + + /** + * 解析Gif图片,与静态图片唯一的不同是这里需要调用GifOpenHelper类读取Gif返回一系一组bitmap(用for 循环把这一 + * 组的bitmap存储在SpanInfo.mapList中,此时的frameCount参数也大于1了) + * + * @param resourceId + * @param start + * @param end + */ + private void parseGif(int resourceId, int start, int end) { + + GifOpenHelper helper = new GifOpenHelper(); + helper.read(getContext().getResources().openRawResource(resourceId)); + SpanInfo spanInfo = new SpanInfo(); + spanInfo.currentFrameIndex = 0; + spanInfo.frameCount = helper.getFrameCount(); + spanInfo.start = start; + spanInfo.end = end; + spanInfo.mapList.add(helper.getImage()); + for (int i = 1; i < helper.getFrameCount(); i++) { + spanInfo.mapList.add(helper.nextBitmap()); + } + spanInfo.delay = helper.nextDelay(); // 获得每一帧之间的延迟 + spanInfoList.add(spanInfo); + + } + + private boolean isGif; + + /** + * GifTextView 与外部对象的接口,以后设置文本内容时使用setSpanText() 而不再是setText(); + * + * @param handler + * @param text + */ + public void setSpanText(Handler handler, final String text, boolean isGif) { + this.handler = handler; // 获得UI的Handler + this.isGif = isGif; + spanInfoList = new ArrayList(); +// ThreadPoolUtils.execute(new Runnable() { +// +// @Override +// public void run() { +//// // TODO Auto-generated method stub + if (parseText(text)) {// 对String对象进行解析 +// mStartHandler.sendEmptyMessage(0); + if (parseMessage(this)) { + startPost(); + } + } else { +// mStartHandler.sendEmptyMessage(1); + setText(myText); + } +// } +// }); + } + +// private StartHandler mStartHandler = new StartHandler(this); +// +// public static class StartHandler extends Handler { +// private final WeakReference mGifWeakReference; +// +// public StartHandler(GifTextView gifTextView) { +// mGifWeakReference = new WeakReference(gifTextView); +// } +// +// @Override +// public void handleMessage(Message msg) { +// GifTextView gifTextView = mGifWeakReference.get(); +// if (gifTextView != null) { +// if (msg.what == 0) { +// gifTextView.startPost(); +// } else if (msg.what == 1) { +// gifTextView.setText(gifTextView.myText); +// } +// } +// } +// } + + public boolean parseMessage(GifTextView gifTextView) { + if (gifTextView.myText != null && !gifTextView.myText.equals("")) { + SpannableString sb = new SpannableString("" + gifTextView.myText); // 获得要显示的文本 + int gifCount = 0; + SpanInfo info = null; + for (int i = 0; i < gifTextView.spanInfoList.size(); i++) { // for循环,处理显示多个图片的问题 + info = gifTextView.spanInfoList.get(i); + if (info.mapList.size() > 1) { + /* + * gifCount用来区分是Gif还是BMP,若是gif gifCount>0 + * ,否则gifCount=0 + */ + gifCount++; + + } + Bitmap bitmap = info.mapList + .get(info.currentFrameIndex); + info.currentFrameIndex = (info.currentFrameIndex + 1) + % (info.frameCount); + /** + * currentFrameIndex + * 用于控制当前应该显示的帧的序号,每次显示之后currentFrameIndex 应该加1 + * ,加到frameCount后再变成0循环显示 + */ + int size = ScreenUtil.dip2px(gifTextView.getContext(), 30); + if (gifCount != 0) { + bitmap = Bitmap.createScaledBitmap(bitmap, size, + size, true); + + } else { + bitmap = Bitmap.createScaledBitmap(bitmap, size, + size, true); + } + ImageSpan imageSpan = new ImageSpan(gifTextView.getContext(), + bitmap); + if (info.end <= sb.length()) { + sb.setSpan(imageSpan, info.start, info.end, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } else { + break; + } + + } + // 对所有的图片对应的ImageSpan完成设置后,调用TextView的setText方法设置文本 + gifTextView.setText(sb); + if (gifCount != 0) { + return true; + } else { + return false; + } + } + return false; + } + + public TextRunnable rTextRunnable; + + public void startPost() { + rTextRunnable = new TextRunnable(this); // 生成Runnable对象 + handler.post(rTextRunnable); // 利用UI线程的Handler 将r添加进消息队列中。 + } + + public static final class TextRunnable implements Runnable { + private final WeakReference mWeakReference; + + public TextRunnable(GifTextView f) { + mWeakReference = new WeakReference(f); + } + + @Override + public void run() { + // TODO Auto-generated method stub + GifTextView gifTextView = mWeakReference.get(); + if (gifTextView != null) { + /** + * 这一步是为了节省内存而是用,即如果文本中只有静态图片没有动态图片,那么该线程就此终止,不会重复执行 + * 。而如果有动图,那么会一直执行 + */ + if (gifTextView.parseMessage(gifTextView)) { + gifTextView.handler.postDelayed(this, DELAYED); + } + } + } + } + +} + diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/HeadIconSelectorView.java b/app/src/main/java/com/yonsz/z1/chat/widget/HeadIconSelectorView.java new file mode 100644 index 0000000..8318dfc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/HeadIconSelectorView.java @@ -0,0 +1,330 @@ +package com.yonsz.z1.chat.widget; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.view.GestureDetector; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.view.animation.Animation.AnimationListener; +import android.view.animation.ScaleAnimation; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; + +import com.yonsz.z1.R; + +public class HeadIconSelectorView extends RelativeLayout implements + GestureDetector.OnGestureListener { + + private View baseView; + + private RelativeLayout mainRl; + private LinearLayout bottomLl; + private LinearLayout cameraLl; + private LinearLayout galleryLl; + private LinearLayout cancelLl; + + private GestureDetector gestureDetector; // 手势检测器 + private boolean isAnimationing = false; + private OnHeadIconClickListener onHeadIconClickListener; + public static final int FROM_CAMERA = 2; + public static final int FROM_GALLERY = 3; + public static final int CANCEL = 4; + public static final int BLANK_CANCEL = 5; + + public HeadIconSelectorView(Context context) { + super(context); + init(); + } + + @SuppressLint("ClickableViewAccessibility") + private void init() { + findView(); + this.setOnTouchListener(new OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + return gestureDetector.onTouchEvent(event); + } + }); + bottomLl.setVisibility(View.INVISIBLE); + mainRl.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (null != onHeadIconClickListener) { + onHeadIconClickListener.onClick(BLANK_CANCEL); + } + cancel(); + } + }); + cancelLl.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (null != onHeadIconClickListener) { + onHeadIconClickListener.onClick(CANCEL); + } + cancel(); + } + }); + cameraLl.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (null != onHeadIconClickListener) { + onHeadIconClickListener.onClick(FROM_CAMERA); + } + cancel(); + } + }); + galleryLl.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + if (null != onHeadIconClickListener) { + onHeadIconClickListener.onClick(FROM_GALLERY); + } + cancel(); + } + }); + } + + @SuppressWarnings("deprecation") + private void findView() { + gestureDetector = new GestureDetector(this); + baseView = LayoutInflater.from(getContext()).inflate( + R.layout.layout_view_headicon, this); + mainRl = (RelativeLayout) baseView.findViewById(R.id.head_icon_main_rl); + bottomLl = (LinearLayout) baseView.findViewById(R.id.head_icon_main_ll); + cameraLl = (LinearLayout) baseView + .findViewById(R.id.head_icon_camera_ll); + galleryLl = (LinearLayout) baseView + .findViewById(R.id.head_icon_gallery_ll); + cancelLl = (LinearLayout) baseView + .findViewById(R.id.head_icon_cancel_ll); + } + + protected void bottomViewFlyIn() { + final ScaleAnimation sa1 = new ScaleAnimation(1, 1, 0, 1.2f, + Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 1f); + sa1.setDuration(250); + final ScaleAnimation sa2 = new ScaleAnimation(1, 1, 1.2f, 1, + Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 1f); + sa2.setDuration(150); + sa1.setAnimationListener(new AnimationListener() { + + @Override + public void onAnimationStart(Animation animation) { + isAnimationing = true; + bottomLl.setVisibility(VISIBLE); + } + + @Override + public void onAnimationRepeat(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + isAnimationing = false; + bottomLl.startAnimation(sa2); + } + }); + bottomLl.startAnimation(sa1); + } + + protected void bottomViewFlyOut() { + final ScaleAnimation sa1 = new ScaleAnimation(1, 1, 1, 1.2f, + Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 1f); + sa1.setDuration(150); + final ScaleAnimation sa2 = new ScaleAnimation(1, 1, 1.2f, 0, + Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 1f); + sa2.setDuration(250); + sa1.setAnimationListener(new AnimationListener() { + + @Override + public void onAnimationStart(Animation animation) { + isAnimationing = true; + bottomLl.setVisibility(VISIBLE); + } + + @Override + public void onAnimationRepeat(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + bottomLl.startAnimation(sa2); + } + }); + sa2.setAnimationListener(new AnimationListener() { + + @Override + public void onAnimationStart(Animation animation) { + } + + @Override + public void onAnimationRepeat(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + isAnimationing = false; + bottomLl.setVisibility(INVISIBLE); + flyOut(); + } + }); + bottomLl.startAnimation(sa1); + } + + protected void cancel() { + if (!isAnimationing) { + if (bottomLl.getVisibility() == VISIBLE) { + bottomViewFlyOut(); + return; + } + } + } + + public void flyIn() { + AlphaAnimation aa = new AlphaAnimation(0, 1); + aa.setDuration(300); + aa.setAnimationListener(new AnimationListener() { + + @Override + public void onAnimationStart(Animation animation) { + isAnimationing = true; + setVisibility(VISIBLE); + } + + @Override + public void onAnimationRepeat(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + isAnimationing = false; + bottomViewFlyIn(); + } + }); + startAnimation(aa); + } + + public void flyOut() { + AlphaAnimation aa = new AlphaAnimation(1, 0); + aa.setDuration(300); + aa.setAnimationListener(new AnimationListener() { + + @Override + public void onAnimationStart(Animation animation) { + isAnimationing = true; + setVisibility(VISIBLE); + } + + @Override + public void onAnimationRepeat(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + isAnimationing = false; + destroy(); + } + }); + startAnimation(aa); + } + + protected void destroy() { + if (this.getParent() != null) { + ((ViewGroup) this.getParent()).removeView(this); + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (!isAnimationing) { + if (bottomLl.getVisibility() == VISIBLE) { + bottomViewFlyOut(); + return true; + } + } else { + return true; + } + } + return super.onKeyDown(keyCode, event); + } + + public OnHeadIconClickListener getOnHeadIconClickListener() { + return onHeadIconClickListener; + } + + public void setOnHeadIconClickListener( + OnHeadIconClickListener onHeadIconClickListener) { + this.onHeadIconClickListener = onHeadIconClickListener; + } + + public interface OnHeadIconClickListener { + public void onClick(int from); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent event) { + return gestureDetector.onTouchEvent(event); + } + + @Override + public boolean onDown(MotionEvent e) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void onShowPress(MotionEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public boolean onSingleTapUp(MotionEvent e) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, + float distanceY) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void onLongPress(MotionEvent e) { + // TODO Auto-generated method stub + + } + + private float minVelocityY = 100f;// 10个像素每秒 + private float minDistanceY = 100f;// 100个像素 + + // 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, + // 多个ACTION_MOVE, 1个ACTION_UP触发 + // e1:第1个ACTION_DOWN MotionEvent + // e2:最后一个ACTION_MOVE MotionEvent + // velocityX:X轴上的移动速度,像素/秒 + // velocityY:Y轴上的移动速度,像素/秒 + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, + float velocityY) { + // 手势从上到下且移动速度较快 + if (e2.getY() - e1.getY() > minDistanceY && velocityY > minVelocityY) { + cancel(); + } + return false; + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/MediaManager.java b/app/src/main/java/com/yonsz/z1/chat/widget/MediaManager.java new file mode 100644 index 0000000..202b73b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/MediaManager.java @@ -0,0 +1,84 @@ +package com.yonsz.z1.chat.widget; + + + +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.MediaPlayer.OnCompletionListener; +import android.media.MediaPlayer.OnErrorListener; + +import java.io.IOException; + +public class MediaManager { + + + private static MediaPlayer mPlayer; + + private static boolean isPause; + + public static void playSound(String filePathString, + OnCompletionListener onCompletionListener) { + // TODO Auto-generated method stub + if (mPlayer==null) { + mPlayer=new MediaPlayer(); + //保险起见,设置报错监听 + mPlayer.setOnErrorListener(new OnErrorListener() { + + @Override + public boolean onError(MediaPlayer mp, int what, int extra) { + // TODO Auto-generated method stub + mPlayer.reset(); + return false; + } + }); + }else { + mPlayer.reset();//就恢复 + } + + try { + mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mPlayer.setOnCompletionListener(onCompletionListener); + mPlayer.setDataSource(filePathString); + mPlayer.prepare(); + mPlayer.start(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalStateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + //停止函数 + public static void pause(){ + if (mPlayer!=null&&mPlayer.isPlaying()) { + mPlayer.pause(); + isPause=true; + } + } + + //继续 + public static void resume() + { + if (mPlayer!=null&&isPause) { + mPlayer.start(); + isPause=false; + } + } + + + public static void release() + { + if (mPlayer!=null) { + mPlayer.release(); + mPlayer=null; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/PullToRefreshLayout.java b/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/PullToRefreshLayout.java new file mode 100644 index 0000000..6b8ced9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/PullToRefreshLayout.java @@ -0,0 +1,249 @@ +package com.yonsz.z1.chat.widget.pulltorefresh; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Color; +import android.support.v4.view.ViewCompat; +import android.support.v4.widget.ViewDragHelper; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.chat.utils.ScreenUtil; + +/** + * Created by Mao Jiqing on 2016/9/27. + */ +public class PullToRefreshLayout extends LinearLayout { + /** + * 滑动时view位置改变协调处理 + * + * @param viewIndex + * 滑动view的index(1或2) + * @param posTop + * 滑动View的top位置 + */ + private static int viewHeight; + private ViewDragHelper VDH; + private View myList; + private TextView pullText; + private pulltorefreshNotifier pullNotifier; + private boolean isPull = true; + + public PullToRefreshLayout(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + // init(); + VDH = ViewDragHelper.create(this, 10.0f, new DragHelperCallback()); + } + + /** + * 这是View的方法,该方法不支持android低版本(2.2、2.3)的操作系统,所以手动复制过来以免强制退出 + */ + public static int resolveSizeAndState(int size, int measureSpec, + int childMeasuredState) { + int result = size; + int specMode = MeasureSpec.getMode(measureSpec); + int specSize = MeasureSpec.getSize(measureSpec); + switch (specMode) { + case MeasureSpec.UNSPECIFIED: + result = size; + break; + case MeasureSpec.AT_MOST: + if (specSize < size) { + result = specSize | MEASURED_STATE_TOO_SMALL; + } else { + result = size; + } + break; + case MeasureSpec.EXACTLY: + result = specSize; + break; + } + return result | (childMeasuredState & MEASURED_STATE_MASK); + } + + public void setSlideView(View view) { + init(view); + } + + private void init(View view) { + LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + myList = view; + myList.setBackgroundColor(Color.parseColor("#fafafa")); + myList.setLayoutParams(lp1); + LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ScreenUtil.dip2px(getContext(), 100)); + pullText = new TextView(getContext()); + pullText.setText("下拉即可刷新"); + pullText.setTextColor(Color.BLACK); + pullText.setBackgroundColor(Color.parseColor("#fafafa")); + pullText.setGravity(Gravity.CENTER); + pullText.setLayoutParams(lp2); + setOrientation(LinearLayout.VERTICAL); + addView(pullText); + addView(myList); + } + + public View returnMylist() { + return myList; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + measureChildren(widthMeasureSpec, heightMeasureSpec); + + int maxWidth = MeasureSpec.getSize(widthMeasureSpec); + int maxHeight = MeasureSpec.getSize(heightMeasureSpec); + setMeasuredDimension( + resolveSizeAndState(maxWidth, widthMeasureSpec, 0), + resolveSizeAndState(maxHeight, heightMeasureSpec, 0)); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + if (pullText.getTop() == 0) { + viewHeight = pullText.getMeasuredHeight(); + pullText.layout(l, 0, r, viewHeight); + myList.layout(l, 0, r, b); + pullText.offsetTopAndBottom(-viewHeight); + } else { + pullText.layout(l, pullText.getTop(), r, pullText.getBottom()); + myList.layout(l, myList.getTop(), r, myList.getBottom()); + } + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + boolean shouldIntercept = VDH.shouldInterceptTouchEvent(event) && isPull; + return shouldIntercept; + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent event) { + VDH.processTouchEvent(event); + return true; + } + + private void onViewPosChanged(int viewIndex, int posTop) { + if (viewIndex == 1) { + int offsetTopBottom = viewHeight + pullText.getTop() + - myList.getTop(); + myList.offsetTopAndBottom(offsetTopBottom + 400); + } else if (viewIndex == 2) { + int offsetTopBottom = myList.getTop() - viewHeight + - pullText.getTop(); + pullText.offsetTopAndBottom(offsetTopBottom); + } + invalidate(); + } + + private void refreshOrNot(View releasedChild, float yvel) { + int finalTop = 0; + if (releasedChild == pullText) { + // 拖动第一个view松手 + if (yvel < -50) { + finalTop = 0; + } else { + finalTop = viewHeight; + } + } else { + // 拖动第二个view松手 + if (yvel > viewHeight - 5 || releasedChild.getTop() >= viewHeight) { + finalTop = viewHeight; + if (null != pullNotifier) { + pullNotifier.onPull(); + } + pullText.setText("正在加载"); + } + } + + if (VDH.smoothSlideViewTo(myList, 0, finalTop)) { + ViewCompat.postInvalidateOnAnimation(this); + } + } + + public void refreshComplete() { + if (VDH.smoothSlideViewTo(myList, 0, 0)) { + ViewCompat.postInvalidateOnAnimation(this); + } + } + + @Override + public void computeScroll() { + if (VDH.continueSettling(true)) { + ViewCompat.postInvalidateOnAnimation(this); + } + } + + public void setpulltorefreshNotifier(pulltorefreshNotifier pullNotifier) { + this.pullNotifier = pullNotifier; + } + + /** + * 禁止下拉 + */ + public void setPullGone() { + isPull = false; + } + + public interface pulltorefreshNotifier { + public void onPull(); + } + + /** + * 这是拖拽效果的主要逻辑 + */ + private class DragHelperCallback extends ViewDragHelper.Callback { + + @Override + public void onViewPositionChanged(View changedView, int left, int top, + int dx, int dy) { + int childIndex = 1; + if (changedView == myList) { + childIndex = 2; + } + onViewPosChanged(childIndex, top); + } + + @Override + public boolean tryCaptureView(View child, int pointerId) { + return true; + } + + @Override + public int getViewVerticalDragRange(View child) { + return 1; + } + + @Override + public void onViewReleased(View releasedChild, float xvel, float yvel) { + refreshOrNot(releasedChild, yvel); + } + + @Override + public int clampViewPositionVertical(View child, int top, int dy) { + int finalTop = top; + if (child == pullText) { + if (top > 0) { + finalTop = 0; + } + } else if (child == myList) { + if (top < 0) { + finalTop = 0; + } + if (top >= viewHeight) { + pullText.setText("松开加载"); + } else { + pullText.setText("下拉加载更多"); + } + } + return child.getTop() + (finalTop - child.getTop()) / 2; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/PullToRefreshListView.java b/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/PullToRefreshListView.java new file mode 100644 index 0000000..3e49d40 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/PullToRefreshListView.java @@ -0,0 +1,63 @@ +package com.yonsz.z1.chat.widget.pulltorefresh; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ListView; + +/** + * Created by Mao Jiqing on 2016/10/10. + */ +public class PullToRefreshListView extends ListView { + boolean allowDragBottom = true; + float downY = 0; + boolean needConsumeTouch = true; + + public PullToRefreshListView(Context context) { + super(context); + setDivider(null); + } + + public PullToRefreshListView(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + downY = ev.getRawY(); + needConsumeTouch = true; + if (getMyScrollY() == 0) { + allowDragBottom = true; + } else { + allowDragBottom = false; + } + } else if (ev.getAction() == MotionEvent.ACTION_MOVE) { + if (!needConsumeTouch) { + getParent().requestDisallowInterceptTouchEvent(false); + return false; + } else if (allowDragBottom) { + if (downY - ev.getRawY() < -2) { + needConsumeTouch = false; + getParent().requestDisallowInterceptTouchEvent(false); + return false; + } + } + } + getParent().requestDisallowInterceptTouchEvent(needConsumeTouch); + return super.dispatchTouchEvent(ev); + } + + public int getMyScrollY() { + View c = getChildAt(0); + if (c == null) { + return 0; + } + int firstVisiblePosition = getFirstVisiblePosition(); + int top = c.getTop(); + return -top + firstVisiblePosition * c.getHeight(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/PullToRefreshRecyclerView.java b/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/PullToRefreshRecyclerView.java new file mode 100644 index 0000000..d26ed03 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/PullToRefreshRecyclerView.java @@ -0,0 +1,63 @@ +package com.yonsz.z1.chat.widget.pulltorefresh; + +import android.content.Context; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; + +/** + * Created by Mao Jiqing on 2016/9/27. + */ +public class PullToRefreshRecyclerView extends RecyclerView { + boolean allowDragBottom = true; + float downY = 0; + boolean needConsumeTouch = true; + + public PullToRefreshRecyclerView(Context context) { + super(context); + } + + public PullToRefreshRecyclerView(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + downY = ev.getRawY(); + needConsumeTouch = true; + if (getMyScrollY() == 0) { + allowDragBottom = true; + } else { + allowDragBottom = false; + } + } else if (ev.getAction() == MotionEvent.ACTION_MOVE) { + if (!needConsumeTouch) { + getParent().requestDisallowInterceptTouchEvent(false); + return false; + } else if (allowDragBottom) { + if (downY - ev.getRawY() < -2) { + needConsumeTouch = false; + getParent().requestDisallowInterceptTouchEvent(false); + return false; + } + } + } + getParent().requestDisallowInterceptTouchEvent(needConsumeTouch); + return super.dispatchTouchEvent(ev); + } + + public int getMyScrollY() { + View c = getChildAt(0); + if (c == null) { + return 0; + } + int firstVisiblePosition = ((LinearLayoutManager) getLayoutManager()).findFirstVisibleItemPosition(); + int top = c.getTop(); + return -top + firstVisiblePosition * c.getHeight(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/WrapContentLinearLayoutManager.java b/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/WrapContentLinearLayoutManager.java new file mode 100644 index 0000000..3971a48 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/WrapContentLinearLayoutManager.java @@ -0,0 +1,80 @@ +package com.yonsz.z1.chat.widget.pulltorefresh; + +import android.content.Context; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; + +/** + * Created by Mao Jiqing on 2016/9/30. + */ +public class WrapContentLinearLayoutManager extends LinearLayoutManager { + private int[] mMeasuredDimension = new int[2]; + private int recyclerHeight = 0; + private RecyclerView.Recycler recycler; + + public WrapContentLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { + super(context, orientation, reverseLayout); + } + + //... constructor + @Override + public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { + try { + this.recycler = recycler; + super.onLayoutChildren(recycler, state); + } catch (IndexOutOfBoundsException e) { + Log.e("probe", "ERROR = " + e.getMessage()); + } + } + + public int getRecyclerHeight() { + if (recycler == null) { + return 0; + } + int height = 0; + for (int i = 0; i < getItemCount(); i++) { + measureScrapChild(recycler, i, + View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), + mMeasuredDimension); + + if (getOrientation() == HORIZONTAL) { + if (i == 0) { + height = mMeasuredDimension[1]; + } + } else { + height = height + mMeasuredDimension[1]; + } + } + recyclerHeight = height; + return recyclerHeight; + } + + private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec, + int heightSpec, int[] measuredDimension) { + try { + View view = recycler.getViewForPosition(0);//fix 动态添加时报IndexOutOfBoundsException + + if (view != null) { + RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams(); + + int childWidthSpec = ViewGroup.getChildMeasureSpec(widthSpec, + getPaddingLeft() + getPaddingRight(), p.width); + + int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec, + getPaddingTop() + getPaddingBottom(), p.height); + + view.measure(childWidthSpec, childHeightSpec); + measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin; + measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin; + recycler.recycleView(view); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/base/PullToRefreshView.java b/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/base/PullToRefreshView.java new file mode 100644 index 0000000..cedeefd --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/chat/widget/pulltorefresh/base/PullToRefreshView.java @@ -0,0 +1,36 @@ +package com.yonsz.z1.chat.widget.pulltorefresh.base; + +import android.content.Context; +import android.view.View; + +import com.yonsz.z1.chat.widget.pulltorefresh.PullToRefreshListView; +import com.yonsz.z1.chat.widget.pulltorefresh.PullToRefreshRecyclerView; + +/** + * Created by Mao Jiqing on 2016/10/10. + */ +public class PullToRefreshView extends View { + + public static final int LISTVIEW = 0; + public static final int RECYCLERVIEW = 1; + + public PullToRefreshView(Context context) { + super(context); + } + + public View getSlideView(int slideViewType) { + View baseView = null; + switch (slideViewType) { + case LISTVIEW: + baseView = new PullToRefreshListView(getContext()); + break; + case RECYCLERVIEW: + baseView = new PullToRefreshRecyclerView(getContext()); + break; + default: + baseView = null; + break; + } + return baseView; + } +} diff --git a/app/src/main/java/com/yonsz/z1/company/CompanyManagerActivity.java b/app/src/main/java/com/yonsz/z1/company/CompanyManagerActivity.java new file mode 100644 index 0000000..20451f1 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/company/CompanyManagerActivity.java @@ -0,0 +1,232 @@ +package com.yonsz.z1.company; + +import android.os.Bundle; +import android.os.Message; +import android.view.View; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.COMPANY_INFO; +import static com.yonsz.z1.net.NetWorkUrl.COMPANY_LIST; +import static com.yonsz.z1.net.NetWorkUrl.OFFICE_AREA_LIST; +import static com.yonsz.z1.net.NetWorkUrl.OFFICE_JOIN_LIST; +import static com.yonsz.z1.net.NetWorkUrl.OFFICE_JOIN_MY; + +public class CompanyManagerActivity extends BaseActivity { + private TitleView mTitleView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_company_manager); + initView(); + + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.title_company_manager); + mTitleView.setHeadHomeVisible(R.drawable.icon_nav_back_black); + mTitleView.setHomeNameTxt("永顺智"); + mTitleView.setHeadFuntion(R.drawable.icon_nav_add_black); + + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + //获取公司列表 + getCompanyList(); + //获取我的邀请 + getOfficeJoinMy(); + } + + private void getCompanyList() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestGetByAsy(COMPANY_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getCompanyList", respone); + TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getCompanyInfo(String id) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", id); + netWorkUtil.requestGetByAsy(COMPANY_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getCompanyInfo", respone); + /*TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*/ + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getOfficeJoinList(String id) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("companyId", id); + netWorkUtil.requestGetByAsy(OFFICE_JOIN_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getOfficeJoinList", respone); + /*TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*/ + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getOfficeJoinMy() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); +// map.put("companyId", id); + netWorkUtil.requestGetByAsy(OFFICE_JOIN_MY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getOfficeJoinMy", respone); + /*TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*/ + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getOfficeAreaList(String id) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("companyId", id); + netWorkUtil.requestPostByAsynewApi(OFFICE_AREA_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getOfficeAreaList", respone); + /*TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*/ + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECT_MODEL_TIME_SUCCESS: + TimeSetEntity obj = (TimeSetEntity) msg.obj; + List data = obj.getData(); + for (int i = 0; i < data.size(); i++) { + getCompanyInfo(data.get(i).getId()); + getOfficeJoinList(data.get(i).getId()); + getOfficeAreaList(data.get(i).getId()); + } + break; + case SELECT_MODEL_TIME_FAIL: + + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/AddRoomActivity.java b/app/src/main/java/com/yonsz/z1/createfamily/AddRoomActivity.java new file mode 100644 index 0000000..d523ed5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/AddRoomActivity.java @@ -0,0 +1,259 @@ +package com.yonsz.z1.createfamily; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.gavin.com.library.listener.OnGroupClickListener; +import com.gavin.com.library.listener.PowerGroupListener; +import com.lechange.demo.localvideo.PowerfulStickyDecoration; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_FAIL; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_ADD_HOME; +import static com.yonsz.z1.net.NetWorkUrl.ADDRESS_TYPE_LIST; + +/** + * Created by Administrator on 2019/3/27. + */ + +public class AddRoomActivity extends BaseActivity { + private TitleView mTitleView; + private RecyclerView mRecyclerView; + private PowerfulStickyDecoration decoration; + private List dataList; + private String addressTypeCodes; + private AddRoomAdapter mAdapter; + private RelativeLayout userDefinedRl; + private TextView tv_create_house; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_room); + initView(); + } + + private void initView() { + addressTypeCodes = getIntent().getExtras().get("addressTypeCodes").toString(); + tv_create_house = (TextView) findViewById(R.id.tv_create_house); + mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); + userDefinedRl = (RelativeLayout) findViewById(R.id.rl_user_defined); + mTitleView = (TitleView) findViewById(R.id.title_add_room); + mTitleView.clearBackGroud(); + mTitleView.setHeadFuntionTxtAndSise16("确定"); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + List addBeans = mAdapter.getAddBeans(); + Intent intent = new Intent(AddRoomActivity.this, ChooseHouseTypeActivity.class); + intent.putExtra("addBeans", (Serializable) addBeans); + setResult(SHOW_ADD_HOME, intent); + finish(); + } + + @Override + public void onFunctionText() { + + } + }); + getAddresstypeList(); + + if (getIntent().getExtras().get("houseCategory").toString().equals("3") || getIntent().getExtras().get("houseCategory").toString().equals("5")) { + tv_create_house.setText("添加区域"); + } + + userDefinedRl.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + RenameNameDialog dialog = new RenameNameDialog(AddRoomActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + List result = Arrays.asList(getIntent().getExtras().get("addressTypeNames").toString().split(",")); + if (result.contains(positioName)) { + ToastUtil.show(AddRoomActivity.this, "已存在相同名字的房间"); + return; + } + List addBeans = new ArrayList<>(); + HouseEntity.DataBean dataBean = new HouseEntity.DataBean(); + dataBean.setAddressTypeName(positioName); + dataBean.setAddressTypeCode("-1"); + addBeans.add(dataBean); + Intent intent = new Intent(AddRoomActivity.this, ChooseHouseTypeActivity.class); + intent.putExtra("addBeans", (Serializable) addBeans); + setResult(SHOW_ADD_HOME, intent); + finish(); + break; + } + } + }); + dialog.setHintName(""); + dialog.setContent("设置房间名称"); + dialog.setMaxEms(4); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + + } + }); + } + + private void getAddresstypeList() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseCategory", getIntent().getExtras().get("houseCategory").toString()); + netWorkUtil.requestGetByAsy(ADDRESS_TYPE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("getHousetypeList", "onSuccess()" + respone); + HouseEntity obj = JSON.parseObject(respone, HouseEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case HOUSE_TYPE_LIST_SUCCESS: + HouseEntity houseEntity = (HouseEntity) msg.obj; + dataList = houseEntity.getData(); + List result = Arrays.asList(addressTypeCodes.split(",")); + for (int i = dataList.size() - 1; i >= 0; i--) { + if (result.contains(dataList.get(i).getCode())) { + dataList.remove(i); + } + } + setRecycleView(); + break; + case HOUSE_TYPE_LIST_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void setRecycleView() { + //模拟数据 + // dataList.addAll(CityUtil.getCityList()); + GridLayoutManager manager = new GridLayoutManager(this, 4); + mRecyclerView.setLayoutManager(manager); + decoration = PowerfulStickyDecoration.Builder + .init(new PowerGroupListener() { + @Override + public String getGroupName(int position) { + //获取组名,用于判断是否是同一组 + if (dataList.size() > position) { + int code = dataList.get(position).getSort(); + String groupName = ""; + if (code < 14) { + groupName = "支持本地语音识别"; + } else { + groupName = "支持APP在线语音识别"; + } + return groupName; + } + return null; + } + + @Override + public View getGroupView(int position) { + //获取自定定义的组View + if (dataList.size() > position) { + int code = dataList.get(position).getSort(); + String groupName = ""; + if (code < 14) { + groupName = "支持本地语音识别"; + } else { + groupName = "支持APP在线语音识别"; + } + final View view = getLayoutInflater().inflate(R.layout.add_room_group, null, true); + ((TextView) view.findViewById(R.id.tv_room_type)).setText(groupName); + return view; + } else { + return null; + } + } + }) + .setCacheEnable(true) + .resetSpan(mRecyclerView, manager) + .setGroupHeight(DensityUtil.dip2px(AddRoomActivity.this, 40)) + .setDivideHeight(0) + .setGroupBackground(0xfffafafa) + .setOnClickListener(new OnGroupClickListener() { + @Override + public void onClick(int position, int id) { + if (dataList.size() > position) { + + } + } + }) + .build(); + //---------------- ------------- + mRecyclerView.addItemDecoration(decoration); + mRecyclerView.setVisibility(View.VISIBLE); + //------------- PowerfulStickyDecoration 使用部分 ---------------- + //下面是平时的RecyclerView操作 + mAdapter = new AddRoomAdapter(this, dataList); + mRecyclerView.setAdapter(mAdapter); + + mAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/AddRoomAdapter.java b/app/src/main/java/com/yonsz/z1/createfamily/AddRoomAdapter.java new file mode 100644 index 0000000..341ab8d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/AddRoomAdapter.java @@ -0,0 +1,102 @@ +package com.yonsz.z1.createfamily; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by gavin + * Created date 17/6/5 + * Created log + */ + +public class AddRoomAdapter extends RecyclerView.Adapter { + private List mDataBeans; + private List mAddBeans = new ArrayList<>(); + private Context mContext; + private OnRecyclerClickListener mOnItemClickListener; + + public AddRoomAdapter(Context context, List mDataBeans) { + this.mDataBeans = mDataBeans; + mContext = context; + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + public List getAddBeans() { + return mAddBeans; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_add_room, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) { + ViewHolder holder = (ViewHolder) viewHolder; + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDataBeans.size(); + } + + + class ViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.iv_position) + ImageView mIvPositon; + @BindView(R.id.tv_position) + TextView mTvPosition; + @BindView(R.id.iv_position_choose) + ImageView mIvPositonChoose; + @BindView(R.id.rl_position) + RelativeLayout mRlPosition; + + ViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final int position) { + ImageLoader.getInstance().displayImage(mDataBeans.get(position).getIcon(), mIvPositon, UniKongApp.getHiApp().getImageLoaderOption()); + mTvPosition.setText(mDataBeans.get(position).getName()); + mRlPosition.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mIvPositonChoose.getVisibility() == View.VISIBLE) { + mIvPositonChoose.setVisibility(View.GONE); + mAddBeans.remove(mDataBeans.get(position)); + } else { + mIvPositonChoose.setVisibility(View.VISIBLE); + mAddBeans.add(mDataBeans.get(position)); + } + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/ChooseFloorAdapter.java b/app/src/main/java/com/yonsz/z1/createfamily/ChooseFloorAdapter.java new file mode 100644 index 0000000..9e7a9df --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/ChooseFloorAdapter.java @@ -0,0 +1,88 @@ +package com.yonsz.z1.createfamily; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.listener.OnRecyclerListener; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + + +public class ChooseFloorAdapter extends RecyclerView.Adapter { + private List mDataBeans; + private List strings; + private Context mContext; + private OnRecyclerListener mOnItemClickListener; + + + public ChooseFloorAdapter(Context context, List mDataBeans, List strings) { + this.mDataBeans = mDataBeans; + this.mContext = context; + this.strings = strings; + } + + public void setIsChoose(List strings) { + this.strings = strings; + this.notifyDataSetChanged(); + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_choose_floor, parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(holder, position); + } + + @Override + public int getItemCount() { + return mDataBeans != null ? mDataBeans.size() : 0; + } + + public void setmOnItemClickListener(OnRecyclerListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.tv_channel_key) + TextView mTvChannelKey; + @BindView(R.id.root) + RelativeLayout root; + + public MessageViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final RecyclerView.ViewHolder holder, final int position) { + mTvChannelKey.setText(mDataBeans.get(position) + "层"); + if (strings.get(position).equals("1")) { + mTvChannelKey.setTextColor(0xff333333); + mTvChannelKey.setTextSize(18); + } else { + mTvChannelKey.setTextColor(0xff999999); + mTvChannelKey.setTextSize(14); + } + root.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/ChooseHouseTypeActivity.java b/app/src/main/java/com/yonsz/z1/createfamily/ChooseHouseTypeActivity.java new file mode 100644 index 0000000..6e40087 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/ChooseHouseTypeActivity.java @@ -0,0 +1,154 @@ +package com.yonsz.z1.createfamily; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import android.widget.Button; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_FAIL; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.HOUSE_TYPE_LIST; + +/** + * Created by Administrator on 2019/3/26. + */ + +public class ChooseHouseTypeActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_start_config; + private RecyclerView chooseHouseTypeRv; + private HouseAdapter mAdapter; + private List dataList = new ArrayList(); + private int nowPosition; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_choose_house_type); + + initView(); + initListener(); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + private void initView() { + bt_start_config = (Button) findViewById(R.id.bt_start_config); + chooseHouseTypeRv = (RecyclerView) findViewById(R.id.rv_choose_house_type); + mTitleView = (TitleView) findViewById(R.id.title_house_name); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + getHousetypeList(); + } + + private void initListener() { + bt_start_config.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + bt_start_config.setEnabled(false); + bt_start_config.setText(R.string.next); + bt_start_config.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent = new Intent(ChooseHouseTypeActivity.this, ChooseRoomTypeActivity.class); + intent.putExtra("houseTypeCode", dataList.get(nowPosition).getCode()); + intent.putExtra("houseTypeName", dataList.get(nowPosition).getName()); + intent.putExtra("houseName", getIntent().getExtras().get("houseName").toString()); + intent.putExtra("houseCategory", "1"); + startActivity(intent); + } + }); + } + + private void getHousetypeList() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestGetByAsy(HOUSE_TYPE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getHousetypeList", "onSuccess()" + respone); + HouseEntity obj = JSON.parseObject(respone, HouseEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case HOUSE_TYPE_LIST_SUCCESS: + HouseEntity houseEntity = (HouseEntity) msg.obj; + dataList = houseEntity.getData(); + GridLayoutManager manager = new GridLayoutManager(this, 2); + chooseHouseTypeRv.setLayoutManager(manager); + mAdapter = new HouseAdapter(this, dataList); + chooseHouseTypeRv.setAdapter(mAdapter); + + mAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + nowPosition = position; + bt_start_config.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee_20dp)); + bt_start_config.setEnabled(true); + mAdapter.setNowPosition(position); + } + }); + break; + case HOUSE_TYPE_LIST_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/ChooseRoomTypeActivity.java b/app/src/main/java/com/yonsz/z1/createfamily/ChooseRoomTypeActivity.java new file mode 100644 index 0000000..1dd7313 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/ChooseRoomTypeActivity.java @@ -0,0 +1,522 @@ +package com.yonsz.z1.createfamily; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.HomeDetailEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnRecyclerListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_SUCCESS; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_FAIL; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_ADD_HOME; +import static com.yonsz.z1.net.NetWorkUrl.ADDRESS_TYPE_LIST; +import static com.yonsz.z1.net.NetWorkUrl.HOUSEADDRESS_LIST; + +/** + * Created by Administrator on 2019/3/26. + */ + +public class ChooseRoomTypeActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_start_config; + private RecyclerView chooseHouseTypeRv; + private RoomAdapter mAdapter; + private List dataList; + private ItemTouchHelper itemTouchHelper; + private TextView roomTypeTv; + private String houseTypeCode = "", houseCategory = ""; + private String houseId; + private String body; + private LoadingDialog mLoadingDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_choose_house_type); + + initView(); + initListener(); + } + + private void initView() { + if (null != getIntent().getExtras().get("houseId")) { + houseId = getIntent().getExtras().get("houseId").toString(); + } + dataList = new ArrayList(); + roomTypeTv = (TextView) findViewById(R.id.tv_create_house); + roomTypeTv.setText(getIntent().getExtras().get("houseTypeName").toString()); + if (null != getIntent().getExtras().get("houseTypeCode")) { + houseTypeCode = getIntent().getExtras().get("houseTypeCode").toString(); + } + houseCategory = getIntent().getExtras().get("houseCategory").toString(); + bt_start_config = (Button) findViewById(R.id.bt_start_config); + chooseHouseTypeRv = (RecyclerView) findViewById(R.id.rv_choose_house_type); + mTitleView = (TitleView) findViewById(R.id.title_house_name); + mTitleView.clearBackGroud(); + /*if (houseTypeCode.equals("6") || !TextUtils.isEmpty(houseId)) { + mTitleView.setHeadFuntionTxtAndSise16("完成"); + bt_start_config.setVisibility(View.GONE); + } else { + mTitleView.setHeadFuntionTxtAndSise16("编辑"); + }*/ + mTitleView.setHeadFuntionTxtAndSise16("完成"); + bt_start_config.setVisibility(View.GONE); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (mTitleView.getHeadFuntionTxt().equals("编辑")) { + mTitleView.setHeadFuntionTxtAndSise16("完成"); + bt_start_config.setVisibility(View.GONE); + mAdapter.setIsEdit(dataList, true); + } else { + if (dataList.size() == 0) { + ToastUtil.show(ChooseRoomTypeActivity.this, "请先添加房间"); + return; + } + mTitleView.setHeadFuntionTxtAndSise16("编辑"); + bt_start_config.setVisibility(View.VISIBLE); + mAdapter.setIsEdit(dataList, false); + } + } + + @Override + public void onFunctionText() { + + } + }); + if (TextUtils.isEmpty(houseId)) { + getAddresstypeList(); + } else { + getAddresstypeList1(); + } + } + + private void initListener() { + bt_start_config.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // createOrUpdateHouse(); + HomeDetailEntity.DataBean homeDetailEntity = new HomeDetailEntity.DataBean(); + if (TextUtils.isEmpty(houseId)) { + homeDetailEntity.setName(getIntent().getExtras().get("houseName").toString()); + } + homeDetailEntity.setHouseCategory(Integer.parseInt(houseCategory)); +// homeDetailEntity.setHouseTypeName(getIntent().getExtras().get("houseName").toString()); + if (!houseTypeCode.isEmpty()) { + homeDetailEntity.setHouseTypeCode(houseTypeCode); + } + if (!TextUtils.isEmpty(houseId)) { + homeDetailEntity.setId(houseId); + } + List beanList = new ArrayList<>(); + for (int j = 0; j < dataList.size(); j++) { + HomeDetailEntity.DataBean.HouseAddressesBean dataBean = new HomeDetailEntity.DataBean.HouseAddressesBean(); + if (!TextUtils.isEmpty(dataList.get(j).getAddressTypeCode())) { + dataBean.setAddressTypeCode(dataList.get(j).getAddressTypeCode()); + } else { + dataBean.setAddressTypeCode(dataList.get(j).getCode()); + } + dataBean.setAddressTypeName(dataList.get(j).getAddressTypeName()); + beanList.add(dataBean); + } + + homeDetailEntity.setHouseAddresses(beanList); + body = JSONObject.toJSONString(homeDetailEntity); + addHouse(); +// addOfficeArea("5"); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void addHouse() { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestPostByAsyBody(NetWorkUrl.HOUSE_ADDHOUSE, map, body, new NetWorkUtil.ReqCallBack() { + // util.requestPostByAsyBody(NetWorkUrl.COMPANY_ADD, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addHouse", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void addOfficeArea(String companyId) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("companyId", companyId); + map.put("name", "办公室"); + util.requestPostByAsyBody(NetWorkUrl.OFFICE_AREA_ADD, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addDfficeArea", "ShareDeviceActivity onSuccess()" + respone); + /*HomeDetailEntity obj = JSON.parseObject(respone, HomeDetailEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*/ + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private String getAddressTypeCodes() { + StringBuilder stringBuilderAdd = new StringBuilder(); + for (int i = 0; i < dataList.size(); i++) { + if (i < dataList.size() - 1) { + if (!TextUtils.isEmpty(dataList.get(i).getCode())) { + stringBuilderAdd.append(dataList.get(i).getCode()); + } else { + stringBuilderAdd.append(dataList.get(i).getAddressTypeCode()); + } + stringBuilderAdd.append(","); + } else { + if (!TextUtils.isEmpty(dataList.get(i).getCode())) { + stringBuilderAdd.append(dataList.get(i).getCode()); + } else { + stringBuilderAdd.append(dataList.get(i).getAddressTypeCode()); + } + } + } + return String.valueOf(stringBuilderAdd); + } + + private String getAddressTypeNames() { + StringBuilder stringBuilderAdd = new StringBuilder(); + for (int i = 0; i < dataList.size(); i++) { + if (i < dataList.size() - 1) { + stringBuilderAdd.append(dataList.get(i).getAddressTypeName()); + stringBuilderAdd.append(","); + } else { + stringBuilderAdd.append(dataList.get(i).getAddressTypeName()); + } + } + return String.valueOf(stringBuilderAdd); + } + + private void getAddresstypeList1() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", houseId); + netWorkUtil.requestGetByAsy(HOUSEADDRESS_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("getHousetypeList1", "onSuccess()" + respone); + HouseEntity obj = JSON.parseObject(respone, HouseEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private void getAddresstypeList() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (!houseTypeCode.isEmpty()) { + map.put("houseTypeCode", houseTypeCode); + } else { + if (AppIdUtil.isWork()) { + map.put("houseTypeCode", "13"); + } else { + map.put("houseTypeCode", "10"); + } + } + map.put("houseCategory", houseCategory); + if (!TextUtils.isEmpty(houseId)) { + map.put("houseId", houseId); + } + netWorkUtil.requestGetByAsy(ADDRESS_TYPE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("getHousetypeList", "onSuccess()" + respone); + HouseEntity obj = JSON.parseObject(respone, HouseEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CREATE_ORUPDATE_HOUSE_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + SimpleEntty simpleEntty = (SimpleEntty) msg.obj; +// addOfficeArea(simpleEntty.getData()); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + /*Intent intent = new Intent(ChooseRoomTypeActivity.this, HomeManageActivity.class); + intent.putExtra("addressTypeCodes", getAddressTypeCodes()); + startActivity(intent);*/ + break; + case HOUSE_TYPE_LIST_SUCCESS: + HouseEntity houseEntity = (HouseEntity) msg.obj; + dataList = houseEntity.getData(); + GridLayoutManager manager = new GridLayoutManager(this, 2); + chooseHouseTypeRv.setLayoutManager(manager); + /*if (houseTypeCode.equals("6") || !TextUtils.isEmpty(houseId)) { + mAdapter = new RoomAdapter(this, dataList, true); + } else { + mAdapter = new RoomAdapter(this, dataList, false); + }*/ + mAdapter = new RoomAdapter(this, dataList, true, houseCategory); + chooseHouseTypeRv.setAdapter(mAdapter); + + itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + Log.i("getMovementFlags", "getMovementFlags: "); + int dragFlags; + int swipeFlags; + if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | + ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; + swipeFlags = 0; + } else { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; + swipeFlags = 0; + } + return makeMovementFlags(dragFlags, swipeFlags); + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + int fromPosition = viewHolder.getAdapterPosition(); + int toPosition = target.getAdapterPosition(); + Log.i("onMove", "onMove: " + fromPosition + "===" + toPosition + "===" + dataList.size()); + if (fromPosition == dataList.size() || toPosition == dataList.size()) { + return false; + } + if (fromPosition < toPosition) { + for (int i = fromPosition; i < toPosition; i++) { + Collections.swap(dataList, i, i + 1); + } + } else { + for (int i = fromPosition; i > toPosition; i--) { + Collections.swap(dataList, i, i - 1); + } + } + mAdapter.notifyItemMoved(fromPosition, toPosition); + return true; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + Log.i("onSwiped", "onSwiped: "); + } + + @Override + public boolean isLongPressDragEnabled() { + return false; + } + }); + itemTouchHelper.attachToRecyclerView(chooseHouseTypeRv); + + mAdapter.setmOnItemClickListener(new OnRecyclerListener() { + @Override + public void onClick(View view, final int position) { + if (position == dataList.size()) { + Intent intent = new Intent(ChooseRoomTypeActivity.this, AddRoomActivity.class); + intent.putExtra("addressTypeCodes", getAddressTypeCodes()); + intent.putExtra("addressTypeNames", getAddressTypeNames()); + intent.putExtra("houseCategory", houseCategory); + startActivityForResult(intent, SHOW_ADD_HOME); + } else { + if (dataList.size() <= 1) { + ToastUtil.show(ChooseRoomTypeActivity.this, "房间不能为空!"); + return; + } + ConfirmDialog dialog = new ConfirmDialog(ChooseRoomTypeActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + dataList.remove(position); + mAdapter.notifyDataSetChanged(); + break; + } + } + }); + dialog.setContent("是否确定删除房间"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + } + + @Override + public void onLongClick(RecyclerView.ViewHolder view, int position) { + if (position != dataList.size()) { + itemTouchHelper.startDrag(view); + } + } + }); + mAdapter.setmOnClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, final int position1) { + RenameNameDialog dialog = new RenameNameDialog(ChooseRoomTypeActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + dataList.get(position1).setAddressTypeName(positioName); + mAdapter.notifyDataSetChanged(); + break; + } + } + }); + dialog.setHintName(dataList.get(position1).getAddressTypeName()); + dialog.setContent("设置房间名称"); + dialog.setMaxEms(4); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + } + }); + break; + case CREATE_ORUPDATE_HOUSE_FAIL: + case HOUSE_TYPE_LIST_FAIL: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case SHOW_ADD_HOME: + if (data != null && data.getExtras().get("addBeans") != null) { + List dataBeans = (List) data.getSerializableExtra("addBeans"); + for (int i = 0; i < dataBeans.size(); i++) { + /*if (!dataList.contains(dataBeans.get(i))) { + dataList.add(dataBeans.get(i)); + }*/ + dataList.add(dataBeans.get(i)); + } + mAdapter.notifyDataSetChanged(); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/CreateFamilyActivity.java b/app/src/main/java/com/yonsz/z1/createfamily/CreateFamilyActivity.java new file mode 100644 index 0000000..df10948 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/CreateFamilyActivity.java @@ -0,0 +1,251 @@ +package com.yonsz.z1.createfamily; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.floor.ChooseFloorTypeActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.KeyboardUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2019/3/21. + */ + +public class CreateFamilyActivity extends BaseActivity { + private TitleView mTitleView; + private EditText createHouseNameEt; + private Button bt_start_config; + private LinearLayout ll_top; + private RelativeLayout ll_bieshu, ll_pingceng, ll_office, rl_null, rl_meeting, rl_education, rl_medical, rl_pension; + private TextView tv_bieshu, tv_pingceng, tv_office, tv_meeting, tv_education, tv_medical, tv_pension, tv_choose_house_type; + private int tag = 1; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("关闭")) { + finish(); + } + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + View view = getCurrentFocus(); + KeyboardUtil.hideKeyboard(ev, view, CreateFamilyActivity.this);//调用方法判断是否需要隐藏键盘 + break; + + default: + break; + } + return super.dispatchTouchEvent(ev); + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_create_family); + + initView(); + initListener(); + } + + private void initView() { + ll_top = (LinearLayout) findViewById(R.id.ll_top); + ll_bieshu = (RelativeLayout) findViewById(R.id.ll_bieshu); + ll_pingceng = (RelativeLayout) findViewById(R.id.ll_pingceng); + // rl_null = (RelativeLayout) findViewById(R.id.rl_null); + ll_office = (RelativeLayout) findViewById(R.id.ll_office); + rl_meeting = (RelativeLayout) findViewById(R.id.rl_meeting); + rl_education = (RelativeLayout) findViewById(R.id.rl_education); + rl_medical = (RelativeLayout) findViewById(R.id.rl_medical); + rl_pension = (RelativeLayout) findViewById(R.id.rl_pension); + tv_bieshu = (TextView) findViewById(R.id.tv_bieshu); + tv_pingceng = (TextView) findViewById(R.id.tv_pingceng); + tv_office = (TextView) findViewById(R.id.tv_office); + tv_meeting = (TextView) findViewById(R.id.tv_meeting); + tv_education = (TextView) findViewById(R.id.tv_education); + tv_medical = (TextView) findViewById(R.id.tv_medical); + tv_pension = (TextView) findViewById(R.id.tv_pension); + tv_choose_house_type = (TextView) findViewById(R.id.tv_choose_house_type); + createHouseNameEt = (EditText) findViewById(R.id.et_create_house_name); + bt_start_config = (Button) findViewById(R.id.bt_start_config); + mTitleView = (TitleView) findViewById(R.id.title_house_name); + mTitleView.clearBackGroud(); + if (getIntent().getExtras().get("from").toString().equals("HomeManageActivity")) { + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + } else { + mTitleView.setBackGone(); + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + if (AppIdUtil.isWork()) { + ll_top.setVisibility(View.INVISIBLE); + ll_office.setVisibility(View.INVISIBLE); + // rl_null.setVisibility(View.GONE); + tv_choose_house_type.setVisibility(View.GONE); + ll_office.setBackgroundResource(R.drawable.kuang_house_type); + ll_bieshu.setBackgroundResource(R.drawable.kuang_create_house); + ll_pingceng.setBackgroundResource(R.drawable.kuang_create_house); + tv_bieshu.setTextColor(0xff333333); + tv_pingceng.setTextColor(0xff333333); + tv_office.setTextColor(0xff24C1DA); + tag = 3; + } + + rl_meeting.setOnClickListener(this); + rl_education.setOnClickListener(this); + rl_medical.setOnClickListener(this); + rl_pension.setOnClickListener(this); + ll_pingceng.setOnClickListener(this); + ll_bieshu.setOnClickListener(this); + ll_office.setOnClickListener(this); + bt_start_config.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.ll_pingceng: + setChoose(R.drawable.kuang_house_type, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, 0xff1781FD, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 1); + break; + case R.id.ll_bieshu: + setChoose(R.drawable.kuang_create_house, R.drawable.kuang_house_type, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, 0xff333333, 0xff1781FD, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 2); + break; + case R.id.ll_office: + setChoose(R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_house_type, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, 0xff333333, 0xff333333, 0xff1781FD, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 3); + break; + case R.id.rl_meeting: + setChoose(R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_house_type, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, 0xff333333, 0xff333333, 0xff333333, 0xff1781FD, 0xff333333, 0xff333333, 0xff333333, 3); + break; + case R.id.rl_education: + setChoose(R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_house_type, R.drawable.kuang_create_house, R.drawable.kuang_create_house, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 0xff1781FD, 0xff333333, 0xff333333, 3); + break; + case R.id.rl_medical: + setChoose(R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_house_type, R.drawable.kuang_create_house, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 0xff1781FD, 0xff333333, 3); + break; + case R.id.rl_pension: + setChoose(R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_create_house, R.drawable.kuang_house_type, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 0xff333333, 0xff1781FD, 3); + break; + case R.id.bt_start_config: + if (!TextUtils.isEmpty(createHouseNameEt.getText().toString().trim())) { + if (tag == 1) { + Intent intent = new Intent(CreateFamilyActivity.this, ChooseHouseTypeActivity.class); + intent.putExtra("houseName", createHouseNameEt.getText().toString().trim()); + intent.putExtra("houseCategory", "1"); + startActivity(intent); + } else if (tag == 2) { + Intent intent = new Intent(CreateFamilyActivity.this, ChooseFloorTypeActivity.class); + intent.putExtra("houseName", createHouseNameEt.getText().toString().trim()); + intent.putExtra("houseCategory", "2"); + startActivity(intent); + } else if (tag == 3) { + Intent intent = new Intent(CreateFamilyActivity.this, ChooseRoomTypeActivity.class); + if (AppIdUtil.isWork()) { + intent.putExtra("houseCategory", "5"); + } else { + intent.putExtra("houseCategory", "3"); + } + intent.putExtra("houseTypeName", "设置位置"); + intent.putExtra("houseName", createHouseNameEt.getText().toString().trim()); + startActivity(intent); + } + } + break; + } + } + + private void setChoose(int p, int p2, int p3, int p4, int p5, int p6, int p7, int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8) { + ll_pingceng.setBackgroundResource(p); + ll_bieshu.setBackgroundResource(p2); + ll_office.setBackgroundResource(p3); + rl_meeting.setBackgroundResource(p4); + rl_education.setBackgroundResource(p5); + rl_medical.setBackgroundResource(p6); + rl_pension.setBackgroundResource(p7); + tv_pingceng.setTextColor(i); + tv_bieshu.setTextColor(i2); + tv_office.setTextColor(i3); + tv_meeting.setTextColor(i4); + tv_education.setTextColor(i5); + tv_medical.setTextColor(i6); + tv_pension.setTextColor(i7); + tag = i8; + } + + @Override + public void onBackPressed() { + if (getIntent().getExtras().get("from").toString().equals("HomeManageActivity")) { + finish(); + } else { + ToastUtil.show(this, "请先创建家庭"); + } + } + + private void initListener() { + createHouseNameEt.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + int i = s.length(); + if (i == 0 || TextUtils.isEmpty(createHouseNameEt.getText())) { + bt_start_config.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + bt_start_config.setEnabled(false); + } else { + bt_start_config.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee_20dp)); + bt_start_config.setEnabled(true); + } + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/HouseAdapter.java b/app/src/main/java/com/yonsz/z1/createfamily/HouseAdapter.java new file mode 100644 index 0000000..34d1183 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/HouseAdapter.java @@ -0,0 +1,108 @@ +package com.yonsz.z1.createfamily; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.utils.AppIdUtil; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by gavin + * Created date 17/6/5 + * Created log + */ + +public class HouseAdapter extends RecyclerView.Adapter { + private List mDataBeans; + private Context mContext; + private int nowPosition = 100; + private OnRecyclerClickListener mOnItemClickListener; + + public HouseAdapter(Context context, List mDataBeans) { + this.mDataBeans = mDataBeans; + this.mContext = context; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_choose_house_type, parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDataBeans == null ? 0 : mDataBeans.size(); + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + public void setNowPosition(int position) { + nowPosition = position; + notifyDataSetChanged(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.iv_house_type_pic) + ImageView mIvHousePic; + @BindView(R.id.tv_house_type) + TextView mTvHouseYype; + @BindView(R.id.ll_bg) + LinearLayout mLlBg; + + public MessageViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final int position) { + if (!TextUtils.isEmpty(mDataBeans.get(position).getIcon())) { + ImageLoader.getInstance().displayImage(mDataBeans.get(position).getIcon(), mIvHousePic, UniKongApp.getHiApp().getImageLoaderOption()); + } else { + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_room)); + } + mTvHouseYype.setText(mDataBeans.get(position).getName()); + + if (nowPosition == position) { + mLlBg.setBackgroundResource(R.drawable.kuang_house_type); + if (!AppIdUtil.isStandard()) { + mTvHouseYype.setTextColor(0xff1781FD); + } + } else { + mLlBg.setBackgroundResource(R.drawable.kuang_create_house); + mTvHouseYype.setTextColor(0xff333333); + } + + mLlBg.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/HouseEntity.java b/app/src/main/java/com/yonsz/z1/createfamily/HouseEntity.java new file mode 100644 index 0000000..3904f2a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/HouseEntity.java @@ -0,0 +1,516 @@ +package com.yonsz.z1.createfamily; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * Created by Administrator on 2019/3/26. + */ + +public class HouseEntity implements Serializable, Comparable { + + /** + * data : [{"code":"1","createDate":1553086307036,"delFlag":"0","icon":"https://development-1253338722.cos.ap-guangzhou.myqcloud.com/0000/image/0000/2019/03/20/address_keting.png","id":4,"name":"客厅","sort":1,"updateDate":1553086307036},{"code":"2","createDate":1553086335078,"delFlag":"0","icon":"https://development-1253338722.cos.ap-guangzhou.myqcloud.com/0000/image/0000/2019/03/20/address_zhuwo.png","id":5,"name":"主卧","sort":2,"updateDate":1553086335078},{"code":"3","createDate":1553086366083,"delFlag":"0","icon":"https://development-1253338722.cos.ap-guangzhou.myqcloud.com/0000/image/0000/2019/03/20/address_ciwo.png","id":6,"name":"次卧","sort":3,"updateDate":1553086366083},{"code":"4","createDate":1553086394651,"delFlag":"0","icon":"https://development-1253338722.cos.ap-guangzhou.myqcloud.com/0000/image/0000/2019/03/20/address_ertongfang.png","id":7,"name":"儿童房","sort":4,"updateDate":1553086394651},{"code":"6","createDate":1553086452935,"delFlag":"0","icon":"https://development-1253338722.cos.ap-guangzhou.myqcloud.com/0000/image/0000/2019/03/20/address_chufang.png","id":9,"name":"厨房","sort":6,"updateDate":1553086452935},{"code":"7","createDate":1553086480418,"delFlag":"0","icon":"https://development-1253338722.cos.ap-guangzhou.myqcloud.com/0000/image/0000/2019/03/20/address_canting.png","id":10,"name":"餐厅","sort":7,"updateDate":1553086480418},{"code":"8","createDate":1553086497846,"delFlag":"0","icon":"https://development-1253338722.cos.ap-guangzhou.myqcloud.com/0000/image/0000/2019/03/20/address_yangtai.png","id":11,"name":"阳台","sort":8,"updateDate":1553086497846},{"code":"10","createDate":1553086574867,"delFlag":"0","icon":"https://development-1253338722.cos.ap-guangzhou.myqcloud.com/0000/image/0000/2019/03/20/address_weishengjian.png","id":13,"name":"卫生间","sort":10,"updateDate":1553086574867}] + * flag : 1 + * msg : success + */ + + private int flag; + private String msg; + private List data; + private String floorCode; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof HouseEntity)) return false; + HouseEntity that = (HouseEntity) o; + return Objects.equals(getFloorCode(), that.getFloorCode()); + } + + + + @Override + public int hashCode() { + + return Objects.hash(getFloorCode()); + } + + public String getFloorCode() { + return floorCode == null ? "" : floorCode; + } + + public void setFloorCode(String floorCode) { + this.floorCode = floorCode == null ? "" : floorCode; + } + + public int getFlag() { + return flag; + } + + public void setFlag(int flag) { + this.flag = flag; + } + + public String getMsg() { + return msg == null ? "" : msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public List getData() { + if (data == null) { + return new ArrayList<>(); + } + return data; + } + + public void setData(List data) { + this.data = data; + } + + @Override + public int compareTo(HouseEntity o) { + int i = Integer.parseInt(o.getFloorCode()) - Integer.parseInt(this.getFloorCode()); + return i; + } + + public static class DataBean implements Serializable { + + /** + * appIdList : 1105 + * brand : 485拉斐 + * categoryId : 13 + * deviceTypeCode : 008 + * deviceTypeName : 灯光 + * displayType : 1 + * id : 154 + * parentId : 153 + * postStatus : 1 + * protocolType : 202 + * standardCodes : H3-E + * titleRemark : + * uniqueCode : 008_5 + */ + + private String appIdList; + private String brand; + private String categoryId; + private String deviceTypeCode; + private String deviceTypeName; + private String displayType; + private String parentId; + private String postStatus; + private String protocolType; + private String standardCodes; + private String titleRemark; + private String uniqueCode; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof DataBean)) return false; + DataBean dataBean = (DataBean) o; + return Objects.equals(getName(), dataBean.getName()); + } + + @Override + public int hashCode() { + + return Objects.hash(getName()); + } + + /** + * code : 1 + * createDate : 1553086307036 + * delFlag : 0 + * icon : https://development-1253338722.cos.ap-guangzhou.myqcloud.com/0000/image/0000/2019/03/20/address_keting.png + * id : 4 + * name : 客厅 + * sort : 1 + * updateDate : 1553086307036 + */ + + private String code; + private long createDate; + private String delFlag; + private String icon; + private String id; + private String name; + private String roomTypeName; + private String roomId; + private String roomType; + private int sort; + private long updateDate; + /** + * addressTypeCode : 1 + * addressTypeName : 客厅 + */ + + private String addressTypeCode; + private String addressTypeName; + /** + * addition : string + * bindHardwareChannel : string + * createDate : 2019-05-13T07:05:03.811Z + * deviceId : string + * deviceModel : string + * deviceType : string + * subsetCombineActionId : 0 + * tvChannelId : 0 + * tvChannelName : string + * updateDate : 2019-05-13T07:05:03.811Z + * userId : string + * ziId : string + */ + + private String addition; + private String bindHardwareChannel; + private String createDateX; + private String deviceId; + private String deviceModel; + private String deviceType; + private String subsetCombineActionId; + private String tvChannelId; + private String tvChannelName; + private String updateDateX; + private String userId; + private String ziId; + private String floorCode; + private String hotelId; + + + + + + @Override + public String toString() { + return "DataBean{" + + "code='" + code + '\'' + + ", createDate=" + createDate + + ", delFlag='" + delFlag + '\'' + + ", icon='" + icon + '\'' + + ", id=" + id + + ", name='" + name + '\'' + + ", sort=" + sort + + ", updateDate=" + updateDate + + '}'; + } + + public String getRoomType() { + return roomType == null ? "" : roomType; + } + + public void setRoomType(String roomType) { + this.roomType = roomType; + } + + public String getRoomId() { + return roomId == null ? "" : roomId; + } + + public void setRoomId(String roomId) { + this.roomId = roomId; + } + + public String getRoomTypeName() { + return roomTypeName == null ? "" : roomTypeName; + } + + public void setRoomTypeName(String roomTypeName) { + this.roomTypeName = roomTypeName; + } + + public String getHotelId() { + return hotelId == null ? "" : hotelId; + } + + public void setHotelId(String hotelId) { + this.hotelId = hotelId; + } + + public String getFloorCode() { + return floorCode == null ? "" : floorCode; + } + + public void setFloorCode(String floorCode) { + this.floorCode = floorCode == null ? "" : floorCode; + } + + public String getCode() { + return code == null ? "" : code; + } + + public void setCode(String code) { + this.code = code; + } + + public long getCreateDate() { + return createDate; + } + + public void setCreateDate(long createDate) { + this.createDate = createDate; + } + + public String getDelFlag() { + return delFlag == null ? "" : delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + public String getIcon() { + return icon == null ? "" : icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getId() { + return id == null ? "" : id; + } + + public void setId(String id) { + this.id = id == null ? "" : id; + } + + public String getName() { + return name == null ? "" : name; + } + + public void setName(String name) { + this.name = name; + } + + public int getSort() { + return sort; + } + + public void setSort(int sort) { + this.sort = sort; + } + + public long getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(long updateDate) { + this.updateDate = updateDate; + } + + public String getAddressTypeCode() { + return addressTypeCode == null ? "" : addressTypeCode; + } + + public void setAddressTypeCode(String addressTypeCode) { + this.addressTypeCode = addressTypeCode; + } + + public String getAddressTypeName() { + return addressTypeName == null ? "" : addressTypeName; + } + + public void setAddressTypeName(String addressTypeName) { + this.addressTypeName = addressTypeName; + } + + public String getAddition() { + return addition == null ? "" : addition; + } + + public void setAddition(String addition) { + this.addition = addition; + } + + public String getBindHardwareChannel() { + return bindHardwareChannel == null ? "" : bindHardwareChannel; + } + + public void setBindHardwareChannel(String bindHardwareChannel) { + this.bindHardwareChannel = bindHardwareChannel; + } + + public String getCreateDateX() { + return createDateX == null ? "" : createDateX; + } + + public void setCreateDateX(String createDateX) { + this.createDateX = createDateX; + } + + public String getDeviceId() { + return deviceId == null ? "" : deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceModel() { + return deviceModel == null ? "" : deviceModel; + } + + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; + } + + public String getDeviceType() { + return deviceType == null ? "" : deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getSubsetCombineActionId() { + return subsetCombineActionId == null ? "" : subsetCombineActionId; + } + + public void setSubsetCombineActionId(String subsetCombineActionId) { + this.subsetCombineActionId = subsetCombineActionId; + } + + public String getTvChannelId() { + return tvChannelId == null ? "" : tvChannelId; + } + + public void setTvChannelId(String tvChannelId) { + this.tvChannelId = tvChannelId; + } + + public String getTvChannelName() { + return tvChannelName == null ? "" : tvChannelName; + } + + public void setTvChannelName(String tvChannelName) { + this.tvChannelName = tvChannelName; + } + + public String getUpdateDateX() { + return updateDateX == null ? "" : updateDateX; + } + + public void setUpdateDateX(String updateDateX) { + this.updateDateX = updateDateX; + } + + public String getUserId() { + return userId == null ? "" : userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getZiId() { + return ziId == null ? "" : ziId; + } + + public void setZiId(String ziId) { + this.ziId = ziId; + } + + public String getAppIdList() { + return appIdList; + } + + public void setAppIdList(String appIdList) { + this.appIdList = appIdList; + } + + public String getBrand() { + return brand; + } + + public void setBrand(String brand) { + this.brand = brand; + } + + public String getCategoryId() { + return categoryId; + } + + public void setCategoryId(String categoryId) { + this.categoryId = categoryId; + } + + public String getDeviceTypeCode() { + return deviceTypeCode; + } + + public void setDeviceTypeCode(String deviceTypeCode) { + this.deviceTypeCode = deviceTypeCode; + } + + public String getDeviceTypeName() { + return deviceTypeName; + } + + public void setDeviceTypeName(String deviceTypeName) { + this.deviceTypeName = deviceTypeName; + } + + public String getDisplayType() { + return displayType == null ? "" : displayType; + } + + public void setDisplayType(String displayType) { + this.displayType = displayType == null ? "" : displayType; + } + + public String getParentId() { + return parentId == null ? "" : parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId == null ? "" : parentId; + } + + public String getPostStatus() { + return postStatus == null ? "" : postStatus; + } + + public void setPostStatus(String postStatus) { + this.postStatus = postStatus == null ? "" : postStatus; + } + + public String getProtocolType() { + return protocolType; + } + + public void setProtocolType(String protocolType) { + this.protocolType = protocolType; + } + + public String getStandardCodes() { + return standardCodes; + } + + public void setStandardCodes(String standardCodes) { + this.standardCodes = standardCodes; + } + + public String getTitleRemark() { + return titleRemark; + } + + public void setTitleRemark(String titleRemark) { + this.titleRemark = titleRemark; + } + + public String getUniqueCode() { + return uniqueCode; + } + + public void setUniqueCode(String uniqueCode) { + this.uniqueCode = uniqueCode; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/RoomAdapter.java b/app/src/main/java/com/yonsz/z1/createfamily/RoomAdapter.java new file mode 100644 index 0000000..1efd4ea --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/RoomAdapter.java @@ -0,0 +1,157 @@ +package com.yonsz.z1.createfamily; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnRecyclerListener; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + + +public class RoomAdapter extends RecyclerView.Adapter { + private List mDataBeans; + private Context mContext; + private boolean isEdit; + private String houseCategory; + private OnRecyclerListener mOnItemClickListener; + private OnRecyclerClickListener mOnClickListener; + private List photos = null; + + + public RoomAdapter(Context context, List mDataBeans, boolean isEdit, String houseCategory) { + this.mDataBeans = mDataBeans; + this.mContext = context; + this.isEdit = isEdit; + this.houseCategory = houseCategory; + } + + public void setIsEdit(List mDataBeans, boolean isTdit) { + this.isEdit = isTdit; + // this.mDataBeans = mDataBeans; + this.notifyDataSetChanged(); + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_choose_room_type, parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(holder, position); + } + + @Override + public int getItemCount() { + if (isEdit) { + return mDataBeans == null ? 0 : mDataBeans.size() + 1; + } else { + return mDataBeans == null ? 0 : mDataBeans.size(); + } + } + + public void setmOnItemClickListener(OnRecyclerListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + public void setmOnClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.iv_house_type_pic) + ImageView mIvHousePic; + @BindView(R.id.tv_house_type) + TextView mTvHouseYype; + @BindView(R.id.tv_delete) + TextView mTvDelete; + @BindView(R.id.ll_bg) + LinearLayout mLlBg; + + public MessageViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final RecyclerView.ViewHolder holder, final int position) { + if (position < mDataBeans.size()) { + mIvHousePic.setVisibility(View.VISIBLE); + if (!TextUtils.isEmpty(mDataBeans.get(position).getIcon())) { + ImageLoader.getInstance().displayImage(mDataBeans.get(position).getIcon(), mIvHousePic, UniKongApp.getHiApp().getImageLoaderOption()); + } else { + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_room)); + } + if (!TextUtils.isEmpty(mDataBeans.get(position).getName())) { + mTvHouseYype.setText(mDataBeans.get(position).getName()); + } else { + mTvHouseYype.setText(mDataBeans.get(position).getAddressTypeName()); + } + if (isEdit) { + mTvDelete.setVisibility(View.VISIBLE); + } else { + mTvDelete.setVisibility(View.GONE); + } + } else { + /*if (isEdit) { + mLlBg.setVisibility(View.VISIBLE); + } else { + mLlBg.setVisibility(View.GONE); + }*/ + mIvHousePic.setVisibility(View.GONE); + mTvDelete.setVisibility(View.GONE); + if (houseCategory.equals("3")||houseCategory.equals("5")) { + mTvHouseYype.setText("+添加区域"); + } else { + mTvHouseYype.setText("+添加房间"); + } + } + + mTvDelete.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null && isEdit && position < mDataBeans.size()) { + mOnItemClickListener.onClick(v, position); + } + } + }); + mLlBg.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null && isEdit && position == mDataBeans.size()) { + mOnItemClickListener.onClick(v, position); + } else { + if (mOnClickListener != null && isEdit && position < mDataBeans.size() && !TextUtils.isEmpty(mDataBeans.get(position).getAddressTypeCode()) && ( + Integer.valueOf(mDataBeans.get(position).getAddressTypeCode()) == -1 || Integer.valueOf(mDataBeans.get(position).getAddressTypeCode()) >= 200)) { + mOnClickListener.onClick(v, position); + } + } + } + }); + mLlBg.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + if (mOnItemClickListener != null && isEdit && position < mDataBeans.size()) { + mOnItemClickListener.onLongClick(holder, position); + } + return false; + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/floor/ChooseFloorRoomActivity.java b/app/src/main/java/com/yonsz/z1/createfamily/floor/ChooseFloorRoomActivity.java new file mode 100644 index 0000000..e14f5be --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/floor/ChooseFloorRoomActivity.java @@ -0,0 +1,354 @@ +package com.yonsz.z1.createfamily.floor; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity4.HomeDetailEntity; +import com.yonsz.z1.database.entity.entity5.AddHouseEvent; +import com.yonsz.z1.database.entity.entity5.EditHouseEvent; +import com.yonsz.z1.homemanage.HomeManageActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.YViewPager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import de.greenrobot.event.EventBus; +import q.rorbin.verticaltablayout.VerticalTabLayout; + +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_SUCCESS; +import static com.yonsz.z1.net.Constans.REQUEST_CODE; + +/** + * Created by Administrator on 2019/3/26. + */ + +public class ChooseFloorRoomActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_start_config; + private List dataList; + private TextView roomTypeTv; + private String houseId; + private String floorList; + private RelativeLayout bulidNewHomeRl; + private VerticalTabLayout tabLayout; + private YViewPager viewPager; + private String body; + private LoadingDialog mLoadingDialog; + private ItemFragmentAdapter adapter; + private boolean isModifyFloor = false; + private String houseTypeCode = "2"; + + public void onEventMainThread(AddHouseEvent event) { + int posotion = event.getPosotion(); + List msg = event.getMsg(); + dataList.get(posotion).setData(msg); + } + + public void onEventMainThread(ChooseHomeEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("100")) { + finish(); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_choose_floor_room_type); + + initView(); + initListener(); + } + + private void initView() { + if (null != getIntent().getExtras().get("houseId")) { + houseId = getIntent().getExtras().get("houseId").toString(); + } + floorList = getIntent().getExtras().get("floorList").toString(); + dataList = new ArrayList(); + bulidNewHomeRl = (RelativeLayout) findViewById(R.id.rl_new_build_home); + tabLayout = (VerticalTabLayout) findViewById(R.id.tab_layout); + viewPager = (YViewPager) findViewById(R.id.view_pager); + roomTypeTv = (TextView) findViewById(R.id.tv_create_house); + roomTypeTv.setText(getIntent().getExtras().get("houseTypeName").toString()); + bt_start_config = (Button) findViewById(R.id.bt_start_config); + mTitleView = (TitleView) findViewById(R.id.title_house_name); + mTitleView.clearBackGroud(); + if (getIntent().getExtras().get("houseTypeName").toString().equals("房间选择")) { + mTitleView.setHeadFuntionTxtAndSise16(""); + } else { + mTitleView.setHeadFuntionTxtAndSise16("完成"); + } + if (null != getIntent().getExtras().get("houseTypeCode")) { + houseTypeCode = getIntent().getExtras().get("houseTypeCode").toString(); + if (houseTypeCode.equals("9")) { + bulidNewHomeRl.setVisibility(View.GONE); + } + } + bt_start_config.setVisibility(View.GONE); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (mTitleView.getHeadFuntionTxt().equals("编辑")) { + mTitleView.setHeadFuntionTxtAndSise16("完成"); + bt_start_config.setVisibility(View.GONE); + if (houseTypeCode.equals("9")) { + bulidNewHomeRl.setVisibility(View.GONE); + } else { + bulidNewHomeRl.setVisibility(View.VISIBLE); + } + // mAdapter.setIsEdit(dataList, true); + EventBus.getDefault().post( + new EditHouseEvent(true)); + } else { + mTitleView.setHeadFuntionTxtAndSise16("编辑"); + bt_start_config.setVisibility(View.VISIBLE); + bulidNewHomeRl.setVisibility(View.GONE); + // mAdapter.setIsEdit(dataList, false); + EventBus.getDefault().post( + new EditHouseEvent(false)); + } + } + + @Override + public void onFunctionText() { + + } + }); + List result = Arrays.asList(floorList.split(",")); + for (int i = 0; i < result.size(); i++) { + HouseEntity houseEntity = new HouseEntity(); + houseEntity.setFloorCode(result.get(i)); + dataList.add(houseEntity); + } + Collections.sort(dataList); + /*EventBus.getDefault().post( + new EditHouseEvent(false));*/ + viewPager.setOffscreenPageLimit(result.size()); + adapter = new ItemFragmentAdapter(getSupportFragmentManager()); + viewPager.setAdapter(adapter); + tabLayout.setupWithViewPager(viewPager); + } + + private void initListener() { + bulidNewHomeRl.setOnClickListener(this); + if (getIntent().getExtras().get("houseTypeName").toString().equals("房间选择")) { + mTitleView.setHeadFuntionTxtAndSise16(""); + } else { + bt_start_config.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // createOrUpdateHouse(); + HomeDetailEntity.DataBean homeDetailEntity = new HomeDetailEntity.DataBean(); + homeDetailEntity.setFloorList(floorList); + homeDetailEntity.setHouseCategory(2); + if (!TextUtils.isEmpty(houseId)) { + homeDetailEntity.setId(houseId); + } else { + homeDetailEntity.setName(getIntent().getExtras().get("houseName").toString()); + } + //这里还有问题,把房间弄到其他地方了 +// List result = Arrays.asList(floorList.split(",")); + List beanList = new ArrayList<>(); + for (int i = 0; i < dataList.size(); i++) { + String s = dataList.get(i).getFloorCode(); + for (int j = 0; j < dataList.get(i).getData().size(); j++) { + HomeDetailEntity.DataBean.HouseAddressesBean dataBean = new HomeDetailEntity.DataBean.HouseAddressesBean(); + dataBean.setFloorCode(s); + if (!TextUtils.isEmpty(dataList.get(i).getData().get(j).getAddressTypeCode())) { + dataBean.setAddressTypeCode(dataList.get(i).getData().get(j).getAddressTypeCode()); + } else { + dataBean.setAddressTypeCode(dataList.get(i).getData().get(j).getCode()); + } + dataBean.setAddressTypeName(dataList.get(i).getData().get(j).getAddressTypeName()); + beanList.add(dataBean); + } + } + homeDetailEntity.setHouseAddresses(beanList); + body = JSONObject.toJSONString(homeDetailEntity); + addHouse(); + } + }); + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void addHouse() { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestPostByAsyBody(NetWorkUrl.HOUSE_ADDHOUSE, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addHouse", "ShareDeviceActivity onSuccess()" + respone); + HomeDetailEntity obj = JSON.parseObject(respone, HomeDetailEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rl_new_build_home: + Intent intent = new Intent(ChooseFloorRoomActivity.this, ChooseFloorTypeActivity.class); + intent.putExtra("houseName", "选择楼层"); + intent.putExtra("houseCategory", "2"); + intent.putExtra("from", "ChooseFloorRoomActivity"); + intent.putExtra("floorList", floorList); + intent.putExtra("dataList", (Serializable) dataList); + intent.putExtra("houseId", houseId); + startActivityForResult(intent, REQUEST_CODE); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CREATE_ORUPDATE_HOUSE_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + break; + case CREATE_ORUPDATE_HOUSE_FAIL: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case REQUEST_CODE: + if (data != null && data.getExtras().get("floorList") != null) { +// queryHouses(); + floorList = (String) data.getExtras().get("floorList"); + /*List result = Arrays.asList(floorList.split(",")); + + //删除多余楼层 + Iterator iterator = dataList.iterator(); + while (iterator.hasNext()) { + HouseEntity houseEntity = iterator.next(); + if (!result.contains(houseEntity.getFloorCode())) { + iterator.remove(); + } + } + //增加新选的楼层 + HouseEntity houseEntity; + for (int i = 0; i < result.size(); i++) { + houseEntity = new HouseEntity(); + houseEntity.setFloorCode(result.get(i)); + if (!dataList.contains(houseEntity)) { + dataList.add(houseEntity); + } + }*/ + dataList.clear(); + List result = Arrays.asList(floorList.split(",")); + for (int i = 0; i < result.size(); i++) { + HouseEntity houseEntity = new HouseEntity(); + houseEntity.setFloorCode(result.get(i)); + dataList.add(houseEntity); + } + Collections.sort(dataList); + /*EventBus.getDefault().post( + new EditHouseEvent(false));*/ + + adapter = new ItemFragmentAdapter(getSupportFragmentManager()); + viewPager.setAdapter(adapter); + tabLayout.setupWithViewPager(viewPager); + adapter.notifyDataSetChanged(); + } + break; + } + super.onActivityResult(requestCode, resultCode, data); + } + + class ItemFragmentAdapter extends FragmentPagerAdapter { + public ItemFragmentAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public CharSequence getPageTitle(int position) { + return dataList.get(position).getFloorCode() + "层"; + } + + @Override + public Fragment getItem(int i) { + if (getIntent().getExtras().get("houseTypeName").toString().equals("房间选择")) { + return ItemRoomChooseFragment.getInstance(dataList.get(i).getFloorCode(), i); + } else { + return ItemRoomFragment.getInstance(dataList.get(i).getFloorCode(), i); + } + } + + @Override + public int getCount() { + return dataList.size(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/floor/ChooseFloorTypeActivity.java b/app/src/main/java/com/yonsz/z1/createfamily/floor/ChooseFloorTypeActivity.java new file mode 100644 index 0000000..d255e22 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/floor/ChooseFloorTypeActivity.java @@ -0,0 +1,409 @@ +package com.yonsz.z1.createfamily.floor; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.bigkoo.pickerview.OptionsPickerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.ChooseFloorAdapter; +import com.yonsz.z1.createfamily.ChooseRoomTypeActivity; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity4.HomeDetailEntity; +import com.yonsz.z1.database.entity.entity5.FloorRoomsEntity; +import com.yonsz.z1.homemanage.HomeManageActivity; +import com.yonsz.z1.homemanage.MyNewHomeActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnDragUpListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.DragScaleView; +import com.yonsz.z1.view.TitleView; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_SUCCESS; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_FAIL; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.REQUEST_CODE; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; + +/** + * Created by Administrator on 2019/3/26. + */ + +public class ChooseFloorTypeActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_start_config, bt_choose_floor; + private RecyclerView chooseHouseTypeRv; + private ChooseFloorAdapter mAdapter; + private List dataList = new ArrayList<>(); + private List strings = new ArrayList<>(); + private int nowPosition; + private DragScaleView dragScaleView; + private TextView tv_3floor, tv_2floor, tv_1floor, tv_01floor, tv_02floor; + private TextView tv_choose_floor; + private OptionsPickerView pvOptions; + private List dataListFrom = new ArrayList<>(); + private String floorList; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_choose_floor_type); + + initView(); + initListener(); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + private void initView() { + /*dataList.add("3"); + dataList.add("2"); + dataList.add("1"); + dataList.add("-1"); + dataList.add("-2"); + strings.add("0"); + strings.add("1"); + strings.add("1"); + strings.add("1"); + strings.add("0");*/ + tv_choose_floor = (TextView) findViewById(R.id.tv_choose_floor); + /*tv_3floor = (TextView) findViewById(R.id.tv_3floor); + tv_2floor = (TextView) findViewById(R.id.tv_2floor); + tv_1floor = (TextView) findViewById(R.id.tv_1floor); + tv_01floor = (TextView) findViewById(R.id.tv_01floor); + tv_02floor = (TextView) findViewById(R.id.tv_02floor);*/ + bt_start_config = (Button) findViewById(R.id.bt_start_config); + bt_choose_floor = (Button) findViewById(R.id.bt_choose_floor); +// dragScaleView = (DragScaleView) findViewById(R.id.dragScaleView); +// chooseHouseTypeRv = (RecyclerView) findViewById(R.id.rv_choose_house_type); + mTitleView = (TitleView) findViewById(R.id.title_house_name); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + /*RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(this); + chooseHouseTypeRv.setLayoutManager(manager); + mAdapter = new ChooseFloorAdapter(this, dataList, strings); + chooseHouseTypeRv.setAdapter(mAdapter);*/ + + + /*dragScaleView.setmOnDragUpListener(new OnDragUpListener() { + @Override + public void onDragUp(View view, int dragDirection, int oriTop, int oriBottom) { + Log.i("DragScaleView", dragDirection + "cutHeight====" + view.getHeight() + "=====" + oriTop + "=====" + oriBottom); + int floorNum = 3; + int startNum = 1; + *//*int i1 = view.getHeight() % 171; + if (i1 > 85) { + floorNum++; + }*//* + if (dragDirection == 21 || dragDirection == 23) { + //滑动上部或者下部 + //3层以下都可以备选 + if (oriTop <= 100) { + startNum = 0; + if (oriBottom >= 835) { + floorNum = 5; + } else if (oriBottom >= 702) { + floorNum = 4; + } else if (oriBottom >= 569) { + floorNum = 3; + } else if (oriBottom >= 433) { + floorNum = 2; + } else { + floorNum = 1; + } + } else if (oriTop <= 248) { + startNum = 1; + if (oriBottom >= 835) { + floorNum = 4; + } else if (oriBottom >= 702) { + floorNum = 3; + } else if (oriBottom >= 569) { + floorNum = 2; + } else { + floorNum = 1; + } + } else if (oriTop <= 379) { + startNum = 2; + if (oriBottom >= 835) { + floorNum = 3; + } else if (oriBottom >= 702) { + floorNum = 2; + } else { + floorNum = 1; + } + } else if (oriTop <= 519) { + startNum = 3; + if (oriBottom >= 835) { + floorNum = 2; + } else { + floorNum = 1; + } + } else { + startNum = 4; + floorNum = 1; + } + } + for (int i = 0; i < strings.size(); i++) { + if (startNum <= i && i < (startNum + floorNum)) { + strings.set(i, "1"); + } else { + strings.set(i, "0"); + } + } + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < strings.size(); i++) { + if (i < strings.size() - 1) { + if (strings.get(i).equals("1")) { + stringBuilder.append(dataList.get(i) + "层"); + stringBuilder.append(","); + } + } else { + if (strings.get(i).equals("1")) { + stringBuilder.append(dataList.get(i) + "层"); + } + } + } + tv_choose_floor.setText("选中" + String.valueOf(stringBuilder)); + } + });*/ + + } + + private void initListener() { + String fromClass = ""; + if (null != getIntent().getExtras().get("from")) { + fromClass = getIntent().getExtras().get("from").toString(); + String s = getIntent().getExtras().get("floorList").toString(); + List r = Arrays.asList(s.split(",")); + if (r.size() == 0) { + return; + } + tv_choose_floor.setVisibility(View.VISIBLE); + tv_choose_floor.setText("已选择" + r.get(0) + "层~" + r.get(r.size() - 1) + "层"); + } + bt_start_config.setText(R.string.next); + String finalFromClass = fromClass; + bt_start_config.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (tv_choose_floor.getText().toString().isEmpty()) { + ToastUtil.show(ChooseFloorTypeActivity.this, "请先选择楼层"); + return; + } + StringBuilder floorList1 = new StringBuilder(); + String s = tv_choose_floor.getText().toString(); + int low = Integer.parseInt(s.substring(s.indexOf("择") + 1, s.indexOf("层"))); + int high = Integer.parseInt(s.substring(s.indexOf("~") + 1, s.lastIndexOf("层"))); + + if (s.contains("~")) { + /*for (int i = high; i >= low; i--) { + if (i != 0) { + floorList1.append(i); + floorList1.append(","); + } + }*/ + for (int i = low; i <= high; i++) { + if (i != 0) { + floorList1.append(i); + floorList1.append(","); + } + } + } else { + floorList1.append(low); + floorList1.append(","); + } + floorList = String.valueOf(floorList1.substring(0, floorList1.lastIndexOf(","))); + + if (finalFromClass.equals("ChooseFloorRoomActivity")) { + if (null != getIntent().getSerializableExtra("dataList")) { + dataListFrom = (List) getIntent().getSerializableExtra("dataList"); + } + List result = Arrays.asList(floorList.split(",")); + String floorListFrom = getIntent().getExtras().get("floorList").toString(); + List resultFrom = Arrays.asList(floorListFrom.split(",")); + HomeDetailEntity.DataBean floorRoomsEntity = new HomeDetailEntity.DataBean(); + floorRoomsEntity.setFloorList(floorList); + floorRoomsEntity.setHouseCategory(2); + floorRoomsEntity.setId(getIntent().getExtras().get("houseId").toString()); + String body = JSONObject.toJSONString(floorRoomsEntity); + addHouse(body); + } else { + Intent intent = new Intent(ChooseFloorTypeActivity.this, ChooseFloorRoomActivity.class); + intent.putExtra("houseTypeCode", "9"); + intent.putExtra("houseTypeName", "房间设置"); + intent.putExtra("houseName", getIntent().getExtras().get("houseName").toString()); + intent.putExtra("floorList", floorList); + startActivity(intent); + } + } + }); + bt_choose_floor.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + setFloor(); + } + }); + } + + private void addHouse(String body) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestPostByAsyBody(NetWorkUrl.HOUSE_ADDHOUSE, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addHouse", "ShareDeviceActivity onSuccess()" + respone); + HomeDetailEntity obj = JSON.parseObject(respone, HomeDetailEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void setFloor() { + final List options1Items = new ArrayList<>(); + final List> optionsItems = new ArrayList<>(); + options1Items.clear(); + options1Items.add("20层"); + options1Items.add("19层"); + options1Items.add("18层"); + options1Items.add("17层"); + options1Items.add("16层"); + options1Items.add("15层"); + options1Items.add("14层"); + options1Items.add("13层"); + options1Items.add("12层"); + options1Items.add("11层"); + options1Items.add("10层"); + options1Items.add("9层"); + options1Items.add("8层"); + options1Items.add("7层"); + options1Items.add("6层"); + options1Items.add("5层"); + options1Items.add("4层"); + options1Items.add("3层"); + options1Items.add("2层"); + options1Items.add("1层"); + options1Items.add("-1层"); + options1Items.add("-2层"); + options1Items.add("-3层"); + options1Items.add("-4层"); + options1Items.add("-5层"); + for (int i = 0; i < options1Items.size(); i++) { + optionsItems.add(options1Items.subList(0, i)); + } + OptionsPickerView pvOptions = new OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() { + @Override + public void onOptionsSelect(final int options1, final int option2, int options3, View v) { + tv_choose_floor.setVisibility(View.VISIBLE); + String s1 = options1Items.get(options1); + if (optionsItems.get(options1).size() != 0) { + String s2 = optionsItems.get(options1).get(option2); + tv_choose_floor.setText("已选择" + s1 + "~" + s2); + } else { + tv_choose_floor.setText("已选择" + s1); + } + Log.i("TAG", "ChooseFloorTypeActivity onOptionsSelect()" + s1 + "===="); + + } + }).setLinkage(true) + .setLabels(" ~", "", "") + .setTextColorCenter(Color.BLACK)//设置选中项的颜色 + .build(); + pvOptions.setPicker(options1Items, optionsItems); + pvOptions.setSelectOptions(20, 17); + pvOptions.show(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CREATE_ORUPDATE_HOUSE_SUCCESS: + EventBus.getDefault().post( + new ChooseHomeEvent("100")); + ToastUtil.show(this, "修改楼层成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(ChooseFloorTypeActivity.this, ChooseFloorRoomActivity.class); + intent.putExtra("floorList", floorList); + intent.putExtra("houseTypeCode", "2"); + intent.putExtra("houseTypeName", "房间设置"); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("houseCategory", "2"); + startActivity(intent); + finish(); + } + }, 1000); + break; + case HOUSE_TYPE_LIST_SUCCESS: + + break; + case HOUSE_TYPE_LIST_FAIL: + case CREATE_ORUPDATE_HOUSE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/floor/ChooseRoomInFloorActivity.java b/app/src/main/java/com/yonsz/z1/createfamily/floor/ChooseRoomInFloorActivity.java new file mode 100644 index 0000000..bc6f53b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/floor/ChooseRoomInFloorActivity.java @@ -0,0 +1,673 @@ +package com.yonsz.z1.createfamily.floor; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Message; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.mm.android.deviceaddmodule.CommonParam; +import com.mm.android.deviceaddmodule.LCDeviceEngine; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.ModifyDeviceEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity5.AddHouseEvent; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.device.deviceadd.ConnectWifiActivity; +import com.yonsz.z1.device.deviceadd.NoWifiConnectActicity; +import com.yonsz.z1.devicea2.safedevice.ScanCodeActivity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.gateway.GatewayDetailActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.mydevice.DeviceDetailActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.new433.light.LightTwoActivity; +import com.yonsz.z1.new433.switcher.SwitcherTwoActivity; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ChooseRoomActivity; +import com.yonsz.z1.version5.clotheshanger.ClothesHangerStepOneActivity; +import com.yonsz.z1.version5.curtainandWindow.CurtainAndWindowClickActivity; +import com.yonsz.z1.version5.curtainandWindow.CurtainTypeActivity; +import com.yonsz.z1.version5.light.LightT3TypeActivity; +import com.yonsz.z1.version5.weidget.YViewPager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.wifi.switcher.WifiSwitcherDetailActivity; +import com.yonsz.z1.ybl.light.YblHandSearchActivity; +import com.yonsz.z1.ybl.panel.YblPanelStepTwoActivity; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; +import q.rorbin.verticaltablayout.VerticalTabLayout; + +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.CAT_EYE; +import static com.yonsz.z1.net.Constans.CLOTHES_HANGER; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.KUQI_PANEL; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_FAIL; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.SAFE_DEVICE_TAG; +import static com.yonsz.z1.net.Constans.SITUATIONAL_TRIGGER; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WINDOW_OPENER; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.Constans.localAddFloorId; +import static com.yonsz.z1.net.NetWorkUrl.BIND_DEVICE; + +/** + * Created by Administrator on 2019/3/26. + */ + +public class ChooseRoomInFloorActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_start_config; + private List dataList; + private TextView roomTypeTv; + private String houseId; + private String floorList; + private VerticalTabLayout tabLayout; + private YViewPager viewPager; + private String addressTypeCode; + private String floor = ""; + private String deviceType; + private String deviceModel; + private String ziId; + private LcBindReceiver lcBindReceiver = null; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + public void onEventMainThread(AddHouseEvent event) { + addressTypeCode = String.valueOf(event.getPosotion()); + localAddAddressId = addressTypeCode; + List msg = event.getMsg(); + floor = msg.get(0).getFloorCode(); + localAddFloorId = floor; + bt_start_config.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee_20dp)); + bt_start_config.setEnabled(true); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_choose_floor_room_type); + + initView(); + initListener(); + } + + private void initView() { + if (null != getIntent().getExtras().get("ziId")) { + ziId = getIntent().getExtras().get("ziId").toString(); + } + deviceType = getIntent().getExtras().get("deviceType").toString(); + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + if (null != getIntent().getExtras().get("houseId")) { + houseId = getIntent().getExtras().get("houseId").toString(); + } + floorList = getIntent().getExtras().get("floorList").toString(); + dataList = new ArrayList(); + tabLayout = (VerticalTabLayout) findViewById(R.id.tab_layout); + viewPager = (YViewPager) findViewById(R.id.view_pager); + roomTypeTv = (TextView) findViewById(R.id.tv_create_house); + roomTypeTv.setText(getIntent().getExtras().get("houseTypeName").toString()); + bt_start_config = (Button) findViewById(R.id.bt_start_config); + mTitleView = (TitleView) findViewById(R.id.title_house_name); + mTitleView.clearBackGroud(); + mTitleView.setHeadFuntionTxtAndSise16(""); + bt_start_config.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + bt_start_config.setEnabled(false); + bt_start_config.setText("下一步"); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + List result = Arrays.asList(floorList.split(",")); + for (int i = 0; i < result.size(); i++) { + HouseEntity houseEntity = new HouseEntity(); + houseEntity.setFloorCode(result.get(i)); + dataList.add(houseEntity); + } + Collections.sort(dataList); + ItemFragmentAdapter adapter = new ItemFragmentAdapter(getSupportFragmentManager()); + viewPager.setAdapter(adapter); + tabLayout.setupWithViewPager(viewPager); + + registReceiver(); + } + + private void registReceiver() { + lcBindReceiver = new LcBindReceiver(); + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction("goMainbind"); + registerReceiver(lcBindReceiver, intentFilter); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + unregisterReceiver(lcBindReceiver); + } + + private void initListener() { + bt_start_config.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent; + switch (deviceType) { + case "100": + saveUserInfo(); + break; + case "101": + modifyDevice(); + break; + case "102": + EventBus.getDefault().post( + new ChooseHomeEvent("2")); + modifyDevice(); + break; + case "000": + WifiManager wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + if (getIntent().getExtras().get("titleRemark").toString().contains("B3E")) { + intent = new Intent(ChooseRoomInFloorActivity.this, ScanCodeActivity.class); + } else { + intent = new Intent(ChooseRoomInFloorActivity.this, ConnectWifiActivity.class); + } + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "AsxAddDeviceListActivity"); + intent.putExtra("addressTypeCode", addressTypeCode); + intent.putExtra("floor", floor); + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + intent.putExtra("deviceType", "000"); + startActivity(intent); + } else { + intent = new Intent(ChooseRoomInFloorActivity.this, NoWifiConnectActicity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "AsxAddDeviceListActivity"); + intent.putExtra("addressTypeCode", addressTypeCode); + intent.putExtra("deviceAddress", addressTypeCode); + intent.putExtra("floor", floor); + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + intent.putExtra("deviceType", "000"); + startActivity(intent); + } + break; + case CLOTHES_HANGER: + switch (deviceModel) { + case "0": + intent = new Intent(ChooseRoomInFloorActivity.this, ClothesHangerStepOneActivity.class); + intent.putExtra("addressTypeCode", addressTypeCode); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + startActivity(intent); + break; + default: + + break; + } + break; + case LIGHT_TAG: + switch (deviceModel) { + case "0"://T1 + intent = new Intent(ChooseRoomInFloorActivity.this, LightTwoActivity.class); + intent.putExtra("panelType", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("addressId", addressTypeCode); + startActivity(intent); + break; + case "1"://T2 + intent = new Intent(ChooseRoomInFloorActivity.this, LightTwoActivity.class); + intent.putExtra("panelType", "1"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("addressId", addressTypeCode); + startActivity(intent); + break; + case "2"://易百珑 + intent = new Intent(ChooseRoomInFloorActivity.this, YblHandSearchActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", addressTypeCode); + startActivity(intent); + break; + case "3"://尚慧T3 + intent = new Intent(ChooseRoomInFloorActivity.this, LightT3TypeActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addressId", addressTypeCode); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + break; + default: + + break; + } + break; + case CURTAINS_TAG: + switch (deviceModel) { + case "0"://T1 + + break; + case "1"://尚慧T3 + intent = new Intent(ChooseRoomInFloorActivity.this, CurtainTypeActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addressId", addressTypeCode); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + default: + + break; + } + break; + case WINDOW_OPENER: + switch (deviceModel) { + case "0": + intent = new Intent(ChooseRoomInFloorActivity.this, CurtainAndWindowClickActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", deviceType); + intent.putExtra("addressId", addressTypeCode); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + break; + case "1": + + break; + default: + + break; + } + break; + case CAT_EYE: + try { + LCDeviceEngine.newInstance().addDevice(ChooseRoomInFloorActivity.this); + } catch (Exception e) { + e.printStackTrace(); + } + break; + case INTELLIGENT_DOOR_LOCK: + if (deviceModel.equals("1")) { + try { + CommonParam commonParam = new CommonParam(); + commonParam.setEnvirment(DifferConstans.SERVER_BACKUP4); + commonParam.setContext(ChooseRoomInFloorActivity.this.getApplication()); + commonParam.setAppId(DifferConstans.LECHENG_APPID); + commonParam.setAppSecret(DifferConstans.LECHENG_APPSECRET); + LCDeviceEngine.newInstance().init(commonParam, SharedpreferencesUtil.get("accessToken", "")); + } catch (Throwable e) { + Toast.makeText(ChooseRoomInFloorActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); + } + try { + LCDeviceEngine.newInstance().addDevice(ChooseRoomInFloorActivity.this); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + intent = new Intent(ChooseRoomInFloorActivity.this, ScanCodeActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", addressTypeCode); + intent.putExtra("icon", ""); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + if (null != getIntent().getExtras().get("parentThirdDeviceId")) { + intent.putExtra("parentThirdDeviceId", getIntent().getExtras().get("parentThirdDeviceId").toString()); + } + intent.putExtra("floor", floor); + startActivity(intent); + } + break; + case SAFE_DEVICE_TAG: + case DOOR_LOCK_TAG: + case INFRARED_TAG: + case SMOKE_TAG: + case GAS_TAG: + case WATER_TAG: + case WIRELESS_EMERGENCY_BUTTON: + case INFRARED_CURTAIN_DETECTOR: + intent = new Intent(ChooseRoomInFloorActivity.this, ScanCodeActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", addressTypeCode); + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("parentThirdDeviceId", getIntent().getExtras().get("parentThirdDeviceId").toString()); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("floor", floor); + startActivity(intent); + break; + case CAMERA_TAG: + case GATE_WAY: + try { + CommonParam commonParam = new CommonParam(); + commonParam.setEnvirment(DifferConstans.SERVER_BACKUP4); + commonParam.setContext(ChooseRoomInFloorActivity.this.getApplication()); + commonParam.setAppId(DifferConstans.LECHENG_APPID); + commonParam.setAppSecret(DifferConstans.LECHENG_APPSECRET); + LCDeviceEngine.newInstance().init(commonParam, SharedpreferencesUtil.get("accessToken", "")); + } catch (Throwable e) { + Toast.makeText(ChooseRoomInFloorActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); + } + try { + LCDeviceEngine.newInstance().addDevice(ChooseRoomInFloorActivity.this); + } catch (Exception e) { + e.printStackTrace(); + } + break; + case KUQI_PANEL: + intent = new Intent(ChooseRoomInFloorActivity.this, ScanCodeActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", addressTypeCode); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("floor", floor); + startActivity(intent); + break; + case SWITCH_TAG: + if (null != getIntent().getExtras().get("deviceId")) { + subsetModify(); + } else { + intent = new Intent(ChooseRoomInFloorActivity.this, SwitcherTwoActivity.class); + intent.putExtra("ziId", ""); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("largeClass", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("deviceAddress", addressTypeCode); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("icon", ""); + intent.putExtra("floor", floor); + startActivity(intent); + } + break; + case SITUATIONAL_TRIGGER: + intent = new Intent(ChooseRoomInFloorActivity.this, YblPanelStepTwoActivity.class); + intent.putExtra("panelType", "2"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addressId", addressTypeCode); + intent.putExtra("deviceAddress", addressTypeCode); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("deviceType", SITUATIONAL_TRIGGER); + intent.putExtra("floor", floor); + startActivity(intent); + break; + } + } + }); + } + + private void subsetModify() { + String body = "{\"floor\":\"" + floor + "\"}"; + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getIntent().getExtras().get("deviceId")); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("addressId", addressTypeCode); + map.put("ziId", ziId); + map.put("floor", floor); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_MODIFY, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetModify", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case MODIFY_DEVICE_SUCCESS: + final String entity1 = (String) msg.obj; + ToastUtil.show(this, "修改成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(ChooseRoomInFloorActivity.this, DeviceDetailActivity.class); + intent.putExtra("devicePosition", entity1); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + } + }, 1000); + break; + case MODIFY_DEVICE_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + case ALLOW_VOICE_CONTROLL_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + Intent intent2 = new Intent(ChooseRoomInFloorActivity.this, GatewayDetailActivity.class); + intent2.putExtra("addressId", addressTypeCode); + setResult(MODIFY_DEVICE_NAME, intent2); + finish(); + break; + case ALLOW_VOICE_CONTROLL_SUCCESS: + BaseVersion5Entity entity = (BaseVersion5Entity) msg.obj; + Intent intent = new Intent(ChooseRoomInFloorActivity.this, WifiSwitcherDetailActivity.class); + intent.putExtra("devicePosition", AddressNameUtil.getAddressName(entity.getData().getAddressId().toString())); + intent.putExtra("addressId", entity.getData().getAddressId()); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + break; + } + } + + private void modifyDevice() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("addressId", addressTypeCode); + map.put("floor", floor); + util.requestPostByAsynewApi(NetWorkUrl.MODIFY_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateBlindEntityName", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = addressTypeCode; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void saveUserInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("addressId", addressTypeCode); + map.put("floor", floor); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.UPDATE_DEVICE_ADDRESS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("saveUserInfo", "DeviceA2PositionActivity onSuccess()" + respone); + ModifyDeviceEntity obj = JSON.parseObject(respone, ModifyDeviceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(MODIFY_DEVICE_SUCCESS); + msg.obj = addressTypeCode; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(MODIFY_DEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(MODIFY_DEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + class ItemFragmentAdapter extends FragmentPagerAdapter { + public ItemFragmentAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public CharSequence getPageTitle(int position) { + return dataList.get(position).getFloorCode() + "层"; + } + + @Override + public Fragment getItem(int i) { + return ItemRoomChooseFragment.getInstance(dataList.get(i).getFloorCode(), i); + } + + @Override + public int getCount() { + return dataList.size(); + } + } + + public class LcBindReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + Log.i("goMainbind", intent.getStringExtra("sn")); + Log.i("goMainbind", intent.getStringExtra("code")); + Log.i("goMainbind", intent.getStringExtra("encryptPwd")); + if (intent.getStringExtra("encryptPwd").isEmpty()) { + bindDevice(intent.getStringExtra("sn"), intent.getStringExtra("code")); + } else { + bindDevice(intent.getStringExtra("sn"), intent.getStringExtra("encryptPwd")); + } + } + } + + /** + * 绑定 + */ + private void bindDevice(String sn, String code) { + //调后台接口 + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", sn); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("code", code); + map.put("addressId", addressTypeCode); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("floor", floor); + map.put("isBind", "true"); + netWorkUtil.requestPostByAsynewApi(BIND_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("bindDevice", "onSuccess()" + respone); + runOnUiThread(new Runnable() { + @Override + public void run() { + SimpleEntty simpleEntty = JSON.parseObject(respone, SimpleEntty.class); + if (simpleEntty.getFlag() != 1) { + Toast.makeText(getApplicationContext(), simpleEntty.getMsg(), Toast.LENGTH_LONG); + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + EventBus.getDefault().post( + new ChooseHomeEvent("2")); + finish(); + } + }); + } + + @Override + public void onFail(String message) { + Log.i("bindDevice", "onFail()" + message); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/floor/FloorChangeAdapter.java b/app/src/main/java/com/yonsz/z1/createfamily/floor/FloorChangeAdapter.java new file mode 100644 index 0000000..cc6ddb9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/floor/FloorChangeAdapter.java @@ -0,0 +1,149 @@ +package com.yonsz.z1.createfamily.floor; + +import android.content.Context; +import android.content.Intent; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.createfamily.ChooseRoomTypeActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; + + +public class FloorChangeAdapter extends RecyclerView.Adapter { + private List mStringList = new ArrayList<>(); + private List mImgList = new ArrayList<>(); + private Context mContext; + private OnRecyclerListener mOnItemClickListener; + private String nowSeleteName = ""; + + + public FloorChangeAdapter(Context context, String floorList) { + mContext = context; + List result = Arrays.asList(floorList.split(",")); + if (result.size() == 1 && TextUtils.isEmpty(result.get(0))) { + return; + } + for (int i = 0; i < result.size(); i++) { + mStringList.add(result.get(i)); + } + if (mStringList.size() != 0) { + if (!TextUtils.isEmpty(SharedpreferencesUtil.get(homeListEntity.getData().get(deviceNumListPosition).getId(), ""))) { + nowSeleteName = SharedpreferencesUtil.get(homeListEntity.getData().get(deviceNumListPosition).getId(), ""); + } else { + nowSeleteName = mStringList.get(0); + } + } + } + + public void setmOnItemClickListener(OnRecyclerListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_floor_change, parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(holder, position); + } + + @Override + public int getItemCount() { + return mStringList == null ? 1 : mStringList.size() + 1; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.title_img) + ImageView title_img; + @BindView(R.id.tv_ranking_title_item) + TextView itemTextView; + @BindView(R.id.tv_bottom) + TextView tv_bottom; + @BindView(R.id.ll_top) + LinearLayout ll_top; + + public MessageViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final RecyclerView.ViewHolder holder, final int position) { + if (position < mStringList.size()) { + //文字内容设置 + itemTextView.setText(mStringList.get(position) + "层"); + title_img.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_floor)); + if (mStringList.get(position).equals(nowSeleteName)) { //判断选中项 + itemTextView.setTextColor(mContext.getResources().getColor(R.color.z1_398dee)); + tv_bottom.setVisibility(View.VISIBLE); + } else { + itemTextView.setTextColor(mContext.getResources().getColor(R.color.z1_333333)); + tv_bottom.setVisibility(View.GONE); + } + } else { + if (homeListEntity.getData().get(deviceNumListPosition).getHouseCategory() == 3 || homeListEntity.getData().get(deviceNumListPosition).getHouseCategory() == 5) { + itemTextView.setText("区域管理"); + } else { + itemTextView.setText("房间管理"); + } + title_img.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_room_setup)); + } + + ll_top.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (position < mStringList.size()) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + } else { + Intent intent; + if (TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + intent = new Intent(mContext, ChooseRoomTypeActivity.class); + intent.putExtra("houseCategory", homeListEntity.getData().get(deviceNumListPosition).getHouseCategory()); + } else { + intent = new Intent(mContext, ChooseFloorRoomActivity.class); + intent.putExtra("floorList", homeListEntity.getData().get(deviceNumListPosition).getFloorList()); + intent.putExtra("houseCategory", "2"); + } + intent.putExtra("houseTypeCode", homeListEntity.getData().get(deviceNumListPosition).getHouseTypeCode()); + if (homeListEntity.getData().get(deviceNumListPosition).getHouseCategory() == 3 || homeListEntity.getData().get(deviceNumListPosition).getHouseCategory() == 5) { + intent.putExtra("houseTypeName", "办公区域"); + } else { + intent.putExtra("houseTypeName", "房间设置"); + } + intent.putExtra("houseName", homeListEntity.getData().get(deviceNumListPosition).getName()); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.getApplicationContext().startActivity(intent); + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, 100); + } + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/floor/FloorRoomAdapter.java b/app/src/main/java/com/yonsz/z1/createfamily/floor/FloorRoomAdapter.java new file mode 100644 index 0000000..9be9a3f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/floor/FloorRoomAdapter.java @@ -0,0 +1,151 @@ +package com.yonsz.z1.createfamily.floor; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnRecyclerListener; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + + +public class FloorRoomAdapter extends RecyclerView.Adapter { + private List mDataBeans; + private Context mContext; + private boolean isEdit; + private OnRecyclerListener mOnItemClickListener; + private OnRecyclerClickListener mOnClickListener; + private List photos = null; + + + public FloorRoomAdapter(Context context, List mDataBeans, boolean isEdit) { + this.mDataBeans = mDataBeans; + this.mContext = context; + this.isEdit = isEdit; + } + + public void setIsEdit(List mDataBeans, boolean isTdit) { + this.isEdit = isTdit; + // this.mDataBeans = mDataBeans; + this.notifyDataSetChanged(); + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_choose_floor_room_type, parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(holder, position); + } + + @Override + public int getItemCount() { + if (isEdit) { + return mDataBeans == null ? 0 : mDataBeans.size() + 1; + } else { + return mDataBeans == null ? 0 : mDataBeans.size(); + } + } + + public void setmOnItemClickListener(OnRecyclerListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + public void setmOnClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.iv_house_type_pic) + ImageView mIvHousePic; + @BindView(R.id.tv_house_type) + TextView mTvHouseYype; + @BindView(R.id.tv_delete) + TextView mTvDelete; + @BindView(R.id.ll_bg) + LinearLayout mLlBg; + + public MessageViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final RecyclerView.ViewHolder holder, final int position) { + if (position < mDataBeans.size()) { + mIvHousePic.setVisibility(View.VISIBLE); + if (!TextUtils.isEmpty(mDataBeans.get(position).getIcon())) { + ImageLoader.getInstance().displayImage(mDataBeans.get(position).getIcon(), mIvHousePic, UniKongApp.getHiApp().getImageLoaderOption()); + } else { + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_room)); + } + if (!TextUtils.isEmpty(mDataBeans.get(position).getName())) { + mTvHouseYype.setText(mDataBeans.get(position).getName()); + } else { + mTvHouseYype.setText(mDataBeans.get(position).getAddressTypeName()); + } + if (isEdit) { + mTvDelete.setVisibility(View.VISIBLE); + } else { + mTvDelete.setVisibility(View.GONE); + } + } else { + /*if (isEdit) { + mLlBg.setVisibility(View.VISIBLE); + } else { + mLlBg.setVisibility(View.GONE); + }*/ + mIvHousePic.setVisibility(View.GONE); + mTvDelete.setVisibility(View.GONE); + mTvHouseYype.setText("+添加房间"); + } + + mTvDelete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null && isEdit && position < mDataBeans.size()) { + mOnItemClickListener.onClick(v, position); + } + } + }); + mLlBg.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null && isEdit && position == mDataBeans.size()) { + mOnItemClickListener.onClick(v, position); + } else { + if (mOnClickListener != null && isEdit && position < mDataBeans.size() && !TextUtils.isEmpty(mDataBeans.get(position).getAddressTypeCode()) && ( + Integer.valueOf(mDataBeans.get(position).getAddressTypeCode()) == -1 || Integer.valueOf(mDataBeans.get(position).getAddressTypeCode()) >= 200)) { + mOnClickListener.onClick(v, position); + } + } + } + }); + mLlBg.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + if (mOnItemClickListener != null && isEdit && position < mDataBeans.size()) { + mOnItemClickListener.onLongClick(holder, position); + } + return false; + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/floor/FloorRoomChooseAdapter.java b/app/src/main/java/com/yonsz/z1/createfamily/floor/FloorRoomChooseAdapter.java new file mode 100644 index 0000000..dcb72fd --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/floor/FloorRoomChooseAdapter.java @@ -0,0 +1,129 @@ +package com.yonsz.z1.createfamily.floor; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.listener.OnRecyclerListener; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + + +public class FloorRoomChooseAdapter extends RecyclerView.Adapter { + private List mDataBeans; + private Context mContext; + private boolean isEdit; + private OnRecyclerListener mOnItemClickListener; + private List photos = null; + private int nowPosition = 100; + private String addressId = ""; + + + public FloorRoomChooseAdapter(Context context, List mDataBeans, boolean isEdit) { + this.mDataBeans = mDataBeans; + this.mContext = context; + this.isEdit = isEdit; + } + + public void setIsEdit(List mDataBeans, boolean isTdit) { + this.isEdit = isTdit; + // this.mDataBeans = mDataBeans; + this.notifyDataSetChanged(); + } + + public void setAddressId(String addressId) { + this.addressId = addressId; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_choose_floor_room_type, parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(holder, position); + } + + @Override + public int getItemCount() { + if (isEdit) { + return mDataBeans == null ? 0 : mDataBeans.size() + 1; + } else { + return mDataBeans == null ? 0 : mDataBeans.size(); + } + } + + public void setmOnItemClickListener(OnRecyclerListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.iv_house_type_pic) + ImageView mIvHousePic; + @BindView(R.id.tv_house_type) + TextView mTvHouseYype; + @BindView(R.id.tv_delete) + TextView mTvDelete; + @BindView(R.id.ll_bg) + LinearLayout mLlBg; + + public MessageViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final RecyclerView.ViewHolder holder, final int position) { + if (position < mDataBeans.size()) { + mIvHousePic.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage(mDataBeans.get(position).getIcon(), mIvHousePic, UniKongApp.getHiApp().getImageLoaderOption()); + if (!TextUtils.isEmpty(mDataBeans.get(position).getName())) { + mTvHouseYype.setText(mDataBeans.get(position).getName()); + } else { + mTvHouseYype.setText(mDataBeans.get(position).getAddressTypeName()); + } + mTvDelete.setVisibility(View.GONE); + + if (!TextUtils.isEmpty(addressId) && mDataBeans.get(position).getAddressTypeCode().equals(addressId)) { + mLlBg.setBackgroundResource(R.drawable.kuang_house_type); + mTvHouseYype.setTextColor(0xff1781FD); + nowPosition = position; + addressId = ""; + } + } + + if (nowPosition == position) { + mLlBg.setBackgroundResource(R.drawable.kuang_house_type); + mTvHouseYype.setTextColor(0xff1781FD); + } else { + mLlBg.setBackgroundResource(R.drawable.kuang_create_house); + mTvHouseYype.setTextColor(0xff333333); + } + + mLlBg.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + nowPosition = position; + notifyDataSetChanged(); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/floor/ItemRoomChooseFragment.java b/app/src/main/java/com/yonsz/z1/createfamily/floor/ItemRoomChooseFragment.java new file mode 100644 index 0000000..6a06c3a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/floor/ItemRoomChooseFragment.java @@ -0,0 +1,278 @@ +package com.yonsz.z1.createfamily.floor; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.database.entity.entity5.AddHouseEvent; +import com.yonsz.z1.database.entity.entity5.EditHouseEvent; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnRecyclerListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.FloorToHouseTypeUtil; +import com.yonsz.z1.utils.ToastUtil; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_FAIL; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_ADD_HOME; +import static com.yonsz.z1.net.NetWorkUrl.ADDRESS_TYPE_LIST; +import static com.yonsz.z1.net.NetWorkUrl.HOUSEADDRESS_LIST; + +public class ItemRoomChooseFragment extends BaseFragment implements View.OnClickListener { + private View view; + private UIHandle mHandler; + private RecyclerView chooseHouseTypeRv; + private FloorRoomChooseAdapter mAdapter; + private List dataList = new ArrayList<>(); + private ItemTouchHelper itemTouchHelper; + private String houseId; + private int position; + private String floorCode; + + public void onEventMainThread(EditHouseEvent event) { + boolean msgBoolean = event.getMsgBoolean(); + mAdapter.setIsEdit(dataList, msgBoolean); + if (!msgBoolean) { + EventBus.getDefault().post( + new AddHouseEvent(dataList, position)); + } + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + if (null == view) { + view = inflater.inflate(R.layout.fragment_room_item, container, false); + initView(); + } else { + ViewGroup parent = (ViewGroup) view.getParent(); + if (parent != null) { + parent.removeView(view); + } + } + return view; + } + + public static ItemRoomChooseFragment getInstance(String floorCode, int position) { + ItemRoomChooseFragment fragment = new ItemRoomChooseFragment(); + fragment.floorCode = floorCode; + fragment.position = position; + return fragment; + } + + private void initView() { + if (null != getActivity().getIntent().getExtras().get("houseId")) { + houseId = getActivity().getIntent().getExtras().get("houseId").toString(); + } + chooseHouseTypeRv = (RecyclerView) view.findViewById(R.id.rv_choose_house_type); + getAddresstypeList1(); + } + + private String getAddressTypeCodes() { + StringBuilder stringBuilderAdd = new StringBuilder(); + for (int i = 0; i < dataList.size(); i++) { + if (i < dataList.size() - 1) { + if (!TextUtils.isEmpty(dataList.get(i).getCode())) { + stringBuilderAdd.append(dataList.get(i).getCode()); + } else { + stringBuilderAdd.append(dataList.get(i).getAddressTypeCode()); + } + stringBuilderAdd.append(","); + } else { + if (!TextUtils.isEmpty(dataList.get(i).getCode())) { + stringBuilderAdd.append(dataList.get(i).getCode()); + } else { + stringBuilderAdd.append(dataList.get(i).getAddressTypeCode()); + } + } + } + return String.valueOf(stringBuilderAdd); + } + + private void getAddresstypeList1() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", houseId); + map.put("floor", floorCode); + netWorkUtil.requestGetByAsy(HOUSEADDRESS_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("getHousetypeList1", "onSuccess()" + respone); + HouseEntity obj = JSON.parseObject(respone, HouseEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + @Override + public void onClick(View v) { + + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(ItemRoomChooseFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + ItemRoomChooseFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case HOUSE_TYPE_LIST_SUCCESS: + HouseEntity houseEntity = (HouseEntity) msg.obj; + dataList = houseEntity.getData(); + + GridLayoutManager manager = new GridLayoutManager(getContext(), 2); + chooseHouseTypeRv.setLayoutManager(manager); + + mAdapter = new FloorRoomChooseAdapter(getContext(), dataList, false); + chooseHouseTypeRv.setAdapter(mAdapter); + itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + Log.i("getMovementFlags", "getMovementFlags: "); + int dragFlags; + int swipeFlags; + if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | + ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; + swipeFlags = 0; + } else { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; + swipeFlags = 0; + } + return makeMovementFlags(dragFlags, swipeFlags); + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + int fromPosition = viewHolder.getAdapterPosition(); + int toPosition = target.getAdapterPosition(); + Log.i("onMove", "onMove: " + fromPosition + "===" + toPosition + "===" + dataList.size()); + if (fromPosition == dataList.size() || toPosition == dataList.size()) { + return false; + } + if (fromPosition < toPosition) { + for (int i = fromPosition; i < toPosition; i++) { + Collections.swap(dataList, i, i + 1); + } + } else { + for (int i = fromPosition; i > toPosition; i--) { + Collections.swap(dataList, i, i - 1); + } + } + mAdapter.notifyItemMoved(fromPosition, toPosition); + return true; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + Log.i("onSwiped", "onSwiped: "); + } + + @Override + public boolean isLongPressDragEnabled() { + return false; + } + }); + itemTouchHelper.attachToRecyclerView(chooseHouseTypeRv); + + mAdapter.setmOnItemClickListener(new OnRecyclerListener() { + @Override + public void onClick(View view, final int position) { + /*addressTypeCode = dataList.get(position).getAddressTypeCode(); + bt_start_config.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee_20dp)); + bt_start_config.setEnabled(true);*/ + int addressTypeCode = Integer.parseInt(dataList.get(position).getAddressTypeCode()); + EventBus.getDefault().post( + new AddHouseEvent(dataList, addressTypeCode)); + } + + @Override + public void onLongClick(RecyclerView.ViewHolder view, int position) { + + } + }); + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case SHOW_ADD_HOME: + if (data != null && data.getExtras().get("addBeans") != null) { + List dataBeans = (List) data.getSerializableExtra("addBeans"); + for (int i = 0; i < dataBeans.size(); i++) { + if (!dataList.contains(dataBeans.get(i))) { + dataList.add(dataBeans.get(i)); + } + } + mAdapter.notifyDataSetChanged(); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/createfamily/floor/ItemRoomFragment.java b/app/src/main/java/com/yonsz/z1/createfamily/floor/ItemRoomFragment.java new file mode 100644 index 0000000..3b6cd8f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/createfamily/floor/ItemRoomFragment.java @@ -0,0 +1,389 @@ +package com.yonsz.z1.createfamily.floor; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.createfamily.AddRoomActivity; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.database.entity.entity5.AddHouseEvent; +import com.yonsz.z1.database.entity.entity5.EditHouseEvent; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnRecyclerListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.FloorToHouseTypeUtil; +import com.yonsz.z1.utils.ToastUtil; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_FAIL; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_ADD_HOME; +import static com.yonsz.z1.net.NetWorkUrl.ADDRESS_TYPE_LIST; +import static com.yonsz.z1.net.NetWorkUrl.HOUSEADDRESS_LIST; + +public class ItemRoomFragment extends BaseFragment implements View.OnClickListener { + private View view; + private UIHandle mHandler; + private RecyclerView chooseHouseTypeRv; + private FloorRoomAdapter mAdapter; + private List dataList = new ArrayList<>(); + private ItemTouchHelper itemTouchHelper; + private String houseId; + private int position; + private String floorCode; + + public static ItemRoomFragment getInstance(String floorCode, int position) { + ItemRoomFragment fragment = new ItemRoomFragment(); + fragment.floorCode = floorCode; + fragment.position = position; + return fragment; + } + + public void onEventMainThread(EditHouseEvent event) { + boolean msgBoolean = event.getMsgBoolean(); + mAdapter.setIsEdit(dataList, msgBoolean); + if (!msgBoolean) { + EventBus.getDefault().post( + new AddHouseEvent(dataList, position)); + } + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + if (null == view) { + view = inflater.inflate(R.layout.fragment_room_item, container, false); + initView(); + } else { + ViewGroup parent = (ViewGroup) view.getParent(); + if (parent != null) { + parent.removeView(view); + } + } + return view; + } + + private void initView() { + if (null != getActivity().getIntent().getExtras().get("houseId")) { + houseId = getActivity().getIntent().getExtras().get("houseId").toString(); + } + chooseHouseTypeRv = (RecyclerView) view.findViewById(R.id.rv_choose_house_type); + if (TextUtils.isEmpty(houseId)) { + getAddresstypeList(); + } else { + getAddresstypeList1(); + } + } + + private String getAddressTypeCodes() { + StringBuilder stringBuilderAdd = new StringBuilder(); + for (int i = 0; i < dataList.size(); i++) { + if (i < dataList.size() - 1) { + if (!TextUtils.isEmpty(dataList.get(i).getCode())) { + stringBuilderAdd.append(dataList.get(i).getCode()); + } else { + stringBuilderAdd.append(dataList.get(i).getAddressTypeCode()); + } + stringBuilderAdd.append(","); + } else { + if (!TextUtils.isEmpty(dataList.get(i).getCode())) { + stringBuilderAdd.append(dataList.get(i).getCode()); + } else { + stringBuilderAdd.append(dataList.get(i).getAddressTypeCode()); + } + } + } + return String.valueOf(stringBuilderAdd); + } + + private String getAddressTypeNames() { + StringBuilder stringBuilderAdd = new StringBuilder(); + for (int i = 0; i < dataList.size(); i++) { + if (i < dataList.size() - 1) { + stringBuilderAdd.append(dataList.get(i).getAddressTypeName()); + stringBuilderAdd.append(","); + } else { + stringBuilderAdd.append(dataList.get(i).getAddressTypeName()); + } + } + return String.valueOf(stringBuilderAdd); + } + + private void getAddresstypeList() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseTypeCode", FloorToHouseTypeUtil.getHouseType(floorCode)); + if (!TextUtils.isEmpty(houseId)) { + map.put("houseId", houseId); + } + netWorkUtil.requestGetByAsy(ADDRESS_TYPE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("getHousetypeList", "onSuccess()" + respone); + HouseEntity obj = JSON.parseObject(respone, HouseEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getAddresstypeList1() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", houseId); + map.put("floor", floorCode); + netWorkUtil.requestGetByAsy(HOUSEADDRESS_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("getHousetypeList1", "onSuccess()" + respone); + HouseEntity obj = JSON.parseObject(respone, HouseEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + @Override + public void onClick(View v) { + + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case HOUSE_TYPE_LIST_SUCCESS: + HouseEntity houseEntity = (HouseEntity) msg.obj; + dataList = houseEntity.getData(); + + GridLayoutManager manager = new GridLayoutManager(getContext(), 2); + chooseHouseTypeRv.setLayoutManager(manager); + + mAdapter = new FloorRoomAdapter(getContext(), dataList, true); + chooseHouseTypeRv.setAdapter(mAdapter); + itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + Log.i("getMovementFlags", "getMovementFlags: "); + int dragFlags; + int swipeFlags; + if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | + ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; + swipeFlags = 0; + } else { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; + swipeFlags = 0; + } + return makeMovementFlags(dragFlags, swipeFlags); + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + int fromPosition = viewHolder.getAdapterPosition(); + int toPosition = target.getAdapterPosition(); + Log.i("onMove", "onMove: " + fromPosition + "===" + toPosition + "===" + dataList.size()); + if (fromPosition == dataList.size() || toPosition == dataList.size()) { + return false; + } + if (fromPosition < toPosition) { + for (int i = fromPosition; i < toPosition; i++) { + Collections.swap(dataList, i, i + 1); + } + } else { + for (int i = fromPosition; i > toPosition; i--) { + Collections.swap(dataList, i, i - 1); + } + } + mAdapter.notifyItemMoved(fromPosition, toPosition); + return true; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + Log.i("onSwiped", "onSwiped: "); + } + + @Override + public boolean isLongPressDragEnabled() { + return false; + } + }); + itemTouchHelper.attachToRecyclerView(chooseHouseTypeRv); + + mAdapter.setmOnItemClickListener(new OnRecyclerListener() { + @Override + public void onClick(View view, final int position) { + if (position == dataList.size()) { + Intent intent = new Intent(getContext(), AddRoomActivity.class); + intent.putExtra("addressTypeCodes", getAddressTypeCodes()); + intent.putExtra("addressTypeNames", getAddressTypeNames()); + intent.putExtra("houseCategory", "2"); + startActivityForResult(intent, SHOW_ADD_HOME); + } else { + if (dataList.size() <= 1) { + ToastUtil.show(getContext(), "房间不能为空!"); + return; + } + ConfirmDialog dialog = new ConfirmDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + dataList.remove(position); + mAdapter.notifyDataSetChanged(); + break; + } + } + }); + dialog.setContent("是否确定删除房间"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + } + + @Override + public void onLongClick(RecyclerView.ViewHolder view, int position) { + if (position != dataList.size()) { + itemTouchHelper.startDrag(view); + } + } + }); + + mAdapter.setmOnClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, final int position1) { + RenameNameDialog dialog = new RenameNameDialog(getContext(), new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + dataList.get(position1).setAddressTypeName(positioName); + mAdapter.notifyDataSetChanged(); + break; + } + } + }); + dialog.setHintName(dataList.get(position1).getAddressTypeName()); + dialog.setContent("设置房间名称"); + dialog.setMaxEms(4); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + } + }); + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case SHOW_ADD_HOME: + if (data != null && data.getExtras().get("addBeans") != null) { + List dataBeans = (List) data.getSerializableExtra("addBeans"); + for (int i = 0; i < dataBeans.size(); i++) { + /*if (!dataList.contains(dataBeans.get(i))) { + dataList.add(dataBeans.get(i)); + }*/ + dataList.add(dataBeans.get(i)); + } + mAdapter.notifyDataSetChanged(); + } + break; + } + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(ItemRoomFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + ItemRoomFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/Device.java b/app/src/main/java/com/yonsz/z1/device/Device.java new file mode 100644 index 0000000..85799a7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/Device.java @@ -0,0 +1,9 @@ +package com.yonsz.z1.device; + +/** + * Created by Administrator on 2017/7/3. + */ + +public class Device { + public native static int HBioctlGetArcGroupNum(int[] GroupNumber); +} diff --git a/app/src/main/java/com/yonsz/z1/device/DeviceActivity.java b/app/src/main/java/com/yonsz/z1/device/DeviceActivity.java new file mode 100644 index 0000000..a0565b4 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/DeviceActivity.java @@ -0,0 +1,8 @@ +package com.yonsz.z1.device; + +/** + * Created by Administrator on 2017/5/16. + */ + +public class DeviceActivity { +} diff --git a/app/src/main/java/com/yonsz/z1/device/DeviceExpandableListView.java b/app/src/main/java/com/yonsz/z1/device/DeviceExpandableListView.java new file mode 100644 index 0000000..8f5a695 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/DeviceExpandableListView.java @@ -0,0 +1,116 @@ +package com.yonsz.z1.device; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.widget.ExpandableListView; + +import com.yonsz.z1.view.Pullable; + +/**** + * 自定义ExpandableListView控件 + */ +public class DeviceExpandableListView extends ExpandableListView implements Pullable { + + + private static final String TAG = "SilderListView"; + + private SlideView mFocusedItemView; + + float mX = 0; + float mY = 0; + private int mPosition = -1; + boolean isSlider = false; + + public DeviceExpandableListView(Context context) { + super(context); + } + + public DeviceExpandableListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public DeviceExpandableListView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + float x = event.getX(); + float y = event.getY(); + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + isSlider = false; + mX = x; + mY = y; + int position = pointToPosition((int) x, (int) y); + if (mPosition != position) { + mPosition = position; + if (mFocusedItemView != null) { + mFocusedItemView.reset(); + } + } + break; + case MotionEvent.ACTION_MOVE: + if (mPosition != -1) { + if (Math.abs(mY - y) < 30 && Math.abs(mX - x) > 20) { + int first = this.getFirstVisiblePosition(); + int index = mPosition - first; + if (mFocusedItemView != null) { + mFocusedItemView = (SlideView) getChildAt(index); + if (null != event) { + mFocusedItemView.onTouchEvent(event); + isSlider = true; + } + } + return true; + } + } + break; + case MotionEvent.ACTION_UP: + if (isSlider) { + isSlider = false; + if (mFocusedItemView != null) { + mFocusedItemView.adjust(mX - x > 0); + return true; + } + } + break; + } + return super.onTouchEvent(event); + } + + @Override + public boolean canPullDown() { + if (getCount() == 0) { + return true; + } else if (getFirstVisiblePosition() == 0 && getChildAt(0).getTop() >= 0) { + return true; + } else { + return false; + } + } + + @Override + public boolean canPullUp() { + if (getCount() == 0) { + return true; + } else if (getLastVisiblePosition() == (getCount() - 1)) { + if (getChildAt(getLastVisiblePosition() - getFirstVisiblePosition()).getBottom() <= getMeasuredHeight()) { + return true; + } + } + return false; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + + int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, + + MeasureSpec.AT_MOST); + + //将重新计算的高度传递回去 + super.onMeasure(widthMeasureSpec, expandSpec); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/LearnGuideActivity.java b/app/src/main/java/com/yonsz/z1/device/LearnGuideActivity.java new file mode 100644 index 0000000..b0101a6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/LearnGuideActivity.java @@ -0,0 +1,327 @@ +package com.yonsz.z1.device; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.LearnEvent; +import com.yonsz.z1.database.entity.LearnFailEvent; +import com.yonsz.z1.database.entity.SecondEvent; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.device.airconditioner.AirAutoFailActivity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.FAN_CLOSE; +import static com.yonsz.z1.net.Constans.FAN_LEARN_FAIL; +import static com.yonsz.z1.net.Constans.FAN_LEARN_ING; +import static com.yonsz.z1.net.Constans.FAN_LEARN_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_OPEN; +import static com.yonsz.z1.net.Constans.FAN_SHAKE; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.FAN_TIME; +import static com.yonsz.z1.net.Constans.FAN_TYPE; +import static com.yonsz.z1.net.Constans.FAN_WIND; +import static com.yonsz.z1.net.Constans.FAN_WIND_REDUCE; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * Created by Administrator on 2017/6/26. + */ + +public class LearnGuideActivity extends BaseActivity { + private TitleView mTitleView; + private TextView mLearnGuide; + private String userId; + private String ziId; + private int learnGuide; + private LinearLayout ll_learn_bg; + private TextView getLearnGuide; + private StateButton mStateButton; + private int sec = 30; + private MediaPlayer mediaPlayer01; + private LoadingDialog mLoadingDialog; + private boolean learningFlag = false; + private String deviceType = FAN_TAG; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_learn_guide); + //注册eventBus + // EventBus.getDefault().register(this); + NettyHandlerUtil.getInstance(); + initView(); + } + + private void initView() { + mStateButton = (StateButton) findViewById(R.id.bt_sec); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + mLearnGuide = (TextView) findViewById(R.id.tv_learn_guide); + mTitleView = (TitleView) findViewById(R.id.title_learn_guide); + ll_learn_bg = (LinearLayout) findViewById(R.id.ll_learn_bg); + ll_learn_bg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_fs)); + getLearnGuide = (TextView) findViewById(R.id.tv_guide_device); + getLearnGuide.setText("提示灯变为红色后,将风扇遥控器对"); + mTitleView.setHead(R.string.fan_learn_guide); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (getIntent().getExtras().get("learnGuide") != null) { + learnGuide = Integer.parseInt(getIntent().getExtras().get("learnGuide").toString()); + switch (learnGuide) { + case 1: + mLearnGuide.setText(R.string.open); + enterLearnState("power"); + // SoundPlayUtils.play(8); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_18); + mediaPlayer01.start(); + } + break; + case 2: + mLearnGuide.setText(R.string.shake_head); + enterLearnState("oscillation"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_19); + mediaPlayer01.start(); + } + break; + case 3: + mLearnGuide.setText(R.string.wind_speed_add); + enterLearnState("speedplus"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_20); + mediaPlayer01.start(); + } + break; + case 4: + mLearnGuide.setText(R.string.time); + enterLearnState("timer"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_21); + mediaPlayer01.start(); + } + break; + case 5: + mLearnGuide.setText(R.string.wind_type); + enterLearnState("mode"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_64); + mediaPlayer01.start(); + } + break; + case 6: + mLearnGuide.setText(R.string.close); + enterLearnState("poweroff"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_18); + mediaPlayer01.start(); + } + break; + case 7: + mLearnGuide.setText(R.string.wind_speed_reduce); + enterLearnState("speedreduce"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_20); + mediaPlayer01.start(); + } + break; + } + } + } + + private void enterLearnState(final String sendMsg) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("appId", DifferConstans.APPID_S); + map.put("macId", ziId); + map.put("ziId", ziId); + map.put("sendMsg", sendMsg); + map.put("oper", sendMsg); + map.put("pushKey", sendMsg); + map.put("deviceType", deviceType); + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + util.requestPostByAsynewApi(NetWorkUrl.INFRARED_KEYSTUDY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("enterLearnState", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + //取消eventBus注册 + // EventBus.getDefault().unregister(this); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FAN_LEARN_SUCCESS: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + Toast.makeText(LearnGuideActivity.this, "学习成功", Toast.LENGTH_SHORT).show(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(LearnGuideActivity.this, SureLearnActivity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("type", FAN_TAG); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent); + finish(); + } + }, 1000); + + break; + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + /*if (mLoadingDialog != null) { + mLoadingDialog.setMessage(sec + ""); + }*/ + } else { + if (learningFlag) { + Intent intent = new Intent(LearnGuideActivity.this, SureLearnActivity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("type", FAN_TAG); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent); + // setResult(LEARN_RESULT, intent); + finish(); + } else { + finish(); + } + } + break; + case SEND_CONTROL_ORDER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case FAN_LEARN_ING: + initLoadDialog(); + learningFlag = true; + sec = 10; + break; + case FAN_LEARN_FAIL: + Intent intent1 = new Intent(LearnGuideActivity.this, AirAutoFailActivity.class); + intent1.putExtra("ziId", ziId); + intent1.putExtra("tag", FAN_TAG); + intent1.putExtra("learnGuide", learnGuide); + startActivity(intent1); + finish(); + break; + } + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.setMessage(R.string.saving); + mLoadingDialog.show(); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(SecondEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnFailEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_FAIL; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_ING; + mHandler.sendMessage(message); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/ParentSlideAdapter.java b/app/src/main/java/com/yonsz/z1/device/ParentSlideAdapter.java new file mode 100644 index 0000000..bf23148 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/ParentSlideAdapter.java @@ -0,0 +1,288 @@ +package com.yonsz.z1.device; + +import android.content.Context; +import android.content.Intent; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.bigkoo.convenientbanner.ConvenientBanner; +import com.bigkoo.convenientbanner.holder.CBViewHolderCreator; +import com.bigkoo.convenientbanner.listener.OnItemClickListener; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.AdInfo; +import com.yonsz.z1.database.entity.DeviceEntity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.NetworkImageHolderView; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.util.ArrayList; +import java.util.List; + + +/** + * Created by Administrator on 2017/9/5. + */ +public class ParentSlideAdapter extends RecyclerView.Adapter { + private static final int VIEW_HEADER = 0; + private static final int VIEW_ITEM = 1; + private final int mHeaderViewCount = 0; + private Context mContext; + private List mObjEntity; + private int viewType; + + public ParentSlideAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = null; + if (viewType == VIEW_ITEM) { + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_device_group, + parent, false); + return new MessageViewHolder(view); + } else { + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_page_top, + parent, false); + return new ViewHeaderHolder(view); + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (position >= mHeaderViewCount) { + int realPosition = position - 0; + ((MessageViewHolder) holder).setViews(realPosition); + } else { + ((ViewHeaderHolder) holder).setHeaderView(position); + } + } + + @Override + public int getItemViewType(int position) { + if (position < mHeaderViewCount) { + viewType = VIEW_HEADER; + return VIEW_HEADER; + } else { + viewType = VIEW_ITEM; + return VIEW_ITEM; + } + } + + @Override + public int getItemCount() { + return mObjEntity != null ? mObjEntity.size() + mHeaderViewCount : + 0 + mHeaderViewCount; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + public ImageView icon; + public TextView title; + public TextView shareHolder; + public TextView enterHolder; + public ViewGroup deleteHolder; + private ImageView arrowIv; + private TextView deviceAddress; + private TextView tv_isInNet; + private RelativeLayout deviceDetailRl; + private TextView deviceFromTv; + private TextView redUpdateTv; + + public MessageViewHolder(View view) { + super(view); + icon = (ImageView) view.findViewById(R.id.iv_device_icon); + title = (TextView) view.findViewById(R.id.textView1); + shareHolder = (TextView) view.findViewById(R.id.shareDevice); + deviceFromTv = (TextView) view.findViewById(R.id.tv_device_from); + enterHolder = (TextView) view.findViewById(R.id.enterDevice); + arrowIv = (ImageView) view.findViewById(R.id.iv_arrow_down_up); + deviceAddress = (TextView) view.findViewById(R.id.tv_deviceAddress); + tv_isInNet = (TextView) view.findViewById(R.id.tv_isInNet); + redUpdateTv = (TextView) view.findViewById(R.id.tv_red_to_update); + deviceDetailRl = (RelativeLayout) view.findViewById(R.id.rl_device_detail_top); + + } + + public void setViews(final int position) { + if (null != mObjEntity.get(position).getDeviceVersion()) { + if (mObjEntity.get(position).getDeviceVersion().equals("2")) { + icon.setImageResource(R.drawable.pic_a2); + } + } + if (mObjEntity.get(position).getIsOwner() != null || mObjEntity.get(position).getPartner().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + deviceFromTv.setVisibility(View.GONE); + if (mObjEntity.get(position).getIsNewOtaFlag().equals("1")) { + redUpdateTv.setVisibility(View.VISIBLE); + } else { + redUpdateTv.setVisibility(View.GONE); + } + } else { + deviceFromTv.setVisibility(View.VISIBLE); + deviceFromTv.setText("来自" + mObjEntity.get(position).getPartnerName()); + } + title.setText(mObjEntity.get(position).getZiName()); + if (mObjEntity.get(position).getDeviceAddress() != null) { + deviceAddress.setText(mObjEntity.get(position).getDeviceAddress()); + } else { + deviceAddress.setText(""); + } + if (mObjEntity.get(position).getOnlineFlag().equals("3")) { + tv_isInNet.setText("固件升级中..."); + tv_isInNet.setTextColor(0xfff7ac00); + } else if (mObjEntity.get(position).getOnlineFlag().equals("5")) { + tv_isInNet.setText("固件升级失败"); + tv_isInNet.setTextColor(0xfff7ac00); + } else { + if (mObjEntity.get(position).getLoadStatus().equals("-1")) { + tv_isInNet.setText("数据下载失败"); + tv_isInNet.setTextColor(0xfff7ac00); + } else if (mObjEntity.get(position).getLoadStatus().equals("1")) { + tv_isInNet.setText("数据下载中..."); + tv_isInNet.setTextColor(0xfff7ac00); + } else { + if (mObjEntity.get(position).getOnlineFlag().equals("0")) { + tv_isInNet.setText("设备离线"); + tv_isInNet.setTextColor(0xfff7ac00); + } else if (mObjEntity.get(position).getOnlineFlag().equals("2")) { + tv_isInNet.setText("连网中..."); + tv_isInNet.setTextColor(0xff999999); + } else { + tv_isInNet.setText("设备在线"); + tv_isInNet.setTextColor(0xff999999); + } + } + } + } + } + + class ViewHeaderHolder extends RecyclerView.ViewHolder { + private RelativeLayout modelClickRl; + private ImageView modelImageIv; + private TextView modelNameTv; + private CheckBox modelUpDownCb; + private LinearLayout modelDetaiLl; + private ImageView inHomeModel; + private ImageView outHomeModel; + private ImageView inBedModel; + private ImageView outBedModel; + private View line; + private ConvenientBanner bannerMainTop; + + public ViewHeaderHolder(View viewHeader) { + super(viewHeader); + bannerMainTop = (ConvenientBanner) viewHeader.findViewById(R.id.banner_main_top); + modelClickRl = (RelativeLayout) viewHeader.findViewById(R.id.rl_main_page_top); + modelImageIv = (ImageView) viewHeader.findViewById(R.id.iv_model); + modelNameTv = (TextView) viewHeader.findViewById(R.id.tv_model); + modelUpDownCb = (CheckBox) viewHeader.findViewById(R.id.cb_model_up_down); + modelDetaiLl = (LinearLayout) viewHeader.findViewById(R.id.ll_main_page_bottom); + inHomeModel = (ImageView) viewHeader.findViewById(R.id.iv_inhome_model); + outHomeModel = (ImageView) viewHeader.findViewById(R.id.iv_outhome_model); + inBedModel = (ImageView) viewHeader.findViewById(R.id.iv_inbed_model); + outBedModel = (ImageView) viewHeader.findViewById(R.id.iv_outbed_model); + line = (View) viewHeader.findViewById(R.id.view_line); + } + + public void setHeaderView(final int position) { + modelClickRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (modelUpDownCb.isChecked()) { + modelUpDownCb.setChecked(false); + modelDetaiLl.setVisibility(View.VISIBLE); + line.setVisibility(View.VISIBLE); + } else { + modelUpDownCb.setChecked(true); + modelDetaiLl.setVisibility(View.GONE); + line.setVisibility(View.GONE); + } + } + }); + modelUpDownCb.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (modelUpDownCb.isChecked()) { + modelUpDownCb.setChecked(false); + modelDetaiLl.setVisibility(View.VISIBLE); + line.setVisibility(View.VISIBLE); + } else { + modelUpDownCb.setChecked(true); + modelDetaiLl.setVisibility(View.GONE); + line.setVisibility(View.GONE); + } + } + }); + inHomeModel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + modelNameTv.setText(R.string.in_home_model); + } + }); + outHomeModel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + modelNameTv.setText(R.string.out_home_model); + } + }); + inBedModel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + modelNameTv.setText(R.string.in_bed_model); + } + }); + outBedModel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + modelNameTv.setText(R.string.out_bed_model); + } + }); + + List adInfoList = new ArrayList<>(); + AdInfo adInfo1 = new AdInfo(); + adInfo1.setAdUrl(R.drawable.pic_index_scene); + AdInfo adInfo2 = new AdInfo(); + adInfo2.setAdUrl(R.drawable.pic_index_scene); + adInfoList.add(adInfo1); + adInfoList.add(adInfo2); + + + bannerMainTop.setPages(new CBViewHolderCreator() { + @Override + public NetworkImageHolderView createHolder() { + return new NetworkImageHolderView(); + } + }, adInfoList).setPageIndicator(new int[]{R.drawable.kuang_corners_white_five, R.drawable.kuang_corners_red_dian_five}) + .setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.CENTER_HORIZONTAL) + .setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(int position) { + Intent intent; + /*switch (list.get(position).getType()) { + case "5": + intent = new Intent(getActivity(), RouteDetailsActivity.class); + intent.putExtra("openUrl", adInfoList.get(position).getOpen_url()); + startActivity(intent); + break; + + case "6": + intent = new Intent(getActivity(), AllTaskActivity.class); + startActivity(intent); + break; + }*/ + } + }); + // bannerMainTop.getViewPager().setPageTransformer(true, new AccordionTransformer()); + // bannerMainTop.setScrollDuration(1500); + // bannerMainTop.startTurning(4000); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/SlideAdapter.java b/app/src/main/java/com/yonsz/z1/device/SlideAdapter.java new file mode 100644 index 0000000..37d3b27 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/SlideAdapter.java @@ -0,0 +1,442 @@ +package com.yonsz.z1.device; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseExpandableListAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.DeviceDetailEntity; +import com.yonsz.z1.database.entity.DeviceEntity; +import com.yonsz.z1.listener.OnExbandItemClickListener; + +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.Img; +import static com.yonsz.z1.net.Constans.TV_TAG; + +/** + * Created by Administrator on 2017/6/16. + */ + +public class SlideAdapter extends BaseExpandableListAdapter { + + private Context mContext; + private List group; + private List> child; + private DeviceEntity mDeviceEntity; + private List mObjEntity; + private OnExbandItemClickListener mExbandItemClickListener; + private int isOwner = 1; + + + public SlideAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + @Override + public int getGroupCount() { + if (mObjEntity != null) { + return mObjEntity.size(); + } else { + return 0; + } + } + + @Override + public int getChildrenCount(int groupPosition) { + return 3; + } + + @Override + public Object getGroup(int groupPosition) { + return mObjEntity.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + // return child.get(groupPosition).get(childPosition); + return mObjEntity.get(groupPosition).getList().get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return false; + } + + //点击事件 + public void setmOnExpandItemClickListener(OnExbandItemClickListener mExbandItemClickListener) { + this.mExbandItemClickListener = mExbandItemClickListener; + } + + @Override + public View getGroupView(final int groupPosition, boolean isExpanded, final View convertView, ViewGroup parent) { + ParentHolder parentHolder; + SlideView slideView = (SlideView) convertView; + if (slideView == null) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_device_group, null); + + slideView = new SlideView(mContext, true, true); + slideView.setContentView(itemView); + parentHolder = new ParentHolder(slideView); + slideView.setTag(parentHolder); + } else { + parentHolder = (ParentHolder) slideView.getTag(); + } + slideView.shrink(); + if (mObjEntity.get(groupPosition).getPartnerName() != null) { + parentHolder.deviceFromTv.setText("来自" + mObjEntity.get(groupPosition).getPartnerName()); + } else { + parentHolder.deviceFromTv.setVisibility(View.GONE); + } + parentHolder.title.setText(mObjEntity.get(groupPosition).getZiName()); + if (mObjEntity.get(groupPosition).getDeviceAddress() != null) { + parentHolder.deviceAddress.setText(mObjEntity.get(groupPosition).getDeviceAddress()); + } else { + parentHolder.deviceAddress.setText(""); + } + if (mObjEntity.get(groupPosition).getOnlineFlag().equals("1")) { + parentHolder.tv_isInNet.setText("设备在线"); + parentHolder.tv_isInNet.setTextColor(0xff999999); + } else { + parentHolder.tv_isInNet.setText("设备离线"); + parentHolder.tv_isInNet.setTextColor(0xfff7ac00); + } + + if (isExpanded) { + parentHolder.arrowIv.setImageDrawable(mContext.getResources().getDrawable(R.drawable.arrow_up)); + } else { + parentHolder.arrowIv.setImageDrawable(mContext.getResources().getDrawable(R.drawable.arrow_down)); + } + + final SlideView finalSlideView = slideView; + parentHolder.shareHolder.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + isOwner(groupPosition); + mExbandItemClickListener.onClick(finalSlideView, groupPosition, isOwner, 0, -1, ""); + } + } + }); + parentHolder.enterHolder.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + isOwner(groupPosition); + mExbandItemClickListener.onClick(finalSlideView, groupPosition, isOwner, 1, -1, ""); + } + } + }); + /*parentHolder.deviceDetailRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + isOwner(groupPosition); + mExbandItemClickListener.onClick(finalSlideView, groupPosition, isOwner, 6, -1); + } + } + });*/ + return slideView; + } + + private void isOwner(int groupPosition) { + if (mObjEntity.get(groupPosition).getIsOwner() != null) { + String isMasetr = mObjEntity.get(groupPosition).getIsOwner(); + if (isMasetr.equals("1")) { + isOwner = 1; + } else { + isOwner = 0; + } + } else { + isOwner = 0; + } + } + + @Override + public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, final View convertView, ViewGroup parent) { + final List childEntity = mObjEntity.get(groupPosition).getList(); + ChildHolder childHolder; + SlideView slideView = (SlideView) convertView; + if (slideView == null) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_device_child, null); + //如果设备离线就没有布局 + if (mObjEntity.get(groupPosition).getOnlineFlag().equals("1")) { + slideView = new SlideView(mContext, false, true); + } else { + slideView = new SlideView(mContext, false, false); + } + slideView.setContentView(itemView); + childHolder = new ChildHolder(slideView); + slideView.setTag(childHolder); + } else { + childHolder = (ChildHolder) slideView.getTag(); + } + + slideView.shrink(); + childHolder.icon.setImageResource(Img[childPosition]); + childHolder.iv_notnet_bg.setEnabled(false); + if (mObjEntity.get(groupPosition).getOnlineFlag().equals("1")) { + childHolder.iv_notnet_bg.setVisibility(View.GONE); + } else { + childHolder.iv_notnet_bg.setVisibility(View.VISIBLE); + } + if (childPosition == 2) { + childHolder.mViewLine.setVisibility(View.GONE); + } + switch (childPosition) { + case 0: + boolean isadd = false; + if (childEntity != null) { + for (int i = 0; i < childEntity.size(); i++) { + if (childEntity.get(i).getDeviceType() != null && childEntity.get(i).getDeviceType().equals(TV_TAG)) { + isadd = true; + if (childEntity.get(i).getDeviceBrand() != null) { + childHolder.childBrandTv.setText(childEntity.get(i).getDeviceBrand()); + childHolder.childBrandTv.setVisibility(View.GONE); + } + childHolder.mAdd.setVisibility(View.GONE); + childHolder.mSwitch.setVisibility(View.VISIBLE); + + final SlideView finalSlideView = slideView; + childHolder.deleteHolder.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView, groupPosition, childPosition, 2, 1, ""); + } + } + }); + } + + } + } else { + final SlideView finalSlideView = slideView; + childHolder.deviceChildRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView, groupPosition, childPosition, 5, 0, ""); + } + } + }); + } + if (isadd) { + + } else { + final SlideView finalSlideView = slideView; + childHolder.deviceChildRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView, groupPosition, childPosition, 5, 0, ""); + } + } + }); + } + childHolder.title.setText(R.string.tv); + + break; + case 1: + boolean isAdd = false; + if (childEntity != null) { + for (int i = 0; i < childEntity.size(); i++) { + if (childEntity.get(i).getDeviceType() != null && childEntity.get(i).getDeviceType().equals(AIR_TAG)) { + isAdd = true; + if (childEntity.get(i).getDeviceBrand() != null) { + childHolder.childBrandTv.setText(childEntity.get(i).getDeviceBrand()); + childHolder.childBrandTv.setVisibility(View.GONE); + } + childHolder.mAdd.setVisibility(View.GONE); + childHolder.mSwitch.setVisibility(View.VISIBLE); + + final SlideView finalSlideView1 = slideView; + childHolder.deleteHolder.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView1, groupPosition, childPosition, 2, 1, ""); + } + } + }); + } + + } + } else { + final SlideView finalSlideView1 = slideView; + childHolder.deviceChildRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView1, groupPosition, childPosition, 5, 0, ""); + } + } + }); + } + if (isAdd) { + } else { + final SlideView finalSlideView1 = slideView; + childHolder.deviceChildRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView1, groupPosition, childPosition, 5, 0, ""); + } + } + }); + } + childHolder.title.setText(R.string.air); + + break; + case 2: + boolean isADd = false; + if (childEntity != null) { + for (int i = 0; i < childEntity.size(); i++) { + if (childEntity.get(i).getDeviceType() != null && childEntity.get(i).getDeviceType().equals(FAN_TAG)) { + isADd = true; + if (childEntity.get(i).getDeviceBrand() != null) { + childHolder.childBrandTv.setText(childEntity.get(i).getDeviceBrand()); + childHolder.childBrandTv.setVisibility(View.GONE); + } + childHolder.mAdd.setVisibility(View.GONE); + childHolder.mSwitch.setVisibility(View.VISIBLE); + + final SlideView finalSlideView2 = slideView; + childHolder.deleteHolder.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView2, groupPosition, childPosition, 2, 1, ""); + } + } + }); + } + } + } else { + final SlideView finalSlideView2 = slideView; + childHolder.deviceChildRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView2, groupPosition, childPosition, 5, 0, ""); + } + } + }); + } + if (isADd) { + + } else { + final SlideView finalSlideView2 = slideView; + childHolder.deviceChildRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView2, groupPosition, childPosition, 5, 0, ""); + } + } + }); + } + childHolder.title.setText(R.string.fan); + break; + } + final SlideView finalSlideView3 = slideView; + childHolder.mSwitch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView3, groupPosition, childPosition, 3, -1, ""); + } + } + }); + childHolder.mAdd.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView3, groupPosition, childPosition, 4, -1, ""); + } + } + }); + + return slideView; + + } + + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private static class ChildHolder { + public ImageView icon; + public TextView title; + public TextView deleteHolder; + private ImageView mSwitch; + private ImageView mAdd; + private TextView childBrandTv; + private LinearLayout childLl; + private RelativeLayout deviceChildRl; + private ImageView iv_notnet_bg; + private View mViewLine; + + ChildHolder(View view) { + icon = (ImageView) view.findViewById(R.id.icon); + title = (TextView) view.findViewById(R.id.tv_child_device); + deleteHolder = (TextView) view.findViewById(R.id.deleteDevice); + mSwitch = (ImageView) view.findViewById(R.id.iv_main_device_switch); + mAdd = (ImageView) view.findViewById(R.id.iv_main_device_add); + childBrandTv = (TextView) view.findViewById(R.id.tv_child_brand); + childLl = (LinearLayout) view.findViewById(R.id.ll_device_child); + deviceChildRl = (RelativeLayout) view.findViewById(R.id.rl_innet_bg); + iv_notnet_bg = (ImageView) view.findViewById(R.id.iv_notnet_bg); + mViewLine = (View) view.findViewById(R.id.line_expand); + } + } + + private static class ParentHolder { + public ImageView icon; + public TextView title; + public TextView shareHolder; + public TextView enterHolder; + public ViewGroup deleteHolder; + private ImageView arrowIv; + private TextView deviceAddress; + private TextView tv_isInNet; + private RelativeLayout deviceDetailRl; + private TextView deviceFromTv; + + ParentHolder(View view) { + icon = (ImageView) view.findViewById(R.id.icon); + title = (TextView) view.findViewById(R.id.textView1); + shareHolder = (TextView) view.findViewById(R.id.shareDevice); + deviceFromTv = (TextView) view.findViewById(R.id.tv_device_from); + enterHolder = (TextView) view.findViewById(R.id.enterDevice); + arrowIv = (ImageView) view.findViewById(R.id.iv_arrow_down_up); + deviceAddress = (TextView) view.findViewById(R.id.tv_deviceAddress); + tv_isInNet = (TextView) view.findViewById(R.id.tv_isInNet); + deviceDetailRl = (RelativeLayout) view.findViewById(R.id.rl_device_detail_top); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/SlideView.java b/app/src/main/java/com/yonsz/z1/device/SlideView.java new file mode 100644 index 0000000..3878bc8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/SlideView.java @@ -0,0 +1,181 @@ +package com.yonsz.z1.device; + +import android.content.Context; +import android.content.res.Resources; +import android.support.v4.view.MotionEventCompat; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.MotionEvent; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.Scroller; + +import com.yonsz.z1.R; + + +/**** + * 侧滑布局设计 + */ +public class SlideView extends LinearLayout { + private static final String TAG = "SlideView"; + private static final int TAN = 2; + private int mHolderWidth = 152; + private int mChildWidth = 72; + private float mLastX = 0; + private float mLastY = 0; + private Context mContext; + private LinearLayout mViewContent; + private Scroller mScroller; + private boolean isParent; + private boolean isOnline; + private boolean prohibitSideslip; + + public SlideView(Context context, Resources resources) { + super(context); + initView(); + } + + public SlideView(Context context, boolean isParent, boolean isOnline) { + super(context); + this.isParent = isParent; + this.isOnline = isOnline; + initView(); + } + + public SlideView(Context context) { + super(context); + initView(); + } + + public SlideView(Context context, AttributeSet attrs) { + super(context, attrs); + initView(); + } + + private void initView() { + setOrientation(LinearLayout.HORIZONTAL); + mContext = getContext(); + mScroller = new Scroller(mContext); + if (isParent) { + View.inflate(mContext, R.layout.sider_delete_view, this); + } else { + if (isOnline) { + View.inflate(mContext, R.layout.sider_delete_view_child, this); + } else { + View.inflate(mContext, R.layout.sider_delete_view_child_null, this); + } + } + mViewContent = (LinearLayout) findViewById(R.id.view_content); + if (isParent) { + mHolderWidth = Math.round(TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, mHolderWidth, getResources() + .getDisplayMetrics())); + } else { + if (isOnline) { + mHolderWidth = Math.round(TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, mChildWidth, getResources() + .getDisplayMetrics())); + } else { + mHolderWidth = 0; + } + + } + } + + public void setContentView(View view) { + mViewContent.addView(view); + } + + public void shrink() { + int offset = getScrollX(); + if (offset == 0) { + return; + } + scrollTo(0, 0); + } + + public void reset() { + int offset = getScrollX(); + if (offset == 0) { + return; + } + smoothScrollTo(0, 0); + } + + public void adjust(boolean left) { + int offset = getScrollX(); + if (offset == 0) { + return; + } + if (offset < 20) { + this.smoothScrollTo(0, 0); + } else if (offset < mHolderWidth - 20) { + if (left) { + this.smoothScrollTo(mHolderWidth, 0); + } else { + this.smoothScrollTo(0, 0); + } + } else { + this.smoothScrollTo(mHolderWidth, 0); + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_MOVE: + float x = event.getX(); + float y = event.getY(); + float deltaX = x - mLastX; + float delatY = y - mLastY; + mLastX = x; + mLastY = y; + if (Math.abs(deltaX) < Math.abs(delatY) * TAN) { + break; + } + if (deltaX != 0) { + float newScrollX = getScrollX() - deltaX; + if (newScrollX < 0) { + newScrollX = 0; + } else if (newScrollX > mHolderWidth) { + newScrollX = mHolderWidth; + } + this.scrollTo((int) newScrollX, 0); + } + break; + } + return super.onTouchEvent(event); + } + + //在需要禁止或允许侧滑的地方调用该方法 + public void setProhibitSideslip(boolean prohibitSideslip) { + this.prohibitSideslip = prohibitSideslip; + } + + //该方法可以拦截SlidingPaneLayout的触屏事件 + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + switch (MotionEventCompat.getActionMasked(ev)) { + case MotionEvent.ACTION_MOVE: + if (prohibitSideslip) { + return false; + } + } + return super.onInterceptTouchEvent(ev); + } + + private void smoothScrollTo(int destX, int destY) { + int scrollX = getScrollX(); + int delta = destX - scrollX; + mScroller.startScroll(scrollX, 0, delta, 0, Math.abs(delta) * 3); + invalidate(); + } + + @Override + public void computeScroll() { + if (mScroller.computeScrollOffset()) { + scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); + postInvalidate(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/SureLearnActivity.java b/app/src/main/java/com/yonsz/z1/device/SureLearnActivity.java new file mode 100644 index 0000000..2f3b24a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/SureLearnActivity.java @@ -0,0 +1,538 @@ +package com.yonsz.z1.device; + +import android.app.Service; +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Build; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.support.annotation.RequiresApi; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.DeviceListEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.device.sweep.SweepLearnGuideActivity; +import com.yonsz.z1.device.tv.TvLearnGuideActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ShakeUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.R.id.tv_open_light; +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.DEL_ERROR_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.DEL_ERROR_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_CLOSE; +import static com.yonsz.z1.net.Constans.FAN_OPEN; +import static com.yonsz.z1.net.Constans.FAN_SHAKE; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.FAN_TIME; +import static com.yonsz.z1.net.Constans.FAN_TYPE; +import static com.yonsz.z1.net.Constans.FAN_WIND; +import static com.yonsz.z1.net.Constans.FAN_WIND_REDUCE; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_SUCCESS; +import static com.yonsz.z1.net.Constans.SWEEP_ALONG; +import static com.yonsz.z1.net.Constans.SWEEP_DOWN; +import static com.yonsz.z1.net.Constans.SWEEP_LEFT; +import static com.yonsz.z1.net.Constans.SWEEP_OK; +import static com.yonsz.z1.net.Constans.SWEEP_OPEN; +import static com.yonsz.z1.net.Constans.SWEEP_RIGHT; +import static com.yonsz.z1.net.Constans.SWEEP_STRONG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_UP; +import static com.yonsz.z1.net.Constans.SWITCH_OPEN; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_BACK; +import static com.yonsz.z1.net.Constans.TV_DOWN; +import static com.yonsz.z1.net.Constans.TV_EIGHT; +import static com.yonsz.z1.net.Constans.TV_FIVE; +import static com.yonsz.z1.net.Constans.TV_FOUR; +import static com.yonsz.z1.net.Constans.TV_HOME; +import static com.yonsz.z1.net.Constans.TV_JIDINGHE; +import static com.yonsz.z1.net.Constans.TV_LEFT; +import static com.yonsz.z1.net.Constans.TV_MENU; +import static com.yonsz.z1.net.Constans.TV_NINE; +import static com.yonsz.z1.net.Constans.TV_OK; +import static com.yonsz.z1.net.Constans.TV_ONE; +import static com.yonsz.z1.net.Constans.TV_OPEN; +import static com.yonsz.z1.net.Constans.TV_RIGHT; +import static com.yonsz.z1.net.Constans.TV_SEVEN; +import static com.yonsz.z1.net.Constans.TV_SIGNAL; +import static com.yonsz.z1.net.Constans.TV_SIX; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.TV_THREE; +import static com.yonsz.z1.net.Constans.TV_TWO; +import static com.yonsz.z1.net.Constans.TV_UP; +import static com.yonsz.z1.net.Constans.TV_VOICE; +import static com.yonsz.z1.net.Constans.TV_VOLADD; +import static com.yonsz.z1.net.Constans.TV_VOLREDUCE; +import static com.yonsz.z1.net.Constans.TV_ZERO; +import static com.yonsz.z1.net.Constans.UPDATE_STUDY_FLAG_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_STUDY_FLAG_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.DEL_ERROR_STUDY; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_STUDY_FLAG; + +/** + * Created by Administrator on 2017/10/16. + */ +public class SureLearnActivity extends BaseActivity { + private TitleView mTitleView; + private String type; + private TextView noUse; + private Button sureBtn; + private TextView openLight; + private int learnGuide; + private String ziId; + private String studyKey; + private MediaPlayer mediaPlayer01; + private String key = ""; + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sure_learn); + initView(); + initListener(); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_53); + mediaPlayer01.start(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + type = getIntent().getExtras().get("type").toString(); + learnGuide = Integer.parseInt(getIntent().getExtras().get("learnGuide").toString()); + openLight = (TextView) findViewById(tv_open_light); + noUse = (TextView) findViewById(R.id.tv_no_use); + sureBtn = (Button) findViewById(R.id.bt_sure_config); + mTitleView = (TitleView) findViewById(R.id.title_sure_light); + switch (type) { + case FAN_TAG: + mTitleView.setHead(R.string.fan_learn_guide); + switch (learnGuide) { + case 1: + openLight.setText("开关"); + studyKey = FAN_OPEN; + key = "power"; + break; + case 2: + openLight.setText(R.string.shake_head); + studyKey = FAN_SHAKE; + key = "oscillation"; + break; + case 3: + openLight.setText(R.string.wind_speed_add); + studyKey = FAN_WIND; + key = "speedplus"; + break; + case 4: + openLight.setText(R.string.time); + studyKey = FAN_TIME; + key = "timer"; + break; + case 5: + openLight.setText(R.string.wind_type); + studyKey = FAN_TYPE; + key = "mode"; + break; + case 6: + openLight.setText("开关"); + studyKey = FAN_CLOSE; + key = "poweroff"; + break; + case 7: + openLight.setText(R.string.wind_speed_reduce); + studyKey = FAN_WIND_REDUCE; + key = "speedreduce"; + break; + } + break; + case TV_TAG: + case TVONE_TAG: + if (type.equals(TVONE_TAG)) { + mTitleView.setHead("机顶盒遥控学习"); + } else { + mTitleView.setHead(R.string.tv_learn_guide); + } + switch (learnGuide) { + case 1: + openLight.setText("开关"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_switch_press80)); + studyKey = TV_JIDINGHE; + key = "power"; + break; + case 2: + openLight.setText("向上"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_direction_up80)); + studyKey = TV_UP; + key = "up"; + break; + case 3: + openLight.setText("向下"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_direction_down80)); + studyKey = TV_DOWN; + key = "down"; + break; + case 4: + openLight.setText("向左"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_direction_left80)); + studyKey = TV_LEFT; + key = "left"; + break; + case 5: + openLight.setText("向右"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_direction_right80)); + studyKey = TV_RIGHT; + key = "right"; + break; + case 6: + openLight.setText("OK"); + studyKey = TV_OK; + key = "ok"; + break; + case 7: + openLight.setText("HOME"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_index_nor80)); + studyKey = TV_HOME; + key = "boot"; + break; + case 8: + openLight.setText("返回"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_goback_nor80)); + studyKey = TV_BACK; + key = "back"; + break; + case 9: + openLight.setText("菜单"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_menu_nor80)); + studyKey = TV_MENU; + key = "menu"; + break; + case 10: + openLight.setText("开关"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_switch_press80)); + studyKey = TV_OPEN; + if (type.equals(TV_TAG)) { + key = "power"; + } else if (type.equals(TVONE_TAG)) { + key = "powertv"; + } + break; + case 11: + openLight.setText("音量+"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_vol_add80)); + studyKey = TV_VOLADD; + key = "volplus"; + break; + case 12: + openLight.setText("音量—"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_vol_reduce80)); + studyKey = TV_VOLREDUCE; + key = "volminus"; + break; + case 13: + openLight.setText("静音"); + // openLight.setBackground(getResources().getDrawable(R.drawable.icon_quiet_pre80)); + studyKey = TV_VOICE; + key = "mute"; + break; + case 21: + openLight.setText("1"); + studyKey = TV_ONE; + key = "1"; + break; + case 22: + openLight.setText("2"); + studyKey = TV_TWO; + key = "2"; + break; + case 23: + openLight.setText("3"); + studyKey = TV_THREE; + key = "3"; + break; + case 24: + openLight.setText("4"); + studyKey = TV_FOUR; + key = "4"; + break; + case 25: + openLight.setText("5"); + studyKey = TV_FIVE; + key = "5"; + break; + case 26: + openLight.setText("6"); + studyKey = TV_SIX; + key = "6"; + break; + case 27: + openLight.setText("7"); + studyKey = TV_SEVEN; + key = "7"; + break; + case 28: + openLight.setText("8"); + studyKey = TV_EIGHT; + key = "8"; + break; + case 29: + openLight.setText("9"); + studyKey = TV_NINE; + key = "9"; + break; + case 30: + openLight.setText("0"); + studyKey = TV_ZERO; + key = "0"; + break; + case 31: + openLight.setText("信号源"); + studyKey = TV_SIGNAL; + key = "signal"; + break; + case 32: + openLight.setText("频道+"); + studyKey = ""; + key = "chplus"; + break; + case 33: + openLight.setText("频道-"); + studyKey = ""; + key = "chminus"; + break; + } + break; + case SWEEP_TAG: + mTitleView.setHead(R.string.sweep_learn_guide); + switch (learnGuide) { + case 1: + openLight.setText("开关"); + studyKey = SWEEP_OPEN; + key = "power"; + break; + case 2: + openLight.setText("向上"); + studyKey = SWEEP_UP; + key = "up"; + break; + case 3: + openLight.setText("向下"); + studyKey = SWEEP_DOWN; + key = "down"; + break; + case 4: + openLight.setText("向左"); + studyKey = SWEEP_LEFT; + key = "left"; + break; + case 5: + openLight.setText("向右"); + studyKey = SWEEP_RIGHT; + key = "right"; + break; + case 6: + openLight.setText("回充"); + studyKey = SWEEP_OK; + key = "charge"; + break; + case 7: + openLight.setText("沿边"); + studyKey = SWEEP_ALONG; + key = "edgewise"; + break; + case 8: + openLight.setText("强劲"); + studyKey = SWEEP_STRONG; + key = "strong"; + break; + } + break; + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void initListener() { + noUse.setOnClickListener(this); + sureBtn.setOnClickListener(this); + openLight.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_no_use: + //调删除的接口 +// delErrorStudy(); + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_SUCCESS); + mHandler.sendMessage(msg); + break; + case R.id.bt_sure_config: + updateStudyFlag(); + break; + case R.id.tv_open_light: + subsetControl(key); + /* //电视测试按键先改成最新的 + if (type.equals(TV_TAG) || type.equals(TVONE_TAG)) { + subsetControl(key); + } else { + if (studyKey.equals(TV_SIGNAL)) { + if (null != getIntent().getExtras().get("cmds")) { + sendAirControlOrder(getIntent().getExtras().get("cmds").toString()); + } else { + + } + } else { + sendAirControlOrder(studyKey); + } + }*/ + break; + } + } + + private void subsetControl(String key) { + ShakeUtil.setShake(this); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + map.put("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + map.put("deviceType", type); + map.put("ziId", ziId); + map.put("oper", key); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_CONTROL, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetControl", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void updateStudyFlag() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", type); + map.put("ziId", ziId); + map.put("key", studyKey); + map.put("oper", key); + map.put("studyFlag", "1"); + netWorkUtil.requestPostByAsynewApi(UPDATE_STUDY_FLAG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateStudyFlag", "ShareDeviceActivity onSuccess()" + respone); + Message msg = mHandler.obtainMessage(UPDATE_STUDY_FLAG_SUCCESS); + mHandler.sendMessage(msg); + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_STUDY_FLAG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case SEND_CONTROL_ORDER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DEL_ERROR_STUDY_SUCCESS: + switch (type) { + case FAN_TAG: + intent = new Intent(SureLearnActivity.this, LearnGuideActivity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", type); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent); + break; + case TV_TAG: + case TVONE_TAG: + intent = new Intent(SureLearnActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", (boolean) getIntent().getExtras().get("isTv")); + intent.putExtra("deviceType", type); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent); + break; + case SWEEP_TAG: + intent = new Intent(SureLearnActivity.this, SweepLearnGuideActivity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", type); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent); + break; + } + finish(); + break; + case UPDATE_STUDY_FLAG_SUCCESS: + finish(); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/VoiceDeclareActivity.java b/app/src/main/java/com/yonsz/z1/device/VoiceDeclareActivity.java new file mode 100644 index 0000000..deef10a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/VoiceDeclareActivity.java @@ -0,0 +1,280 @@ +package com.yonsz.z1.device; + +import android.os.Bundle; +import android.os.Message; +import android.view.KeyEvent; +import android.webkit.WebChromeClient; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.AIR_CLEANER; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CLOTHES_HANGER; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.GEMSTONE_ELVES; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MOVIE_CAMERA; +import static com.yonsz.z1.net.Constans.MULTIFUNCTIONAL_CONTROLLER; +import static com.yonsz.z1.net.Constans.MUSIC_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.WINDOW_OPENER; + +/** + * Created by Administrator on 2017/7/26. + */ + +public class VoiceDeclareActivity extends BaseActivity { + private TitleView mTitleView; + private WebView webView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_voice_declare); + initView(); + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.title_voice); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + webView = (WebView) findViewById(R.id.webView); + webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setDomStorageEnabled(true); + webView.getSettings().setAllowContentAccess(true); + webView.getSettings().setAppCacheEnabled(false); + webView.getSettings().setDisplayZoomControls(true); + webView.setWebChromeClient(new WebChromeClient()); + webView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return true; + } + }); + String webViewTag = getWebViewTag(); + String appId = DifferConstans.APPID_S_VOICE; + /*switch (DifferConstans.APPID_S) { + case "1104": + //小讯智能 + appId = "1105"; + break; + case "1103": + //安顺祥 + if (AppIdUtil.isChuangWei()) { + appId = "110202"; + } else + appId = "1102"; + break; + case "1202": + //语音生活助手 + appId = "1104"; + break; + case "1201": + //语音遥控器 + appId = "1103"; + break; + default: + if (DifferConstans.APPID_S_VOICE.equals("110101")) { + appId = "1103"; + } else + appId = "1101"; + break; + }*/ + webView.loadUrl("https://app-static.yonsz.net/help/" + appId + "/intro/" + webViewTag + ".html"); + } + + private String getWebViewTag() { + String tag = (String) getIntent().getExtras().get("tag"); + String webViewTag = null; + switch (tag) { + case FAN_TAG: + mTitleView.setHead(R.string.fan_explain); + webViewTag = "fs"; + break; + case TV_TAG: + mTitleView.setHead(R.string.tv_explain); + webViewTag = "tv"; + break; + case TVONE_TAG: + mTitleView.setHead("机顶盒语令说明"); + webViewTag = "box"; + break; + case AIR_TAG: + mTitleView.setHead(R.string.air_explain); + webViewTag = "kt"; + break; + case LIGHT_TAG: + String lightType = (String) getIntent().getExtras().get("lightType"); + switch (lightType) { + case "0"://灯光 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "light"; + break; + case "1"://筒灯 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "tubelamp"; + break; + case "2"://灯带 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "lightbelt"; + break; + case "3"://射灯 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "lamp"; + break; + case "4"://壁灯 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "walllamp"; + break; + case "5"://吊灯 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "chandelier"; + break; + case "6"://廊灯 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "porchlamp"; + break; + case "7"://排气扇 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "exhaust"; + break; + default: + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "light"; + break; + } + break; + case CURTAINS_TAG: + String relatedStatus = (String) getIntent().getExtras().get("relatedStatus"); + String blindType = (String) getIntent().getExtras().get("blindType"); + if (relatedStatus.equals("1")) { + webViewTag = "curtaingauzecurtain"; + } else { + if (blindType.equals("1")) { + webViewTag = "gauze"; + } else { + webViewTag = "curtains"; + } + } + mTitleView.setHead(R.string.Speech_commands_instruction); + break; + case SWEEP_TAG: + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "sdj"; + break; + case SWITCH_TAG: + String plugType = (String) getIntent().getExtras().get("plugType"); + switch (plugType) { + case "0"://插座 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "socket"; + break; + case "1"://台灯 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "desklamp"; + break; + case "2"://热水器(厨电) + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "kitchenpower"; + break; + case "3"://墙壁插座 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "wallsocket"; + break; + case "4"://热水壶 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "kettle"; + break; + case "5"://取暖器 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "heater"; + break; + case "6"://电蚊香 + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "dwx"; + break; + case "100"://wifi插座 + mTitleView.setHead("帮助"); + webViewTag = "wifihelp"; + break; + default: + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "socket"; + break; + } + break; + case MUSIC_TAG: + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "music"; + + break; + case CLOTHES_HANGER: + mTitleView.setHead("晾衣机语令说明"); + webViewTag = "airer"; + break; + case WINDOW_OPENER: + mTitleView.setHead("开窗器语令说明"); + webViewTag = "window"; + break; + case MOVIE_CAMERA: + mTitleView.setHead("投影仪语令说明"); + webViewTag = "projector"; + break; + case AIR_CLEANER: + mTitleView.setHead("净化器语令说明"); + webViewTag = "purifier"; + break; + case MULTIFUNCTIONAL_CONTROLLER: + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "multifunctional"; + break; + case GEMSTONE_ELVES: + mTitleView.setHead(R.string.Speech_commands_instruction); + webViewTag = "baoshijingling"; + break; + } + return webViewTag; + } + + /** + * 使点击回退按钮不会直接退出整个应用程序而是返回上一个页面 + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) { + webView.goBack();//返回上个页面 + return true; + } + return super.onKeyDown(keyCode, event);//退出整个应用程序 + } + + @Override + public void callBackUiThread(Message msg) { + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/AddAirAutoActivity.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/AddAirAutoActivity.java new file mode 100644 index 0000000..be658e8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/AddAirAutoActivity.java @@ -0,0 +1,440 @@ +package com.yonsz.z1.device.airconditioner; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.TextView; + +import com.ds.remote.Device; +import com.ds.remote.Public; +import com.ds.remote.SerialPortService; +import com.ds.remote.tagSerialPortRx; +import com.ds.remote.type_CUR_group; +import com.ds.remote.type_updatatime; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.device.tv.AirListActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.BytesUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; +import java.util.Timer; +import java.util.TimerTask; + +import static com.ds.remote.Public.MESSAGE_AUTO_RECOGNITION; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * Created by Administrator on 2017/6/16. + */ + +public class AddAirAutoActivity extends BaseActivity { + public static String authInfrared; + + //JNI + static { + System.loadLibrary("HbgRemoteComm"); + System.loadLibrary("Arc_Ide"); + System.loadLibrary("Arc_proc"); + } + + public byte[] tail_data; //尾巴数据 + public byte[] current_data; //当前学习数据 + //以下调用库 + type_CUR_group current_group; + type_updatatime ARC_updataTM; + tagSerialPortRx RemoteRxData; + Timer timer_100ms; + Timer timer_500ms; + Timer mTimer; + int rxcnt; + int status; + TimerTask task_100ms = new TimerTask() { + public void run() { + status = Device.HBioctl(Device.OPERATION.HB_IOCTL_TIMER100.ordinal(), null); + // Log.i("GroupNumber", "--- task_100ms ---" + status); + + if (status == Device.LEN_OK) { + Message message = new Message(); + message.what = Public.MESSAGE_RECOGNITION_SUCCEEDED; + mHandler.sendMessage(message); + } else if (status == Device.LEN_ERROR) { + Message message = new Message(); + message.what = Public.MESSAGE_RECOGNITION_FAILED; + mHandler.sendMessage(message); + } + } + }; + TimerTask task_500ms = new TimerTask() { + public void run() { + ARC_updataTM.arc_group = current_group.group_arc; + ARC_updataTM.clk_hour = (byte) Public.get_current_hour(); + ARC_updataTM.clk_min = (byte) Public.get_current_minute(); + int status = Device.HBioctl(Device.OPERATION.HB_IOCTL_TIMER500.ordinal(), ARC_updataTM); + // Log.i("GroupNumber", "--- task_500ms ---" + status); + if (status == Device.LENTIMEOUT) { + if (Device.b_learn_mode) { + Message message = new Message(); + message.what = Public.MESSAGE_LEARN_TIMEOUT; + mHandler.sendMessage(message); + } else if (Device.b_recognition_mode) { + Message message = new Message(); + message.what = Public.MESSAGE_RECOGNITION_TIMEOUT; + mHandler.sendMessage(message); + } + } + } + }; + private TitleView mTitleView; + private TextView lossAuto; + private String ziId; + private String userId; + private StateButton mStateButton; + private int sec = 30; + private MediaPlayer mediaPlayer01; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_air_auto); + //注册eventBus + // EventBus.getDefault().register(this); + //打开串口服务 + Public.serial_port_service = new SerialPortService(this, mHandler); + Public.serial_port_service.start(); + initView(); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_3); + mediaPlayer01.start(); + } + NettyHandlerUtil.getInstance(); + // SoundPlayUtils.play(1); + } + + private void initView() { + mStateButton = (StateButton) findViewById(R.id.bt_sec); + //init variable + Device.m_device = 0; + Device.m_group = 0; //URC: 340, ARC: 0 + Device.m_keyval = 0; + Device.m_arc_group = 0; + Public.b_require_reload = true; + RemoteRxData = new tagSerialPortRx(); + rxcnt = 0; + //一些变量的初始化 + RemoteRxData.RxDone = 0; + RemoteRxData.wRxLen = 0; + RemoteRxData.wRxPos = 0; + rxcnt = 0; + RemoteRxData = Device.get_RemoteRxData(); + + //初始化 + //HB_IOCTL_INIT + current_group = new type_CUR_group(); + current_group.group_arc = (short) Device.m_arc_group; + current_group.group_atv = (short) Device.m_group; + current_group.group_aux = (short) Device.m_group; + current_group.group_ctv = (short) Device.m_group; + current_group.group_dvb = (short) Device.m_group; + current_group.group_dvd = (short) Device.m_group; + current_group.group_stb = (short) Device.m_group; + + ARC_updataTM = new type_updatatime(); + ARC_updataTM.arc_group = current_group.group_arc; + ARC_updataTM.clk_hour = (byte) Public.get_current_hour(); + ARC_updataTM.clk_min = (byte) Public.get_current_minute(); + + Device.HBioctl(Device.OPERATION.HB_IOCTL_INIT.ordinal(), ARC_updataTM); + + //Timer + timer_100ms = new Timer(); + timer_100ms.schedule(task_100ms, 0, 100); + timer_500ms = new Timer(); + timer_500ms.schedule(task_500ms, 0, 500); + + + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + lossAuto = (TextView) findViewById(R.id.bt_loss_auto); + mTitleView = (TitleView) findViewById(R.id.title_add_air_auto); + mTitleView.setHead(R.string.add_air_auto); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + lossAuto.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(AddAirAutoActivity.this, AirListActivity.class); + intent.putExtra("ziId", ziId); + startActivity(intent); + finish(); + } + }); + + //发送自动识别的命令 + sendAirAutoAdd(); + } + + private void sendAirAutoAdd() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); +// map.put("userId", userId); + map.put("macId", ziId); +// map.put("sendMsg", ""); + util.requestPostByAsynewApi(NetWorkUrl.AIR_AUTO_ADD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addChildDevice", "onSuccess: " + respone); + } + + @Override + public void onFail(String message) { + } + }); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(NettyEntity event) { + String msg = event.getAuthInfrared(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = Public.MESSAGE_AUTO_RECOGNITION; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case MESSAGE_AUTO_RECOGNITION: + //自动识别 + Device.HBioctl(Device.OPERATION.HB_IOCTL_ARC_IRRX.ordinal(), null); + Device.b_recognition_mode = true; + + RemoteRxData.RxDone = 0; + RemoteRxData.wRxLen = 0; + RemoteRxData.wRxPos = 0; + rxcnt = 0; + RemoteRxData = Device.get_RemoteRxData(); + + + byte[] bytes = BytesUtil.hexStringToBytes(msg.obj.toString()); + // byte[] bytes = BytesUtil.hexStringToBytes("168cd032340000180112016a001d0025001d004b011d0000001d00ffffffffffffffffffffffff012112212212211212111121112222122111222222221111130121122122122112121111211122221221112222222211111400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4ba08"); + // byte[] bytes = BytesUtil.hexStringToBytes("168CD0323300001201130165002200210022004101220000002200FFFFFFFFFFFFFFFFFFFFFFFF0121122122122112121111211122221221112222222211111301211221221221121211112111222212211122222222111114000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009FB008"); + onDataReceived(bytes, 213); + break; + case Public.MESSAGE_RECOGNITION_SUCCEEDED: + //自动识别成功 + timer_500ms.cancel(); + timer_100ms.cancel(); + Device.b_recognition_mode = false; + int[] GroupNumber = new int[10]; + Device.HBioctlGetArcGroupNum(GroupNumber); + Log.i("GroupNumber", "GroupNumber: " + GroupNumber[0] + " " + GroupNumber[1] + " " + GroupNumber[2]); + int GroupNum = 0; + if (GroupNumber[0] != 0xFFFF) { + GroupNum++; + Device.m_arc_group_1 = GroupNumber[0] + 0x8000; + Device.m_arc_group = Device.m_arc_group_1; + + if (GroupNumber[1] != 0xFFFF) { + GroupNum++; + Device.m_arc_group_2 = GroupNumber[1] + 0x8000; + if (GroupNumber[2] != 0xFFFF) { + GroupNum++; + Device.m_arc_group_3 = GroupNumber[2] + 0x8000; + } + } + } + + if (GroupNum == 0) { + Message message = new Message(); + message.what = Public.MESSAGE_RECOGNITION_FAILED; + mHandler.sendMessage(message); + } else { + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(AddAirAutoActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(AddAirAutoActivity.this, DeviceControlActivity.class); + } + intent.putExtra("GroupNum", GroupNum); + if (GroupNumber[0] != 0xFFFF) { + intent.putExtra("GroupNum1", GroupNumber[0]); + if (GroupNumber[1] != 0xFFFF) { + intent.putExtra("GroupNum2", GroupNumber[1]); + if (GroupNumber[2] != 0xFFFF) { + intent.putExtra("GroupNum3", GroupNumber[2]); + } + } + } + intent.putExtra("airStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("airName", ""); + intent.putExtra("id", "air"); + startActivity(intent); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + break; + + case Public.MESSAGE_RECOGNITION_TIMEOUT: + //自动识别超时 + Device.b_recognition_mode = false; + Intent intent = new Intent(AddAirAutoActivity.this, AirAutoFailActivity.class); + intent.putExtra("ziId", ziId); + startActivity(intent); + finish(); + break; + + case Public.MESSAGE_RECOGNITION_FAILED: + //自动识别失败 + Device.b_recognition_mode = false; + Intent intent1 = new Intent(AddAirAutoActivity.this, AirAutoFailActivity.class); + intent1.putExtra("ziId", ziId); + intent1.putExtra("tag", AIR_TAG); + startActivity(intent1); + finish(); + break; + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else { + finish(); + } + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + } + } + + protected void onDataReceived(byte[] buffer, int size) { + int i = 0; + + StringBuilder str = new StringBuilder(); + for (i = 0; i < size; i++) { + str.append(String.format("%02X, ", (buffer[i] & 0xFF))); + } + Log.e("MainActivity_RECE:", "wRxLen:" + RemoteRxData.wRxLen + ":" + str); + + //如果有缓存的数据,先放进来 + if (tail_data != null) { + if (RemoteRxData.wRxPos == 0 && tail_data.length > 0) { + rxcnt = tail_data.length; + + for (i = 0; i < rxcnt; i++) { + RemoteRxData.RxBuf[i] = tail_data[i]; + } + RemoteRxData.wRxPos += rxcnt; + } + tail_data = null; + } + + //将接收的数据放入RemoteRxData.RxBuf + for (i = 0; i < size; i++) { + RemoteRxData.RxBuf[rxcnt++] = buffer[i]; + } + RemoteRxData.wRxPos += size; + + if (RemoteRxData.wRxPos >= RemoteRxData.wRxLen) { + RemoteRxData.RxDone = 1; + + /*//把这次多余的数据缓存起来 + int tail = RemoteRxData.wRxPos - RemoteRxData.wRxLen; + if (tail > 0) { + tail_data = new byte[tail]; + for (i = 0; i < tail; i++) { + tail_data[i] = RemoteRxData.RxBuf[RemoteRxData.wRxLen + i]; + } + }*/ + } + + if (RemoteRxData.RxDone == 1) { + Device.HBioctl(Device.OPERATION.HB_IOCTL_RX_PRO.ordinal(), RemoteRxData); + //Log.e("", "****************************"); + //如果是学习,将数据缓存起来等保存到数据库 + if (Device.b_learn_mode) { + if (current_data != null) { + current_data = null; + } + current_data = new byte[RemoteRxData.wRxLen - 3]; + for (i = 0; i < RemoteRxData.wRxLen - 3; i++) { + current_data[i] = RemoteRxData.RxBuf[i + 3]; + } + } + + + //再读一次RemoteRxData + RemoteRxData.RxDone = 0; + RemoteRxData.wRxLen = 0; + RemoteRxData.wRxPos = 0; + rxcnt = 0; + RemoteRxData = Device.get_RemoteRxData(); + } + } + + @Override + public void onResume() { + super.onResume(); + Public.serial_port_service.SetHandler(mHandler); + + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + timer_100ms.cancel(); + timer_500ms.cancel(); + //取消eventBus注册 + // EventBus.getDefault().unregister(this); + //关闭串口 + Public.serial_port_service.CloseSerialPort(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/AddAirHandActivity.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/AddAirHandActivity.java new file mode 100644 index 0000000..6810b98 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/AddAirHandActivity.java @@ -0,0 +1,16 @@ +package com.yonsz.z1.device.airconditioner; + +import android.os.Message; + +import com.yonsz.z1.activity.BaseActivity; + +/** + * Created by Administrator on 2017/6/16. + */ + +public class AddAirHandActivity extends BaseActivity{ + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/AirAutoFailActivity.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirAutoFailActivity.java new file mode 100644 index 0000000..7eb374b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirAutoFailActivity.java @@ -0,0 +1,126 @@ +package com.yonsz.z1.device.airconditioner; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.device.LearnGuideActivity; +import com.yonsz.z1.device.sweep.SweepLearnGuideActivity; +import com.yonsz.z1.device.tv.TvLearnGuideActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.AIR_CLEANER; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.MOVIE_CAMERA; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; + +/** + * Created by Administrator on 2017/7/25. + */ + +public class AirAutoFailActivity extends BaseActivity { + private TitleView mTitleView; + private Button restart; + private String tag; + private LinearLayout mLinearLayoutBg; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_air_auto_fail); + initView(); + } + + private void initView() { + tag = getIntent().getExtras().get("tag").toString(); + mLinearLayoutBg = (LinearLayout) findViewById(R.id.ll_fan_auto_fail); + mTitleView = (TitleView) findViewById(R.id.title_add_air_auto_fail); + mTitleView.setHead(R.string.add_fail); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (tag) { + case TV_TAG: + case TVONE_TAG: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_tv)); + break; + case AIR_TAG: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_kt)); + break; + case SWEEP_TAG: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_swap)); + break; + } + restart = (Button) findViewById(R.id.bt_restart); + restart.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent; + switch (tag) { + case AIR_TAG: + intent = new Intent(AirAutoFailActivity.this, AddAirAutoActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + startActivity(intent); + break; + case AIR_CLEANER: + case MOVIE_CAMERA: + case FAN_TAG: + intent = new Intent(AirAutoFailActivity.this, LearnGuideActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("learnGuide", getIntent().getExtras().get("learnGuide").toString()); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("deviceType", tag); + startActivity(intent); + break; + case TV_TAG: + intent = new Intent(AirAutoFailActivity.this, TvLearnGuideActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("learnGuide", Integer.parseInt(getIntent().getExtras().get("learnGuide").toString())); + intent.putExtra("isTv", (boolean) getIntent().getExtras().get("isTv")); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent); + break; + case SWEEP_TAG: + intent = new Intent(AirAutoFailActivity.this, SweepLearnGuideActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("learnGuide", Integer.parseInt(getIntent().getExtras().get("learnGuide").toString())); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("deviceType", tag); + startActivity(intent); + break; + } + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/AirConditionActivity.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirConditionActivity.java new file mode 100644 index 0000000..c38263e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirConditionActivity.java @@ -0,0 +1,844 @@ +package com.yonsz.z1.device.airconditioner; + +import android.app.Service; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.support.annotation.RequiresApi; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.SecondEvent; +import com.yonsz.z1.database.entity.Z1TimeEntity; +import com.yonsz.z1.database.entity.entity4.LocalControlEvent; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.utils.ConnectNettyUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_CLOSE; +import static com.yonsz.z1.net.Constans.AIR_COLD; +import static com.yonsz.z1.net.Constans.AIR_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_OPEN; +import static com.yonsz.z1.net.Constans.AIR_POWER; +import static com.yonsz.z1.net.Constans.AIR_RIGHT_LEFT; +import static com.yonsz.z1.net.Constans.AIR_SLEEP; +import static com.yonsz.z1.net.Constans.AIR_SURE_ORDER_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.AIR_TEM_ADD; +import static com.yonsz.z1.net.Constans.AIR_TEM_REDUCE; +import static com.yonsz.z1.net.Constans.AIR_UP_DOWN; +import static com.yonsz.z1.net.Constans.AIR_WARM; +import static com.yonsz.z1.net.Constans.AIR_WIND_SPEED; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_AIR_LASTSTATUS_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_AIR_LASTSTATUS_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_NEXT_TIMER_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_NEXT_TIMER_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_LOCAL_CONTROL; +import static com.yonsz.z1.net.Constans.isLocalControl; + +/** + * Created by Administrator on 2017/6/16.,已作废 + */ + +public class AirConditionActivity extends BaseActivity { + static int groupNum = 1, groupNum1, groupNum2, groupNum3; + private TitleView mTitleView; + private TextView mTiming; + private boolean isAdd; + private boolean isTestControl; + private RelativeLayout mAirControl; + private FrameLayout mTimingFl; + private TextView mTestTv; + private RelativeLayout rl_main_screen; + private String userId; + private String ziId; + private String sendMsg; + private TextView mOpenClose, mLeftRight, mUpDown, mSavePower, mCold, mWarm, mSleep, mAdd, mReduce, mWindSpeed; + private TextView airTempicon, airTempoC, airWindIcon, tv_next_time, tv_next_time_state, tv_next_week; + private String airName; + private boolean isOpen; + private String deviceIp = ""; + private RelativeLayout airTopBg; + private ImageView airIconStation; + private ImageView localControlIv; + private ImageView airSleepIcon; + + public void onEventMainThread(LocalControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = SHOW_LOCAL_CONTROL; + message.obj = msg; + mHandler.sendMessage(message); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_air_condition); + initData(); + initListener(); + } + + + private void initData() { + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + String airStateTag = (String) getIntent().getExtras().get("airStateTag"); + if (airStateTag.equals("0")) { + //自动识别会传0进来 + isAdd = true; + if (getIntent().getExtras().get("GroupNum") != null) { + groupNum = (int) getIntent().getExtras().get("GroupNum"); + } + if (getIntent().getExtras().get("GroupNum1") != null) { + groupNum1 = (int) getIntent().getExtras().get("GroupNum1"); + } + if (getIntent().getExtras().get("GroupNum2") != null) { + groupNum2 = (int) getIntent().getExtras().get("GroupNum2"); + } + if (getIntent().getExtras().get("GroupNum3") != null) { + groupNum3 = (int) getIntent().getExtras().get("GroupNum3"); + } + + + String hexString = Integer.toHexString(groupNum1); + switch (hexString.length()) { + case 1: + sendMsg = "0" + hexString + "00"; + break; + case 2: + sendMsg = hexString + "00"; + break; + case 3: + sendMsg = hexString.substring(1, 3) + "0" + hexString.substring(0, 1); + break; + } + airAutoSureOrder(sendMsg); + } else if (airStateTag.equals("2")) { + //手动添加会传2进来 + isAdd = false; + isTestControl = true; + if (getIntent().getExtras().get("mGroupList") != null) { + String mGroupList = (String) getIntent().getExtras().get("mGroupList"); + int groupNum0 = -1; + try { + groupNum0 = Integer.parseInt(mGroupList); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + if (groupNum0 != -1) { + String hexString = Integer.toHexString(groupNum0); + switch (hexString.length()) { + case 1: + sendMsg = "0" + hexString + "00"; + break; + case 2: + sendMsg = hexString + "00"; + break; + case 3: + sendMsg = hexString.substring(1, 3) + "0" + hexString.substring(0, 1); + break; + } + } + } + airAutoSureOrder(sendMsg); + } else { + isAdd = false; + isTestControl = false; + } + airSleepIcon = (ImageView) findViewById(R.id.iv_icon_pinxian); + airTopBg = (RelativeLayout) findViewById(R.id.rl_air_top_bg); + localControlIv = (ImageView) findViewById(R.id.iv_local_control); + airIconStation = (ImageView) findViewById(R.id.iv_air_icon_station); + airTempicon = (TextView) findViewById(R.id.tv_air_temp_icon); + airTempoC = (TextView) findViewById(R.id.tv_air_temp_oc); + airWindIcon = (TextView) findViewById(R.id.tv_air_wind_icon); + + mTimingFl = (FrameLayout) findViewById(R.id.fl_timing); + mTestTv = (TextView) findViewById(R.id.tv_air_top_test); + rl_main_screen = (RelativeLayout) findViewById(R.id.rl_main_screen); + mAirControl = (RelativeLayout) findViewById(R.id.rl_activity_control); + mTiming = (TextView) findViewById(R.id.tv_timing); + tv_next_time = (TextView) findViewById(R.id.tv_next_time); + tv_next_time_state = (TextView) findViewById(R.id.tv_next_time_state); + tv_next_week = (TextView) findViewById(R.id.tv_next_week); + mTitleView = (TitleView) findViewById(R.id.title_aircondition); + + if (TextUtils.isEmpty(getIntent().getExtras().get("airName").toString())) { + airName = "空调"; + } else { + airName = getIntent().getExtras().get("airName").toString(); + } + mTitleView.setHead(airName); + mTitleView.clearBackGroud(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (isAdd) { + addChildDevice(AIR_TAG, "空调"); + //如果是自动识别添加的 + //首先确定是哪个码组 + /*String hexString = Integer.toHexString(groupNum1); + switch (hexString.length()) { + case 1: + sendMsg = "0" + hexString + "00"; + break; + case 2: + sendMsg = hexString + "00"; + break; + case 3: + sendMsg = hexString.substring(1, 3) + "0" + hexString.substring(0, 1); + break; + } + airAutoSureOrder(sendMsg);*/ + + /*switch (mViewPager.getCurrentItem()) { + case 0: + String hexString = Integer.toHexString(groupNum1); + switch (hexString.length()) { + case 1: + sendMsg = "0" + hexString + "00"; + break; + case 2: + sendMsg = hexString + "00"; + break; + case 3: + sendMsg = hexString.substring(1, 2) + "0" + hexString.substring(0, 0); + break; + } + airAutoSureOrder(); + addChildDevice(AIR_TAG, "暂无空调品牌匹配"); + break; + case 1: + String hexString1 = Integer.toHexString(groupNum2); + switch (hexString1.length()) { + case 1: + sendMsg = "0" + hexString1 + "00"; + break; + case 2: + sendMsg = hexString1 + "00"; + break; + case 3: + sendMsg = hexString1.substring(1, 2) + "0" + hexString1.substring(0, 0); + break; + } + airAutoSureOrder(); + addChildDevice(AIR_TAG, "暂无空调品牌匹配"); + break; + case 2: + String hexString2 = Integer.toHexString(groupNum3); + switch (hexString2.length()) { + case 1: + sendMsg = "0" + hexString2 + "00"; + break; + case 2: + sendMsg = hexString2 + "00"; + break; + case 3: + sendMsg = hexString2.substring(1, 2) + "0" + hexString2.substring(0, 0); + break; + } + airAutoSureOrder(); + addChildDevice(AIR_TAG, "暂无空调品牌匹配"); + break; + }*/ + } else { + if (isTestControl) { + // airAutoSureOrder(sendMsg); + addChildDevice(AIR_TAG, "空调"); + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(AirConditionActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + ConfirmDialog dialog = new ConfirmDialog(AirConditionActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + deleteChildDevice(AIR_TAG, ziId); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + //重新命名 + + break; + case 3: + //语令说明 + Intent intent = new Intent(AirConditionActivity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", AIR_TAG); + startActivity(intent); + break; + case 4: + //遥控学习 + + break; + } + } + }); + dialog2.setContent(); + dialog2.setLearn(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + } + + @Override + public void onFunctionText() { + + } + }); + setAirStage(); + + mOpenClose = (TextView) findViewById(R.id.tv_fan_open); + mLeftRight = (TextView) findViewById(R.id.tv_right_left); + mUpDown = (TextView) findViewById(R.id.tv_up_down); + mSavePower = (TextView) findViewById(R.id.tv_save_power); + mCold = (TextView) findViewById(R.id.tv_cold); + mWarm = (TextView) findViewById(R.id.tv_warm); + mSleep = (TextView) findViewById(R.id.tv_sleep); + mAdd = (TextView) findViewById(R.id.tv_temperature_add); + mReduce = (TextView) findViewById(R.id.tv_temperature_reduce); + mWindSpeed = (TextView) findViewById(R.id.tv_air_wind_speed); + ConnectNettyUtil.connectNetty(ziId, deviceIp, this); + } + + private void initListener() { + mOpenClose.setOnClickListener(this); + mLeftRight.setOnClickListener(this); + mUpDown.setOnClickListener(this); + mSavePower.setOnClickListener(this); + mCold.setOnClickListener(this); + mWarm.setOnClickListener(this); + mSleep.setOnClickListener(this); + mAdd.setOnClickListener(this); + mReduce.setOnClickListener(this); + mWindSpeed.setOnClickListener(this); + + mTimingFl.setOnClickListener(this); + mTiming.setOnClickListener(this); + } + + //手动和自动添加的确认 + private void airAutoSureOrder(String sendMsg) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); +// map.put("userId", userId); + map.put("macId", ziId); + map.put("code", this.sendMsg); + Log.i("airAutoSureOrder", "AirConditionActivity airAutoSureOrder()" + this.sendMsg); + util.requestPostByAsynewApi(NetWorkUrl.AIR_AUTO_SURE_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("airAutoSureOrder", "onSuccess: " + respone); + /*AddChildDeviceEntity entity = JSON.parseObject(respone, AddChildDeviceEntity.class); + Message msg = mHandler.obtainMessage(AIR_SURE_ORDER_SUCCESS); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg);*/ + } + + @Override + public void onFail(String message) { + + } + }); + } + + private void addChildDevice(String deviceType, String deviceBrand) { + + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + private void setAirStage() { + if (isAdd) { + mAirControl.setVisibility(View.VISIBLE); + mTitleView.setHeadFuntionTxt(R.string.sure); + rl_main_screen.setVisibility(View.GONE); + mTestTv.setVisibility(View.VISIBLE); + //进入首先发一下码组 + airAutoSendOrder(); + /*mViewPager.setVisibility(View.VISIBLE); + mAirControl.setVisibility(View.GONE); + mTitleView.setHeadFuntionTxt(R.string.sure); + fragmentList = new ArrayList(); + mAirOneFragment = new AirOneFragment(); + mAirTwoFragment = new AirTwoFragment(); + mAirThreeFragment = new AirThreeFragment(); + switch (groupNum) { + case 1: + fragmentList.add(mAirOneFragment); + break; + case 2: + fragmentList.add(mAirOneFragment); + fragmentList.add(mAirTwoFragment); + break; + case 3: + fragmentList.add(mAirOneFragment); + fragmentList.add(mAirTwoFragment); + fragmentList.add(mAirThreeFragment); + break; + } + FragmentManager manager = this.getSupportFragmentManager(); + mViewPager.setAdapter(new MyFrageStatePagerAdapter(manager, fragmentList));*/ + } else { + if (isTestControl) { + mAirControl.setVisibility(View.VISIBLE); + mTitleView.setHeadFuntionTxt(R.string.sure); + rl_main_screen.setVisibility(View.GONE); + mTestTv.setVisibility(View.VISIBLE); + //进入首先发一下码组 + // airAutoSendOrder(); + } else { + mAirControl.setVisibility(View.VISIBLE); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + rl_main_screen.setVisibility(View.VISIBLE); + mTestTv.setVisibility(View.GONE); + queryNextTimer(); + queryAirLastStatus(); + } + } + } + + private void airAutoSendOrder() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); +// map.put("userId", userId); + map.put("macId", ziId); + map.put("code", sendMsg); + util.requestPostByAsynewApi(NetWorkUrl.SEARCH_ROUND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("airAutoSendOrder", "onSuccess: " + respone); + + } + + @Override + public void onFail(String message) { + + } + }); + } + + private void queryNextTimer() { + + } + + private void queryAirLastStatus() { + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (isLocalControl) { + NettyManager.closeCtx(); + } + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + ToastUtil.show(this, entity1.getMsg()); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + /*Intent intent = new Intent(AirConditionActivity.this, ChildDeviceListActivity.class); + intent.putExtra("position", childPosition); + intent.putExtra("name", mObjEntity.getZiName()); + intent.putExtra("ziId", ziId); + startActivity(intent); + finish();*/ + } + }, 0); + isAdd = false; + isTestControl = false; + setAirStage(); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case AIR_SURE_ORDER_SUCCESS: + // addChildDevice(AIR_TAG, "空调"); + break; + case QUERY_NEXT_TIMER_SUCCESS: + Z1TimeEntity entity12 = (Z1TimeEntity) msg.obj; + if (entity12.getData() != null && !TextUtils.isEmpty(entity12.getData().getMin())) { + String cmdType = entity12.getData().getCmdType(); + int restMin = Integer.parseInt(entity12.getData().getMin()); + if (restMin < 60) { + if (cmdType.equals("1")) { + tv_next_time.setText(restMin + "分钟后开启"); + } else { + tv_next_time.setText(restMin + "分钟后关闭"); + } + } else { + int minite = restMin % 60; + int hour = restMin / 60; + if (minite == 0) { + if (cmdType.equals("1")) { + tv_next_time.setText(hour + "小时后开启"); + } else { + tv_next_time.setText(hour + "小时后关闭"); + } + } else { + if (cmdType.equals("1")) { + tv_next_time.setText(hour + "小时" + minite + "分钟后开启"); + } else { + tv_next_time.setText(hour + "小时" + minite + "分钟后关闭"); + } + } + } + tv_next_week.setText(""); + } else if (entity12.getData() != null) { + switch (entity12.getData().getWeek().toString()) { + case "1": + tv_next_week.setText("周日"); + break; + case "2": + tv_next_week.setText("周一"); + break; + case "3": + tv_next_week.setText("周二"); + break; + case "4": + tv_next_week.setText("周三"); + break; + case "5": + tv_next_week.setText("周四"); + break; + case "6": + tv_next_week.setText("周五"); + break; + case "7": + tv_next_week.setText("周六"); + break; + } + tv_next_time.setText(entity12.getData().getTime().toString()); + if (entity12.getData().getCmdType().toString().equals("1")) { + tv_next_time_state.setText(R.string.open); + } else { + tv_next_time_state.setText(getString(R.string.close)); + + } + } else { + tv_next_week.setText(""); + tv_next_time.setText(""); + tv_next_time_state.setText(""); + } + break; + case AIR_CONTROL_SUCCESS: + NettyEntity nettyEntity = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + if (getIntent().getExtras().get("airStateTag").equals("1") || (!isTestControl && !isAdd)) { + if (nettyEntity.getSwitch().toString().equals("1")) { + isOpen = true; + if (nettyEntity.getTemp() != null) { + airTempoC.setVisibility(View.VISIBLE); + airTempicon.setText(" " + nettyEntity.getTemp().toString() + "℃"); + } + if (nettyEntity.getModel() != null) { + switch (nettyEntity.getModel().toString()) { + case "1": + //制冷 + airTopBg.setBackground(getResources().getDrawable(R.drawable.pic_refrigeration_back)); + airIconStation.setVisibility(View.VISIBLE); + airIconStation.setImageDrawable(getResources().getDrawable(R.drawable.icon_cold)); + break; + case "4": + //制热 + airTopBg.setBackground(getResources().getDrawable(R.drawable.pic_heating_back)); + airIconStation.setVisibility(View.VISIBLE); + airIconStation.setImageDrawable(getResources().getDrawable(R.drawable.icon_hot)); + break; + case "0": + break; + case "2": + //除湿 + airTopBg.setBackground(getResources().getDrawable(R.drawable.pic_dehumidify_back)); + airIconStation.setVisibility(View.VISIBLE); + airIconStation.setImageDrawable(getResources().getDrawable(R.drawable.icon_chushi)); + break; + case "3": + airIconStation.setVisibility(View.GONE); + break; + } + } + + if (nettyEntity.getSpeed() != null) { + switch (nettyEntity.getSpeed().toString()) { + case "0": + airWindIcon.setText("自动风"); + break; + case "1": + airWindIcon.setText("低速风"); + break; + case "2": + airWindIcon.setText("中速风"); + break; + case "3": + airWindIcon.setText("高速风"); + break; + } + } + + if (nettyEntity.getScreen() != null) { + switch (nettyEntity.getSleep().toString()) { + case "0": + airSleepIcon.setVisibility(View.GONE); + break; + case "1": + airSleepIcon.setVisibility(View.VISIBLE); + break; + } + } + } else { + airTopBg.setBackground(getResources().getDrawable(R.drawable.pic_close_back)); + isOpen = false; + airTempicon.setText("已关闭"); + airTempoC.setVisibility(View.GONE); + airIconStation.setVisibility(View.GONE); + airWindIcon.setText(""); + } + } + break; + case SEND_CONTROL_ORDER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DELETE_CHILDDEVICE_SUCCESS: + + break; + case QUERY_AIR_LASTSTATUS_SUCCESS: + + break; + case SHOW_LOCAL_CONTROL: + String obj2 = (String) msg.obj; + if (obj2.equals("1")) { + localControlIv.setVisibility(View.VISIBLE); + } else { + localControlIv.setVisibility(View.GONE); + } + break; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_timing: + + break; + case R.id.tv_fan_open: + //发送开关指令 + if (isOpen) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_CLOSE)); + } else + sendAirControlOrder(AIR_CLOSE); + isOpen = false; + } else { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_OPEN)); + } else + sendAirControlOrder(AIR_OPEN); + isOpen = true; + } + break; + case R.id.tv_temperature_add: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_TEM_ADD)); + } else + sendAirControlOrder(AIR_TEM_ADD); + break; + case R.id.tv_temperature_reduce: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_TEM_REDUCE)); + } else + sendAirControlOrder(AIR_TEM_REDUCE); + break; + case R.id.tv_air_wind_speed: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_WIND_SPEED)); + } else + sendAirControlOrder(AIR_WIND_SPEED); + break; + case R.id.tv_right_left: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_RIGHT_LEFT)); + } else + sendAirControlOrder(AIR_RIGHT_LEFT); + break; + case R.id.tv_up_down: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_UP_DOWN)); + } else + sendAirControlOrder(AIR_UP_DOWN); + break; + case R.id.tv_cold: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_COLD)); + } else + sendAirControlOrder(AIR_COLD); + break; + case R.id.tv_warm: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_WARM)); + } else + sendAirControlOrder(AIR_WARM); + break; + case R.id.tv_sleep: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_SLEEP)); + } else + sendAirControlOrder(AIR_SLEEP); + break; + case R.id.tv_save_power: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_POWER)); + } else + sendAirControlOrder(AIR_POWER); + break; + } + } + + //发送开关指令 + private void sendAirControlOrder(String order) { + setShake(); + /*if (DensityUtil.isNetworkConnected(this)) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + map.put("sendMsg", order); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_CONTROL_AIR_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sendAirControlOrder", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } else { + ToastUtil.show(this, R.string.net_error); + }*/ + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + @Override + public void onResume() { + super.onResume(); + NettyHandlerUtil.getInstance(); + queryNextTimer(); + queryAirLastStatus(); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(SecondEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = AIR_CONTROL_SUCCESS; + message.obj = msg; + mHandler.sendMessage(message); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/AirOneFragment.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirOneFragment.java new file mode 100644 index 0000000..c85069f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirOneFragment.java @@ -0,0 +1,227 @@ +/* +package com.yonsz.z1.device.airconditioner; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.util.HashMap; + +import static com.yonsz.z1.device.airconditioner.AirConditionActivity.groupNum; +import static com.yonsz.z1.device.airconditioner.AirConditionActivity.groupNum1; +import static com.yonsz.z1.device.airconditioner.AirConditionActivity.mViewPager; +import static com.yonsz.z1.net.Constans.AIR_CLOSE; +import static com.yonsz.z1.net.Constans.AIR_COLD; +import static com.yonsz.z1.net.Constans.AIR_OPEN; +import static com.yonsz.z1.net.Constans.AIR_POWER; +import static com.yonsz.z1.net.Constans.AIR_RIGHT_LEFT; +import static com.yonsz.z1.net.Constans.AIR_SLEEP; +import static com.yonsz.z1.net.Constans.AIR_TEM_ADD; +import static com.yonsz.z1.net.Constans.AIR_TEM_REDUCE; +import static com.yonsz.z1.net.Constans.AIR_UP_DOWN; +import static com.yonsz.z1.net.Constans.AIR_WARM; +import static com.yonsz.z1.net.Constans.AIR_WIND_SPEED; + +*/ +/** + * Created by Administrator on 2017/6/29. + *//* + + +public class AirOneFragment extends Fragment implements View.OnClickListener { + private View fragView; + private RelativeLayout pageOneRl, pageTwoRl, pageThreeRl; + private ImageView pageOneRight; + private TextView totalTv; + private String userId; + private String ziId; + private String sendMsg; + + private TextView mOpenClose, mLeftRight, mUpDown, mSavePower, mCold, mWarm, mSleep, mAdd, mReduce, mWindSpeed; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_air_one, null); + initViews(); + initListener(); + return fragView; + } + + + private void initViews() { + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getActivity().getIntent().getExtras().get("ziId").toString(); + if (getActivity().getIntent().getExtras().get("GroupNum1") != null) { + groupNum1 = (int) getActivity().getIntent().getExtras().get("GroupNum1"); + String hexString = Integer.toHexString(groupNum1); + switch (hexString.length()) { + case 1: + sendMsg = "0" + hexString + "00"; + break; + case 2: + sendMsg = hexString + "00"; + break; + case 3: + sendMsg = hexString.substring(1, 2) + "0" + hexString.substring(0, 0); + break; + } + } + pageOneRl = (RelativeLayout) fragView.findViewById(R.id.tv_air_top_page_one); + pageTwoRl = (RelativeLayout) fragView.findViewById(R.id.tv_air_top_page_two); + pageThreeRl = (RelativeLayout) fragView.findViewById(R.id.tv_air_top_page_three); + pageOneRl.setVisibility(View.VISIBLE); + pageTwoRl.setVisibility(View.GONE); + pageThreeRl.setVisibility(View.GONE); + pageOneRight = (ImageView) fragView.findViewById(R.id.iv_page_one_right); + totalTv = (TextView) fragView.findViewById(R.id.tv_page_one_total); + switch (groupNum) { + case 1: + totalTv.setText("1"); + pageOneRight.setVisibility(View.GONE); + break; + case 2: + totalTv.setText("2"); + break; + } + + + mOpenClose = (TextView) fragView.findViewById(R.id.tv_fan_open); + mLeftRight = (TextView) fragView.findViewById(R.id.tv_right_left); + mUpDown = (TextView) fragView.findViewById(R.id.tv_up_down); + mSavePower = (TextView) fragView.findViewById(R.id.tv_save_power); + mCold = (TextView) fragView.findViewById(R.id.tv_cold); + mWarm = (TextView) fragView.findViewById(R.id.tv_warm); + mSleep = (TextView) fragView.findViewById(R.id.tv_sleep); + mAdd = (TextView) fragView.findViewById(R.id.tv_temperature_add); + mReduce = (TextView) fragView.findViewById(R.id.tv_temperature_reduce); + mWindSpeed = (TextView) fragView.findViewById(R.id.tv_air_wind_speed); + + + //进入首先发一下码组 + airAutoSendOrder(); + } + + private void initListener() { + pageOneRight.setOnClickListener(this); + mOpenClose.setOnClickListener(this); + mLeftRight.setOnClickListener(this); + mUpDown.setOnClickListener(this); + mSavePower.setOnClickListener(this); + mCold.setOnClickListener(this); + mWarm.setOnClickListener(this); + mSleep.setOnClickListener(this); + mAdd.setOnClickListener(this); + mReduce.setOnClickListener(this); + mWindSpeed.setOnClickListener(this); + } + + + private void airAutoSendOrder() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + map.put("sendMsg", sendMsg); + util.requestPostByAsyn(ziId, NetWorkUrl.AIR_AUTO_SEND_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("airAutoSendOrder", "onSuccess: " + respone); + + } + + @Override + public void onFail(String message) { + + } + }); + } + + boolean isOpen = false; + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_page_one_right: + changeView(1); + break; + case R.id.tv_fan_open: + //发送开关指令 + if (isOpen) { + sendAirControlOrder(AIR_CLOSE); + isOpen = false; + } else { + sendAirControlOrder(AIR_OPEN); + isOpen = true; + } + break; + case R.id.tv_temperature_add: + sendAirControlOrder(AIR_TEM_ADD); + break; + case R.id.tv_temperature_reduce: + sendAirControlOrder(AIR_TEM_REDUCE); + break; + case R.id.tv_air_wind_speed: + sendAirControlOrder(AIR_WIND_SPEED); + break; + case R.id.tv_right_left: + sendAirControlOrder(AIR_RIGHT_LEFT); + break; + case R.id.tv_up_down: + sendAirControlOrder(AIR_UP_DOWN); + break; + case R.id.tv_cold: + sendAirControlOrder(AIR_COLD); + break; + case R.id.tv_warm: + sendAirControlOrder(AIR_WARM); + break; + case R.id.tv_sleep: + sendAirControlOrder(AIR_SLEEP); + break; + case R.id.tv_save_power: + sendAirControlOrder(AIR_POWER); + break; + } + } + + //发送指令 + private void sendAirControlOrder(String order) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + map.put("sendMsg", order); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_CONTROL_AIR_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addChildDevice", "onSuccess: " + respone); + + } + + @Override + public void onFail(String message) { + + } + }); + } + + //手动设置ViewPager要显示的视图 + static void changeView(int desTab) { + mViewPager.setCurrentItem(desTab, true); + } +} +*/ diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/AirThreeFragment.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirThreeFragment.java new file mode 100644 index 0000000..fff00af --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirThreeFragment.java @@ -0,0 +1,208 @@ +/* +package com.yonsz.z1.device.airconditioner; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.util.HashMap; + +import static com.yonsz.z1.device.airconditioner.AirConditionActivity.groupNum1; +import static com.yonsz.z1.device.airconditioner.AirOneFragment.changeView; +import static com.yonsz.z1.net.Constans.AIR_CLOSE; +import static com.yonsz.z1.net.Constans.AIR_COLD; +import static com.yonsz.z1.net.Constans.AIR_OPEN; +import static com.yonsz.z1.net.Constans.AIR_POWER; +import static com.yonsz.z1.net.Constans.AIR_RIGHT_LEFT; +import static com.yonsz.z1.net.Constans.AIR_SLEEP; +import static com.yonsz.z1.net.Constans.AIR_TEM_ADD; +import static com.yonsz.z1.net.Constans.AIR_TEM_REDUCE; +import static com.yonsz.z1.net.Constans.AIR_UP_DOWN; +import static com.yonsz.z1.net.Constans.AIR_WARM; +import static com.yonsz.z1.net.Constans.AIR_WIND_SPEED; + +*/ +/** + * Created by Administrator on 2017/6/29. + *//* + + +public class AirThreeFragment extends Fragment implements View.OnClickListener { + private View fragView; + private ImageView pageThreeRight, pageThreeLeft; + private RelativeLayout pageOneRl, pageTwoRl, pageThreeRl; + private TextView totalTv; + private String userId; + private String ziId; + private String sendMsg; + + private TextView mOpenClose, mLeftRight, mUpDown, mSavePower, mCold, mWarm, mSleep, mAdd, mReduce, mWindSpeed; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_air_one, null); + initViews(); + initListener(); + return fragView; + } + + private void initViews() { + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getActivity().getIntent().getExtras().get("ziId").toString(); + if (getActivity().getIntent().getExtras().get("GroupNum1") != null) { + groupNum1 = (int) getActivity().getIntent().getExtras().get("GroupNum1"); + String hexString = Integer.toHexString(groupNum1); + switch (hexString.length()) { + case 1: + sendMsg = "0" + hexString + "00"; + break; + case 2: + sendMsg = hexString + "00"; + break; + case 3: + sendMsg = hexString.substring(1, 2) + "0" + hexString.substring(0, 0); + break; + } + } + + pageOneRl = (RelativeLayout) fragView.findViewById(R.id.tv_air_top_page_one); + pageTwoRl = (RelativeLayout) fragView.findViewById(R.id.tv_air_top_page_two); + pageThreeRl = (RelativeLayout) fragView.findViewById(R.id.tv_air_top_page_three); + pageOneRl.setVisibility(View.GONE); + pageTwoRl.setVisibility(View.GONE); + pageThreeRl.setVisibility(View.VISIBLE); + pageThreeLeft = (ImageView) fragView.findViewById(R.id.iv_page_three_left); + + mOpenClose = (TextView) fragView.findViewById(R.id.tv_fan_open); + mLeftRight = (TextView) fragView.findViewById(R.id.tv_right_left); + mUpDown = (TextView) fragView.findViewById(R.id.tv_up_down); + mSavePower = (TextView) fragView.findViewById(R.id.tv_save_power); + mCold = (TextView) fragView.findViewById(R.id.tv_cold); + mWarm = (TextView) fragView.findViewById(R.id.tv_warm); + mSleep = (TextView) fragView.findViewById(R.id.tv_sleep); + mAdd = (TextView) fragView.findViewById(R.id.tv_temperature_add); + mReduce = (TextView) fragView.findViewById(R.id.tv_temperature_reduce); + mWindSpeed = (TextView) fragView.findViewById(R.id.tv_air_wind_speed); + + + //进入首先发一下码组 + airAutoSendOrder(); + } + + private void initListener() { + pageThreeLeft.setOnClickListener(this); + mOpenClose.setOnClickListener(this); + mLeftRight.setOnClickListener(this); + mUpDown.setOnClickListener(this); + mSavePower.setOnClickListener(this); + mCold.setOnClickListener(this); + mWarm.setOnClickListener(this); + mSleep.setOnClickListener(this); + mAdd.setOnClickListener(this); + mReduce.setOnClickListener(this); + mWindSpeed.setOnClickListener(this); + } + + private void airAutoSendOrder() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + map.put("sendMsg", sendMsg); + util.requestPostByAsyn(ziId, NetWorkUrl.AIR_AUTO_SEND_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("airAutoSendOrder", "onSuccess: " + respone); + + } + + @Override + public void onFail(String message) { + + } + }); + } + + boolean isOpen = false; + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_page_three_left: + changeView(1); + break; + case R.id.tv_fan_open: + //发送开关指令 + if (isOpen) { + sendAirControlOrder(AIR_CLOSE); + isOpen = false; + } else { + sendAirControlOrder(AIR_OPEN); + isOpen = true; + } + break; + case R.id.tv_temperature_add: + sendAirControlOrder(AIR_TEM_ADD); + break; + case R.id.tv_temperature_reduce: + sendAirControlOrder(AIR_TEM_REDUCE); + break; + case R.id.tv_air_wind_speed: + sendAirControlOrder(AIR_WIND_SPEED); + break; + case R.id.tv_right_left: + sendAirControlOrder(AIR_RIGHT_LEFT); + break; + case R.id.tv_up_down: + sendAirControlOrder(AIR_UP_DOWN); + break; + case R.id.tv_cold: + sendAirControlOrder(AIR_COLD); + break; + case R.id.tv_warm: + sendAirControlOrder(AIR_WARM); + break; + case R.id.tv_sleep: + sendAirControlOrder(AIR_SLEEP); + break; + case R.id.tv_save_power: + sendAirControlOrder(AIR_POWER); + break; + } + } + + //发送指令 + private void sendAirControlOrder(String order) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + map.put("sendMsg", order); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_CONTROL_AIR_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addChildDevice", "onSuccess: " + respone); + + } + + @Override + public void onFail(String message) { + + } + }); + } +} +*/ diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/AirTwoFragment.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirTwoFragment.java new file mode 100644 index 0000000..b0b5d77 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirTwoFragment.java @@ -0,0 +1,224 @@ +/* +package com.yonsz.z1.device.airconditioner; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.util.HashMap; + +import static com.yonsz.z1.device.airconditioner.AirConditionActivity.groupNum; +import static com.yonsz.z1.device.airconditioner.AirConditionActivity.groupNum2; +import static com.yonsz.z1.device.airconditioner.AirOneFragment.changeView; +import static com.yonsz.z1.net.Constans.AIR_CLOSE; +import static com.yonsz.z1.net.Constans.AIR_COLD; +import static com.yonsz.z1.net.Constans.AIR_OPEN; +import static com.yonsz.z1.net.Constans.AIR_POWER; +import static com.yonsz.z1.net.Constans.AIR_RIGHT_LEFT; +import static com.yonsz.z1.net.Constans.AIR_SLEEP; +import static com.yonsz.z1.net.Constans.AIR_TEM_ADD; +import static com.yonsz.z1.net.Constans.AIR_TEM_REDUCE; +import static com.yonsz.z1.net.Constans.AIR_UP_DOWN; +import static com.yonsz.z1.net.Constans.AIR_WARM; +import static com.yonsz.z1.net.Constans.AIR_WIND_SPEED; + +*/ +/** + * Created by Administrator on 2017/6/29. + *//* + + +public class AirTwoFragment extends Fragment implements View.OnClickListener { + private View fragView; + private ImageView pageTwoRight, pageTwoLeft; + private RelativeLayout pageOneRl, pageTwoRl, pageThreeRl; + private TextView totalTv; + private String userId; + private String ziId; + private String sendMsg; + + private TextView mOpenClose, mLeftRight, mUpDown, mSavePower, mCold, mWarm, mSleep, mAdd, mReduce, mWindSpeed; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_air_one, null); + initViews(); + initListener(); + return fragView; + } + + private void initViews() { + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getActivity().getIntent().getExtras().get("ziId").toString(); + if (getActivity().getIntent().getExtras().get("GroupNum2") != null) { + groupNum2 = (int) getActivity().getIntent().getExtras().get("GroupNum2"); + String hexString = Integer.toHexString(groupNum2); + switch (hexString.length()) { + case 1: + sendMsg = "0" + hexString + "00"; + break; + case 2: + sendMsg = hexString + "00"; + break; + case 3: + sendMsg = hexString.substring(1, 2) + "0" + hexString.substring(0, 0); + break; + } + } + pageOneRl = (RelativeLayout) fragView.findViewById(R.id.tv_air_top_page_one); + pageTwoRl = (RelativeLayout) fragView.findViewById(R.id.tv_air_top_page_two); + pageThreeRl = (RelativeLayout) fragView.findViewById(R.id.tv_air_top_page_three); + pageOneRl.setVisibility(View.GONE); + pageTwoRl.setVisibility(View.VISIBLE); + pageThreeRl.setVisibility(View.GONE); + + pageTwoRight = (ImageView) fragView.findViewById(R.id.iv_page_two_right); + pageTwoLeft = (ImageView) fragView.findViewById(R.id.iv_page_two_left); + totalTv = (TextView) fragView.findViewById(R.id.tv_page_two_total); + switch (groupNum) { + case 2: + totalTv.setText("2"); + pageTwoRight.setVisibility(View.GONE); + break; + case 3: + totalTv.setText("3"); + break; + } + + mOpenClose = (TextView) fragView.findViewById(R.id.tv_fan_open); + mLeftRight = (TextView) fragView.findViewById(R.id.tv_right_left); + mUpDown = (TextView) fragView.findViewById(R.id.tv_up_down); + mSavePower = (TextView) fragView.findViewById(R.id.tv_save_power); + mCold = (TextView) fragView.findViewById(R.id.tv_cold); + mWarm = (TextView) fragView.findViewById(R.id.tv_warm); + mSleep = (TextView) fragView.findViewById(R.id.tv_sleep); + mAdd = (TextView) fragView.findViewById(R.id.tv_temperature_add); + mReduce = (TextView) fragView.findViewById(R.id.tv_temperature_reduce); + mWindSpeed = (TextView) fragView.findViewById(R.id.tv_air_wind_speed); + + + //进入首先发一下码组 + airAutoSendOrder(); + } + + private void initListener() { + pageTwoRight.setOnClickListener(this); + pageTwoLeft.setOnClickListener(this); + mOpenClose.setOnClickListener(this); + mLeftRight.setOnClickListener(this); + mUpDown.setOnClickListener(this); + mSavePower.setOnClickListener(this); + mCold.setOnClickListener(this); + mWarm.setOnClickListener(this); + mSleep.setOnClickListener(this); + mAdd.setOnClickListener(this); + mReduce.setOnClickListener(this); + mWindSpeed.setOnClickListener(this); + } + + private void airAutoSendOrder() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + map.put("sendMsg", sendMsg); + util.requestPostByAsyn(ziId, NetWorkUrl.AIR_AUTO_SEND_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("airAutoSendOrder", "onSuccess: " + respone); + + } + + @Override + public void onFail(String message) { + + } + }); + } + + boolean isOpen = false; + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_page_two_right: + changeView(2); + break; + case R.id.iv_page_two_left: + changeView(0); + break; + case R.id.tv_fan_open: + //发送开关指令 + if (isOpen) { + sendAirControlOrder(AIR_CLOSE); + isOpen = false; + } else { + sendAirControlOrder(AIR_OPEN); + isOpen = true; + } + break; + case R.id.tv_temperature_add: + sendAirControlOrder(AIR_TEM_ADD); + break; + case R.id.tv_temperature_reduce: + sendAirControlOrder(AIR_TEM_REDUCE); + break; + case R.id.tv_air_wind_speed: + sendAirControlOrder(AIR_WIND_SPEED); + break; + case R.id.tv_right_left: + sendAirControlOrder(AIR_RIGHT_LEFT); + break; + case R.id.tv_up_down: + sendAirControlOrder(AIR_UP_DOWN); + break; + case R.id.tv_cold: + sendAirControlOrder(AIR_COLD); + break; + case R.id.tv_warm: + sendAirControlOrder(AIR_WARM); + break; + case R.id.tv_sleep: + sendAirControlOrder(AIR_SLEEP); + break; + case R.id.tv_save_power: + sendAirControlOrder(AIR_POWER); + break; + } + } + + private void sendAirControlOrder(String order) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + map.put("sendMsg", order); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_CONTROL_AIR_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addChildDevice", "onSuccess: " + respone); + + } + + @Override + public void onFail(String message) { + + } + }); + } +} +*/ diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/AirhandFailActivity.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirhandFailActivity.java new file mode 100644 index 0000000..45f9230 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/AirhandFailActivity.java @@ -0,0 +1,118 @@ +package com.yonsz.z1.device.airconditioner; + +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import de.greenrobot.event.EventBus; + +/** + * Created by Administrator on 2017/7/27. + */ + +public class AirhandFailActivity extends BaseActivity { + private TitleView mTitleView; + private Button commit; + private EditText mEditText; + private EditText et_category; + private String deviceType; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_air_hand_fail); + initView(); + } + + private void initView() { + if (null != getIntent().getExtras().get("deviceType")) { + deviceType = getIntent().getExtras().get("deviceType").toString(); + } else { + deviceType = "001"; + } + mEditText = (EditText) findViewById(R.id.et_brand); + et_category = (EditText) findViewById(R.id.et_category); + mTitleView = (TitleView) findViewById(R.id.title_hand_fail); + mTitleView.setHead(R.string.add_fail); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + commit = (Button) findViewById(R.id.bt_restart_config); + commit.setOnClickListener(this); + + if (getIntent().getExtras().get("tmp_brand") != null) { + mEditText.setText(getIntent().getExtras().get("tmp_brand").toString()); + } + + if (deviceType != null) { + switch (deviceType) { + case Constans.AIR_TAG: + et_category.setText("空调"); + break; + case Constans.FAN_TAG: + et_category.setText(R.string.fan); + break; + case Constans.TV_TAG: + et_category.setText("电视"); + break; + case Constans.SWEEP_TAG: + et_category.setText("扫地机"); + break; + case Constans.TVONE_TAG: + et_category.setText("机顶盒"); + break; + case Constans.AIR_CLEANER: + et_category.setText("净化器"); + break; + case Constans.MOVIE_CAMERA: + et_category.setText("投影仪"); + break; + } + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_restart_config: + ToastUtil.show(AirhandFailActivity.this, "已提交"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/CircleIndicator.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/CircleIndicator.java new file mode 100644 index 0000000..591d366 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/CircleIndicator.java @@ -0,0 +1,279 @@ +package com.yonsz.z1.device.airconditioner; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.drawable.ShapeDrawable; +import android.graphics.drawable.shapes.OvalShape; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; + +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by xiayong on 2015/9/29. + */ +public class CircleIndicator extends View { + private ViewPager viewPager; + private List tabItems; + private ShapeHolder movingItem; + + //config list + private int mCurItemPosition; + private float mCurItemPositionOffset; + private float mIndicatorRadius; + private float mIndicatorMargin; + private int mIndicatorBackground; + private int mIndicatorSelectedBackground; + private Gravity mIndicatorLayoutGravity; + private Mode mIndicatorMode; + + //default value + private final int DEFAULT_INDICATOR_RADIUS = 10; + private final int DEFAULT_INDICATOR_MARGIN = 40; + private final int DEFAULT_INDICATOR_BACKGROUND = Color.BLUE; + private final int DEFAULT_INDICATOR_SELECTED_BACKGROUND = Color.RED; + private final int DEFAULT_INDICATOR_LAYOUT_GRAVITY = Gravity.CENTER.ordinal(); + private final int DEFAULT_INDICATOR_MODE = Mode.SOLO.ordinal(); + + public enum Gravity { + LEFT, + CENTER, + RIGHT + } + + public enum Mode { + INSIDE, + OUTSIDE, + SOLO + } + + public CircleIndicator(Context context) { + super(context); + init(context, null); + } + + public CircleIndicator(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + public CircleIndicator(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs); + } + + private void init(Context context, AttributeSet attrs) { + tabItems = new ArrayList<>(); + handleTypedArray(context, attrs); + } + + private void handleTypedArray(Context context, AttributeSet attrs) { + if (attrs == null) + return; + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CircleIndicator); + mIndicatorRadius = typedArray.getDimensionPixelSize(R.styleable.CircleIndicator_ci_radius, DEFAULT_INDICATOR_RADIUS); + mIndicatorMargin = typedArray.getDimensionPixelSize(R.styleable.CircleIndicator_ci_margin, DEFAULT_INDICATOR_MARGIN); + mIndicatorBackground = typedArray.getColor(R.styleable.CircleIndicator_ci_background, DEFAULT_INDICATOR_BACKGROUND); + mIndicatorSelectedBackground = typedArray.getColor(R.styleable.CircleIndicator_ci_selected_background, DEFAULT_INDICATOR_SELECTED_BACKGROUND); + int gravity = typedArray.getInt(R.styleable.CircleIndicator_ci_gravity, DEFAULT_INDICATOR_LAYOUT_GRAVITY); + mIndicatorLayoutGravity = Gravity.values()[gravity]; + int mode = typedArray.getInt(R.styleable.CircleIndicator_ci_mode, DEFAULT_INDICATOR_MODE); + mIndicatorMode = Mode.values()[mode]; + typedArray.recycle(); + } + + public void setViewPager(final ViewPager viewPager) { + this.viewPager = viewPager; + createTabItems(); + createMovingItem(); + setUpListener(); + } + + private void setUpListener() { + viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + super.onPageScrolled(position, positionOffset, positionOffsetPixels); + if (mIndicatorMode != Mode.SOLO) { + trigger(position, positionOffset); + } + } + + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + if (mIndicatorMode == Mode.SOLO) { + trigger(position, 0); + } + } + }); + } + + /** + * trigger to redraw the indicator when the ViewPager's selected item changed! + * + * @param position + * @param positionOffset + */ + private void trigger(int position, float positionOffset) { + CircleIndicator.this.mCurItemPosition = position; + CircleIndicator.this.mCurItemPositionOffset = positionOffset; + Log.e("CircleIndicator", "onPageScrolled()" + position + ":" + positionOffset); + requestLayout(); + invalidate(); + } + + private void createTabItems() { + for (int i = 0; i < viewPager.getAdapter().getCount(); i++) { + OvalShape circle = new OvalShape(); + ShapeDrawable drawable = new ShapeDrawable(circle); + ShapeHolder shapeHolder = new ShapeHolder(drawable); + Paint paint = drawable.getPaint(); + paint.setColor(mIndicatorBackground); + paint.setAntiAlias(true); + shapeHolder.setPaint(paint); + tabItems.add(shapeHolder); + } + } + + private void createMovingItem() { + OvalShape circle = new OvalShape(); + ShapeDrawable drawable = new ShapeDrawable(circle); + movingItem = new ShapeHolder(drawable); + Paint paint = drawable.getPaint(); + paint.setColor(mIndicatorSelectedBackground); + paint.setAntiAlias(true); + + switch (mIndicatorMode) { + case INSIDE: + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP)); + break; + case OUTSIDE: + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); + break; + case SOLO: + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)); + break; + } + + movingItem.setPaint(paint); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + Log.e("CircleIndicator", "onLayout()"); + super.onLayout(changed, left, top, right, bottom); + final int width = getWidth(); + final int height = getHeight(); + layoutTabItems(width, height); + layoutMovingItem(mCurItemPosition, mCurItemPositionOffset); + } + + private void layoutTabItems(final int containerWidth, final int containerHeight) { + if (tabItems == null) { + throw new IllegalStateException("forget to create tabItems?"); + } + final float yCoordinate = containerHeight * 0.5f; + final float startPosition = startDrawPosition(containerWidth); + for (int i = 0; i < tabItems.size(); i++) { + ShapeHolder item = tabItems.get(i); + item.resizeShape(2 * mIndicatorRadius, 2 * mIndicatorRadius); + item.setY(yCoordinate - mIndicatorRadius); + float x = startPosition + (mIndicatorMargin + mIndicatorRadius * 2) * i; + item.setX(x); + } + + } + + private float startDrawPosition(final int containerWidth) { + if (mIndicatorLayoutGravity == Gravity.LEFT) + return 0; + float tabItemsLength = tabItems.size() * (2 * mIndicatorRadius + mIndicatorMargin) - mIndicatorMargin; + if (containerWidth < tabItemsLength) { + return 0; + } + if (mIndicatorLayoutGravity == Gravity.CENTER) { + return (containerWidth - tabItemsLength) / 2; + } + return containerWidth - tabItemsLength; + } + + private void layoutMovingItem(final int position, final float positionOffset) { + if (movingItem == null) { + throw new IllegalStateException("forget to create movingItem?"); + } + + if (tabItems.size() == 0) { + return; + } + ShapeHolder item = tabItems.get(position); + movingItem.resizeShape(item.getWidth(), item.getHeight()); + float x = item.getX() + (mIndicatorMargin + mIndicatorRadius * 2) * positionOffset; + movingItem.setX(x); + movingItem.setY(item.getY()); + + } + + @Override + protected void onDraw(Canvas canvas) { + Log.e("CircleIndicator", "onDraw()"); + super.onDraw(canvas); + /*int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, + Canvas.MATRIX_SAVE_FLAG | + Canvas.CLIP_SAVE_FLAG | + Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | + Canvas.FULL_COLOR_LAYER_SAVE_FLAG | + Canvas.CLIP_TO_LAYER_SAVE_FLAG);*/ + int sc = 0; + for (ShapeHolder item : tabItems) { + drawItem(canvas, item); + } + + if (movingItem != null) { + drawItem(canvas, movingItem); + } + canvas.restoreToCount(sc); + } + + private void drawItem(Canvas canvas, ShapeHolder shapeHolder) { + canvas.save(); + canvas.translate(shapeHolder.getX(), shapeHolder.getY()); + shapeHolder.getShape().draw(canvas); + canvas.restore(); + } + + public void setIndicatorRadius(float mIndicatorRadius) { + this.mIndicatorRadius = mIndicatorRadius; + } + + public void setIndicatorMargin(float mIndicatorMargin) { + this.mIndicatorMargin = mIndicatorMargin; + } + + public void setIndicatorBackground(int mIndicatorBackground) { + this.mIndicatorBackground = mIndicatorBackground; + } + + public void setIndicatorSelectedBackground(int mIndicatorSelectedBackground) { + this.mIndicatorSelectedBackground = mIndicatorSelectedBackground; + } + + public void setIndicatorLayoutGravity(Gravity mIndicatorLayoutGravity) { + this.mIndicatorLayoutGravity = mIndicatorLayoutGravity; + } + + public void setIndicatorMode(Mode mIndicatorMode) { + this.mIndicatorMode = mIndicatorMode; + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/MyFrageStatePagerAdapter.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/MyFrageStatePagerAdapter.java new file mode 100644 index 0000000..a80e2ef --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/MyFrageStatePagerAdapter.java @@ -0,0 +1,30 @@ +package com.yonsz.z1.device.airconditioner; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentStatePagerAdapter; + +import java.util.List; + +/** + * Created by Administrator on 2017/6/29. + */ + +public class MyFrageStatePagerAdapter extends FragmentStatePagerAdapter { + private List fragmentList; + + public MyFrageStatePagerAdapter(FragmentManager fm, List fragmentList) { + super(fm); + this.fragmentList = fragmentList; + } + + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/SetTimeActivity.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/SetTimeActivity.java new file mode 100644 index 0000000..5276c20 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/SetTimeActivity.java @@ -0,0 +1,299 @@ +package com.yonsz.z1.device.airconditioner; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.ToggleButton; + +import com.alibaba.fastjson.JSON; +import com.bigkoo.pickerview.TimePickerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.childdevice.SwitcherTimeActivity; +import com.yonsz.z1.view.TitleView; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; + +import static com.yonsz.z1.R.id.tog_btn_friday; +import static com.yonsz.z1.R.id.tog_btn_monday; +import static com.yonsz.z1.R.id.tog_btn_saturday; +import static com.yonsz.z1.R.id.tog_btn_sunday; +import static com.yonsz.z1.R.id.tog_btn_thursday; +import static com.yonsz.z1.R.id.tog_btn_tuesday; +import static com.yonsz.z1.R.id.tog_btn_wednesday; +import static com.yonsz.z1.R.id.tv_start_time; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.LEARN_RESULT; +import static com.yonsz.z1.net.Constans.UPDATE_TIMER_SWITCH_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_TIMER_SWITCH_SUCCESS; + +/** + * Created by Administrator on 2017/6/27. + */ + +public class SetTimeActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout startTime, endTime; + private TextView startTimeTv, endTimeTv; + private ToggleButton mondayTog, tuesdayTog, wednesdayTog, thursdayTog, fridayTog, saturdayTog, sundayTog; + private String ziId; + private String id; + private boolean isUpadate = false; + private String repeatWeek = ""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_set_time); + initView(); + initListner(); + } + + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + id = getIntent().getExtras().get("id").toString(); + mondayTog = (ToggleButton) findViewById(tog_btn_monday); + tuesdayTog = (ToggleButton) findViewById(R.id.tog_btn_tuesday); + wednesdayTog = (ToggleButton) findViewById(R.id.tog_btn_wednesday); + thursdayTog = (ToggleButton) findViewById(R.id.tog_btn_thursday); + fridayTog = (ToggleButton) findViewById(R.id.tog_btn_friday); + saturdayTog = (ToggleButton) findViewById(R.id.tog_btn_saturday); + sundayTog = (ToggleButton) findViewById(R.id.tog_btn_sunday); + + startTimeTv = (TextView) findViewById(tv_start_time); + endTimeTv = (TextView) findViewById(R.id.tv_end_time); + startTime = (RelativeLayout) findViewById(R.id.rl_top_open); + endTime = (RelativeLayout) findViewById(R.id.rl_time_close); + mTitleView = (TitleView) findViewById(R.id.title_time_save); + mTitleView.setHead(R.string.time_reserve); + mTitleView.setHeadFuntionTxtAndSise16("保存"); + // mTitleView.setHeadFuntionTxtColor(false); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (isUpadate) { + updateTimerSwitch(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + startTimeTv.setText(getIntent().getExtras().get("startTime").toString()); + endTimeTv.setText(getIntent().getExtras().get("endTime").toString()); + + String week = getIntent().getExtras().get("week").toString(); + if (!week.trim().equals("")) { + if (week.substring(0, 1).equals("1")) { + mondayTog.setChecked(true); + } + if (week.substring(1, 2).equals("1")) { + tuesdayTog.setChecked(true); + } + if (week.substring(2, 3).equals("1")) { + wednesdayTog.setChecked(true); + } + if (week.substring(3, 4).equals("1")) { + thursdayTog.setChecked(true); + } + if (week.substring(4, 5).equals("1")) { + fridayTog.setChecked(true); + } + if (week.substring(5, 6).equals("1")) { + saturdayTog.setChecked(true); + } + if (week.substring(6, 7).equals("1")) { + sundayTog.setChecked(true); + } + } + } + + private void updateTimerSwitch() { + setRepeatWeek(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceType", AIR_TAG); + map.put("id", id); + map.put("openEnable", "1"); + map.put("closeEnable", "1"); + map.put("timeOn", startTimeTv.getText().toString()); + map.put("timeOff", endTimeTv.getText().toString()); + if (repeatWeek.length() == 7) { + if (repeatWeek.equals("0000000")) { + ToastUtil.show(this, "请至少选择一个重复时间"); + repeatWeek = ""; + return; + } else { + map.put("week", repeatWeek); + } + } else { + repeatWeek = ""; + ToastUtil.show(this, "重复时间有误"); + return; + } + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.TIMEMANAGER_UPDATEDEVICETIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("gaojieTAG", "ShareDeviceActivity onSuccess()" + respone); + TimeEntity obj = JSON.parseObject(respone, TimeEntity.class); + Message msg = mHandler.obtainMessage(UPDATE_TIMER_SWITCH_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_TIMER_SWITCH_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void setRepeatWeek() { + if (mondayTog.isChecked()) { + repeatWeek += 1; + } else { + repeatWeek += 0; + } + if (tuesdayTog.isChecked()) { + repeatWeek += 1; + } else { + repeatWeek += 0; + } + if (wednesdayTog.isChecked()) { + repeatWeek += 1; + } else { + repeatWeek += 0; + } + if (thursdayTog.isChecked()) { + repeatWeek += 1; + } else { + repeatWeek += 0; + } + if (fridayTog.isChecked()) { + repeatWeek += 1; + } else { + repeatWeek += 0; + } + if (saturdayTog.isChecked()) { + repeatWeek += 1; + } else { + repeatWeek += 0; + } + if (sundayTog.isChecked()) { + repeatWeek += 1; + } else { + repeatWeek += 0; + } + } + + private void initListner() { + endTime.setOnClickListener(this); + mondayTog.setOnClickListener(this); + tuesdayTog.setOnClickListener(this); + wednesdayTog.setOnClickListener(this); + thursdayTog.setOnClickListener(this); + fridayTog.setOnClickListener(this); + saturdayTog.setOnClickListener(this); + sundayTog.setOnClickListener(this); + startTime.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rl_top_open: + setTime(startTimeTv); + break; + case R.id.rl_time_close: + setTime(endTimeTv); + break; + case tog_btn_monday: + case tog_btn_tuesday: + case tog_btn_thursday: + case tog_btn_wednesday: + case tog_btn_friday: + case tog_btn_saturday: + case tog_btn_sunday: + isUpadate = true; + // mTitleView.setHeadFuntionTxtColor(true); + break; + } + + } + + private void setTime(final TextView textView) { + TimePickerView pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() { + @Override + public void onTimeSelect(Date date, View v) {//选中事件回调 + textView.setText(getTime(date)); + isUpadate = true; + // mTitleView.setHeadFuntionTxtColor(true); + } + })//年月日时分秒 的显示与否,不设置则默认全部显示 + .setType(new boolean[]{false, false, false, true, true, false}) + .setLabel("", "", "", "点", "分", "") + .isCenterLabel(false) + .setDividerColor(Color.DKGRAY) + .setContentSize(21) + .setBackgroundId(0x00FFFFFF) //设置外部遮罩颜色 + .setDecorView(null) + .build(); + pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。 + pvTime.show(); + } + + private String getTime(Date date) {//可根据需要自行截取数据显示 + SimpleDateFormat format = new SimpleDateFormat("HH:mm"); + return format.format(date); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_TIMER_SWITCH_SUCCESS: + ToastUtil.show(SetTimeActivity.this, "保存成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(SetTimeActivity.this, SwitcherTimeActivity.class); + intent.putExtra("timePosition", (int) getIntent().getExtras().get("timePosition")); + intent.putExtra("startTime", startTimeTv.getText().toString()); + intent.putExtra("endTime", endTimeTv.getText().toString()); + intent.putExtra("week", repeatWeek); + intent.putExtra("id", id); + setResult(LEARN_RESULT, intent); + finish(); + } + }, 1000); + break; + case UPDATE_TIMER_SWITCH_FAIL: + + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/ShapeHolder.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/ShapeHolder.java new file mode 100644 index 0000000..7ff9a1f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/ShapeHolder.java @@ -0,0 +1,88 @@ +package com.yonsz.z1.device.airconditioner; + +import android.graphics.Paint; +import android.graphics.drawable.ShapeDrawable; +import android.graphics.drawable.shapes.Shape; + +/** + * A data structure that holds a Shape and various properties that can be used to define + * how the shape is drawn. + */ +public class ShapeHolder { + private float x = 0, y = 0; + private ShapeDrawable shape; + private int color; + private float alpha = 1f; + private Paint paint; + + public void setPaint(Paint value) { + paint = value; + } + + public Paint getPaint() { + return paint; + } + + public void setX(float value) { + x = value; + } + + public float getX() { + return x; + } + + public void setY(float value) { + y = value; + } + + public float getY() { + return y; + } + + public void setShape(ShapeDrawable value) { + shape = value; + } + + public ShapeDrawable getShape() { + return shape; + } + + public int getColor() { + return color; + } + + public void setColor(int value) { + shape.getPaint().setColor(value); + color = value; + + } + + public void setAlpha(float alpha) { + this.alpha = alpha; + shape.setAlpha((int) ((alpha * 255f) + .5f)); + } + + public float getWidth() { + return shape.getShape().getWidth(); + } + + public void setWidth(float width) { + Shape s = shape.getShape(); + s.resize(width, s.getHeight()); + } + + public float getHeight() { + return shape.getShape().getHeight(); + } + + public void setHeight(float height) { + Shape s = shape.getShape(); + s.resize(s.getWidth(), height); + } + public void resizeShape(final float width,final float height){ + shape.getShape().resize(width,height); + } + public ShapeHolder(ShapeDrawable s) { + shape = s; + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/TimeEntity.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/TimeEntity.java new file mode 100644 index 0000000..0b7eb4d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/TimeEntity.java @@ -0,0 +1,27 @@ +package com.yonsz.z1.device.airconditioner; + +/** + * Created by Administrator on 2017/6/27. + */ + +public class TimeEntity { + private String startTime; + private String endTime; + private boolean isOpen; + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/TimeReserveActivity.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/TimeReserveActivity.java new file mode 100644 index 0000000..00b12f3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/TimeReserveActivity.java @@ -0,0 +1,854 @@ +package com.yonsz.z1.device.airconditioner; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.bigkoo.pickerview.OptionsPickerView; +import com.bigkoo.pickerview.TimePickerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.TimeEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.SwitchView; +import com.yonsz.z1.view.TitleView; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.GET_TIME_FAIL; +import static com.yonsz.z1.net.Constans.GET_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.TIME_RESULT; +import static com.yonsz.z1.net.Constans.UPDATE_ONCE_TIMER_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_TIMER_SWITCH_FAIL; + +/** + * Created by Administrator on 2017/6/27. + */ + +public class TimeReserveActivity { + /*private static final List options1Items = new ArrayList<>(); + private ListView mRecycMsgList; + private TitleView mTitleView; + private List mDatas; + private TimeEntity mTimeEntity; + private TimeReserveAdapter mAdapter; + private String ziId; + private RelativeLayout delayedOpenRl, delayedCloseRl, thirdRl, fourRl, fiveRl; + private TextView delayedOpenTv, delayedCloseTv, thirdStartTv, thirdEndTv, fourStartTv, fourEndTv, fiveStartTv, fiveEndTv; + private SwitchView witchOne, witchTwo, witchThree, witchFour, witchFive, witchThreeClose, witchFourClose, witchFiveClose; + private String delayedOpenId, delayedCloseId, thirdId, fourId, fiveId; + private TextView weekThreeTv, weekFourTv, weekFiveTv; + private String weekThree = "", weekFour = "", weekFive = ""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_time_reserve); + initView(); + initData(); + initListener(); + } + + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + delayedOpenRl = (RelativeLayout) findViewById(R.id.rl_delayed_open); + delayedCloseRl = (RelativeLayout) findViewById(R.id.rl_delayed_close); + thirdRl = (RelativeLayout) findViewById(R.id.rl_third); + fourRl = (RelativeLayout) findViewById(R.id.rl_fourth); + fiveRl = (RelativeLayout) findViewById(R.id.rl_five); + + delayedOpenTv = (TextView) findViewById(R.id.tv_delayed_open); + delayedCloseTv = (TextView) findViewById(R.id.tv_delayed_close); + thirdStartTv = (TextView) findViewById(R.id.tv_start_time_third); + thirdEndTv = (TextView) findViewById(R.id.tv_end_time_third); + fourStartTv = (TextView) findViewById(R.id.tv_start_time_four); + fourEndTv = (TextView) findViewById(R.id.tv_end_time_four); + fiveStartTv = (TextView) findViewById(R.id.tv_start_time_five); + fiveEndTv = (TextView) findViewById(R.id.tv_end_time_five); + weekThreeTv = (TextView) findViewById(R.id.tv_week_three); + weekFourTv = (TextView) findViewById(R.id.tv_week_four); + weekFiveTv = (TextView) findViewById(R.id.tv_week_five); + + witchOne = (SwitchView) findViewById(R.id.stv_one); + witchTwo = (SwitchView) findViewById(R.id.stv_two); + witchThree = (SwitchView) findViewById(R.id.stv_third); + witchFour = (SwitchView) findViewById(R.id.stv_four); + witchFive = (SwitchView) findViewById(R.id.stv_five); + witchThreeClose = (SwitchView) findViewById(R.id.stv_third_close); + witchFourClose = (SwitchView) findViewById(R.id.stv_four_close); + witchFiveClose = (SwitchView) findViewById(R.id.stv_five_close); + + mRecycMsgList = (ListView) findViewById(R.id.time_reserve_list); + mTitleView = (TitleView) findViewById(R.id.title_time_reserve); + mTitleView.setHead(R.string.time_reserve); + mTitleView.setHeadFuntionTxt(""); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + if (AppIdUtil.isWork()) { + witchOne.setColor(0xFF24C1DA, 0xFF3AC652); + witchTwo.setColor(0xFF24C1DA, 0xFF3AC652); + witchThree.setColor(0xFF24C1DA, 0xFF3AC652); + witchFour.setColor(0xFF24C1DA, 0xFF3AC652); + witchFive.setColor(0xFF24C1DA, 0xFF3AC652); + witchThreeClose.setColor(0xFF24C1DA, 0xFF3AC652); + witchFourClose.setColor(0xFF24C1DA, 0xFF3AC652); + witchFiveClose.setColor(0xFF24C1DA, 0xFF3AC652); + } + } + + + private void initListener() { + delayedOpenRl.setOnClickListener(this); + delayedCloseRl.setOnClickListener(this); + thirdRl.setOnClickListener(this); + fourRl.setOnClickListener(this); + fiveRl.setOnClickListener(this); + witchOne.setOnClickListener(this); + witchTwo.setOnClickListener(this); + witchThree.setOnClickListener(this); + witchFour.setOnClickListener(this); + witchFive.setOnClickListener(this); + witchThreeClose.setOnClickListener(this); + witchFourClose.setOnClickListener(this); + witchFiveClose.setOnClickListener(this); + } + + private void initData() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceType", AIR_TAG); + map.put("deviceId", getIntent().getExtras().get("id").toString()); + netWorkUtil.requestGetByAsy(NetWorkUrl.SELECT_TIMER_SWITCH, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("gaojieTAG", respone); + // Log.i("gaojieTAG", "ShareDeviceActivity onSuccess()" + respone); + TimeEntity obj = JSON.parseObject(respone, TimeEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_delayed_open: + setTime1(witchOne, delayedOpenId, delayedOpenTv); + break; + case R.id.rl_delayed_close: + setTime1(witchTwo, delayedCloseId, delayedCloseTv); + break; + case R.id.rl_third: + if (DensityUtil.isNetworkConnected(TimeReserveActivity.this)) { + intent = new Intent(TimeReserveActivity.this, SetTimeActivity.class); + intent.putExtra("timePosition", 3); + intent.putExtra("ziId", ziId); + intent.putExtra("startTime", thirdStartTv.getText().toString()); + intent.putExtra("endTime", thirdEndTv.getText().toString()); + intent.putExtra("week", weekThree); + intent.putExtra("id", thirdId); + startActivityForResult(intent, TIME_RESULT); + } else { + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.rl_fourth: + if (DensityUtil.isNetworkConnected(TimeReserveActivity.this)) { + intent = new Intent(TimeReserveActivity.this, SetTimeActivity.class); + intent.putExtra("timePosition", 4); + intent.putExtra("ziId", ziId); + intent.putExtra("startTime", fourStartTv.getText().toString()); + intent.putExtra("endTime", fourEndTv.getText().toString()); + intent.putExtra("week", weekFour); + intent.putExtra("id", fourId); + startActivityForResult(intent, TIME_RESULT); + } else { + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.rl_five: + if (DensityUtil.isNetworkConnected(TimeReserveActivity.this)) { + intent = new Intent(TimeReserveActivity.this, SetTimeActivity.class); + intent.putExtra("timePosition", 5); + intent.putExtra("ziId", ziId); + intent.putExtra("startTime", fiveStartTv.getText().toString()); + intent.putExtra("endTime", fiveEndTv.getText().toString()); + intent.putExtra("week", weekFive); + intent.putExtra("id", fiveId); + startActivityForResult(intent, TIME_RESULT); + } else { + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.stv_one: + if (!witchOne.isOpened()) { + updateOnceTimer(delayedOpenId, "0", delayedOpenTv); + // delayedOpenTv.setVisibility(View.GONE); + delayedOpenTv.setText(getString(R.string.Countdown_closure)); + } else { + witchOne.setOpened(false); + setTime1(witchOne, delayedOpenId, delayedOpenTv); + // updateOnceTimer(delayedOpenId, "1", delayedOpenTv); + } + break; + case R.id.stv_two: + if (!witchTwo.isOpened()) { + updateOnceTimer(delayedCloseId, "0", delayedCloseTv); + // delayedCloseTv.setVisibility(View.GONE); + delayedCloseTv.setText(getString(R.string.Countdown_closure)); + } else { + witchTwo.setOpened(false); + setTime1(witchTwo, delayedCloseId, delayedCloseTv); + // updateOnceTimer(delayedCloseId, "1", delayedCloseTv); + } + break; + case R.id.stv_third: + case R.id.stv_third_close: + updateTimerSwitch(thirdId, witchThree.isOpened(), thirdStartTv, thirdEndTv, witchThreeClose.isOpened()); + break; + case R.id.stv_four: + case R.id.stv_four_close: + updateTimerSwitch(fourId, witchFour.isOpened(), fourStartTv, fourEndTv, witchFourClose.isOpened()); + break; + case R.id.stv_five: + case R.id.stv_five_close: + updateTimerSwitch(fourId, witchFive.isOpened(), fourStartTv, fourEndTv, witchFiveClose.isOpened()); + break; + } + } + + private void updateOnceTimer(String id, String flag, TextView textView) { + int min; + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("id", id); + map.put("openFlag", flag); + // map.put("time", textView.getText().toString()); + if (flag.equals("1")) { + String s = textView.getText().toString(); + if (s.substring(s.length() - 3, s.length()).equals(getString(R.string.minute_later))) { + min = Integer.parseInt(s.substring(0, s.length() - 3)); + } else if (s.substring(s.length() - 3, s.length()).equals(getString(R.string.hour_later))) { + min = Integer.parseInt(s.substring(0, s.length() - 3)) * 60; + } else { + if (s.substring(s.length() - 7, s.length()).equals("eslater")) { + min = Integer.parseInt(s.substring(0, s.length() - 12)); + } else { + min = Integer.parseInt(s.substring(0, s.length() - 10)) * 60; + } + } + map.put("min", min + ""); + } else { + map.put("min", -1 + ""); + } + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.TIMEMANAGER_UPDATEDEVICEONCETIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("gaojieTAG", "ShareDeviceActivity onSuccess()" + respone); + *//*TimeEntity obj = JSON.parseObject(respone, TimeEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_ONCE_TIMER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_ONCE_TIMER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*//* + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_ONCE_TIMER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void updateTimerSwitch(String id, boolean openflag, TextView textView, TextView textView2, boolean closeflag) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceType", AIR_TAG); + map.put("id", id); + if (openflag) { + map.put("openEnable", "1"); + } else { + map.put("openEnable", "0"); + } + if (closeflag) { + map.put("closeEnable", "1"); + } else { + map.put("closeEnable", "0"); + } + map.put("timeOn", textView.getText().toString()); + map.put("timeOff", textView2.getText().toString()); + // map.put("week", "1100011"); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.TIMEMANAGER_UPDATEDEVICETIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("gaojieTAG", "ShareDeviceActivity onSuccess()" + respone); + *//*TimeEntity obj = JSON.parseObject(respone, TimeEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_TIMER_SWITCH_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_TIMER_SWITCH_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*//* + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_TIMER_SWITCH_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_TIME_SUCCESS: + TimeEntity entity1 = (TimeEntity) msg.obj; + setTimeShow(entity1); + break; + case GET_TIME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void setTime(final SwitchView witch, final String id, final TextView textView) { + TimePickerView pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() { + @Override + public void onTimeSelect(Date date, View v) {//选中事件回调 + textView.setText(getTime(date)); + updateOnceTimer(id, "1", textView); + witch.setOpened(true); + } + })//年月日时分秒 的显示与否,不设置则默认全部显示 + .setType(new boolean[]{false, false, false, true, true, false}) + .setLabel("", "", "", "点", "分", "") + .isCenterLabel(false) + .setDividerColor(Color.DKGRAY) + .setContentSize(21) + .setBackgroundId(0x00FFFFFF) //设置外部遮罩颜色 + .setDecorView(null) + .build(); + pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。 + pvTime.show(); + } + + + private void setTime1(final SwitchView witch, final String id, final TextView textView) { + options1Items.clear(); + options1Items.add(getString(R.string.time_1m)); + options1Items.add(getString(R.string.time_3m)); + options1Items.add(getString(R.string.time_5m)); + options1Items.add(getString(R.string.time_10m)); + options1Items.add(getString(R.string.time_15m)); + options1Items.add(getString(R.string.time_30m)); + options1Items.add(getString(R.string.time_1h)); + options1Items.add(getString(R.string.time_2h)); + options1Items.add(getString(R.string.time_3h)); + options1Items.add(getString(R.string.time_5h)); + options1Items.add(getString(R.string.time_8h)); + options1Items.add(getString(R.string.time_10h)); + OptionsPickerView pvOptions = new OptionsPickerView.Builder(TimeReserveActivity.this, new OptionsPickerView.OnOptionsSelectListener() { + @Override + public void onOptionsSelect(int options1, int option2, int options3, View v) { + //返回的分别是三个级别的选中位置 + String s = options1Items.get(options1); + textView.setVisibility(View.VISIBLE); + textView.setText(s + getString(R.string.later)); + updateOnceTimer(id, "1", textView); + witch.setOpened(true); + } + }) + + .setTextColorCenter(Color.BLACK)//设置选中项的颜色 + .build(); + pvOptions.setPicker(options1Items); + pvOptions.show(); + } + + private String getTime(Date date) {//可根据需要自行截取数据显示 + SimpleDateFormat format = new SimpleDateFormat("HH:mm"); + return format.format(date); + } + + private void setTimeShow(TimeEntity entity) { + if (entity.getData() != null) { + for (int i = 0; i < entity.getData().size(); i++) { + List objEntities2 = entity.getData().get(i); + if (objEntities2.size() == 2) { + for (int j = 0; j < 2; j++) { + switch (objEntities2.get(j).getSid()) { + case "B1": + delayedOpenId = objEntities2.get(j).getId(); + int restMin = Integer.parseInt(objEntities2.get(j).getRestMin()); + if (restMin != -1) { + delayedOpenTv.setVisibility(View.VISIBLE); + if (restMin < 60) { + delayedOpenTv.setText(restMin + getString(R.string.minute_later)); + } else { + int minite = restMin % 60; + int hour = restMin / 60; + if (minite == 0) { + delayedOpenTv.setText(hour + getString(R.string.hour_later)); + } else { + delayedOpenTv.setText(hour + getString(R.string.hour) + minite + getString(R.string.minute_later)); + } + } + } else { + delayedOpenTv.setText(getString(R.string.Countdown_closure)); + } + + if (objEntities2.get(j).getFlag().equals("0")) { + witchOne.setOpened(false); + } else { + witchOne.setOpened(true); + } + break; + case "B2": + delayedCloseId = objEntities2.get(j).getId(); + int restMin1 = Integer.parseInt(objEntities2.get(j).getRestMin()); + if (restMin1 != -1) { + delayedCloseTv.setVisibility(View.VISIBLE); + if (restMin1 < 60) { + delayedCloseTv.setText(restMin1 + getString(R.string.minute_later)); + } else { + int minite = restMin1 % 60; + int hour = restMin1 / 60; + if (minite == 0) { + delayedCloseTv.setText(hour + getString(R.string.hour_later)); + } else { + delayedCloseTv.setText(hour + getString(R.string.hour) + minite + getString(R.string.minute_later)); + } + } + } else { + delayedCloseTv.setText(getString(R.string.Countdown_closure)); + } + if (objEntities2.get(j).getFlag().equals("0")) { + witchTwo.setOpened(false); + } else { + witchTwo.setOpened(true); + } + break; + } + } + } else { + for (int k = 0; k < 3; k++) { + switch (objEntities2.get(k).getSid()) { + case "A1": + thirdId = objEntities2.get(k).getId(); + thirdStartTv.setText(objEntities2.get(k).getTimeOn()); + thirdEndTv.setText(objEntities2.get(k).getTimeOff()); + if (objEntities2.get(k).getOpenEnable().equals("0")) { + witchThree.setOpened(false); + } else { + witchThree.setOpened(true); + } + if (objEntities2.get(k).getCloseEnable().equals("0")) { + witchThreeClose.setOpened(false); + } else { + witchThreeClose.setOpened(true); + } + if (objEntities2.get(k).getWeekNum1() != null) { + String str = ""; + if (objEntities2.get(k).getWeekNum1().equals("1")) { + str += "周一 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (objEntities2.get(k).getWeekNum2().equals("1")) { + str += "周二 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (objEntities2.get(k).getWeekNum3().equals("1")) { + str += "周三 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (objEntities2.get(k).getWeekNum4().equals("1")) { + str += "周四 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (objEntities2.get(k).getWeekNum5().equals("1")) { + str += "周五 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (objEntities2.get(k).getWeekNum6().equals("1")) { + str += "周六 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (objEntities2.get(k).getWeekNum7().equals("1")) { + str += "周天"; + weekThree += "1"; + } else { + weekThree += "0"; + } + weekThreeTv.setText(str); + } + break; + case "A2": + fourId = objEntities2.get(k).getId(); + fourStartTv.setText(objEntities2.get(k).getTimeOn()); + fourEndTv.setText(objEntities2.get(k).getTimeOff()); + if (objEntities2.get(k).getOpenEnable().equals("0")) { + witchFour.setOpened(false); + } else { + witchFour.setOpened(true); + } + if (objEntities2.get(k).getCloseEnable().equals("0")) { + witchFourClose.setOpened(false); + } else { + witchFourClose.setOpened(true); + } + if (objEntities2.get(k).getWeekNum1() != null) { + String str = ""; + if (objEntities2.get(k).getWeekNum1().equals("1")) { + str += "周一 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (objEntities2.get(k).getWeekNum2().equals("1")) { + str += "周二 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (objEntities2.get(k).getWeekNum3().equals("1")) { + str += "周三 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (objEntities2.get(k).getWeekNum4().equals("1")) { + str += "周四 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (objEntities2.get(k).getWeekNum5().equals("1")) { + str += "周五 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (objEntities2.get(k).getWeekNum6().equals("1")) { + str += "周六 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (objEntities2.get(k).getWeekNum7().equals("1")) { + str += "周天"; + weekFour += "1"; + } else { + weekFour += "0"; + } + weekFourTv.setText(str); + } + break; + case "A3": + fiveId = objEntities2.get(k).getId(); + fiveStartTv.setText(objEntities2.get(k).getTimeOn()); + fiveEndTv.setText(objEntities2.get(k).getTimeOff()); + if (objEntities2.get(k).getOpenEnable().equals("0")) { + witchFive.setOpened(false); + } else { + witchFive.setOpened(true); + } + if (objEntities2.get(k).getCloseEnable().equals("0")) { + witchFiveClose.setOpened(false); + } else { + witchFiveClose.setOpened(true); + } + if (objEntities2.get(k).getWeekNum1() != null) { + String str = ""; + if (objEntities2.get(k).getWeekNum1().equals("1")) { + str += "周一 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (objEntities2.get(k).getWeekNum2().equals("1")) { + str += "周二 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (objEntities2.get(k).getWeekNum3().equals("1")) { + str += "周三 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (objEntities2.get(k).getWeekNum4().equals("1")) { + str += "周四 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (objEntities2.get(k).getWeekNum5().equals("1")) { + str += "周五 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (objEntities2.get(k).getWeekNum6().equals("1")) { + str += "周六 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (objEntities2.get(k).getWeekNum7().equals("1")) { + str += "周天"; + weekFive += "1"; + } else { + weekFive += "0"; + } + weekFiveTv.setText(str); + } + break; + } + } + } + } + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case TIME_RESULT: + if (data != null && data.getExtras().get("timePosition") != null) { + int learnGuide = (int) data.getExtras().get("timePosition"); + String week = data.getExtras().get("week").toString(); + switch (learnGuide) { + case 3: + witchThree.setOpened(true); + thirdStartTv.setText(data.getExtras().get("startTime").toString()); + thirdEndTv.setText(data.getExtras().get("endTime").toString()); + String str = ""; + weekThree = ""; + if (week.substring(0, 1).equals("1")) { + str += "周一 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (week.substring(1, 2).equals("1")) { + str += "周二 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (week.substring(2, 3).equals("1")) { + str += "周三 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (week.substring(3, 4).equals("1")) { + str += "周四 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (week.substring(4, 5).equals("1")) { + str += "周五 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (week.substring(5, 6).equals("1")) { + str += "周六 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + if (week.substring(6, 7).equals("1")) { + str += "周日 "; + weekThree += "1"; + } else { + weekThree += "0"; + } + weekThreeTv.setText(str); + break; + case 4: + witchFour.setOpened(true); + fourStartTv.setText(data.getExtras().get("startTime").toString()); + fourEndTv.setText(data.getExtras().get("endTime").toString()); + String str1 = ""; + weekFour = ""; + if (week.substring(0, 1).equals("1")) { + str1 += "周一 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (week.substring(1, 2).equals("1")) { + str1 += "周二 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (week.substring(2, 3).equals("1")) { + str1 += "周三 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (week.substring(3, 4).equals("1")) { + str1 += "周四 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (week.substring(4, 5).equals("1")) { + str1 += "周五 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (week.substring(5, 6).equals("1")) { + str1 += "周六 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + if (week.substring(6, 7).equals("1")) { + str1 += "周日 "; + weekFour += "1"; + } else { + weekFour += "0"; + } + weekFourTv.setText(str1); + break; + case 5: + witchFive.setOpened(true); + fiveStartTv.setText(data.getExtras().get("startTime").toString()); + fiveEndTv.setText(data.getExtras().get("endTime").toString()); + String str2 = ""; + weekFive = ""; + if (week.substring(0, 1).equals("1")) { + str2 += "周一 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (week.substring(1, 2).equals("1")) { + str2 += "周二 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (week.substring(2, 3).equals("1")) { + str2 += "周三 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (week.substring(3, 4).equals("1")) { + str2 += "周四 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (week.substring(4, 5).equals("1")) { + str2 += "周五 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (week.substring(5, 6).equals("1")) { + str2 += "周六 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + if (week.substring(6, 7).equals("1")) { + str2 += "周日 "; + weekFive += "1"; + } else { + weekFive += "0"; + } + weekFiveTv.setText(str2); + break; + } + } + break; + } + }*/ +} diff --git a/app/src/main/java/com/yonsz/z1/device/airconditioner/TimeReserveAdapter.java b/app/src/main/java/com/yonsz/z1/device/airconditioner/TimeReserveAdapter.java new file mode 100644 index 0000000..00acfa8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/airconditioner/TimeReserveAdapter.java @@ -0,0 +1,98 @@ +package com.yonsz.z1.device.airconditioner; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; +import android.widget.Toast; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.TimeEntity; +import com.yonsz.z1.device.SlideView; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2017/6/27. + */ + +public class TimeReserveAdapter extends BaseAdapter { + private List mDatas; + private Context mContext; + private OnRecyclerItemClickListener mOnItemClickListener; + + public TimeReserveAdapter(Context mContext, List mDatas) { + this.mDatas = mDatas; + this.mContext = mContext; + } + + @Override + public int getCount() { + return mDatas.size(); + } + + @Override + public Object getItem(int position) { + return position; + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + TimeViewHolder timeViewHolder; + SlideView slideView1 = (SlideView) convertView; + if (slideView1 == null) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_time_reserve, null); + slideView1 = new SlideView(mContext, true, true); + slideView1.setContentView(itemView); + timeViewHolder = new TimeViewHolder(slideView1); + slideView1.setTag(timeViewHolder); + } else { + timeViewHolder = (TimeViewHolder) slideView1.getTag(); + } + TimeEntity entity = mDatas.get(position); + /*timeViewHolder.startTime.setText(entity.getStartTime()); + timeViewHolder.endTime.setText(entity.getEndTime());*/ + timeViewHolder.shareHolder.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Toast.makeText(mContext, "我被点击了", Toast.LENGTH_SHORT).show(); + } + }); + timeViewHolder.enterHolder.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Toast.makeText(mContext, "我又被点击了", Toast.LENGTH_SHORT).show(); + } + }); + + return slideView1; + } + + + class TimeViewHolder extends RecyclerView.ViewHolder { + private TextView startTime, endTime; + public TextView shareHolder; + public TextView enterHolder; + + TimeViewHolder(View itemView) { + super(itemView); + startTime = (TextView) itemView.findViewById(R.id.tv_start_time); + endTime = (TextView) itemView.findViewById(R.id.tv_end_time); + shareHolder = (TextView) itemView.findViewById(R.id.shareDevice); + enterHolder = (TextView) itemView.findViewById(R.id.enterDevice); + } + } + + public void setmOnItemClickListener(OnRecyclerItemClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/childdevice/ChildDeviceListActivity.java b/app/src/main/java/com/yonsz/z1/device/childdevice/ChildDeviceListActivity.java new file mode 100644 index 0000000..1458b7a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/childdevice/ChildDeviceListActivity.java @@ -0,0 +1,848 @@ +package com.yonsz.z1.device.childdevice; + +import android.app.Service; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Color; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Vibrator; +import android.support.design.widget.CoordinatorLayout; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuBridge; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItem; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.DeviceDetailEntity; +import com.yonsz.z1.database.entity.DeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.device.airconditioner.AddAirAutoActivity; +import com.yonsz.z1.device.airconditioner.AirConditionActivity; +import com.yonsz.z1.device.curtains.CurtainsActivity; +import com.yonsz.z1.device.fan.FanLearnActivity; +import com.yonsz.z1.device.sweep.SweepActivity; +import com.yonsz.z1.device.switcher.SwitcherActivity; +import com.yonsz.z1.device.tv.FanListActivity; +import com.yonsz.z1.device.tv.SweepListActivity; +import com.yonsz.z1.device.tv.TvControlActivity; +import com.yonsz.z1.device.tv.TvListOneActivity; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.mydevice.DeviceLossActivity; +import com.yonsz.z1.new433.curtain.CurtainNewActivity; +import com.yonsz.z1.new433.curtain.CurtainsStepOneActivity; +import com.yonsz.z1.new433.light.LightNewActivity; +import com.yonsz.z1.new433.switcher.SwitcherNewActivity; +import com.yonsz.z1.new433.switcher.SwitcherStepOneActivity; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.tcpudp.model.Module; +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LightPopupWindow; +import com.yonsz.z1.view.PositionPopupWindow; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_CLOSE; +import static com.yonsz.z1.net.Constans.AIR_OPEN; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_OPEN; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.GETZIINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.REQUEST_ADD_CHILDDEVICE; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SWEEP_OPEN; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TV_OPEN; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.isLocalControl; + +/** + * Created by Administrator on 2017/8/31. + */ + +public class ChildDeviceListActivity extends BaseActivity implements SwipeItemClickListener { + public static DeviceEntity.ObjEntity mObjEntity = new DeviceEntity.ObjEntity(); + public static int childPosition; + private boolean isAddSwitcher, isAddCurtains, isAddLight; + private ImageView mAdd; + private RelativeLayout mAddRl; + private TitleView mTitleView; + private CoordinatorLayout layout1; + private boolean isShowAll; + private SwipeMenuRecyclerView mRecyclerView; + private ChilidSlideA1Adapter mChilidSlideAdapter; + private String ziId; + private boolean isOnline = true; + private boolean isOpen = false; + private SmartMic1 mSmartMic1; + private LinearLayout noWifiTv; + private ViewPagerDelegate mViewPagerDelegate; + private String name; + private String deviceIp; + private List mModules; + private List mStringList = new ArrayList<>(); + private Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + /* Intent intent; + switch (msg.what) { + case REQUEST_ADD_CHILDDEVICE: + String name = (String) msg.obj; + if (DensityUtil.isNetworkConnected(ChildDeviceListActivity.this)) { + switch (name) { + case "电视": + intent = new Intent(ChildDeviceListActivity.this, TvListOneActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + startActivity(intent); + // addChildDevice(ziId, TV_TAG, "未知品牌"); + break; + case "空调": + intent = new Intent(ChildDeviceListActivity.this, AddAirAutoActivity.class); + intent.putExtra("airStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case "风扇": + intent = new Intent(ChildDeviceListActivity.this, FanListActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + startActivity(intent); + // addChildDevice(ziId, FAN_TAG, "未知品牌"); + break; + case "扫地机": + intent = new Intent(ChildDeviceListActivity.this, SweepListActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + intent.putExtra("id", ""); + startActivity(intent); + // addChildDevice(ziId, SWEEP_TAG, "未知品牌"); + break; + case "灯光": + if (isAddLight) { + showLightBottom(LIGHT_TAG); + } else { + addChildDevice(ziId, LIGHT_TAG, "未知品牌"); + } + break; + case "窗帘": + showPositionBottom(CURTAINS_TAG); + // addChildDevice(ziId, CURTAINS_TAG, "未知品牌"); + break; + case "插座": + showPositionBottom(SWITCH_TAG); + // addChildDevice(ziId, SWITCH_TAG, "未知品牌"); + break; + } + break; + } else { + ToastUtil.show(ChildDeviceListActivity.this, R.string.net_error); + } + }*/ + } + }; + /** + * RecyclerView的Item的Menu点击监听。 + */ + private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() { + @Override + public void onItemClick(SwipeMenuBridge menuBridge) { + menuBridge.closeMenu(); + + int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。 + final int adapterPosition = menuBridge.getAdapterPosition(); // RecyclerView的Item的position。 + int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。 + + if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) { + // Toast.makeText(ChildDeviceListActivity.this, "list第" + adapterPosition + "; 右侧菜单第" + menuPosition, Toast.LENGTH_SHORT).show(); + if (mStringList.size() != 0 && (mStringList.size() <= mObjEntity.getList().size() || mStringList.size() == mObjEntity.getList().size() - 1)) { + String deviceType = mStringList.get(adapterPosition).getDeviceType(); + if (deviceType.equals(LIGHT_TAG) || deviceType.equals(CURTAINS_TAG) || deviceType.equals(SWITCH_TAG)) { + ToastUtil.show(ChildDeviceListActivity.this, R.string.no_delete); + } else if (DensityUtil.isNetworkConnected(ChildDeviceListActivity.this)) { + ConfirmDialog dialog = new ConfirmDialog(ChildDeviceListActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + switch (mStringList.get(adapterPosition).getDeviceType()) { + case TV_TAG: + deleteChildDevice(TV_TAG, ziId); + break; + case AIR_TAG: + deleteChildDevice(AIR_TAG, ziId); + break; + case FAN_TAG: + deleteChildDevice(FAN_TAG, ziId); + break; + case SWEEP_TAG: + deleteChildDevice(SWEEP_TAG, ziId); + break; + } + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else { + ToastUtil.show(ChildDeviceListActivity.this, R.string.net_error); + } + } + } + } + }; + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.x60); + if (mObjEntity.getOnlineFlag().equals("1")) { + // 1. MATCH_PARENT 自适应高度,保持和Item一样高; + // 2. 指定具体的高,比如80; + // 3. WRAP_CONTENT,自身高度,不推荐; + int height = ViewGroup.LayoutParams.MATCH_PARENT; + // 添加右侧的,如果不添加,则右侧不会出现菜单。 + + { + SwipeMenuItem deleteItem = new SwipeMenuItem(ChildDeviceListActivity.this) + .setBackground(R.color.z1_ff0000) + .setText(R.string.delete) + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + swipeRightMenu.addMenuItem(deleteItem);// 添加菜单到右侧。 + } + } + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_child_device); + layout1 = (CoordinatorLayout) findViewById(R.id.layout); + isShowAll = (boolean) getIntent().getExtras().get("isShowAll"); + childPosition = (int) getIntent().getExtras().get("position"); + name = (String) getIntent().getExtras().get("name"); + ziId = (String) getIntent().getExtras().get("ziId"); + isLocalControl = false; + mModules = loadDevices(); + initView(); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + //发送开关指令 + private void sendAirControlOrder(String order, String ziId) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + map.put("macId", ziId); + map.put("sendMsg", order); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_CONTROL_AIR_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sendAirControlOrder", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void initView() { + noWifiTv = (LinearLayout) findViewById(R.id.tv_no_wifi); + mAdd = (ImageView) findViewById(R.id.bt_device_add); + mAddRl = (RelativeLayout) findViewById(R.id.rl_device_add); + mTitleView = (TitleView) findViewById(R.id.title_child_device); + mTitleView.setHead(name); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mAdd.setOnClickListener(this); + noWifiTv.setOnClickListener(this); + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_child_device_list); + /*if (mObjEntity.getList() != null) { + setData(); + } else { + mRecyclerView.setVisibility(View.GONE); + }*/ + + /*if (DensityUtil.isNetworkConnected(this)) { + getZ1Info(); + } else { + ToastUtil.show(this, R.string.net_error); + }*/ + + mChilidSlideAdapter = new ChilidSlideA1Adapter(this, mObjEntity); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setVisibility(View.VISIBLE); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setSwipeMenuCreator(swipeMenuCreator); + mRecyclerView.setSwipeMenuItemClickListener(mMenuItemClickListener); + mRecyclerView.setAdapter(mChilidSlideAdapter); + mRecyclerView.setSwipeItemClickListener(this); + + if (getIntent().getExtras() != null && getIntent().getExtras().get("deviceDetail") != null) { + mObjEntity = (DeviceEntity.ObjEntity) getIntent().getExtras().get("deviceDetail"); + if (null != mObjEntity) { + setData(); + } + } + for (int i = 0; i < mModules.size(); i++) { + if (mModules.get(i).getMac().equals(ziId)) { + deviceIp = mModules.get(i).getIp(); + WifiManager wifimanager; + wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + String ssidAll = wifimanager.getConnectionInfo().getSSID().toString(); + String ssid = ssidAll.substring(1, ssidAll.length() - 1); + Log.i("nettymanager", "ChildDeviceListActivity onCreate()" + deviceIp + "===" + ssid + "===" + mObjEntity.getWifiName()); + if (wifimanager.isWifiEnabled() && ssid.equals(mObjEntity.getWifiName())) { + NettyManager.getInstance(deviceIp); + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (isLocalControl) { + NettyManager.closeCtx(); + } + } + + private void setData() { + if (null != mObjEntity.getOnlineFlag() && mObjEntity.getOnlineFlag().equals("1")) { + noWifiTv.setVisibility(View.GONE); + } else { + noWifiTv.setVisibility(View.VISIBLE); + } + + mChilidSlideAdapter.getNewData(mObjEntity); + mChilidSlideAdapter.notifyDataSetChanged(); + /*if (mObjEntity.getList().size() == 7) { + mAddRl.setVisibility(View.GONE); + } else { + mAddRl.setVisibility(View.VISIBLE); + }*/ + mChilidSlideAdapter.setmOnItemClickListener(new OnRecyclerItemClickListener() { + @Override + public void onClick(View view, int position, List photos, int i) { + if (DensityUtil.isNetworkConnected(ChildDeviceListActivity.this)) { + if (mObjEntity.getOnlineFlag().equals("1")) { + setShake(); + // Toast.makeText(ChildDeviceListActivity.this, "开关机", Toast.LENGTH_SHORT).show(); + switch (mStringList.get(position).getDeviceType()) { + case TV_TAG: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_OPEN)); + // Toast.makeText(ChildDeviceListActivity.this, deviceIp, Toast.LENGTH_SHORT).show(); + } else { + sendAirControlOrder(TV_OPEN, ziId); + } + break; + case AIR_TAG: + if (isOpen) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_CLOSE)); + // Toast.makeText(ChildDeviceListActivity.this, deviceIp, Toast.LENGTH_SHORT).show(); + } else { + sendAirControlOrder(AIR_CLOSE, ziId); + } + isOpen = false; + } else { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_OPEN)); + // Toast.makeText(ChildDeviceListActivity.this, deviceIp, Toast.LENGTH_SHORT).show(); + } else { + sendAirControlOrder(AIR_OPEN, ziId); + } + isOpen = true; + } + break; + case FAN_TAG: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_OPEN)); + // Toast.makeText(ChildDeviceListActivity.this, deviceIp, Toast.LENGTH_SHORT).show(); + } else { + sendAirControlOrder(FAN_OPEN, ziId); + } + break; + case SWEEP_TAG: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_OPEN)); + // Toast.makeText(ChildDeviceListActivity.this, deviceIp, Toast.LENGTH_SHORT).show(); + } else { + sendAirControlOrder(SWEEP_OPEN, ziId); + } + break; + case LIGHT_TAG: + Toast.makeText(ChildDeviceListActivity.this, "暂无功能", Toast.LENGTH_SHORT).show(); + break; + case CURTAINS_TAG: + Toast.makeText(ChildDeviceListActivity.this, "暂无功能", Toast.LENGTH_SHORT).show(); + break; + } + } + } else { + ToastUtil.show(ChildDeviceListActivity.this, R.string.net_error); + } + } + + @Override + public void onLongClick(View view, int position) { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_device_add: + if (DensityUtil.isNetworkConnected(this)) { + if (mObjEntity.getOnlineFlag().equals("1")) { + openSmartMic(); + } else { + ToastUtil.show(ChildDeviceListActivity.this, "设备已离线"); + } + } else { + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.tv_no_wifi: + startActivity(new Intent(ChildDeviceListActivity.this, DeviceLossActivity.class)); + break; + } + } + + private void openSmartMic() { + /*mSmartMic1 = new SmartMic1(layout1); + mViewPagerDelegate = new ViewPagerDelegate(); + mSmartMic1.setDelegate(mViewPagerDelegate).setMenuList(mObjEntity, handler).show();*/ + } + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case DELETE_CHILDDEVICE_SUCCESS: + + break; + case GETZIINFO_SUCCESS: + DeviceEntity entity = (DeviceEntity) msg.obj; + if (msg.obj != null) { + if (isShowAll) { + + } else { + if (entity != null && entity.getObj().size() != 0) { + for (int i = 0; i < entity.getObj().size(); i++) { + if (entity.getObj().get(i).getIsOwner() != null && entity.getObj().get(i).getIsOwner().equals("1")) { + entity.getObj().remove(i); + i -= 1; + } else { + + } + } + } + } + if (null != entity.getObj() && entity.getObj().size() != 0 && entity.getObj().size() >= childPosition) { + mObjEntity = entity.getObj().get(childPosition); + getStringList(mObjEntity); + } else { + mRecyclerView.setVisibility(View.GONE); + } + } + if (null != mObjEntity.getList()) { + mRecyclerView.setVisibility(View.VISIBLE); + setData(); + } else { + mRecyclerView.setVisibility(View.GONE); + } + /*if (mObjEntity.getList() != null) { + } else { + mRecyclerView.setVisibility(View.GONE); + }*/ + break; + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + String deviceId = entity1.getObj().getDeviceId(); + switch (deviceId) { + case FAN_TAG: + intent = new Intent(ChildDeviceListActivity.this, FanLearnActivity.class); + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + break; + case TV_TAG: + intent = new Intent(ChildDeviceListActivity.this, TvControlActivity.class); + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case SWEEP_TAG: + intent = new Intent(ChildDeviceListActivity.this, SweepActivity.class); + intent.putExtra("sweepStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case LIGHT_TAG: + isAddLight = true; + showLightBottom(LIGHT_TAG); + /*intent = new Intent(ChildDeviceListActivity.this, LightActivity.class); + intent.putExtra("lightStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent);*/ + break; + case CURTAINS_TAG: + intent = new Intent(ChildDeviceListActivity.this, CurtainsActivity.class); + intent.putExtra("curtainsStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case SWITCH_TAG: + intent = new Intent(ChildDeviceListActivity.this, SwitcherActivity.class); + intent.putExtra("switcherStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + } + break; + case CLOSE_THIS_ACTIVITY: + // finish(); + break; + case SEND_CONTROL_ORDER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DELETE_CHILDDEVICE_FAIL: + // ToastUtil.show(ChildDeviceListActivity.this, R.string.net_error); + break; + } + } + + private void showLightBottom(final String deviveType) { + + } + + private void showPositionBottom(final String deviveType) { + View rootview = LayoutInflater.from(ChildDeviceListActivity.this).inflate(R.layout.activity_child_device_a2, null); + PositionPopupWindow popupWindow = new PositionPopupWindow(this, mObjEntity.getAddressId(), new PositionPopupWindow.OnCompleteListener() { + @Override + public void onComplete(String time, List conditionList) { + Log.i("showPositionBottom", "SwitcherActivity onComplete()" + time + conditionList.toString()); + Intent intent; + switch (deviveType) { + case CURTAINS_TAG: + intent = new Intent(ChildDeviceListActivity.this, CurtainsStepOneActivity.class); + if (isAddCurtains) { + intent.putExtra("isFirst", "0"); + } else { + intent.putExtra("isFirst", "1"); + } + if (time.equals("13")) { + intent.putExtra("addressId", "0"); + } else { + intent.putExtra("addressId", String.valueOf(Integer.valueOf(time) + 1)); + } + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", mObjEntity.getAddressId()); + startActivity(intent); + break; + case LIGHT_TAG: + + break; + case SWITCH_TAG: + intent = new Intent(ChildDeviceListActivity.this, SwitcherStepOneActivity.class); + if (isAddSwitcher) { + intent.putExtra("isFirst", "0"); + } else { + intent.putExtra("isFirst", "1"); + } + if (time.equals("13")) { + intent.putExtra("addressId", "0"); + } else { + intent.putExtra("addressId", String.valueOf(Integer.valueOf(time) + 1)); + } + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", mObjEntity.getAddressId()); + startActivity(intent); + break; + } + + } + }); + popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + + } + + @Override + public void onResume() { + super.onResume(); + if (DensityUtil.isNetworkConnected(this)) { + getZ1Info(); + } else { + ToastUtil.show(this, R.string.net_error); + } + } + + //获取Z1列表 + private void getZ1Info() { + + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + @Override + public void onItemClick(View itemView, int position) { + // if (mObjEntity.getOnlineFlag().equals("1")) { + if (DensityUtil.isNetworkConnected(ChildDeviceListActivity.this)) { + ziId = mObjEntity.getZiId(); + Intent intent; + if (mStringList.size() != 0 && (mStringList.size() <= mObjEntity.getList().size() || mStringList.size() == mObjEntity.getList().size() - 1)) { + switch (mStringList.get(position).getDeviceType()) { + case TV_TAG: + intent = new Intent(ChildDeviceListActivity.this, TvControlActivity.class); + intent.putExtra("tvStateTag", "1"); + intent.putExtra("ziId", ziId); + if (mStringList.get(position).getAssistFlag() != null && mStringList.get(position).getAssistFlag().equals("1")) { + intent.putExtra("tvName", mStringList.get(position).getAssistBrand().toString()); + intent.putExtra("assistFlag", "1"); + } else { + intent.putExtra("tvName", mStringList.get(position).getDeviceBrand().toString()); + intent.putExtra("assistFlag", "0"); + } + intent.putExtra("id", mStringList.get(position).getId().toString()); + startActivity(intent); + break; + case AIR_TAG: + intent = new Intent(ChildDeviceListActivity.this, AirConditionActivity.class); + intent.putExtra("airStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("airName", mStringList.get(position).getDeviceBrand().toString()); + startActivity(intent); + break; + case FAN_TAG: + intent = new Intent(ChildDeviceListActivity.this, FanLearnActivity.class); + intent.putExtra("fanStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("fanName", mStringList.get(position).getDeviceBrand().toString()); + intent.putExtra("id", mStringList.get(position).getId().toString()); + startActivity(intent); + break; + case SWEEP_TAG: + intent = new Intent(ChildDeviceListActivity.this, SweepActivity.class); + intent.putExtra("sweepStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("sweepName", mStringList.get(position).getDeviceBrand().toString()); + intent.putExtra("id", mStringList.get(position).getId().toString()); + startActivity(intent); + break; + case LIGHT_TAG: + intent = new Intent(ChildDeviceListActivity.this, LightNewActivity.class); + intent.putExtra("addressId", mObjEntity.getAddressId()); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case CURTAINS_TAG: + intent = new Intent(ChildDeviceListActivity.this, CurtainNewActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", mObjEntity.getAddressId()); + startActivity(intent); + break; + case SWITCH_TAG: + intent = new Intent(ChildDeviceListActivity.this, SwitcherNewActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", mObjEntity.getAddressId()); + startActivity(intent); + break; + } + } else { + if (DensityUtil.isNetworkConnected(this)) { + getZ1Info(); + } else { + ToastUtil.show(this, R.string.net_error); + } + } + } else { + ToastUtil.show(ChildDeviceListActivity.this, R.string.net_error); + } + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private List getStringList(DeviceEntity.ObjEntity objEntity) { + mStringList.clear(); + if (objEntity.getList() != null) { + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case AIR_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case TV_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case FAN_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case SWEEP_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + isAddLight = false; + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case LIGHT_TAG: + isAddLight = true; + if (!objEntity.getLightNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + isAddCurtains = false; + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case CURTAINS_TAG: + isAddCurtains = true; + if (!objEntity.getBlindNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + isAddSwitcher = false; + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case SWITCH_TAG: + isAddSwitcher = true; + if (!objEntity.getPlugNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + } + return mStringList; + } + + private List loadDevices() { + List modules = new ArrayList(); + SharedPreferences preferences = getSharedPreferences("module_list", MODE_PRIVATE); + int count = preferences.getInt(Constants.KEY_MODULE_COUNT, 0); + Module module; + + for (int i = 0; i < count; i++) { + module = new Module(); + module.setId(preferences.getInt(Constants.KEY_PRE_ID + i, -1)); + module.setIp(preferences.getString(Constants.KEY_PRE_IP + i, null)); + module.setMac(preferences.getString(Constants.KEY_PRE_MAC + i, null)); + module.setModuleID(preferences.getString(Constants.KEY_PRE_MODULEID + i, null)); + modules.add(module); + } + return modules; + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/childdevice/ChilidSlideA1Adapter.java b/app/src/main/java/com/yonsz/z1/device/childdevice/ChilidSlideA1Adapter.java new file mode 100644 index 0000000..0c9e072 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/childdevice/ChilidSlideA1Adapter.java @@ -0,0 +1,230 @@ +package com.yonsz.z1.device.childdevice; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.DeviceDetailEntity; +import com.yonsz.z1.database.entity.DeviceEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.Img; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; + +/** + * Created by Administrator on 2017/9/4. + */ +public class ChilidSlideA1Adapter extends RecyclerView.Adapter { + private Context mContext; + private DeviceEntity.ObjEntity mObjEntity; + private OnRecyclerItemClickListener mOnItemClickListener; + private List mStringList = new ArrayList<>(); + + public ChilidSlideA1Adapter(Context mContext, DeviceEntity.ObjEntity mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + if (null != mObjEntity) { + getStringList(mObjEntity); + } + } + + public void getNewData(DeviceEntity.ObjEntity mObjEntity) { + this.mObjEntity = mObjEntity; + if (null != mObjEntity) { + getStringList(mObjEntity); + } + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_device_child_one, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setIsRecyclable(false); + if (mStringList != null) { + holder.setViews(position); + } + } + + @Override + public int getItemCount() { + return mStringList.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + public ImageView icon; + public TextView title; + public TextView deleteHolder; + private ImageView mSwitch; + private ImageView mAdd; + private TextView childBrandTv; + private LinearLayout childLl; + private RelativeLayout deviceChildRl; + // private ImageView iv_notnet_bg; + private View mViewLine; + private TextView tv_device_number; + + public MessageViewHolder(View view) { + super(view); + icon = (ImageView) view.findViewById(R.id.icon); + title = (TextView) view.findViewById(R.id.tv_child_device); + deleteHolder = (TextView) view.findViewById(R.id.deleteDevice); + mSwitch = (ImageView) view.findViewById(R.id.iv_main_device_switch); + mAdd = (ImageView) view.findViewById(R.id.iv_main_device_add); + childBrandTv = (TextView) view.findViewById(R.id.tv_child_brand); + tv_device_number = (TextView) view.findViewById(R.id.tv_device_number); + childLl = (LinearLayout) view.findViewById(R.id.ll_device_child); + deviceChildRl = (RelativeLayout) view.findViewById(R.id.rl_innet_bg); + // iv_notnet_bg = (ImageView) view.findViewById(R.id.iv_notnet_bg); + mViewLine = (View) view.findViewById(R.id.line_expand); + } + + public void setViews(final int position) { + List entities = mObjEntity.getList(); + if (mObjEntity.getOnlineFlag().equals("1")) { + // iv_notnet_bg.setVisibility(View.GONE); + } else { + // iv_notnet_bg.setVisibility(View.VISIBLE); + } + if (position == mStringList.size()) { + mViewLine.setVisibility(View.GONE); + } + switch (mStringList.get(position).getDeviceType()) { + case TV_TAG: + icon.setImageResource(Img[0]); + title.setText(R.string.tv); + break; + case AIR_TAG: + icon.setImageResource(Img[1]); + title.setText(R.string.air); + break; + case FAN_TAG: + icon.setImageResource(Img[2]); + title.setText(R.string.fan); + break; + case SWEEP_TAG: + icon.setImageResource(Img[3]); + title.setText(R.string.sweep); + break; + case LIGHT_TAG: + icon.setImageResource(Img[4]); + title.setText(R.string.light); + mSwitch.setVisibility(View.GONE); + tv_device_number.setVisibility(View.VISIBLE); + tv_device_number.setText(R.string.total_of + mObjEntity.getLightNum() + "盏灯设备"); + break; + case CURTAINS_TAG: + icon.setImageResource(Img[5]); + title.setText(R.string.curtains); + mSwitch.setVisibility(View.GONE); + tv_device_number.setVisibility(View.VISIBLE); + tv_device_number.setText(R.string.total_of + mObjEntity.getBlindNum() + "个窗帘设备"); + break; + case SWITCH_TAG: + icon.setImageResource(Img[6]); + title.setText(R.string.chazuo); + mSwitch.setVisibility(View.GONE); + tv_device_number.setVisibility(View.VISIBLE); + tv_device_number.setText("共有" + mObjEntity.getPlugNum() + R.string.socket_device); + break; + } + mSwitch.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + List photos = null; + mOnItemClickListener.onClick(v, position, photos, 0); + } + } + }); + } + } + + private List getStringList(DeviceEntity.ObjEntity objEntity) { + mStringList.clear(); + if (objEntity.getList() != null) { + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case AIR_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case TV_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case FAN_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case SWEEP_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case LIGHT_TAG: + if (!objEntity.getLightNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case CURTAINS_TAG: + if (!objEntity.getBlindNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case SWITCH_TAG: + if (!objEntity.getPlugNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + } + return mStringList; + } + + public void setmOnItemClickListener(OnRecyclerItemClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/childdevice/ChilidSlideAdapter.java b/app/src/main/java/com/yonsz/z1/device/childdevice/ChilidSlideAdapter.java new file mode 100644 index 0000000..754f6aa --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/childdevice/ChilidSlideAdapter.java @@ -0,0 +1,298 @@ +package com.yonsz.z1.device.childdevice; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.DeviceDetailEntity; +import com.yonsz.z1.database.entity.DeviceEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.Img; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; + +/** + * Created by Administrator on 2017/9/4. + */ +public class ChilidSlideAdapter extends RecyclerView.Adapter { + private static final int VIEW_HEADER = 0; + private static final int VIEW_ITEM = 1; + private final int mHeaderViewCount = 1; + private Context mContext; + private DeviceEntity.ObjEntity mObjEntity; + private OnRecyclerItemClickListener mOnItemClickListener; + private List mStringList = new ArrayList<>(); + private int viewType; + + public ChilidSlideAdapter(Context mContext, DeviceEntity.ObjEntity mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + if (null != mObjEntity) { + getStringList(mObjEntity); + } + } + + public void getNewData(DeviceEntity.ObjEntity mObjEntity) { + this.mObjEntity = mObjEntity; + if (null != mObjEntity) { + getStringList(mObjEntity); + } + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + /*View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_device_child_one, + parent, false); + return new MessageViewHolder(view);*/ + + View view = null; + if (viewType == VIEW_ITEM) { + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_device_child_one, + parent, false); + return new MessageViewHolder(view); + } else { + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_device_child_top, + parent, false); + return new ViewHeaderHolder(view); + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + holder.setIsRecyclable(false); + if (position >= mHeaderViewCount) { + int realPosition = position - 1; + if (mStringList != null) { + ((MessageViewHolder) holder).setViews(realPosition); + } + } else { + ((ViewHeaderHolder) holder).setHeaderView(position); + } + } + + @Override + public int getItemViewType(int position) { + if (position < mHeaderViewCount) { + viewType = VIEW_HEADER; + return VIEW_HEADER; + } else { + viewType = VIEW_ITEM; + return VIEW_ITEM; + } + } + + @Override + public int getItemCount() { + // return mStringList.size(); + + return mStringList != null ? mStringList.size() + mHeaderViewCount : + 0 + mHeaderViewCount; + } + + private List getStringList(DeviceEntity.ObjEntity objEntity) { + mStringList.clear(); + if (objEntity.getList() != null) { + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case AIR_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case TV_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case FAN_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case SWEEP_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case LIGHT_TAG: + if (!objEntity.getLightNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case CURTAINS_TAG: + if (!objEntity.getBlindNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case SWITCH_TAG: + if (!objEntity.getPlugNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + } + return mStringList; + } + + public void setmOnItemClickListener(OnRecyclerItemClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class ViewHeaderHolder extends RecyclerView.ViewHolder { + private RelativeLayout safeDeviceRl; + private TextView safeNumberTv; + private TextView safeDelcare; + + public ViewHeaderHolder(View viewHeader) { + super(viewHeader); + safeDeviceRl = (RelativeLayout) viewHeader.findViewById(R.id.rl_safe_device); + safeNumberTv = (TextView) viewHeader.findViewById(R.id.tv_safe_number); + safeDelcare = (TextView) viewHeader.findViewById(R.id.tv_safe_declare); + } + + public void setHeaderView(final int position) { + if (null != mObjEntity.getSafeNum() && mObjEntity.getSafeNum().toString().equals("0")) { + safeDelcare.setVisibility(View.GONE); + safeNumberTv.setText("未添加安防设备"); + } else { + if (null != mObjEntity.getSafeNum()) { + safeDelcare.setVisibility(View.VISIBLE); + safeNumberTv.setText(R.string.you_have + mObjEntity.getSafeNum().toString() + R.string.safe_number); + } + } + safeDeviceRl.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + List photos = null; + mOnItemClickListener.onClick(v, position, photos, 1); + } + } + }); + } + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + public ImageView icon; + public TextView title; + public TextView deleteHolder; + private ImageView mSwitch; + private ImageView mAdd; + private TextView childBrandTv; + private LinearLayout childLl; + private RelativeLayout deviceChildRl; + // private ImageView iv_notnet_bg; + private View mViewLine; + private TextView tv_device_number; + + public MessageViewHolder(View view) { + super(view); + icon = (ImageView) view.findViewById(R.id.icon); + title = (TextView) view.findViewById(R.id.tv_child_device); + deleteHolder = (TextView) view.findViewById(R.id.deleteDevice); + mSwitch = (ImageView) view.findViewById(R.id.iv_main_device_switch); + mAdd = (ImageView) view.findViewById(R.id.iv_main_device_add); + childBrandTv = (TextView) view.findViewById(R.id.tv_child_brand); + tv_device_number = (TextView) view.findViewById(R.id.tv_device_number); + childLl = (LinearLayout) view.findViewById(R.id.ll_device_child); + deviceChildRl = (RelativeLayout) view.findViewById(R.id.rl_innet_bg); + // iv_notnet_bg = (ImageView) view.findViewById(R.id.iv_notnet_bg); + mViewLine = (View) view.findViewById(R.id.line_expand); + } + + public void setViews(final int position) { + List entities = mObjEntity.getList(); + if (mObjEntity.getOnlineFlag().equals("1")) { + // iv_notnet_bg.setVisibility(View.GONE); + } else { + // iv_notnet_bg.setVisibility(View.VISIBLE); + } + if (position == mStringList.size()) { + mViewLine.setVisibility(View.GONE); + } + switch (mStringList.get(position).getDeviceType()) { + case TV_TAG: + icon.setImageResource(Img[0]); + title.setText(R.string.tv); + break; + case AIR_TAG: + icon.setImageResource(Img[1]); + title.setText(R.string.air); + break; + case FAN_TAG: + icon.setImageResource(Img[2]); + title.setText(R.string.fan); + break; + case SWEEP_TAG: + icon.setImageResource(Img[3]); + title.setText(R.string.sweep); + break; + case LIGHT_TAG: + icon.setImageResource(Img[4]); + title.setText(R.string.light); + mSwitch.setVisibility(View.GONE); + tv_device_number.setVisibility(View.VISIBLE); + tv_device_number.setText(R.string.total_of + mObjEntity.getLightNum() + "盏灯设备"); + break; + case CURTAINS_TAG: + icon.setImageResource(Img[5]); + title.setText(R.string.curtains); + mSwitch.setVisibility(View.GONE); + tv_device_number.setVisibility(View.VISIBLE); + tv_device_number.setText("共有" + mObjEntity.getBlindNum() + "个窗帘设备"); + break; + case SWITCH_TAG: + icon.setImageResource(Img[6]); + title.setText(R.string.chazuo); + mSwitch.setVisibility(View.GONE); + tv_device_number.setVisibility(View.VISIBLE); + tv_device_number.setText(R.string.total_of + mObjEntity.getPlugNum() + R.string.socket_device); + break; + } + mSwitch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + List photos = null; + mOnItemClickListener.onClick(v, position, photos, 0); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/childdevice/MenuEntity.java b/app/src/main/java/com/yonsz/z1/device/childdevice/MenuEntity.java new file mode 100644 index 0000000..8fda31c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/childdevice/MenuEntity.java @@ -0,0 +1,15 @@ +package com.yonsz.z1.device.childdevice; + +import android.graphics.drawable.Drawable; +import android.support.annotation.DrawableRes; + +/** + * Created by Administrator on 2016/9/21. + */ +public class MenuEntity { + public @DrawableRes + int iconId; + public CharSequence title; + public Drawable icon; + public String deviceType; +} diff --git a/app/src/main/java/com/yonsz/z1/device/childdevice/MenuRVHandlers.java b/app/src/main/java/com/yonsz/z1/device/childdevice/MenuRVHandlers.java new file mode 100644 index 0000000..4a86d51 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/childdevice/MenuRVHandlers.java @@ -0,0 +1,151 @@ +package com.yonsz.z1.device.childdevice; + +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; +import android.os.Handler; +import android.os.Message; +import android.support.v4.view.ViewCompat; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.OvershootInterpolator; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.listener.NoDoubleClickListener; + +import java.util.List; + +import static com.yonsz.z1.net.Constans.REQUEST_ADD_CHILDDEVICE; + +/** + * Created by Administrator on 2016/9/22. + */ +public class MenuRVHandlers { + private View mView; + private RecyclerView mRecyclerView; + private int mNumColumns; + private List mMenuEntities; + private RvAdapter rvAdapter; + private android.os.Handler handler; + private ViewGroup mContext; + private View rootView; + + public MenuRVHandlers(int mNumColumns, List menuEntities, Handler handler, ViewGroup context, View rootView) { + this.mNumColumns = mNumColumns; + this.mMenuEntities = menuEntities; + this.handler = handler; + this.mContext = context; + this.rootView = rootView; + } + + public View onLoadView(ViewGroup viewGroup) { + if (mView == null) { + mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_rv_grid, viewGroup, false); + createview(viewGroup); + } + return mView; + } + + private void createview(ViewGroup viewGroup) { + + if (mMenuEntities == null || mMenuEntities.size() == 0) { + return; + } + mRecyclerView = (RecyclerView) mView.findViewById(R.id.rv); + mRecyclerView.setLayoutManager(new GridLayoutManager(mView.getContext(), mNumColumns)); + mRecyclerView.setHasFixedSize(true); + rvAdapter = new RvAdapter(mMenuEntities, viewGroup, handler); + mRecyclerView.setAdapter(rvAdapter); + mRecyclerView.setVisibility(View.VISIBLE); + } + + private class RvAdapter extends RecyclerView.Adapter { + + List mDataList; + private ViewGroup viewGroup; + private android.os.Handler handler; + + public RvAdapter(List mMenuEntities, ViewGroup viewGroup, android.os.Handler handler) { + mDataList = mMenuEntities; + this.viewGroup = viewGroup; + this.handler = handler; + } + + @Override + public MenuVH onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_rv_grid, null, false); + return new MenuVH(view); + } + + @Override + public void onBindViewHolder(MenuVH holder, final int position) { + + final MenuEntity menuEntity = mDataList.get(position); + if (menuEntity.iconId != 0) { + + holder.iv.setVisibility(View.VISIBLE); + holder.iv.setImageResource(menuEntity.iconId); + } else if (menuEntity.icon != null) { + + holder.iv.setVisibility(View.VISIBLE); + holder.iv.setImageDrawable(menuEntity.icon); + + } else { + holder.iv.setVisibility(View.GONE); + } + holder.name.setText(menuEntity.title); + + holder.iv.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + mContext.removeView(rootView); + Log.i("iv_click", "RvAdapter onClick()" + position); + Message message = handler.obtainMessage(); + message.what = REQUEST_ADD_CHILDDEVICE; + message.obj = menuEntity.deviceType; + handler.sendMessage(message); + } + }); + + animation(holder); + } + + private void animation(MenuVH menuVH) { + ViewCompat.setAlpha(menuVH.itemView, 0); + + ObjectAnimator translationY = ObjectAnimator.ofFloat(menuVH.itemView, "translationY", 500, 0); + translationY.setDuration(500); + translationY.setInterpolator(new OvershootInterpolator(1.6f)); + ObjectAnimator alphaIn = ObjectAnimator.ofFloat(menuVH.itemView, "alpha", 0, 1); + alphaIn.setDuration(100); + AnimatorSet animatorSet = new AnimatorSet(); + animatorSet.playTogether(translationY, alphaIn); + animatorSet.setStartDelay(30 * menuVH.getAdapterPosition()); + animatorSet.start(); + } + + @Override + public int getItemCount() { + return mDataList.size(); + } + + + class MenuVH extends RecyclerView.ViewHolder { + + public ImageView iv; + public TextView name; + + public MenuVH(View itemView) { + super(itemView); + + iv = (ImageView) itemView.findViewById(R.id.iv_click); + name = (TextView) itemView.findViewById(R.id.name); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/childdevice/SmartMic.java b/app/src/main/java/com/yonsz/z1/device/childdevice/SmartMic.java new file mode 100644 index 0000000..582421d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/childdevice/SmartMic.java @@ -0,0 +1,75 @@ +package com.yonsz.z1.device.childdevice; + +import android.os.Handler; +import android.support.annotation.MenuRes; +import android.support.v7.widget.PopupMenu; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.ViewGroup; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2016/9/21. + */ +public class SmartMic { + + + private final ViewGroup mGroup; + private ViewPagerDelegate mDelegate; + private List mMenuEntities; + private Handler handler; + + public SmartMic(ViewGroup mGroup) { + this.mGroup = mGroup; + } + + public SmartMic setMenuList(@MenuRes int menuRes) { + Menu menu = new PopupMenu(mGroup.getContext(), null).getMenu(); + new MenuInflater(mGroup.getContext()).inflate(menuRes, menu); + List menuEntities = getMenuEntityFormMenuRes(menu); + + if (mDelegate != null) { + mDelegate.setMenuList(menuEntities, handler); + } else + this.mMenuEntities = menuEntities; + + return this; + } + + private List getMenuEntityFormMenuRes(Menu menu) { + List list = new ArrayList<>(); + for (int i = 0; i < menu.size(); i++) { + MenuItem item = menu.getItem(i); + + if (item.isVisible()) { + MenuEntity itemEntity = new MenuEntity(); + itemEntity.title = item.getTitle().toString(); + itemEntity.icon = item.getIcon(); + list.add(itemEntity); + } + } + return list; + } + + public SmartMic setDelegate(ViewPagerDelegate viewPagerDelegate) { + this.mDelegate = viewPagerDelegate; + + mDelegate.setup(mGroup); + + if (mMenuEntities != null) { + mDelegate.setMenuList(mMenuEntities, handler); + } + return this; + } + + public void show() { + mDelegate.show(); + } + + public void disMiss() { + mDelegate.disMiss(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/childdevice/SmartMic1.java b/app/src/main/java/com/yonsz/z1/device/childdevice/SmartMic1.java new file mode 100644 index 0000000..8a9e0a3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/childdevice/SmartMic1.java @@ -0,0 +1,185 @@ +package com.yonsz.z1.device.childdevice; + +import android.os.Handler; +import android.view.ViewGroup; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CLOTHES_HANGER; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.Img; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MUSIC_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; + +/** + * Created by Administrator on 2016/9/21. + */ +public class SmartMic1 { + + + private final ViewGroup mGroup; + private ViewPagerDelegate mDelegate; + private List mMenuEntities; + private Handler handler; + private String type; + + public SmartMic1(ViewGroup mGroup, String type) { + this.mGroup = mGroup; + this.type = type; + } + + public SmartMic1 setMenuList(DeviceEntityV4.DataBean objEntity, Handler handler) { + this.handler = handler; + /* Menu menu = new PopupMenu(mGroup.getContext(), null).getMenu(); + new MenuInflater(mGroup.getContext()).inflate(menuRes, menu);*/ + List menuEntities = getMenuEntityFormMenuRes(objEntity); + + if (mDelegate != null) { + mDelegate.setMenuList(menuEntities, handler); + } else + this.mMenuEntities = menuEntities; + + return this; + } + + private List getMenuEntityFormMenuRes(DeviceEntityV4.DataBean objEntity) { + List list = new ArrayList<>(); + MenuEntity itemEntity1 = new MenuEntity(); + itemEntity1.title = "空调"; + itemEntity1.iconId = Img[1]; + itemEntity1.deviceType = AIR_TAG; + list.add(itemEntity1); + MenuEntity itemEntity2 = new MenuEntity(); + itemEntity2.title = "电视"; + itemEntity2.iconId = Img[0]; + itemEntity2.deviceType = TV_TAG; + list.add(itemEntity2); + MenuEntity itemEntity14 = new MenuEntity(); + itemEntity14.title = "机顶盒"; + itemEntity14.iconId = R.drawable.icon_set_top_box; + itemEntity14.deviceType = TVONE_TAG; + list.add(itemEntity14); + MenuEntity itemEntity3 = new MenuEntity(); + itemEntity3.title = "风扇"; + itemEntity3.iconId = Img[2]; + itemEntity3.deviceType = FAN_TAG; + list.add(itemEntity3); + MenuEntity itemEntity4 = new MenuEntity(); + itemEntity4.title = "扫地机"; + itemEntity4.iconId = Img[3]; + itemEntity4.deviceType = SWEEP_TAG; + list.add(itemEntity4); + MenuEntity itemEntity12 = new MenuEntity(); + itemEntity12.title = "背景音乐"; + itemEntity12.iconId = Img[13]; + itemEntity12.deviceType = MUSIC_TAG; + list.add(itemEntity12); + if (type.equals("1")) { + MenuEntity itemEntity5 = new MenuEntity(); + itemEntity5.title = "灯光"; + itemEntity5.iconId = Img[4]; + itemEntity5.deviceType = LIGHT_TAG; + list.add(itemEntity5); + MenuEntity itemEntity6 = new MenuEntity(); + itemEntity6.title = "窗帘"; + itemEntity6.iconId = Img[5]; + itemEntity6.deviceType = CURTAINS_TAG; + list.add(itemEntity6); + MenuEntity itemEntity7 = new MenuEntity(); + itemEntity7.title = "插座"; + itemEntity7.iconId = Img[6]; + itemEntity7.deviceType = SWITCH_TAG; + list.add(itemEntity7); + } else { + MenuEntity itemEntity5 = new MenuEntity(); + itemEntity5.title = "灯光"; + itemEntity5.iconId = Img[4]; + list.add(itemEntity5); + MenuEntity itemEntity6 = new MenuEntity(); + itemEntity6.title = "人体红外"; + itemEntity6.iconId = Img[7]; + list.add(itemEntity6); + MenuEntity itemEntity7 = new MenuEntity(); + itemEntity7.title = "门磁"; + itemEntity7.iconId = Img[8]; + list.add(itemEntity7); + MenuEntity itemEntity8 = new MenuEntity(); + itemEntity8.title = "CO"; + itemEntity8.iconId = Img[9]; + list.add(itemEntity8); + MenuEntity itemEntity9 = new MenuEntity(); + itemEntity9.title = "水浸"; + itemEntity9.iconId = Img[10]; + list.add(itemEntity9); + MenuEntity itemEntity10 = new MenuEntity(); + itemEntity10.title = "温湿度"; + itemEntity10.iconId = Img[11]; + list.add(itemEntity10); + MenuEntity itemEntity11 = new MenuEntity(); + itemEntity11.title = "烟雾"; + itemEntity11.iconId = Img[12]; + list.add(itemEntity11); + } + MenuEntity itemEntity13 = new MenuEntity(); + itemEntity13.title = "晾衣机"; + itemEntity13.iconId = R.drawable.icon_airer; + itemEntity13.deviceType = CLOTHES_HANGER; + list.add(itemEntity13); + + if (objEntity.getChildren() != null) { + for (int i = 0; i < objEntity.getChildren().size(); i++) { + switch (objEntity.getChildren().get(i).getDeviceType()) { + case TV_TAG: + list.remove(itemEntity2); + break; + case AIR_TAG: + list.remove(itemEntity1); + break; + case FAN_TAG: + list.remove(itemEntity3); + break; + case SWEEP_TAG: + list.remove(itemEntity4); + break; + case MUSIC_TAG: + list.remove(itemEntity12); + break; + case TVONE_TAG: + list.remove(itemEntity14); + break; + } + } + + } + return list; + } + + public SmartMic1 setDelegate(ViewPagerDelegate viewPagerDelegate) { + this.mDelegate = viewPagerDelegate; + + mDelegate.setup(mGroup); + + if (mMenuEntities != null) { + mDelegate.setMenuList(mMenuEntities, handler); + } + return this; + } + + public void show() { + mDelegate.show(); + } + + public void disMiss() { + mDelegate.disMiss(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/childdevice/ViewPagerDelegate.java b/app/src/main/java/com/yonsz/z1/device/childdevice/ViewPagerDelegate.java new file mode 100644 index 0000000..72e0461 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/childdevice/ViewPagerDelegate.java @@ -0,0 +1,144 @@ +package com.yonsz.z1.device.childdevice; + +import android.animation.ObjectAnimator; +import android.os.Handler; +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPager; +import android.support.v4.view.ViewPropertyAnimatorListener; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.DecelerateInterpolator; +import android.widget.ImageView; + +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2016/9/21. + */ +public class ViewPagerDelegate implements View.OnClickListener { + private ViewGroup mContext; + private View rootView; + private ViewPager mViewPager; + private List mMenuEntities; + private ArrayList menuRVHandlerses; + private int mNumColumns = 3; + private ImageView mButton; + + + public void setMenuList(List menuEntities, Handler handler) { + + mMenuEntities = menuEntities; + menuRVHandlerses = new ArrayList<>(); + int fragmentCount = menuEntities.size() / (mNumColumns * 2); + if (menuEntities.size() % (mNumColumns * 2) != 0) { + //注释起来滑动的页数,定到只有一页 + // fragmentCount += 1; + fragmentCount = 1; + } + /*for (int i = 0; i < fragmentCount; i++) { + + int lastIndex = Math.min((i + 1) * (mNumColumns * 2), menuEntities.size()); + MenuRVHandlers menuRVHandlers = null; + if (menuEntities.size() == 6 || menuEntities.size() == 5 || menuEntities.size() == 3) { + menuRVHandlers = new MenuRVHandlers(mNumColumns, menuEntities.subList(i * (mNumColumns * 2), lastIndex), handler, mContext, rootView); + } else if (menuEntities.size() == 4 || menuEntities.size() == 2) { + menuRVHandlers = new MenuRVHandlers(2, menuEntities, handler, mContext, rootView); + } else if (menuEntities.size() == 7 || menuEntities.size() == 8) { + menuRVHandlers = new MenuRVHandlers(3, menuEntities, handler, mContext, rootView); + } else if (menuEntities.size() > 8) { + menuRVHandlers = new MenuRVHandlers(4, menuEntities, handler, mContext, rootView); + } else { + menuRVHandlers = new MenuRVHandlers(1, menuEntities, handler, mContext, rootView); + } + + + menuRVHandlerses.add(menuRVHandlers); + + }*/ + + for (int i = 0; i < fragmentCount; i++) { + MenuRVHandlers menuRVHandlers = null; + if (i == 0) { + menuRVHandlers = new MenuRVHandlers(4, menuEntities, handler, mContext, rootView); + menuRVHandlerses.add(menuRVHandlers); + } else { + menuRVHandlers = new MenuRVHandlers(3, menuEntities, handler, mContext, rootView); + menuRVHandlerses.add(menuRVHandlers); + } + } + mViewPager.setAdapter(new ViewpagerAdapter(menuRVHandlerses)); + mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + } + + public void setup(ViewGroup mContext) { + this.mContext = mContext; + rootView = creatView(); + } + + private View creatView() { + + View rootView = LayoutInflater.from(mContext.getContext()).inflate(R.layout.layout_viewpager, null, false); + mViewPager = (ViewPager) rootView.findViewById(R.id.vp); + mButton = (ImageView) rootView.findViewById(R.id.btn); + mButton.setOnClickListener(this); + + return rootView; + } + + public void show() { + ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + ObjectAnimator rotation = ObjectAnimator.ofFloat(mButton, "rotation", new float[]{0, 180}); + rotation.setDuration(500); + rotation.start(); + mContext.addView(rootView, lp); + } + + public void disMiss() { + mContext.removeView(rootView); + } + + + @Override + public void onClick(View v) { + + ViewCompat.animate(rootView) + .alpha(0) + .translationY(rootView.getHeight()) + .setInterpolator(new DecelerateInterpolator()) + .setListener(new ViewPropertyAnimatorListener() { + @Override + public void onAnimationStart(View view) { + + } + + @Override + public void onAnimationEnd(View view) { + mContext.removeView(rootView); + } + + @Override + public void onAnimationCancel(View view) { + + } + }).setDuration(300).start(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/childdevice/ViewpagerAdapter.java b/app/src/main/java/com/yonsz/z1/device/childdevice/ViewpagerAdapter.java new file mode 100644 index 0000000..45e0227 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/childdevice/ViewpagerAdapter.java @@ -0,0 +1,54 @@ +package com.yonsz.z1.device.childdevice; + +import android.support.v4.view.PagerAdapter; +import android.view.View; +import android.view.ViewGroup; + +import java.util.ArrayList; + +/** + * Created by Administrator on 2016/9/22. + */ +public class ViewpagerAdapter extends PagerAdapter { + + private ArrayList menuRVHandlerses; + + public ViewpagerAdapter(ArrayList menuRVHandlerses) { + + this.menuRVHandlerses = menuRVHandlerses; + } + + @Override + public int getCount() { + return menuRVHandlerses.size(); + } + +// @Override +// public void destroyItem(ViewGroup container, int position, Object object) { +// super.destroyItem(container, position, object); +// } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view==object; + } + + @Override + public Object instantiateItem(View container, int position) { + return null; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + + container.removeView(menuRVHandlerses.get(position).onLoadView(container)); + } + + + @Override + public Object instantiateItem(ViewGroup container, int position) { + View view = menuRVHandlerses.get(position).onLoadView(container); + container.addView(view); + return view; + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsActivity.java b/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsActivity.java new file mode 100644 index 0000000..33951c9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsActivity.java @@ -0,0 +1,906 @@ +package com.yonsz.z1.device.curtains; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Vibrator; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.LinearLayoutManager; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuBridge; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.BlindEvent; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.LightListEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.VoiceControllEntity; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.device.light.LightAdapter; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.CurtainBottomDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.id.ll_sweep_continue_learn; +import static com.yonsz.z1.R.id.tv_curtains_add; +import static com.yonsz.z1.device.curtains.CurtainsAdapter.positionTagCurtain; +import static com.yonsz.z1.net.Constans.ADDBLIND_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADDBLIND_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.BLIND_LEARN_SUCCESS; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.DELBLIND_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.DELBLIND_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.REVERSE_BLIND_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.REVERSE_BLIND_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECTBLIND_BYZI_FAIL; +import static com.yonsz.z1.net.Constans.SELECTBLIND_BYZI_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDPID_STUDYBLIND_FAIL; +import static com.yonsz.z1.net.Constans.SENDPID_STUDYBLIND_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDVOICE_BLINDMSG_FAIL; +import static com.yonsz.z1.net.Constans.SENDVOICE_BLINDMSG_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_REVERSE_BLINDMSG_FAIL; +import static com.yonsz.z1.net.Constans.SEND_REVERSE_BLINDMSG_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_VOICE_BLINDMSG_FAIL; +import static com.yonsz.z1.net.Constans.SEND_VOICE_BLINDMSG_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATEBLIND_ENTITYNAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATEBLIND_ENTITYNAME_SUCCESS; + +/** + * Created by Administrator on 2017/9/13. + */ +public class CurtainsActivity extends BaseActivity { + private TitleView mTitleView; + private SwipeMenuRecyclerView mRecyclerView; + // private SwipeRefreshLayout mRefreshLayout; + private CurtainsAdapter mCurtainsAdapter; + private List mdatas; + private boolean isLearn; + private LinearLayout learningLl; + private RelativeLayout lightBottomRl; + private String ziId; + private String userId; + private TextView mAddCurtains; + private LoadingDialog mLoadingDialog; + private int voicePosition; + private boolean isDeleteAll = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtains_control); + initView(); + initListener(); + selectBlindByZi(); + } + + @Override + public void onResume() { + super.onResume(); + if (isLearn) { + positionTagCurtain = false; + } + selectBlindByZi(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + positionTagCurtain = false; + mCurtainsAdapter.positionTagInt = -1; + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(BlindEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (isDeleteAll) { + + } else { + Message message = new Message(); + message.what = BLIND_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + String curtainsStateTag = (String) getIntent().getExtras().get("curtainsStateTag"); + if (curtainsStateTag.equals("0")) { + isLearn = true; + } else { + isLearn = false; + } + mAddCurtains = (TextView) findViewById(tv_curtains_add); + learningLl = (LinearLayout) findViewById(ll_sweep_continue_learn); + lightBottomRl = (RelativeLayout) findViewById(R.id.rl_bottom); + mTitleView = (TitleView) findViewById(R.id.title_curtains); + mTitleView.setHead(R.string.curtains); + mTitleView.clearBackGroud(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (isLearn) { + isLearn = false; + //查询学习按键 + showControl(); + /*mLightAdapter = new LightAdapter(LightActivity.this, mdatas, isLearn); + mRecyclerView.setAdapter(mLightAdapter);*/ + mCurtainsAdapter.setIsLearn(false); + mCurtainsAdapter.notifyDataSetChanged(); + } else { + if (mCurtainsAdapter.positionTagInt != -1) { + mCurtainsAdapter.positionTagInt = 0; + } + positionTagCurtain = false; + if (mdatas.size() != 0) { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(CurtainsActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + isDeleteAll = true; + deleteChildDevice(CURTAINS_TAG, ziId); + break; + case 2: + //重新命名 + + break; + case 3: + //语令说明 + Intent intent = new Intent(CurtainsActivity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", CURTAINS_TAG); + startActivity(intent); + break; + case 4: + //遥控学习 + isLearn = true; + showLearn(); + mCurtainsAdapter.setIsLearn(true); + mCurtainsAdapter.notifyDataSetChanged(); + break; + } + } + }); + dialog2.setContent(); + dialog2.setLearnTxt("添加窗帘"); + dialog2.setSureBtnTxt(R.string.delete_chuanglian); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + } + + @Override + public void onFunctionText() { + + } + }); + if (isLearn) { + showLearn(); + } else { + showControl(); + } + mdatas = new ArrayList<>(); + mCurtainsAdapter = new CurtainsAdapter(this, mdatas, isLearn); + /*mRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresh_layout); + mRefreshLayout.setOnRefreshListener(mRefreshListener); // 刷新监听*/ + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_parent_device_list); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setItemViewCacheSize(0);//试图解决复用的问题 + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setSwipeMenuCreator(swipeMenuCreator); + // mRecyclerView.setSwipeMenuItemClickListener(mMenuItemClickListener); + mRecyclerView.setAdapter(mCurtainsAdapter); + mCurtainsAdapter.setOnItemLightClickListener(new LightAdapter.OnItemLightClickListener() { + @Override + public void onLearnLightClick(int position, int i) { + Intent intent = new Intent(CurtainsActivity.this, CurtainsLearnActivity.class); + intent.putExtra("id", mdatas.get(position).getId()); + intent.putExtra("pid", mdatas.get(position).getPid()); + intent.putExtra("ziId", mdatas.get(position).getZiId()); + intent.putExtra("studyType", i + ""); + intent.putExtra("reverseFlag", mdatas.get(position).getReverseFlag()); + startActivity(intent); + } + + @Override + public void onLightOpenCloseClick(int position, int i) { + //控制窗帘 + switch (i) { + case 0: + setShake(); + //关闭窗帘 + sendPidStudyBlind(mdatas.get(position).getPid(), "00", "02"); + break; + case 1: + setShake(); + //打开窗帘 + sendPidStudyBlind(mdatas.get(position).getPid(), "ff", "02"); + break; + case 2: + setShake(); + //暂停 + sendPidStudyBlind(mdatas.get(position).getPid(), "fe", "02"); + break; + } + } + + @Override + public void onVoiceClick(final int position, int voiceControlTag) { + final Handler ThreadHandler = new Handler(); + switch (voiceControlTag) { + case 1: + setShake(); + ConfirmDialog dialog = new ConfirmDialog(CurtainsActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //获取编码,记录当前的位置 + voicePosition = position; + //设置定时器 + ThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + Message message = new Message(); + message.what = BLIND_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + }, 6000); + sendVoiceBlindMsg(1, mdatas.get(position).getId()); + break; + } + } + }); + dialog.setContent("开启语音控制?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + setShake(); + ConfirmDialog dialog1 = new ConfirmDialog(CurtainsActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //获取编码,记录当前的位置 + voicePosition = position; + //设置定时器 + ThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + Message message = new Message(); + message.what = BLIND_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + }, 6000); + sendVoiceBlindMsg(0, mdatas.get(position).getId()); + break; + } + } + }); + dialog1.setContent("关闭语音控制?"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + break; + case 3: + ToastUtil.show(CurtainsActivity.this, "请完成窗帘学习"); + break; + case 4: + CurtainBottomDialog dialog2 = new CurtainBottomDialog(CurtainsActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除 + delBlindEntity(position); + mdatas.remove(position); + showLearn(); + if (mdatas.size() != 0) { + mCurtainsAdapter.positionTagInt = mdatas.size() - 1; + } else { + mCurtainsAdapter.positionTagInt = 0; + } + positionTagCurtain = true; + mCurtainsAdapter.notifyDataSetChanged(); + break; + case 2: + //重新命名 + showModifyPop(position, 1); + break; + case 3: + //窗帘翻转 + reverseBlindControl(position); + break; + } + } + }); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + break; + } + } + }); + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + private void reverseBlindControl(final int position) { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (mdatas.get(position).getReverseFlag().equals("1")) { + map.put("reverseFlag", "0"); + } else { + map.put("reverseFlag", "1"); + } + map.put("id", mdatas.get(position).getId()); + map.put("ziId", mdatas.get(position).getZiId()); + netWorkUtil.requestPostByAsynew(NetWorkUrl.REVERSE_BLIND_CONTROL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("reverseBlindControl", "ShareDeviceActivity onSuccess()" + respone); + VoiceControllEntity obj = JSON.parseObject(respone, VoiceControllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(REVERSE_BLIND_CONTROL_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(REVERSE_BLIND_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(REVERSE_BLIND_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void sendPidStudyBlind(String id, String order, String modle) { + + } + + private void sendVoiceBlindMsg(int controlFlag, String id) { + /*initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("idInfo", id); + map.put("ziId", ziId); + map.put("controlFlag", controlFlag + ""); + netWorkUtil.requestPostByAsynew(NetWorkUrl.SENDVOICE_BLINDMSG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("allowVoiceControll", "ShareDeviceActivity onSuccess()" + respone); + VoiceControllEntity obj = JSON.parseObject(respone, VoiceControllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SENDVOICE_BLINDMSG_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SENDVOICE_BLINDMSG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SENDVOICE_BLINDMSG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void delBlindEntity(int position) { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", mdatas.get(position).getId()); + map.put("deviceType", CURTAINS_TAG); + netWorkUtil.requestPostByAsynew(NetWorkUrl.DELBLIND_ENTITY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("delBlindEntity", "ShareDeviceActivity onSuccess()" + respone); + VoiceControllEntity obj = JSON.parseObject(respone, VoiceControllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELBLIND_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DELBLIND_ENTITY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DELBLIND_ENTITY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void showControl() { + // mTitleView.setHeadFuntionTxt("说明"); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + learningLl.setVisibility(View.GONE); + lightBottomRl.setVisibility(View.GONE); + } + + private void showLearn() { + positionTagCurtain = false; + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setHeadFuntionGone(); + if (mdatas != null && mdatas.size() != 0) { + mTitleView.setHeadFuntionTxtColor(true); + } else { + mTitleView.setHeadFuntionTxtColor(false); + } + learningLl.setVisibility(View.GONE); + lightBottomRl.setVisibility(View.VISIBLE); + } + + private void selectBlindByZi() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestPostByAsynew(NetWorkUrl.SELECTBLIND_BYZI, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectBlindByZi", "ShareDeviceActivity onSuccess()" + respone); + LightListEntity obj = JSON.parseObject(respone, LightListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECTBLIND_BYZI_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECTBLIND_BYZI_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECTBLIND_BYZI_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + /** + * 刷新。 + */ + private SwipeRefreshLayout.OnRefreshListener mRefreshListener = new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + // nowPosition = 0; + selectBlindByZi(); + } + }; + + private void initListener() { + mAddCurtains.setOnClickListener(this); + learningLl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case tv_curtains_add: + showModifyPop(0, 0); + break; + case ll_sweep_continue_learn: + isLearn = true; + showLearn(); + mCurtainsAdapter.setIsLearn(true); + mCurtainsAdapter.notifyDataSetChanged(); + break; + } + } + + public void showModifyPop(final int adapterPosition, final int i) { + RenameNameDialog dialog = new RenameNameDialog(CurtainsActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + if (i == 0) { + //添加窗帘 + addBlindEntity(positioName); + } else { + updateBlindEntityName(positioName, mdatas.get(adapterPosition).getId(), adapterPosition); + } + break; + } + } + }); + dialog.setMaxEms(4); + if (i == 0) { + dialog.setContent("所添加的窗帘位置进行命名"); + } else { + dialog.setOldName(mdatas.get(adapterPosition).getAddressName()); + dialog.setContent("要修改的窗帘的名称"); + } + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void updateBlindEntityName(String positioName, String id, final int adapterPosition) { + /* if (positioName == null) { + ToastUtil.show(CurtainsActivity.this, "位置不能为空"); + return; + } + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", id); + map.put("addressName", positioName.trim()); + netWorkUtil.requestPostByAsynew(NetWorkUrl.UPDATEBLIND_ENTITYNAME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateLightEntityName", "ShareDeviceActivity onSuccess()" + respone); + LightEntity obj = JSON.parseObject(respone, LightEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATEBLIND_ENTITYNAME_SUCCESS); + msg.obj = obj; + msg.arg1 = adapterPosition; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATEBLIND_ENTITYNAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATEBLIND_ENTITYNAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void addBlindEntity(String positioName) { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + if (!TextUtils.isEmpty(positioName)) { + map.put("addressName", positioName.trim()); + } else { + map.put("addressName", getString(R.string.keting)); + } + netWorkUtil.requestPostByAsynew(NetWorkUrl.ADDBLIND_ENTITY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addBlindEntity", "ShareDeviceActivity onSuccess()" + respone); + LightEntity obj = JSON.parseObject(respone, LightEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADDBLIND_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADDBLIND_ENTITY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADDBLIND_ENTITY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECTBLIND_BYZI_SUCCESS: + // mRefreshLayout.setRefreshing(false); + LightListEntity obj = (LightListEntity) msg.obj; + mdatas.clear(); + if (obj.getObj() != null) { + mdatas.addAll(0, obj.getObj()); + } else { + showLearn(); + mCurtainsAdapter.setIsLearn(true); + mCurtainsAdapter.notifyDataSetChanged(); + } + mCurtainsAdapter.notifyDataSetChanged(); + break; + case ADDBLIND_ENTITY_SUCCESS: + LightEntity lightEntity = (LightEntity) msg.obj; + mdatas.add(lightEntity.getObj()); + showLearn(); + if (mdatas.size() != 0) { + mCurtainsAdapter.positionTagInt = mdatas.size() - 1; + } else { + mCurtainsAdapter.positionTagInt = -1; + } + positionTagCurtain = true; + DisplayMetrics dm = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(dm); + mRecyclerView.smoothScrollToPosition(dm.DENSITY_HIGH / 9 * 7); + mCurtainsAdapter.notifyDataSetChanged(); + break; + case ADDBLIND_ENTITY_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATEBLIND_ENTITYNAME_SUCCESS: + positionTagCurtain = false; + LightEntity lightEntity1 = (LightEntity) msg.obj; + int arg1 = msg.arg1; + mdatas.get(arg1).setAddressName(lightEntity1.getObj().getAddressName()); + mCurtainsAdapter.notifyDataSetChanged(); + break; + case SENDVOICE_BLINDMSG_SUCCESS: + VoiceControllEntity controllEntity = (VoiceControllEntity) msg.obj; + String sendMsg = controllEntity.getObj().getCodeList().get(0); + sendVoiceControllInfo(sendMsg); + break; + case BLIND_LEARN_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + if (mdatas.get(voicePosition).getVoiceFlag().equals("1")) { + mdatas.get(voicePosition).setVoiceFlag("0"); + ToastUtil.show(CurtainsActivity.this, "关闭语音成功"); + } else { + mdatas.get(voicePosition).setVoiceFlag("1"); + ToastUtil.show(CurtainsActivity.this, "开启语音成功"); + } + mCurtainsAdapter.notifyItemChanged(voicePosition); + break; + case SENDPID_STUDYBLIND_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case REVERSE_BLIND_CONTROL_SUCCESS: + int arg11 = msg.arg1; + if (mdatas.get(arg11).getReverseFlag().equals("1")) { + mdatas.get(arg11).setReverseFlag("0"); + } else { + mdatas.get(arg11).setReverseFlag("1"); + } + VoiceControllEntity controllEntity1 = (VoiceControllEntity) msg.obj; + String sendMsg1 = controllEntity1.getObj().getCodeList().get(0); + sendReverseBlindMsg(sendMsg1); + break; + case SEND_REVERSE_BLINDMSG_SUCCESS: + ToastUtil.show(CurtainsActivity.this, "窗帘翻转成功"); + break; + case DELBLIND_ENTITY_SUCCESS: + VoiceControllEntity controllEntity2 = (VoiceControllEntity) msg.obj; + if (controllEntity2 != null && controllEntity2.getObj() != null) { + if (controllEntity2.getObj().getVoiceFlag().equals("1")) { + String sendMsg2 = controllEntity2.getObj().getCodeList().get(0); + sendVoiceControllInfo(sendMsg2); + } + } + break; + case DELETE_CHILDDEVICE_SUCCESS: + + break; + } + } + + private void sendReverseBlindMsg(String sendMsg1) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("sendMsg", sendMsg1); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_REVERSE_BLINDMSG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sendReverseBlindMsg", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_REVERSE_BLINDMSG_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEND_REVERSE_BLINDMSG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_REVERSE_BLINDMSG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void sendVoiceControllInfo(String sendMsg) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("sendMsg", sendMsg); + map.put("userId", userId); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_VOICE_BLINDMSG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sendVoiceControllInfo", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_VOICE_BLINDMSG_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEND_VOICE_BLINDMSG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_VOICE_BLINDMSG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.y76); + + // 1. MATCH_PARENT 自适应高度,保持和Item一样高; + // 2. 指定具体的高,比如80; + // 3. WRAP_CONTENT,自身高度,不推荐; + int height = getResources().getDimensionPixelSize(R.dimen.y76); + // int height = ViewGroup.LayoutParams.MATCH_PARENT; + // 添加右侧的,如果不添加,则右侧不会出现菜单。 + /*{ + SwipeMenuItem deleteItem = new SwipeMenuItem(CurtainsActivity.this) + .setBackground(R.color.z1_ff0000) + .setText("删除") + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + swipeRightMenu.addMenuItem(deleteItem);// 添加菜单到右侧。 + }*/ + } + }; + + /** + * RecyclerView的Item的Menu点击监听。 + */ + private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() { + @Override + public void onItemClick(SwipeMenuBridge menuBridge) { + menuBridge.closeMenu(); + + int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。 + final int adapterPosition = menuBridge.getAdapterPosition(); // RecyclerView的Item的position。 + int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。 + + if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) { + Intent intent; + switch (menuPosition) { + case 0: + mdatas.remove(adapterPosition); + mCurtainsAdapter.notifyDataSetChanged(); + // delLightEntity(adapterPosition); + break; + } + } + } + }; + +} diff --git a/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsAdapter.java b/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsAdapter.java new file mode 100644 index 0000000..2eaa396 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsAdapter.java @@ -0,0 +1,226 @@ +package com.yonsz.z1.device.curtains; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.device.light.LightAdapter; +import com.yonsz.z1.listener.NoDoubleClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2017/9/18. + */ +public class CurtainsAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mObjEntity; + private boolean isLearn; + private AlphaAnimation mAlphaAnimation; + private LightAdapter.OnItemLightClickListener mLightClickListener; + private int voiceControlTag = 0; + public static boolean positionTagCurtain = false; + public static int positionTagInt = -1; + + public CurtainsAdapter(Context mContext, List mObjEntity, boolean isLearn) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + this.isLearn = isLearn; + mAlphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(mContext, R.anim.alpha_anim_device); + } + + public void setIsLearn(boolean isLearn1) { + isLearn = isLearn1; + } + + + @Override + public CurtainsAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_curtains, + parent, false); + return new CurtainsAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(CurtainsAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView curtainsRoom, curtainsRoomInner; + private TextView curtainsEdit, curtainsState; + private TextView mCurtainsStudy; + private TextView mCurtainsStudyBg; + private ImageView mCurtainsStudyMark; + private FrameLayout mCurtainsOpne, mCurtainsStop, mCurtainsClose; + private LinearLayout learnLl, controlLl; + + + public MessageViewHolder(View view) { + super(view); + curtainsRoom = (TextView) itemView.findViewById(R.id.tv_curtains_room); + curtainsRoomInner = (TextView) itemView.findViewById(R.id.tv_curtains_room_inner); + curtainsEdit = (TextView) itemView.findViewById(R.id.tv_curtains_edit_learn); + curtainsState = (TextView) itemView.findViewById(R.id.tv_curtains_edit); + mCurtainsOpne = (FrameLayout) itemView.findViewById(R.id.fl_curtains_open); + mCurtainsClose = (FrameLayout) itemView.findViewById(R.id.fl_curtains_close); + mCurtainsStop = (FrameLayout) itemView.findViewById(R.id.fl_curtains_stop); + mCurtainsStudy = (TextView) itemView.findViewById(R.id.tv_curtains_stop_learn); + mCurtainsStudyBg = (TextView) itemView.findViewById(R.id.tv_curtains_stop_bg_learn); + mCurtainsStudyMark = (ImageView) itemView.findViewById(R.id.tv_curtains_stop_mark_learn); + learnLl = (LinearLayout) itemView.findViewById(R.id.ll_curtains_top_learn); + controlLl = (LinearLayout) itemView.findViewById(R.id.ll_curtains_top); + } + + public void setViews(final int position) { + final LightDetaiEntity detaiEntity = mObjEntity.get(position); + + if (isLearn) { + mCurtainsStudyBg.setVisibility(View.GONE); + mCurtainsStudyMark.setVisibility(View.GONE); + + if (positionTagInt != -1 && positionTagInt == position && !detaiEntity.getStudyFlag().equals("1")) { + mCurtainsStudyBg.setVisibility(View.VISIBLE); + mCurtainsStudyBg.startAnimation(mAlphaAnimation); + } + if (positionTagCurtain) { + if (detaiEntity.getStudyFlag().equals("1")) { + mCurtainsStudyMark.setVisibility(View.VISIBLE); + } else { + mCurtainsStudyMark.setVisibility(View.GONE); + } + } else { + if (detaiEntity.getStudyFlag().equals("1")) { + mCurtainsStudyMark.setVisibility(View.VISIBLE); + } else { + mCurtainsStudyMark.setVisibility(View.GONE); + mCurtainsStudyBg.setVisibility(View.VISIBLE); + mCurtainsStudyBg.startAnimation(mAlphaAnimation); + positionTagCurtain = true; + positionTagInt = position; + } + } + } else { + mCurtainsStudyBg.setVisibility(View.GONE); + mCurtainsStudyMark.setVisibility(View.GONE); + if (detaiEntity.getStudyFlag().equals("1")) { + mCurtainsOpne.setAlpha(1.0f); + mCurtainsOpne.setEnabled(true); + mCurtainsClose.setAlpha(1.0f); + mCurtainsClose.setEnabled(true); + mCurtainsStop.setAlpha(1.0f); + mCurtainsStop.setEnabled(true); + } else { + mCurtainsOpne.setAlpha(0.5f); + mCurtainsOpne.setEnabled(false); + mCurtainsClose.setAlpha(0.5f); + mCurtainsClose.setEnabled(false); + mCurtainsStop.setAlpha(0.5f); + mCurtainsStop.setEnabled(false); + } + } + if (isLearn) { + controlLl.setVisibility(View.GONE); + learnLl.setVisibility(View.VISIBLE); + curtainsRoom.setVisibility(View.GONE); + curtainsRoomInner.setVisibility(View.VISIBLE); + if (detaiEntity.getAddressName() != null) { + curtainsRoomInner.setText(detaiEntity.getAddressName()); + } + } else { + controlLl.setVisibility(View.VISIBLE); + learnLl.setVisibility(View.GONE); + curtainsRoomInner.setVisibility(View.GONE); + curtainsRoom.setVisibility(View.VISIBLE); + if (detaiEntity.getAddressName() != null) { + curtainsRoom.setText(detaiEntity.getAddressName()); + } + } + if (isLearn) { + + } else { + if (detaiEntity.getVoiceFlag().equals("1")) { + detaiEntity.setVoiceControlTag(2); + curtainsState.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_on)); + } else if (detaiEntity.getStudyFlag().equals("1")) { + detaiEntity.setVoiceControlTag(1); + curtainsState.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_off)); + } else { + detaiEntity.setVoiceControlTag(3); + curtainsState.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_unor)); + } + } + mCurtainsStudy.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0); + positionTagInt = position; + } + } + }); + + curtainsState.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, detaiEntity.getVoiceControlTag()); + } + } + }); + curtainsEdit.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 4); + } + } + }); + + mCurtainsOpne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + }); + mCurtainsClose.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } + } + }); + mCurtainsStop.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 2); + } + } + }); + } + } + + public void setOnItemLightClickListener(LightAdapter.OnItemLightClickListener listener) { + this.mLightClickListener = listener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsLearnActivity.java b/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsLearnActivity.java new file mode 100644 index 0000000..2bfa43c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsLearnActivity.java @@ -0,0 +1,131 @@ +package com.yonsz.z1.device.curtains; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2017/9/18. + */ +public class CurtainsLearnActivity extends BaseActivity { + private TitleView mTitleViewl; + private Button nextConfig; + private CheckBox selectUnnorReveal; + private String studyType; + private ImageView iv_bg; + private MediaPlayer mediaPlayer01; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtains_learn); + initView(); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + // SoundPlayUtils.play(5); + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_65); + mediaPlayer01.start(); + } + } + + private void initView() { + studyType = getIntent().getExtras().get("studyType").toString(); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + iv_bg = (ImageView) findViewById(R.id.iv_bg); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // saveLightStudyInfo(); + Intent intent = new Intent(CurtainsLearnActivity.this, SureCurtainsLearnActivity.class); + intent.putExtra("id", getIntent().getExtras().get("id").toString()); + intent.putExtra("pid", getIntent().getExtras().get("pid").toString()); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("studyType", studyType); + intent.putExtra("reverseFlag", getIntent().getExtras().get("reverseFlag").toString()); + startActivity(intent); + finish(); + } + }); + mTitleViewl = (TitleView) findViewById(R.id.title_light_learn); + mTitleViewl.setHead(R.string.learn_guide); + mTitleViewl.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + selectUnnorReveal.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + } else { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + /*case SAVELIGHT_STUDYINFO_SUCCESS: + LightEntity obj = (LightEntity) msg.obj; + Intent intent = new Intent(CurtainsLearnActivity.this, SureCurtainsLearnActivity.class); + if (studyType.equals("1")) { + intent.putExtra("onInfrared", obj.getObj().getOnInfrared()); + } else { + intent.putExtra("offInfrared", obj.getObj().getOffInfrared()); + } + intent.putExtra("ziId", obj.getObj().getZiId()); + intent.putExtra("id", obj.getObj().getId()); + intent.putExtra("studyType", studyType); + startActivity(intent); + finish(); + break;*/ + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsLearnFailActivity.java b/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsLearnFailActivity.java new file mode 100644 index 0000000..a33707e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/curtains/CurtainsLearnFailActivity.java @@ -0,0 +1,79 @@ +package com.yonsz.z1.device.curtains; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import de.greenrobot.event.EventBus; + +/** + * Created by Administrator on 2017/9/18. + */ +public class CurtainsLearnFailActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_sure_fail; + private String studyType; + private ImageView iv_bg; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtains_learn_fail); + initView(); + } + + private void initView() { + studyType = getIntent().getExtras().get("studyType").toString(); + iv_bg = (ImageView) findViewById(R.id.iv_bg); + bt_sure_fail = (Button) findViewById(R.id.bt_sure_fail); + mTitleView = (TitleView) findViewById(R.id.title_sure_light_fail); + mTitleView.setHead("学习注意事项"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + bt_sure_fail.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(CurtainsLearnFailActivity.this, CurtainsLearnActivity.class); + intent.putExtra("id", getIntent().getExtras().get("id").toString()); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("studyType", getIntent().getExtras().get("studyType").toString()); + intent.putExtra("pid", getIntent().getExtras().get("pid").toString()); + intent.putExtra("reverseFlag", getIntent().getExtras().get("reverseFlag").toString()); + startActivity(intent); + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/curtains/SureCurtainsLearnActivity.java b/app/src/main/java/com/yonsz/z1/device/curtains/SureCurtainsLearnActivity.java new file mode 100644 index 0000000..74345c9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/curtains/SureCurtainsLearnActivity.java @@ -0,0 +1,312 @@ +package com.yonsz.z1.device.curtains; + +import android.app.Service; +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.VoiceControllEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.REVERSE_BLIND_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.REVERSE_BLIND_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDPID_STUDYBLIND_FAIL; +import static com.yonsz.z1.net.Constans.SENDPID_STUDYBLIND_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_REVERSE_BLINDMSG_FAIL; +import static com.yonsz.z1.net.Constans.SEND_REVERSE_BLINDMSG_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATEBLIND_STUDYFLAG_FAIL; +import static com.yonsz.z1.net.Constans.UPDATEBLIND_STUDYFLAG_SUCCESS; + +/** + * Created by Administrator on 2017/9/18. + */ +public class SureCurtainsLearnActivity extends BaseActivity { + private TitleView mTitleView; + private TextView openLight, openLightBelow, guide1Tv, guide2Tv; + private TextView noUse; + private Button sureBtn; + private String ziId; + private String pid; + private String id; + private String studyType; + private RelativeLayout closeRl, opneRl, stopRl; + private ImageView mLearnHelp; + private CheckBox selectUnnorReveal; + private MediaPlayer mediaPlayer01; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sure_curtains_learn); + initView(); + initListener(); + // SoundPlayUtils.play(6); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_36); + mediaPlayer01.start(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + private void initView() { + studyType = getIntent().getExtras().get("studyType").toString(); + ziId = (String) getIntent().getExtras().get("ziId"); + pid = (String) getIntent().getExtras().get("pid"); + id = (String) getIntent().getExtras().get("id"); + closeRl = (RelativeLayout) findViewById(R.id.tv_close_curtains); + opneRl = (RelativeLayout) findViewById(R.id.tv_open_curtains); + stopRl = (RelativeLayout) findViewById(R.id.tv_stop_curtains); + openLightBelow = (TextView) findViewById(R.id.tv_open_light_below); + guide1Tv = (TextView) findViewById(R.id.tv_guide1); + guide2Tv = (TextView) findViewById(R.id.tv_guide2); + noUse = (TextView) findViewById(R.id.tv_no_use); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + mLearnHelp = (ImageView) findViewById(R.id.iv_learn_help); + sureBtn = (Button) findViewById(R.id.bt_sure_config); + mTitleView = (TitleView) findViewById(R.id.title_sure_light); + mTitleView.setHead(R.string.learn_guide); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + sendPidStudyBlind("ff", "01"); + } + + private void initListener() { + closeRl.setOnClickListener(this); + opneRl.setOnClickListener(this); + stopRl.setOnClickListener(this); + noUse.setOnClickListener(this); + sureBtn.setOnClickListener(this); + mLearnHelp.setOnClickListener(this); + selectUnnorReveal.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_close_curtains: + setShake(); + sendPidStudyBlind("00", "02"); + break; + case R.id.tv_open_curtains: + setShake(); + sendPidStudyBlind("ff", "02"); + break; + case R.id.tv_stop_curtains: + setShake(); + sendPidStudyBlind("fe", "02"); + break; + case R.id.tv_no_use: + Intent intent = new Intent(SureCurtainsLearnActivity.this, CurtainsLearnFailActivity.class); + intent.putExtra("id", getIntent().getExtras().get("id").toString()); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("studyType", studyType); + startActivity(intent); + finish(); + break; + case R.id.bt_sure_config: + updateBlindStudyFlag(); + break; + case R.id.iv_learn_help: + Intent intent1 = new Intent(SureCurtainsLearnActivity.this, CurtainsLearnFailActivity.class); + intent1.putExtra("id", getIntent().getExtras().get("id").toString()); + intent1.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent1.putExtra("studyType", studyType); + intent1.putExtra("reverseFlag", getIntent().getExtras().get("reverseFlag").toString()); + intent1.putExtra("pid", getIntent().getExtras().get("pid").toString()); + intent1.putExtra("reverseFlag", getIntent().getExtras().get("reverseFlag").toString()); + startActivity(intent1); + // finish(); + break; + case R.id.iv_select_unnor_reveal: + /*if (selectUnnorReveal.isChecked()) { + ToastUtil.show(this, "打开窗帘翻转"); + } else { + ToastUtil.show(this, "取消窗帘翻转"); + }*/ + break; + } + } + + private void updateBlindStudyFlag() { + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void sendPidStudyBlind(String order, String modle) { + /* NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("sendMsg", pid + order + modle); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + util.requestPostByAsyn(ziId, NetWorkUrl.SENDPID_STUDYBLIND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sendPidStudyBlind", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SENDPID_STUDYBLIND_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SENDPID_STUDYBLIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SENDPID_STUDYBLIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SENDPID_STUDYBLIND_SUCCESS: + + break; + case UPDATEBLIND_STUDYFLAG_SUCCESS: + if (selectUnnorReveal.isChecked()) { + //请求翻转的码 + reverseBlindControl(); + } + finish(); + break; + case UPDATEBLIND_STUDYFLAG_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case REVERSE_BLIND_CONTROL_SUCCESS: + VoiceControllEntity controllEntity = (VoiceControllEntity) msg.obj; + String sendMsg = controllEntity.getObj().getCodeList().get(0); + sendReverseBlindMsg(sendMsg); + break; + } + } + + private void sendReverseBlindMsg(String sendMsg) { + /* NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("sendMsg", sendMsg); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_REVERSE_BLINDMSG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sendReverseBlindMsg", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_REVERSE_BLINDMSG_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEND_REVERSE_BLINDMSG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_REVERSE_BLINDMSG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void reverseBlindControl() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (getIntent().getExtras().get("reverseFlag").toString().equals("1")) { + map.put("reverseFlag", "0"); + } else { + map.put("reverseFlag", "1"); + } + map.put("id", getIntent().getExtras().get("id").toString()); + map.put("ziId", ziId); + netWorkUtil.requestPostByAsynew(NetWorkUrl.REVERSE_BLIND_CONTROL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("reverseBlindControl", "ShareDeviceActivity onSuccess()" + respone); + VoiceControllEntity obj = JSON.parseObject(respone, VoiceControllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(REVERSE_BLIND_CONTROL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(REVERSE_BLIND_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(REVERSE_BLIND_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/deviceadd/ApConfigActivity.java b/app/src/main/java/com/yonsz/z1/device/deviceadd/ApConfigActivity.java new file mode 100644 index 0000000..94f64b0 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/deviceadd/ApConfigActivity.java @@ -0,0 +1,1268 @@ +package com.yonsz.z1.device.deviceadd; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.graphics.Color; +import android.graphics.Paint; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.wifi.ScanResult; +import android.net.wifi.SupplicantState; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.animation.AnimationUtils; +import android.view.animation.RotateAnimation; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.BindDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.android.AccessPoint; +import com.yonsz.z1.tcpudp.android.Repeater; +import com.yonsz.z1.tcpudp.android.Scanner; +import com.yonsz.z1.tcpudp.android.WifiAutomaticConnecter; +import com.yonsz.z1.tcpudp.android.WifiEnabler; +import com.yonsz.z1.tcpudp.model.ATCommand; +import com.yonsz.z1.tcpudp.model.ATCommandListener; +import com.yonsz.z1.tcpudp.model.Module; +import com.yonsz.z1.tcpudp.model.NetworkProtocol; +import com.yonsz.z1.tcpudp.net.Udp2Broadcast; +import com.yonsz.z1.tcpudp.net.UdpUnicast; +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.tcpudp.utils.Utils; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.fragment.Scene5Fragment; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.net.DatagramPacket; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.difference.DifferConstans.APPID_S_VOICE; +import static com.yonsz.z1.net.Constans.BIND_FAIL; +import static com.yonsz.z1.net.Constans.BIND_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.NetWorkUrl.ACTUATOR_INFO; +import static com.yonsz.z1.net.NetWorkUrl.COMPANY_INFO; + +/** + * @time 2017/6/13 0:01 + * @desc ${TODO} + */ +public class ApConfigActivity extends BaseActivity { + private static final int MSG_ENTER_CMD = 11; + private static final int MSG_RETRY_ENTER_CMD = 12; + private static final int MSG_ENABLE_WIFI = 13; + private static final String TAG = "ApConfigActivity1111"; + private final IntentFilter mFilter; + // private final BroadcastReceiver mReceiver; + protected EditText mSsidEditText; + protected EditText mPasswordEditText; + protected ImageView mStartButton; + private TitleView mTitleView; + private Udp2Broadcast mScanBroadcast; + private List mModules; + private ImageView showPassword; + private TextView apTopTv; + + private WifiManager mWifiManager; + private ScanResult mConnect2ScanResult; + // private WifiStatus mLastWifiStatus; + private WifiEnabler mWifiEnabler; + private CheckBox mToggleButton; + private TextView mWiFiStateTextView; + private Scanner mScanner; + private WifiAutomaticConnecter mWifiAutomaticConnecter; + private boolean mResetNetworks = true; + private NetworkInfo.DetailedState mLastState; + private WifiInfo mLastInfo; + private List mLatestAccessPoints; + private TextView mStatusTextView; + private ATCommandListener mATCommandListener; + private UdpUnicast mUdpUnicast; + private ATCommand mATCommand; + private long mLastCMD; + private StringBuffer mAtResponse = new StringBuffer(); + private boolean mIsCMDMode = false; + private Repeater mTestCmdRepeater; + private int mFailedTimes; + private boolean mIsExit; + private Handler mNetworkHandler; + + private LoadingDialog mLoadingDialog; + // private CheckBox apConfigCb; + private RotateAnimation rotateAnimation; + private Button mButtonNext; + private Button mButtonTryAgain; + private RelativeLayout progressRl; + private ImageView apStageIv; + private TextView apStageTv; + private TextView apStageDecalre; + private boolean isSearching = true; + private BroadcastReceiver mWifiChangedReceiver; + private boolean isAdd = true; + + public ApConfigActivity() { + mFilter = new IntentFilter(); + mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); + mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); + mFilter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION); + mFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); + mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); + mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION); + + Scene5Fragment.getUdpBroadcast().close(); + mScanBroadcast = new Udp2Broadcast(Constants.UDP_PORT) { + @Override + public void onReceived(List packets) { + Log.i(TAG, "ApConfigActivity onReceived()" + "====="); + mScanBroadcast.close(); + mModules = Utils.decodePackets(ApConfigActivity.this, packets); + //save the ap module mid info into local + if (mModules != null && mModules.size() > 0 && mModules.get(0) != null) { + Log.i(TAG, "ApConfigActivity: save the module info in local file:" + mModules.get(0)); + Utils.saveDevice(ApConfigActivity.this, generateNetworkKey(), mModules.get(0)); +// mWifiManager.disconnect(); + } else { + Log.i(TAG, "ApConfigActivity: not find any module info"); + mScanBroadcast.open(); + mScanBroadcast.send(Utils.getCMDScanModules(ApConfigActivity.this)); + } + } + }; + + mNetworkHandler = new Handler() { + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + + switch (msg.what) { + case MSG_ENTER_CMD: + + Log.i(TAG, "try to enter cmd mode"); + + mUdpUnicast.setIp(mModules.get(0).getIp()); + mUdpUnicast.open(); + mFailedTimes = 0; + new Thread(new Runnable() { + + @Override + public void run() { + mATCommand.enterCMDMode(); + } + }).start(); + break; + case MSG_RETRY_ENTER_CMD: + + setProgressBarIndeterminateVisibility(true); + if (mFailedTimes > 3) { + showStatusText(R.color.z1_1C72D6, getString(R.string.retry)); + } else { + showStatusText(R.color.z1_1C72D6, getString(R.string.waitting)); + } + new Thread(new Runnable() { + + @Override + public void run() { + //as there's no transparent transmission mode in this application, + //so just send AT+Q\r CMD to exit + if (mUdpUnicast.send(Constants.CMD_EXIT_CMD_MODE)) { + try { + Thread.sleep(300); + } catch (InterruptedException e) { + } + mATCommand.enterCMDMode(); + } else { + mWifiManager.setWifiEnabled(false); + try { + Thread.sleep(600); + } catch (InterruptedException e) { + } + mWifiManager.setWifiEnabled(true); + mWifiManager.reassociate(); + } + } + }).start(); + break; + case MSG_ENABLE_WIFI: + mToggleButton.setChecked(true); + break; + + default: + break; + } + } + }; + + mLatestAccessPoints = new ArrayList(); + } + + private static boolean isWifi(Context mContext) { + ConnectivityManager connectivityManager = (ConnectivityManager) mContext + .getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); + if (activeNetInfo != null + && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) { + return true; + } + return false; + } + + private void handleEvent(Intent intent) { + String action = intent.getAction(); + + if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) { + updateWifiState(intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, + WifiManager.WIFI_STATE_UNKNOWN)); + } else if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) { + + updateAccessPoints(); + } else if (WifiManager.NETWORK_IDS_CHANGED_ACTION.equals(action)) { + updateAccessPoints(); + } else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) { + updateConnectionState(WifiInfo.getDetailedStateOf((SupplicantState) + intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE))); + } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) { + + NetworkInfo.DetailedState state = ((NetworkInfo) intent.getParcelableExtra( + WifiManager.EXTRA_NETWORK_INFO)).getDetailedState(); + + Log.i(TAG, state.name()); + String ssid = AccessPoint.removeDoubleQuotes(mWifiManager.getConnectionInfo().getSSID()); + if (state == NetworkInfo.DetailedState.CONNECTED && ssid != null && ssid.equals(Utils.getSettingApSSID(this))) { + + Log.i(TAG, ssid + " is connected."); + if (ssid.equals(Utils.getSettingApSSID(this))) { + + if (!mIsCMDMode) { + + Module module = Utils.getDevice(ApConfigActivity.this, generateNetworkKey()); + if (module != null) { + + if (mModules == null) { + mModules = new ArrayList(); + mModules.add(module); + } else { + mModules.add(0, module); + } + mNetworkHandler.removeMessages(MSG_RETRY_ENTER_CMD); + mNetworkHandler.sendEmptyMessage(MSG_ENTER_CMD); + } else { + + Log.i(TAG, "Start to broadcast to find module info..."); + mScanBroadcast.open(); + mScanBroadcast.send(Utils.getCMDScanModules(getApplicationContext())); + } + showStatusText(R.color.z1_1C72D6, getString(R.string.connected_ap, Utils.getSettingApSSID(this))); + } + } else { + Log.i(TAG, "Disconnect it."); + mWifiManager.disconnect(); + } + } else if (state == NetworkInfo.DetailedState.DISCONNECTED || state == NetworkInfo.DetailedState.OBTAINING_IPADDR) { + mIsCMDMode = false; + closeActions(); + updateViews(false); + showStatusText(R.color.z1_ff0000, getString(R.string.ap_lost, Utils.getSettingApSSID(this))); + setProgressBarIndeterminateVisibility(true); + } + updateConnectionState(state); + } else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) { + updateConnectionState(null); + } + } + + private String generateNetworkKey() { + + WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); + if (wifiInfo != null && wifiInfo.getBSSID() != null) { + return wifiInfo.getBSSID(); + } else { + return Utils.getSettingApSSID(this); + } + } + + private void showStatusText(int color, String text) { + if (color == -1) { + mStatusTextView.setTextColor(Color.GRAY); + } else { + mStatusTextView.setTextColor(getResources().getColor(color)); + } + mStatusTextView.setText(text); + //先不让显示了 + mStatusTextView.setVisibility(View.VISIBLE); + } + + private void updateWifiState(int state) { + if (state == WifiManager.WIFI_STATE_ENABLED) { + mScanner.resume(); + updateAccessPoints(); + } else { + mScanner.pause(); + mLatestAccessPoints.clear(); + } + } + + private synchronized List updateAccessPoints() { + + List accessPoints = new ArrayList(); + + List configs = mWifiManager.getConfiguredNetworks(); + if (configs != null) { + for (WifiConfiguration config : configs) { + + // Shift the status to make enableNetworks() more efficient. + if (config.status == WifiConfiguration.Status.CURRENT) { + config.status = WifiConfiguration.Status.ENABLED; + } else if (mResetNetworks && config.status == WifiConfiguration.Status.DISABLED) { + config.status = WifiConfiguration.Status.CURRENT; + } + + AccessPoint accessPoint = new AccessPoint(this, config); + accessPoint.update(mLastInfo, mLastState); + accessPoints.add(accessPoint); + } + } + + List scanAccessPoints = new ArrayList(); + List results = mWifiManager.getScanResults(); + if (results != null) { + for (ScanResult result : results) { + // Ignore hidden and ad-hoc networks. + if (result.SSID == null || result.SSID.length() == 0 || + result.capabilities.contains("[IBSS]")) { + continue; + } + + scanAccessPoints.add(new AccessPoint(this, result)); + for (AccessPoint accessPoint : accessPoints) { + accessPoint.update(result); + } + } + } + + mLatestAccessPoints.clear(); + mLatestAccessPoints.addAll(scanAccessPoints); + return scanAccessPoints; + } + + private void updateConnectionState(NetworkInfo.DetailedState state) { + /* sticky broadcasts can call this when wifi is disabled */ + if (!mWifiManager.isWifiEnabled()) { + mScanner.pause(); + return; + } + + if (state == NetworkInfo.DetailedState.OBTAINING_IPADDR) { + mScanner.pause(); + } else { + mScanner.resume(); + } + + mLastInfo = mWifiManager.getConnectionInfo(); + if (state != null) { + mLastState = state; + } + + for (int i = mLatestAccessPoints.size() - 1; i >= 0; --i) { + mLatestAccessPoints.get(i).update(mLastInfo, mLastState); + } + + if (mResetNetworks && (state == NetworkInfo.DetailedState.CONNECTED || + state == NetworkInfo.DetailedState.DISCONNECTED || state == NetworkInfo.DetailedState.FAILED)) { + updateAccessPoints(); + enableNetworks(); + } + } + + //应该是没什么用处的,直接默认给确定了状态了 + private void updateViews(boolean LPBConnected) { + if (LPBConnected) { + /*if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + }*/ + apStageIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_search_secondsteps)); + apStageTv.setText("建立连接中..."); + apStageDecalre.setText("确保您的网络密码正确。"); + if (mConnect2ScanResult != null) { + if (checkSsidPasswordInput()) { + switchModule2STA(mConnect2ScanResult, mPasswordEditText.getText().toString(), 0); + } + } else { + Toast.makeText(ApConfigActivity.this, "一开始要连上网络的", Toast.LENGTH_SHORT).show(); + } + } + } + + private void enableNetworks() { + for (int i = mLatestAccessPoints.size() - 1; i >= 0; --i) { + WifiConfiguration config = mLatestAccessPoints.get(i).getConfig(); + if (config != null && config.status != WifiConfiguration.Status.ENABLED) { + mWifiManager.enableNetwork(config.networkId, false); + } + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ap_config); + + // initLoadDialog(); + + mWifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + mWifiManager.startScan(); + List scanResults = mWifiManager.getScanResults(); + mConnect2ScanResult = Utils.getLastScanResult(this); + /*mLastWifiStatus = new WifiStatus(this); + mLastWifiStatus.load(); + String bssid = mLastWifiStatus.getBSSID(); + if (bssid != null) {//if the wifi is connected + + if (scanResults != null) { + ScanResult scanResult = null; + for (int i = 0; i < scanResults.size(); i++) { + if (Utils.removeDoubleQuotes(scanResults.get(i).BSSID).equals(Utils.removeDoubleQuotes(bssid))) { + scanResult = scanResults.get(i); + break; + } + } + + if (scanResult != null) { + mConnect2ScanResult = scanResult; + } + } + } else if (mConnect2ScanResult != null) {//if wifi is not connected + + if (scanResults != null) { + for (int i = 0; i < scanResults.size(); i++) { + if (Utils.removeDoubleQuotes(scanResults.get(i).BSSID).equals(Utils.removeDoubleQuotes(mConnect2ScanResult.BSSID))) { + mConnect2ScanResult = scanResults.get(i); + break; + } + } + } + }*/ + for (int i = 0; i < scanResults.size(); i++) { + if (getIntent().getExtras().get("ssid").toString().equals(scanResults.get(i).SSID)) { + mConnect2ScanResult = scanResults.get(i); + break; + } + } + initView(); + initListener(); + + mWifiEnabler = new WifiEnabler(this, mToggleButton, mWiFiStateTextView); + mScanner = new Scanner(this); + + mWifiAutomaticConnecter = new WifiAutomaticConnecter(this) { + + @Override + public void connectSecurity(AccessPoint accessPoint) { + + String password = Utils.getSettingApPassword(ApConfigActivity.this); + connectAP(accessPoint, password); + } + + @Override + public void onSsidNotFind() { + updateViews(false); + showStatusText(R.color.z1_ff0000, getString(R.string.ap_not_find, Utils.getSettingApSSID(ApConfigActivity.this))); + } + + @Override + public void connectOpenNone(AccessPoint accessPoint, int networkId) { + connect(networkId); + } + }; + mATCommandListener = new ATCommandListener() { + + @Override + public void onEnterCMDMode(boolean success) { + Log.i(TAG, "onEnterCMDMode:" + success); + + setProgressBarIndeterminateVisibility(false); + updateViews(success); + mIsCMDMode = success; + if (success) { + + mStatusTextView.setText(null); + //start a test cmd repeater to send test cmd in periodic 50 seconds to keep connection + if (mTestCmdRepeater != null) { + mTestCmdRepeater.pause(); + } + mTestCmdRepeater = new Repeater(Constants.TIMER_CHECK_CMD) { + + @Override + public void repeateAction() { + new Thread(new Runnable() { + @Override + public void run() { + mATCommand.send(Constants.CMD_VER); + } + }).start(); + } + }; + mTestCmdRepeater.resume(); + } else { + + //show the error info about udp failed + mFailedTimes++; + if (mFailedTimes > 3) { + showStatusText(R.color.z1_ff0000, getString(R.string.enter_cmd_mode_failed)); + } + + if (!mIsExit) { + Log.i(TAG, "Retry to enter CMD mode again for times"); + mNetworkHandler.sendEmptyMessageDelayed(MSG_RETRY_ENTER_CMD, 1000); + } + } + } + + @Override + public void onExitCMDMode(boolean success, NetworkProtocol protocol) { + Log.i("onExitCMDMode", "ApConfigActivity onExitCMDMode()" + success); + } + + @Override + public void onSendFile(boolean success) { + } + + @Override + public void onReload(boolean success) { + } + + @Override + public void onReset(boolean success) { + } + + @Override + public void onResponse(String response) { + Log.i(TAG, "mATCommandListener+onResponse:" + response); + + response = response.trim(); + if ((response.equals("+ok") || response.startsWith(Constants.RESPONSE_ERR)) + && (System.currentTimeMillis() - mLastCMD < 2000)) { + synchronized (mAtResponse) { + mAtResponse.setLength(0); + mAtResponse.append(response); + mAtResponse.notifyAll(); + } + } + } + + @Override + public void onResponseOfSendFile(String response) { + } + }; + mUdpUnicast = new UdpUnicast(); + mUdpUnicast.setPort(Utils.getUdpPort(getApplicationContext())); + mATCommand = new ATCommand(mUdpUnicast); + mATCommand.setListener(mATCommandListener); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mIsExit = true; + mUdpUnicast.close(); + closeActions(); +// mLastWifiStatus.reload(); + } + + /** + * Some actions need to be closed + */ + private void closeActions() { + + mNetworkHandler.removeMessages(MSG_RETRY_ENTER_CMD); + mScanBroadcast.close(); + mUdpUnicast.close(); + if (mTestCmdRepeater != null) { + mTestCmdRepeater.pause(); + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case BIND_FAIL: + ToastUtil.show(this, (String) msg.obj); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 2000); + break; + case BIND_SUCCESS: + BindDeviceEntity entity = (BindDeviceEntity) msg.obj; + // apConfigCb.setChecked(true); + apStageIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_search_complete)); + apStageTv.setText(R.string.complete); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + startActivity(new Intent(ApConfigActivity.this, SearchWaitActivity.class)); + finish(); + } + }, 1000); + break; + case UPDATE_SEC: + getInfo(); + break; + case SELECT_MODEL_TIME_SUCCESS: + if (isAdd) { + mHandler.removeMessages(UPDATE_SEC); + isAdd = false; + saveDevice(mModules.get(0).getMac()); + } + break; + case SELECT_MODEL_TIME_FAIL: + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + break; + } + } + + private synchronized void getInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestGetByAsy(ACTUATOR_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getInfo", "MainFragment4 onSuccess()" + respone); + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + mHandler.sendMessage(msg); + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onClick(View v) { + rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(ApConfigActivity.this, R.anim.rotate360_center_anim); + switch (v.getId()) { + case R.id.button_next: + Log.i(TAG, "ApConfigActivity onClick()" + "点击了"); + /*mWifiEnabler.resume(); + mWifiAutomaticConnecter.resume(); + registerReceiver(mReceiver, mFilter);*/ + + /*if (!mWifiManager.isWifiEnabled()) { + Log.i(TAG, "Wifi is not enable, enable it in 2 seconds!"); + mNetworkHandler.sendEmptyMessageDelayed(MSG_ENABLE_WIFI, 2000); + }*/ + apStageTv.setText(R.string.Connecting_device_WIFI); + apStageDecalre.setText("确保您的设备在手动配网中。"); + mButtonTryAgain.setVisibility(View.GONE); + progressRl.setVisibility(View.VISIBLE); + mStartButton.startAnimation(rotateAnimation); + + + Module module = Utils.getDevice(ApConfigActivity.this, generateNetworkKey()); + if (module != null) { + + if (mModules == null) { + mModules = new ArrayList(); + mModules.add(module); + } else { + mModules.add(0, module); + } + mNetworkHandler.removeMessages(MSG_RETRY_ENTER_CMD); + mNetworkHandler.sendEmptyMessage(MSG_ENTER_CMD); + } else { + + Log.i(TAG, "Start to broadcast to find module info..."); + mScanBroadcast.open(); + mScanBroadcast.send(Utils.getCMDScanModules(getApplicationContext())); + } + showStatusText(R.color.z1_1C72D6, getString(R.string.connected_ap, Utils.getSettingApSSID(this))); + break; + case R.id.button_try_again: + progressRl.setVisibility(View.GONE); + /*mWifiEnabler.resume(); + mWifiAutomaticConnecter.resume(); + registerReceiver(mReceiver, mFilter); + + if (!mWifiManager.isWifiEnabled()) { + Log.i(TAG, "Wifi is not enable, enable it in 2 seconds!"); + mNetworkHandler.sendEmptyMessageDelayed(MSG_ENABLE_WIFI, 2000); + } + mButtonTryAgain.setVisibility(View.GONE); + progressRl.setVisibility(View.VISIBLE); + mStartButton.startAnimation(rotateAnimation);*/ + break; + } + } + + @Override + public void onResume() { + super.onResume(); + + /*mWifiEnabler.resume(); + mWifiAutomaticConnecter.resume(); + registerReceiver(mReceiver, mFilter); + + if (!mWifiManager.isWifiEnabled()) { + Log.i(TAG, "Wifi is not enable, enable it in 2 seconds!"); + mNetworkHandler.sendEmptyMessageDelayed(MSG_ENABLE_WIFI, 2000); + }*/ + } + + @Override + public void onPause() { + super.onPause(); + + try { + mWifiEnabler.pause(); + unregisterReceiver(mWifiChangedReceiver); +// unregisterReceiver(mReceiver); + } catch (Exception e) { + } + mScanner.pause(); + mWifiAutomaticConnecter.pause(); + if (!mIsCMDMode) { + mScanBroadcast.close(); + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.setMessage("联网中..."); + mLoadingDialog.setCanceledOnTouchOutside(false); + mLoadingDialog.show(); + } + + /** + * Connect the configured network + * + * @param networkId + */ + private void connect(int networkId) { + if (networkId == -1) { + return; + } + + // Connect to network by disabling others. + mWifiManager.enableNetwork(networkId, true); + mWifiManager.reconnect(); + updateAccessPoints(); + } + + private void connectAP(AccessPoint accessPoint, String password) { + + WifiConfiguration config = Utils.generateWifiConfiguration(accessPoint, password); + + if (config == null) { + if (accessPoint != null) { + connect(accessPoint.getNetworkId()); + } + } else if (config.networkId != -1) { + if (accessPoint != null) { + mWifiManager.updateNetwork(config); + saveNetworks(); + } + } else { + int networkId = mWifiManager.addNetwork(config); + if (networkId != -1) { + mWifiManager.enableNetwork(networkId, false); + config.networkId = networkId; + connect(networkId); + } + } + } + + private void saveNetworks() { + // Always save the configuration with all networks enabled. + mWifiManager.saveConfiguration(); + updateAccessPoints(); + } + + private void initView() { + mStatusTextView = (TextView) findViewById(R.id.textView2); + Paint paint = mStatusTextView.getPaint(); + paint.setAntiAlias(true); + paint.setUnderlineText(true); + progressRl = (RelativeLayout) findViewById(R.id.rl_progress_top); + apStageIv = (ImageView) findViewById(R.id.iv_ap_stage); + apStageTv = (TextView) findViewById(R.id.tv_ap_stage); + apStageDecalre = (TextView) findViewById(R.id.tv_declare_ap); + mButtonNext = (Button) findViewById(R.id.button_next); + mButtonTryAgain = (Button) findViewById(R.id.button_try_again); + mWiFiStateTextView = (TextView) findViewById(R.id.textView1); + mToggleButton = (CheckBox) findViewById(R.id.toggleButton1); + apTopTv = (TextView) findViewById(R.id.tv_ap_top); + apTopTv.setVisibility(View.INVISIBLE); + showPassword = (ImageView) findViewById(R.id.iv_show_pwd); + mSsidEditText = (EditText) findViewById(R.id.editText_hiflying_smartlinker_ssid); + mPasswordEditText = (EditText) findViewById(R.id.editText_hiflying_smartlinker_password); + mStartButton = (ImageView) findViewById(R.id.button_hiflying_smartlinker_start); + // apConfigCb = (CheckBox) findViewById(R.id.cb_ap_config); + mSsidEditText.setText(getIntent().getExtras().get("ssid").toString()); + mPasswordEditText.setText(getIntent().getExtras().get("password").toString()); + mTitleView = (TitleView) findViewById(R.id.title_wifi_connect); + mTitleView.setHead(R.string.connect_wifi); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void initListener() { + mButtonNext.setOnClickListener(this); + mButtonTryAgain.setOnClickListener(this); + /*apConfigCb.setOnClickListener(this); + apConfigCb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + if (null != rotateAnimation) { + rotateAnimation.cancel(); + } + } else { + rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(ApConfigActivity.this, R.anim.rotate360_center_anim); + mStartButton.startAnimation(rotateAnimation); + if (mConnect2ScanResult != null) { + if (checkSsidPasswordInput()) { + switchModule2STA(mConnect2ScanResult, mPasswordEditText.getText().toString(), 0); + } + } else { + Toast.makeText(ApConfigActivity.this, "一开始要连上网络的", Toast.LENGTH_SHORT).show(); + } + } + } + });*/ + /*mStartButton.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + if (mConnect2ScanResult != null) { + switchModule2STA(mConnect2ScanResult, mPasswordEditText.getText().toString()); + } else { + Toast.makeText(ApConfigActivity.this, "一开始要连上网络的", Toast.LENGTH_SHORT).show(); + } + } + });*/ + showPassword.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mPasswordEditText.getInputType() != InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) { + mPasswordEditText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); + showPassword.setImageResource(R.drawable.icon_eye_cansee); + } else { + mPasswordEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + showPassword.setImageResource(R.drawable.icon_eye_cannotsee); + } + String pwd = mPasswordEditText.getText().toString(); + if (!TextUtils.isEmpty(pwd)) + mPasswordEditText.setSelection(pwd.length()); + } + }); + } + + private boolean checkSsidPasswordInput() { + + Log.i(TAG, "checkSsidPasswordInput"); + + String passwd = mPasswordEditText.getText().toString(); + String security = Utils.parseSecurity(mConnect2ScanResult.capabilities); + if (security != null && !security.equals(Utils.SECURITY_OPEN_NONE)) { + + if (passwd.length() == 0) { + Log.i(TAG, "ApConfigActivity checkSsidPasswordInput()" + getString(R.string.password_not_empty, mConnect2ScanResult.SSID)); + // simpleDialog(getString(R.string.warning), getString(R.string.password_not_empty, mConnect2ScanResult.SSID), false, null); + return false; + } else if (security.equals(Utils.SECURITY_WEP)) { + int wepType = Utils.checkWepType(passwd); + System.out.println("wepType: " + wepType); + if (wepType == Utils.WEP_INVALID) { + //prompt dialog that password invalid + Log.i(TAG, "ApConfigActivity checkSsidPasswordInput()" + getString(R.string.wep_password_invalid)); + // simpleDialog(getString(R.string.warning), getString(R.string.wep_password_invalid), false, null); + return false; + } + } + } + Utils.saveLastScanResult(getApplicationContext(), mConnect2ScanResult); + Utils.saveScanResultPassword(getApplicationContext(), mConnect2ScanResult, passwd); + + return true; + } + + /** + * switch the module to station mode + * + * @param scanResult the AP to connect to + * @param password the password + */ + + private void switchModule2STA(final ScanResult scanResult, final String password, final int times) { + if (isSearching) { + new AsyncTask() { + + private static final int RESULT_CMD_MODE_FAILED = -1; + private static final int RESULT_RESPONSE_ERROR = -2; + private static final int RESULT_RESPONSE_TIME_OUT = -3; + private static final int RESULT_SUCCESS = 0; + + @Override + protected Integer doInBackground(Void... params) { + + StringBuffer response = new StringBuffer(); + //send AT+ to test if it's in command mode + if (!sendAtCmd(Constants.CMD_TEST, response)) { + //not in command mode, try to enter into command mode + synchronized (mAtResponse) { + Log.i(TAG, "Try to enter into cmd mode again" + times); + mFailedTimes = 0; + if (mTestCmdRepeater != null) { + mTestCmdRepeater.pause(); + } + mAtResponse.setLength(0); + mATCommand.enterCMDMode(); + try { + mAtResponse.wait(6000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + if (mAtResponse.toString().trim().equals("")) { + //enter into cmd mode failed + if (times < 2) { + switchModule2STA(scanResult, password, times + 1); + } else { + return RESULT_CMD_MODE_FAILED; + } + } + } + + //send AT+WMODE=STA + response.setLength(0); + if (!sendAtCmd(Constants.CMD_STA, response)) { + Log.i(TAG, "Failed: send AT+WMODE=STA"); + return response.toString().equals(Constants.RESPONSE_ERR) ? + RESULT_RESPONSE_ERROR : RESULT_RESPONSE_TIME_OUT; + } + + //send AT+WSSSID=%s + response.setLength(0); + if (!sendAtCmd(Utils.generateWsssid(scanResult.SSID), response)) { + Log.i(TAG, "Failed: send AT+WSSSID=%s"); + return response.toString().equals(Constants.RESPONSE_ERR) ? + RESULT_RESPONSE_ERROR : RESULT_RESPONSE_TIME_OUT; + } + + //send AT+WSKEY=%s + response.setLength(0); + if (!sendAtCmd(Utils.generateWskeyCmd(scanResult, password), response)) { + Log.i(TAG, "Failed: send AT+WSKEY=%s"); + return response.toString().equals(Constants.RESPONSE_ERR) ? + RESULT_RESPONSE_ERROR : RESULT_RESPONSE_TIME_OUT; + } + + //send AT+Z + sendAtCmd(Constants.CMD_RESET, null); + try { + Thread.sleep(300); + } catch (InterruptedException e) { + e.printStackTrace(); + } + isSearching = false; + return RESULT_SUCCESS; + } + + @Override + protected void onPreExecute() { + // showDialog(1); + Log.i(TAG, "onPreExecute showDialog" + times); + } + + @Override + protected void onPostExecute(Integer result) { + if (result != null) { + switch (result) { + case RESULT_CMD_MODE_FAILED: + // apConfigCb.setChecked(true); + // Toast.makeText(ApConfigActivity.this, R.string.enter_cmd_mode_failed, Toast.LENGTH_SHORT).show(); + Toast.makeText(ApConfigActivity.this, R.string.config_fail, Toast.LENGTH_SHORT).show(); + tryAgain(); + // simpleDialog(R.string.enter_cmd_mode_failed); + break; + case RESULT_RESPONSE_ERROR: + Toast.makeText(ApConfigActivity.this, R.string.response_failed, Toast.LENGTH_SHORT).show(); + // simpleDialog(R.string.response_failed); + break; + case RESULT_RESPONSE_TIME_OUT: + // Toast.makeText(ApConfigActivity.this, R.string.response_time_out, Toast.LENGTH_SHORT).show(); + // simpleDialog(R.string.response_time_out); + break; + case RESULT_SUCCESS: + /*updateViews(false); + showStatusText(R.color.z1_ff0000, getString(R.string.ap_lost, Utils.getSettingApSSID(getApplicationContext()))); + ToastUtil.show(ApConfigActivity.this, R.string.reset_wait + "哈哈哈,成功");*/ + //这里finish就可以了 + apStageIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_search_thirdsteps)); + apStageTv.setText(R.string.save_result); + apStageDecalre.setText("若网络未连接可尝试手动连接"); + mWifiChangedReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); + if (networkInfo != null && networkInfo.isConnected() && DensityUtil.isNetworkConnected(ApConfigActivity.this)) { +// saveDevice(mModules.get(0).getMac()); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } else { + + } + } + }; + registerReceiver(mWifiChangedReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + /*if (DensityUtil.checkNetworkConnection(getApplicationContext())) { + mWifiEnabler.pause(); + try { + unregisterReceiver(mReceiver); + } catch (Exception e) { + } + mScanner.pause(); + mWifiAutomaticConnecter.pause(); + if (!mIsCMDMode) { + mScanBroadcast.close(); + } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + saveDevice(mModules.get(0).getMac()); + } + }, 5000); + mWifiChangedReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); + if (networkInfo != null && networkInfo.isConnected()) { + saveDevice(mModules.get(0).getMac()); + } else { + + } + } + }; + registerReceiver(mWifiChangedReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + } else { + mWifiAutomaticConnecter.connectNow(getIntent().getExtras().get("ssid").toString()); + + mWifiChangedReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); + if (networkInfo != null && networkInfo.isConnected()) { + saveDevice(mModules.get(0).getMac()); + } else { + + } + } + }; + registerReceiver(mWifiChangedReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + }*/ + break; + + default: + break; + } + } + } + }.execute(null, null, null); + } else { + return; + } + } + + private void tryAgain() { + rotateAnimation.cancel(); + apStageIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_search_firststeps)); + apStageTv.setText(R.string.config_fail); + mButtonTryAgain.setVisibility(View.VISIBLE); + + /*ConfirmDialog dialog = new ConfirmDialog(this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + finish(); + break; + case 1: + // apConfigCb.setChecked(false); + break; + } + } + }); + dialog.setContent("请您确保网络密码正确,路由器网络畅通,重置设备后尝试重新配置"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn("重试"); + dialog.setCancelable(false); + dialog.show();*/ + } + + private void saveDevice(String mac) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (mac != null) { + map.put("ziId", mac); + } else { + return; + } + map.put("isOwner", "1"); + if (null != getIntent().getExtras().get("addressTypeCode")) { + map.put("deviceAddress", getIntent().getExtras().get("addressTypeCode").toString()); + } + map.put("wifiName", getIntent().getExtras().get("ssid").toString()); + map.put("netType", "1"); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + if (null != getIntent().getExtras().get("floor")) { + map.put("floor", getIntent().getExtras().get("floor").toString()); + } + map.put("appBrandId", APPID_S_VOICE); + util.requestPostByAsynewApi(NetWorkUrl.SEARCH_DEVICE_BIND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + BindDeviceEntity entity = JSON.parseObject(respone, BindDeviceEntity.class); + Log.i("bind_device", "onSuccess: " + respone); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(BIND_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(BIND_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /** + * send the AT command whose response is "+ok" + * + * @param cmd + * @return + */ + private boolean sendAtCmd(String cmd, StringBuffer response) { + + if (mTestCmdRepeater != null) { + mTestCmdRepeater.pause(); + } + + boolean success = false; + for (int i = 0; i < 2; i++) {//re-send it if the previous sending is failed + + synchronized (mAtResponse) { + mAtResponse.setLength(0); + + if (mATCommand != null) { + mLastCMD = System.currentTimeMillis(); + mATCommand.send(cmd); + } + + if (!Constants.CMD_RESET.equals(cmd)) { + try { + mAtResponse.wait(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + String atResp = mAtResponse.toString().trim(); + if (atResp.equals(Constants.RESPONSE_OK)) { + if (response != null) { + response.append(Constants.RESPONSE_OK); + } + success = true; + break; + } else if (atResp.startsWith(Constants.RESPONSE_ERR)) { + if (response != null) { + response.append(Constants.RESPONSE_ERR); + } + success = false; + break; + } + } else { + success = true; + } + } + } + + if (mTestCmdRepeater != null) { + mTestCmdRepeater.resumeWithDelay(); + } + + return success; + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/deviceadd/ConfigWifiActicity.java b/app/src/main/java/com/yonsz/z1/device/deviceadd/ConfigWifiActicity.java new file mode 100644 index 0000000..b5b1c86 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/deviceadd/ConfigWifiActicity.java @@ -0,0 +1,323 @@ +package com.yonsz.z1.device.deviceadd; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.lechange.demo.manager.SoftAPActivity; +import com.lechange.demo.yonsz.WifiHotspotActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.wifi.switcher.TuyaEzConfigActivity; + +import static com.yonsz.z1.net.Constans.PLAY_SOUND; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * @time 2017/6/12 23:25 + * @desc ${TODO} + */ +public class ConfigWifiActicity extends BaseActivity { + private TitleView mTitleView; + private Button startConfig; + private CheckBox selectUnnorReveal; + private ImageView picOne, picTwo, mLearnHelp; + private MediaPlayer mediaPlayer01; + private String configWifiType; + private TextView apSmartTv; + private TextView tv_ap_smart_declare, tv_declare, tv_light; + private RelativeLayout rl_show_text; + private String titleRemark = ""; + private LinearLayout ll_light; + private TextView apConfigTv; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_config_wifi_stepone); + initView(); + /*if (!configWifiType.equals(SWITCH_TAG)) { + Message msg = mHandler.obtainMessage(PLAY_SOUND); + mHandler.sendMessage(msg); + }*/ + } + + @Override + public void onResume() { + super.onResume(); + // mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 500); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + private void initView() { + configWifiType = getIntent().getExtras().get("configWifiType").toString(); + apConfigTv = (TextView) findViewById(R.id.tv_ap_config); + picOne = (ImageView) findViewById(R.id.pic_one); + picTwo = (ImageView) findViewById(R.id.pic_two); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + mLearnHelp = (ImageView) findViewById(R.id.iv_learn_help); + ll_light = (LinearLayout) findViewById(R.id.ll_light); + tv_light = (TextView) findViewById(R.id.tv_light); + mTitleView = (TitleView) findViewById(R.id.title_wifi_stepone); + mTitleView.setHead(R.string.config_wifi); + startConfig = (Button) findViewById(R.id.bt_start_config); + startConfig.setOnClickListener(this); + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + startConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (configWifiType.equals("smartType")) { + Intent intent = new Intent(ConfigWifiActicity.this, SearchDeviceActivity.class); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("password", getIntent().getExtras().get("password").toString()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + if (null != getIntent().getExtras().get("addressTypeCode")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressTypeCode").toString()); + } + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + } + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + if (null != getIntent().getExtras().get("deviceCode")) { + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + } + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + startActivity(intent); + finish(); + } else if (configWifiType.equals("lecheng")) { + /*Intent intent = new Intent(ConfigWifiActicity.this, LcnDeviceAddActivity.class); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("password", getIntent().getExtras().get("password").toString()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("deviceSN", getIntent().getExtras().get("deviceSN").toString()); + if (null != getIntent().getExtras().get("deviceCode")) { + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + } + startActivity(intent);*/ + + Intent intent = new Intent(ConfigWifiActicity.this, SoftAPActivity.class); + intent.putExtra("devId", "5K07055AAZ88D77"); + intent.putExtra("devType", "ARC2000E-SW-LC"); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("mPwd", "ysz1811#12");//将要连接的wifi的密码携带过去 + startActivity(intent); + + finish(); + } else if (configWifiType.equals(SWITCH_TAG)) { + Intent intent = new Intent(ConfigWifiActicity.this, TuyaEzConfigActivity.class); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("password", getIntent().getExtras().get("password").toString()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + if (null != getIntent().getExtras().get("deviceCode")) { + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("plugType")) { + intent.putExtra("plugType", getIntent().getExtras().get("plugType").toString()); + } + startActivity(intent); + finish(); + } else { + Intent intent = new Intent(ConfigWifiActicity.this, WifiHotspotActivity.class); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("password", getIntent().getExtras().get("password").toString()); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + if (null != getIntent().getExtras().get("addressTypeCode")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressTypeCode").toString()); + } + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceCode")) { + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + } + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + intent.putExtra("devType", "000"); + startActivity(intent); + finish(); + } + } + }); + apConfigTv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(ConfigWifiActicity.this, ConfigWifiActicity.class); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("password", getIntent().getExtras().get("password").toString()); + intent.putExtra("configWifiType", "apType"); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + if (null != getIntent().getExtras().get("addressTypeCode")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressTypeCode").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + startActivity(intent); + finish(); + } + }); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + selectUnnorReveal.setOnClickListener(this); + mLearnHelp.setOnClickListener(this); + apSmartTv = (TextView) findViewById(R.id.tv_ap_smart_top); + tv_ap_smart_declare = (TextView) findViewById(R.id.tv_ap_smart_declare); + tv_declare = (TextView) findViewById(R.id.tv_declare); + + if (!(AppIdUtil.isZhiKong())) { + picOne.setImageResource(R.drawable.pic_003); + } + if (AppIdUtil.isWork()) { + picOne.setImageResource(R.drawable.pic_001_nor); + } + if (configWifiType.equals("smartType")) { + + } else if (configWifiType.equals(SWITCH_TAG)) { + mTitleView.setHead("添加智能WiFi插座"); + tv_ap_smart_declare.setText("接通电源,长按设备开关约3~5秒后"); + rl_show_text = (RelativeLayout) findViewById(R.id.rl_show_text); + picOne.setImageResource(R.drawable.pic_add_socket); + rl_show_text.setVisibility(View.VISIBLE); + mLearnHelp.setVisibility(View.VISIBLE); + apSmartTv.setVisibility(View.INVISIBLE); + } else { + apSmartTv.setVisibility(View.INVISIBLE); + apConfigTv.setVisibility(View.INVISIBLE); + tv_ap_smart_declare.setText("按配置键5下,等待指示灯黄灯长亮"); + tv_declare.setVisibility(View.GONE); + } + if (null != getIntent().getExtras().get("titleRemark")) { + titleRemark = getIntent().getExtras().get("titleRemark").toString(); + } + if (titleRemark.contains("A2")) { + picOne.setImageResource(R.drawable.pic_a2_add); + } + if (titleRemark.contains("B1")) { + picOne.setImageResource(R.drawable.pic_b1); + } + if (titleRemark.contains("B3")) { + picOne.setImageResource(R.drawable.pic_b3); + } + if (titleRemark.contains("B4")) { + tv_ap_smart_declare.setText("网关接通电源5秒后,长按配置键约5秒点击开始配置"); + tv_declare.setVisibility(View.GONE); + picOne.setImageResource(R.drawable.pic_add_b4); + ll_light.setVisibility(View.GONE); + tv_light.setVisibility(View.VISIBLE); + } + if (titleRemark.contains("雅今")) { + tv_ap_smart_declare.setText("网关接通电源5秒后,长按配置键约5秒听到提示音点击开始配置"); + tv_declare.setVisibility(View.GONE); + picOne.setImageResource(R.drawable.pic_add_y5); + ll_light.setVisibility(View.GONE); + tv_light.setVisibility(View.VISIBLE); + } + if (titleRemark.contains("小水滴")) { + picOne.setImageResource(R.drawable.pic_a2_add); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + startConfig.setClickable(true); + startConfig.setEnabled(true); + } else { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + } + break; + case R.id.iv_learn_help: + Intent intent = new Intent(this, VoiceDeclareActivity.class); + intent.putExtra("tag", SWITCH_TAG); + intent.putExtra("plugType", "100"); + startActivity(intent); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_SEC: + if (picOne.getVisibility() == View.VISIBLE) { + picTwo.setVisibility(View.VISIBLE); + picOne.setVisibility(View.GONE); + } else { + picTwo.setVisibility(View.GONE); + picOne.setVisibility(View.VISIBLE); + } + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 500); + break; + case PLAY_SOUND: + // SoundPlayUtils.play(4); + if (titleRemark.contains("雅今") || titleRemark.contains("B4")) { + + } else { + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.config_wifi); + mediaPlayer01.start(); + } + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/deviceadd/ConnectWifiActivity.java b/app/src/main/java/com/yonsz/z1/device/deviceadd/ConnectWifiActivity.java new file mode 100644 index 0000000..da337f2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/deviceadd/ConnectWifiActivity.java @@ -0,0 +1,315 @@ +package com.yonsz.z1.device.deviceadd; + +import android.Manifest; +import android.app.ProgressDialog; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Build; +import android.os.Bundle; +import android.os.Message; +import android.support.v4.app.ActivityCompat; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import com.hiflying.smartlink.ISmartLinker; +import com.lechange.demo.yonsz.ResetLechengActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.QUERY_NEXT_TIMER_FAIL; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; + +/** + * @time 2017/6/13 0:01 + * @desc ${TODO} + */ +public class ConnectWifiActivity extends BaseActivity { + private static final String TAG = "CustomizedActivity"; + protected EditText mSsidEditText; + protected EditText mPasswordEditText; + protected Button mStartButton; + protected ISmartLinker mSnifferSmartLinker; + protected ProgressDialog mWaitingDialog; + private TitleView mTitleView; + private BroadcastReceiver mWifiChangedReceiver; + private ImageView showPassword; + private String fromActivity; + private TextView topTextView; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_connect_wifi); + showWifiConfig(); + initView(); + initListener(); + } + + public void showWifiConfig() { + boolean isMinSDKM = Build.VERSION.SDK_INT < 23; + boolean isGranted = ActivityCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; + if (isMinSDKM || isGranted) { + return; + } + + if (ActivityCompat.shouldShowRequestPermissionRationale(this, + Manifest.permission.ACCESS_FINE_LOCATION)) { + + Log.d("Uriah", "Uriah + shouldShowRequestPermission true"); + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, + 1); + } else { + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, + 1); + } + } + + + private void initView() { + fromActivity = getIntent().getExtras().get("from").toString(); + topTextView = (TextView) findViewById(R.id.tv_ap_top); + showPassword = (ImageView) findViewById(R.id.iv_show_pwd); + mSsidEditText = (EditText) findViewById(R.id.editText_hiflying_smartlinker_ssid); + mPasswordEditText = (EditText) findViewById(R.id.editText_hiflying_smartlinker_password); + mStartButton = (Button) findViewById(R.id.button_hiflying_smartlinker_start); + mSsidEditText.setText(getSSid()); + if (SharedpreferencesUtil.get(Constans.SSID, "") != null && getSSid().equals(SharedpreferencesUtil.get(Constans.SSID, ""))) { + mPasswordEditText.setText(SharedpreferencesUtil.get(Constans.NETPASSWORD, "")); + } + mTitleView = (TitleView) findViewById(R.id.title_wifi_connect); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (fromActivity.equals("ScanCodeActivity") || fromActivity.equals("HandAddCodeActivity") || fromActivity.equals(GATE_WAY) || fromActivity.equals("SwitcherTwoActivity")) { + mTitleView.setHead(R.string.add_device); + topTextView.setVisibility(View.GONE); + } else { + mTitleView.setHead(R.string.connect_wifi); + } + } + + private void initListener() { + mStartButton.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + saveWifiInfo(); + Intent intent; + if (fromActivity.equals("ScanCodeActivity") || fromActivity.equals("HandAddCodeActivity")) { + intent = new Intent(ConnectWifiActivity.this, ResetLechengActivity.class); + intent.putExtra("deviceSN", getIntent().getExtras().get("deviceSN").toString()); + intent.putExtra("configWifiType", "lecheng"); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceCode")) { + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + } + } else if (fromActivity.equals(GATE_WAY)) { + intent = new Intent(ConnectWifiActivity.this, ResetLechengActivity.class); + intent.putExtra("deviceSN", getIntent().getExtras().get("deviceSN").toString()); + intent.putExtra("configWifiType", GATE_WAY); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("deviceCode")) { + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + } + if (null != getIntent().getExtras().get("devType")) { + intent.putExtra("devType", getIntent().getExtras().get("devType").toString()); + } + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + } else if (fromActivity.equals("SwitcherTwoActivity")) { + intent = new Intent(ConnectWifiActivity.this, ConfigWifiActicity.class); + intent.putExtra("configWifiType", SWITCH_TAG); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("plugType")) { + intent.putExtra("plugType", getIntent().getExtras().get("plugType").toString()); + } + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressTypeCode").toString()); + intent.putExtra("icon", ""); + } else { + intent = new Intent(ConnectWifiActivity.this, ConfigWifiActicity.class); + intent.putExtra("configWifiType", "smartType"); + if (null != getIntent().getExtras().get("addressTypeCode")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressTypeCode").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } else { + intent.putExtra("floor", ""); + } + if (null != getIntent().getExtras().get("deviceCode")) { + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + } + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + } + SharedpreferencesUtil.save(Constans.SSID, mSsidEditText.getText().toString().trim()); + SharedpreferencesUtil.save(Constans.NETPASSWORD, mPasswordEditText.getText().toString().trim()); + intent.putExtra("ssid", mSsidEditText.getText().toString().trim()); + intent.putExtra("password", mPasswordEditText.getText().toString().trim()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + finish(); + } + }); + + mWifiChangedReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); + if (networkInfo != null && networkInfo.isConnected()) { + mSsidEditText.setText(getSSid()); + mPasswordEditText.requestFocus(); + mStartButton.setEnabled(true); + } else { + mSsidEditText.setText(getString(R.string.hiflying_smartlinker_no_wifi_connectivity)); + mSsidEditText.requestFocus(); + mStartButton.setEnabled(false); + if (mWaitingDialog != null) { + if (mWaitingDialog.isShowing()) { + mWaitingDialog.dismiss(); + } + } + } + } + }; + registerReceiver(mWifiChangedReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + showPassword.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mPasswordEditText.getInputType() != InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) { + mPasswordEditText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); + showPassword.setImageResource(R.drawable.icon_eye_cansee); + } else { + mPasswordEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + showPassword.setImageResource(R.drawable.icon_eye_cannotsee); + } + String pwd = mPasswordEditText.getText().toString(); + if (!TextUtils.isEmpty(pwd)) + mPasswordEditText.setSelection(pwd.length()); + } + }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + unregisterReceiver(mWifiChangedReceiver); + } + + //添加wifi信息 + private void saveWifiInfo() { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("wifiName", mSsidEditText.getText().toString().trim()); + map.put("wifiPwd", mPasswordEditText.getText().toString().trim()); + map.put("ip", ""); + map.put("address", "深圳"); + netWorkUtil.requestPostByAsynew(NetWorkUrl.SAVE_WIFIINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("saveWifiInfo", "ShareDeviceActivity onSuccess()" + respone); + *//*Z1TimeEntity obj = JSON.parseObject(respone, Z1TimeEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_NEXT_TIMER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_NEXT_TIMER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*//* + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_NEXT_TIMER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private String getSSid() { + + WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + if (wm != null) { + WifiInfo wi = wm.getConnectionInfo(); + if (wi != null) { + String ssid = wi.getSSID(); + if (ssid.length() > 2 && ssid.startsWith("\"") && ssid.endsWith("\"")) { + return ssid.substring(1, ssid.length() - 1); + } else { + return ssid; + } + } + } + + return ""; + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/deviceadd/NoWifiConnectActicity.java b/app/src/main/java/com/yonsz/z1/device/deviceadd/NoWifiConnectActicity.java new file mode 100644 index 0000000..e313cb6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/deviceadd/NoWifiConnectActicity.java @@ -0,0 +1,122 @@ +package com.yonsz.z1.device.deviceadd; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.devicea2.safedevice.ScanCodeActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.GATE_WAY; + +/** + * Created by Administrator on 2017/6/16. + */ + +public class NoWifiConnectActicity extends BaseActivity { + private TitleView mTitleView; + private Button openWifi; + private BroadcastReceiver mWifiChangedReceiver; + private boolean isJump = true; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_no_wifi); + initView(); + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.title_wifi_no); + openWifi = (Button) findViewById(R.id.bt_start_wifi); + mTitleView.setHead(R.string.wifi_no); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + openWifi.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + WifiManager wifimanager; + wifimanager = (WifiManager) (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + wifimanager.setWifiEnabled(true); + Toast.makeText(NoWifiConnectActicity.this, "WIFI打开中...", Toast.LENGTH_LONG).show(); + } + }); + mWifiChangedReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); + if (networkInfo != null && networkInfo.isConnected() && isJump) { + isJump = false; + if (getIntent().getExtras().get("titleRemark").toString().contains("B3E")) { + intent = new Intent(NoWifiConnectActicity.this, ScanCodeActivity.class); + intent.putExtra("deviceType", "000"); + } else { + intent = new Intent(NoWifiConnectActicity.this, ConnectWifiActivity.class); + } + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("from", getIntent().getExtras().get("from").toString()); + if (getIntent().getExtras().get("from").equals("ScanCodeActivity") || getIntent().getExtras().get("from").equals("HandAddCodeActivity") || getIntent().getExtras().get("from").equals(GATE_WAY)) { + intent.putExtra("deviceSN", getIntent().getExtras().get("deviceSN").toString()); + } + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("deviceCode")) { + intent.putExtra("deviceCode", getIntent().getExtras().get("deviceCode").toString()); + } + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + startActivity(intent); + finish(); + } else { + + } + } + }; + registerReceiver(mWifiChangedReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchDeviceActivity.java b/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchDeviceActivity.java new file mode 100644 index 0000000..4a3ec78 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchDeviceActivity.java @@ -0,0 +1,592 @@ +package com.yonsz.z1.device.deviceadd; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.media.MediaPlayer; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.hiflying.smartlink.ISmartLinker; +import com.hiflying.smartlink.OnSmartLinkListener; +import com.hiflying.smartlink.SmartLinkedModule; +import com.hiflying.smartlink.v7.MulticastSmartLinker; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.BindDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity4.A1A2Entity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.StandardCodeUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; +import java.util.Timer; +import java.util.TimerTask; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.difference.DifferConstans.APPID_S_VOICE; +import static com.yonsz.z1.net.Constans.BIND_FAIL; +import static com.yonsz.z1.net.Constans.BIND_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_ZI_VER_FAIL; +import static com.yonsz.z1.net.Constans.GET_ZI_VER_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * @time 2017/6/13 0:10 + * @desc ${TODO} + */ +public class SearchDeviceActivity extends BaseActivity implements OnSmartLinkListener { + private static final String TAG = "CustomizedActivity"; + private static final int LINK_WIFI_SUCCESS = 1; + private static final int LINK_WIFI_SUCCESS_MARK = 2; + private static final int LINK_WIFI_SUCCESS_CIRCLE = 3; + protected ISmartLinker mSnifferSmartLinker; + protected Handler mViewHandler = new Handler(); + private TitleView mTitleView; + private StateButton mStateButton; + private ImageView mScanTop; + private RotateAnimation rotateAnimation; + private ImageView mImageView01, mImageView02, mImageView03, mImageView04, mImageView05; + private ImageView markIv01, markIv02, markIv03, markIv04, markIv05; + private ImageView circleIv01, circleIv02, circleIv03, circleIv04, circleIv05; + private TextView msg1, msg2, msg3, msg4, msg5; + private AlphaAnimation alphaAnimation; + private boolean mIsConncting = false; + // protected ProgressDialog mWaitingDialog; + private BroadcastReceiver mWifiChangedReceiver; + private String ssid, pswd; + private int sec = 30; + private TimerTask timerTask; + private Timer timer; + private String mac; + private String moduleIP; + private MediaPlayer mediaPlayer01; + private int searchDeviceNum = 0; + private int addedNumber = 0; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mSnifferSmartLinker = MulticastSmartLinker.getInstance(); + setContentView(R.layout.activity_search_device); + initView(); + initListener(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initView() { + if (getIntent().getExtras().get("ssid") != null) { + ssid = getIntent().getExtras().get("ssid").toString().trim(); + } + if (getIntent().getExtras().get("password") != null) { + pswd = getIntent().getExtras().get("password").toString().trim(); + } + mStateButton = (StateButton) findViewById(R.id.bt_sec); + mTitleView = (TitleView) findViewById(R.id.title_wifi_search); + mScanTop = (ImageView) findViewById(R.id.iv_scan_top); + msg1 = (TextView) findViewById(R.id.msg1); + msg2 = (TextView) findViewById(R.id.msg2); + msg3 = (TextView) findViewById(R.id.msg3); + msg4 = (TextView) findViewById(R.id.msg4); + msg5 = (TextView) findViewById(R.id.msg5); + mImageView01 = (ImageView) findViewById(R.id.imageView01); + mImageView02 = (ImageView) findViewById(R.id.imageView02); + mImageView03 = (ImageView) findViewById(R.id.imageView03); + mImageView04 = (ImageView) findViewById(R.id.imageView04); + mImageView05 = (ImageView) findViewById(R.id.imageView05); + markIv01 = (ImageView) findViewById(R.id.iv_mark01); + markIv02 = (ImageView) findViewById(R.id.iv_mark02); + markIv03 = (ImageView) findViewById(R.id.iv_mark03); + markIv04 = (ImageView) findViewById(R.id.iv_mark04); + markIv05 = (ImageView) findViewById(R.id.iv_mark05); + circleIv01 = (ImageView) findViewById(R.id.iv_circle_search01); + circleIv02 = (ImageView) findViewById(R.id.iv_circle_search02); + circleIv03 = (ImageView) findViewById(R.id.iv_circle_search03); + circleIv04 = (ImageView) findViewById(R.id.iv_circle_search04); + circleIv05 = (ImageView) findViewById(R.id.iv_circle_search05); + rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(SearchDeviceActivity.this, R.anim.rotate360_anim); + alphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(SearchDeviceActivity.this, R.anim.alpha_anim); + mScanTop.startAnimation(rotateAnimation); + mTitleView.setHead(R.string.add_device); + // mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setHeadFuntionTxtAndSise16(""); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + /*//保存搜索到的设备 + saveDevice();*/ + if (mac != null) { + startActivity(new Intent(SearchDeviceActivity.this, SearchWaitActivity.class)); + finish(); + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + } + + + @Override + public void onFunctionText() { + + } + }); + + runOnUiThread(new Runnable() { + @Override + public void run() { + connectWifi(); + } + }); + + } + + private void connectWifi() { + if (!mIsConncting) { + //设置要配置的ssid 和pswd + try { + mSnifferSmartLinker.setOnSmartLinkListener(SearchDeviceActivity.this); + //开始 smartLink + mSnifferSmartLinker.start(getApplicationContext(), pswd, ssid); + mIsConncting = true; + // mWaitingDialog.show(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + mWifiChangedReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); + if (networkInfo != null && networkInfo.isConnected()) { + + } else { + Toast.makeText(SearchDeviceActivity.this, R.string.hiflying_smartlinker_no_wifi_connectivity, Toast.LENGTH_SHORT).show(); + } + } + }; + registerReceiver(mWifiChangedReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + } + + private void initListener() { + + } + + private void saveDevice(final int number, String mac) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (mac != null) { + map.put("ziId", mac); + } else { + return; + } + map.put("isOwner", "1"); + map.put("deviceAddress", getIntent().getExtras().get("addressTypeCode").toString()); + map.put("wifiName", ssid); + map.put("netType", "0"); + map.put("houseId", getIntent().getExtras().get("houseId").toString()); + if (null != getIntent().getExtras().get("floor")) { + map.put("floor", getIntent().getExtras().get("floor").toString()); + } + map.put("appBrandId", APPID_S_VOICE); + util.requestPostByAsynewApi(NetWorkUrl.SEARCH_DEVICE_BIND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + BindDeviceEntity entity = JSON.parseObject(respone, BindDeviceEntity.class); + Log.i("bind_device", "onSuccess: " + respone); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(BIND_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(BIND_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(BIND_FAIL); + msg.obj = message; + msg.arg1 = number; + mHandler.sendMessage(msg); + } + }); + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + mSnifferSmartLinker.setOnSmartLinkListener(null); + try { + unregisterReceiver(mWifiChangedReceiver); + } catch (Exception e) { + e.printStackTrace(); + } + mScanTop.clearAnimation(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + @Override + public void onLinked(final SmartLinkedModule module) { + // TODO Auto-generated method stub + Log.w(TAG, "onLinked"); + mViewHandler.post(new Runnable() { + @Override + public void run() { + /*Toast.makeText(getApplicationContext(), getString(R.string.hiflying_smartlinker_new_module_found, module.getMac(), module.getModuleIP()), + Toast.LENGTH_SHORT).show();*/ + Log.i(TAG, "SearchDeviceActivity run()" + getString(R.string.hiflying_smartlinker_new_module_found, module.getMac(), module.getModuleIP()) + "----"); + searchDeviceNum++; + mac = module.getMac(); + moduleIP = module.getModuleIP(); + Message msg = mHandler.obtainMessage(LINK_WIFI_SUCCESS_CIRCLE); + msg.obj = searchDeviceNum; + mHandler.sendMessage(msg); + //保存搜索到的设备 + SharedpreferencesUtil.save(mac, moduleIP); + saveDevice(searchDeviceNum, mac); + getZiVer(searchDeviceNum, mac); + } + }); + } + + @Override + public void onTimeOut() { + + Log.w(TAG, "onTimeOut"); + mViewHandler.post(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + Toast.makeText(getApplicationContext(), getString(R.string.hiflying_smartlinker_timeout), + Toast.LENGTH_SHORT).show(); + // mWaitingDialog.dismiss(); + mIsConncting = false; + } + }); + } + + @Override + public void onCompleted() { + Log.w(TAG, "onCompleted"); + mViewHandler.post(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + // Toast.makeText(getApplicationContext(), getString(R.string.hiflying_smartlinker_completed), Toast.LENGTH_SHORT).show(); + // mWaitingDialog.dismiss(); + mIsConncting = false; + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case LINK_WIFI_SUCCESS_CIRCLE: + int obj = (int) msg.obj; + switch (obj) { + case 1: + circleIv01.setVisibility(View.VISIBLE); + break; + case 2: + circleIv02.setVisibility(View.VISIBLE); + break; + case 3: + circleIv03.setVisibility(View.VISIBLE); + break; + case 4: + circleIv04.setVisibility(View.VISIBLE); + break; + case 5: + circleIv05.setVisibility(View.VISIBLE); + break; + } + break; + case LINK_WIFI_SUCCESS: + int obj2 = (int) msg.obj; + switch (obj2) { + case 1: + if (SharedpreferencesUtil.get(Constans.VOICE)) { + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording1_1); + mediaPlayer01.start(); + } + } + setPicAnimate(circleIv01, mImageView01, obj2); + break; + case 2: + setPicAnimate(circleIv02, mImageView02, obj2); + break; + case 3: + setPicAnimate(circleIv03, mImageView03, obj2); + break; + case 4: + setPicAnimate(circleIv04, mImageView04, obj2); + break; + case 5: + setPicAnimate(circleIv05, mImageView05, obj2); + break; + } + break; + case LINK_WIFI_SUCCESS_MARK: + int obj3 = (int) msg.obj; + switch (obj3) { + case 1: + markIv01.startAnimation(alphaAnimation); + break; + case 2: + markIv02.startAnimation(alphaAnimation); + break; + case 3: + markIv03.startAnimation(alphaAnimation); + break; + case 4: + markIv04.startAnimation(alphaAnimation); + break; + case 5: + markIv05.startAnimation(alphaAnimation); + break; + } + break; + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else { + if (mac != null && addedNumber > 0) { + startActivity(new Intent(SearchDeviceActivity.this, SearchWaitActivity.class)); + finish(); + } else { + Intent intent = new Intent(SearchDeviceActivity.this, SearchFailActivity.class); + intent.putExtra("ssid", ssid); + intent.putExtra("password", pswd); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + if (null != getIntent().getExtras().get("addressTypeCode")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressTypeCode").toString()); + } else if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + startActivity(intent); + finish(); + } + } + break; + case BIND_FAIL: + String obj4 = (String) msg.obj; + int arg4 = msg.arg1; +// ToastUtil.show(this, (String) msg.obj); + switch (arg4) { + case 1: + setFailMark(obj4, markIv01, msg1); + break; + case 2: + setFailMark(obj4, markIv02, msg2); + break; + case 3: + setFailMark(obj4, markIv03, msg3); + break; + case 4: + setFailMark(obj4, markIv04, msg4); + break; + case 5: + setFailMark(obj4, markIv05, msg5); + break; + } + break; + case BIND_SUCCESS: + addedNumber++; + mTitleView.setHeadFuntionTxtAndSise16("添加"); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + break; + case GET_ZI_VER_SUCCESS: + int arg1 = msg.arg1; + A1A2Entity obj1 = (A1A2Entity) msg.obj; + if (obj1.getFlag() == 1) { + switch (arg1) { + case 1: + setPicA1OrA2(mImageView01, obj1, arg1); + break; + case 2: + setPicA1OrA2(mImageView02, obj1, arg1); + break; + case 3: + setPicA1OrA2(mImageView03, obj1, arg1); + break; + case 4: + setPicA1OrA2(mImageView04, obj1, arg1); + break; + case 5: + setPicA1OrA2(mImageView05, obj1, arg1); + break; + } + } else { + switch (arg1) { + case 1: + setPicA1OrA2(mImageView01, obj1, arg1); + setFailMark(obj1, markIv01, msg1); + break; + case 2: + setFailMark(obj1, markIv02, msg2); + setPicA1OrA2(mImageView02, obj1, arg1); + break; + case 3: + setFailMark(obj1, markIv03, msg3); + setPicA1OrA2(mImageView03, obj1, arg1); + break; + case 4: + setFailMark(obj1, markIv04, msg4); + setPicA1OrA2(mImageView04, obj1, arg1); + break; + case 5: + setFailMark(obj1, markIv05, msg5); + setPicA1OrA2(mImageView05, obj1, arg1); + break; + } + } + break; + } + } + + private synchronized void setFailMark(A1A2Entity obj1, ImageView markIv, final TextView msg) { + markIv.setImageResource(R.drawable.icon_add_error); + msg.setVisibility(View.VISIBLE); + msg.setText(obj1.getMsg()); + /*mHandler.postDelayed(new Runnable() { + @Override + public void run() { + if (msg.getVisibility() == View.VISIBLE) { + msg.setVisibility(View.INVISIBLE); + } + } + }, 3000);*/ + } + + private synchronized void setFailMark(String obj4, ImageView markIv, final TextView msg) { + markIv.setImageResource(R.drawable.icon_add_error); + msg.setVisibility(View.VISIBLE); + msg.setText(obj4); + } + + private void setPicAnimate(ImageView circleIv, ImageView mImageView, int obj2) { + Message message1 = mHandler.obtainMessage(LINK_WIFI_SUCCESS_MARK); + message1.obj = obj2; + mHandler.sendMessage(message1); + circleIv.setVisibility(View.INVISIBLE); + mImageView.startAnimation(alphaAnimation); + } + + private void setPicA1OrA2(ImageView imageView, A1A2Entity obj1, int deviceNum) { + if (null != obj1.getData()) { + imageView.setImageResource(StandardCodeUtil.getDevicePicDrawable(obj1.getData().getStandardCode())); + /* if (obj1.getData().getVer().equals("A2")) { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.pic_a2)); + } else if (obj1.getData().getConnectFlag().equals("1")) { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.pic_z1_online)); + } else { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.pic_z1)); + } + if (obj1.getData().getStandardCode().equals("D1-L")) { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.pic_d1_online)); + } else if (obj1.getData().getStandardCode().equals("YK1")) { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.icon_device_yk1)); + } else if (obj1.getData().getStandardCode().contains("B3")) { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.icon_b3)); + } else if (obj1.getData().getStandardCode().contains("B4")) { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.icon_b4)); + } else if (obj1.getData().getStandardCode().contains("Y5")) { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.icon_y5)); + }*/ + Message message = mHandler.obtainMessage(LINK_WIFI_SUCCESS); + message.obj = deviceNum; + mHandler.sendMessage(message); + } + } + + private void getZiVer(final int number, String mac) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", mac); + map.put("appBrandId", APPID_S_VOICE); + netWorkUtil.requestPostByAsynew(NetWorkUrl.GET_ZI_VER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getZiVer", "SolidVersionActivity onSuccess()" + respone); + A1A2Entity obj = JSON.parseObject(respone, A1A2Entity.class); + Message msg = mHandler.obtainMessage(GET_ZI_VER_SUCCESS); + msg.obj = obj; + msg.arg1 = number; + mHandler.sendMessage(msg); + /*if (obj.getFlag() == 1) { + + } else { + Message msg = mHandler.obtainMessage(GET_ZI_VER_FAIL); + msg.obj = obj.getData(); + mHandler.sendMessage(msg); + }*/ + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchFailActivity.java b/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchFailActivity.java new file mode 100644 index 0000000..3b97e68 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchFailActivity.java @@ -0,0 +1,122 @@ +package com.yonsz.z1.device.deviceadd; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.Html; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.SWITCH_TAG; + +/** + * Created by Administrator on 2017/6/14. + */ + +public class SearchFailActivity extends BaseActivity { + private TitleView mTitleView; + private Button mButton; + private TextView apConfigTv, tv_fail_result; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_search_fail); + initView(); + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.title_wifi_fail); + mTitleView.setHead(R.string.config_fail); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mButton = (Button) findViewById(R.id.bt_restart_config); + apConfigTv = (TextView) findViewById(R.id.tv_ap_config); + tv_fail_result = (TextView) findViewById(R.id.tv_fail_result); + mButton.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent = new Intent(SearchFailActivity.this, ConnectWifiActivity.class); + if (null != getIntent().getExtras().get("deviceType") && getIntent().getExtras().get("deviceType").toString().equals(SWITCH_TAG)) { + intent.putExtra("from", "SwitcherTwoActivity"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("largeClass", "4"); + intent.putExtra("isFirst", "1"); + intent.putExtra("deviceAddress", getIntent().getExtras().get("addressTypeCode").toString()); + intent.putExtra("plugType", getIntent().getExtras().get("plugType").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressTypeCode").toString()); + } else { + intent.putExtra("from", "SearchFailActivity"); + } + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressTypeCode").toString()); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + startActivity(intent); + finish(); + } + }); + apConfigTv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(SearchFailActivity.this, ConfigWifiActicity.class); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("password", getIntent().getExtras().get("password").toString()); + intent.putExtra("configWifiType", "apType"); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressTypeCode").toString()); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + startActivity(intent); + finish(); + } + }); + + String strMsg = "1、网关未进入配置状态(请确保配置前已长按网关配置按钮,使网关指示灯开始闪烁)
2、WIFI的账号或密码错误(请检查输入的账号 与密码是否正确)
3、网关距离路由器太远,wifi信号差(请先将网关放置在路由器旁边进行配网)
4、路由器开启时间过长(请尝试重启路由器)
5、输入的WIFI账号是5G的SSID(需要改成2.4G 网络的SSID,或关闭5G网络)
6、路由器的2.4G和5G网络共用同一个SSID(建议修改成不同的SSID并配置2.4G网络,或关闭5G网络)
7、路由器开启了5G网络,产生干扰(请尝试关 闭路由器的5G网络,并重启路由器);"; + String strMsg1 = "1、设备未进入配置状态(请确保配置前已长按设备配置按钮,使设备指示灯开始闪烁)
2、WIFI的账号或密码错误(请检查输入的账号 与密码是否正确)
3、设备距离路由器太远,wifi信号差(请先将网关放置在路由器旁边进行配网)
4、路由器开启时间过长(请尝试重启路由器)
5、输入的WIFI账号是5G的SSID(需要改成2.4G 网络的SSID,或关闭5G网络)
6、路由器的2.4G和5G网络共用同一个SSID(建议修改成不同的SSID并配置2.4G网络,或关闭5G网络)
7、路由器开启了5G网络,产生干扰(请尝试关 闭路由器的5G网络,并重启路由器);"; + if (null != getIntent().getExtras().get("deviceType")) { + if (getIntent().getExtras().get("deviceType").toString().equals(SWITCH_TAG)) { + tv_fail_result.setText(Html.fromHtml(strMsg1)); + } else { + tv_fail_result.setText(Html.fromHtml(strMsg)); + } + } else { + tv_fail_result.setText(Html.fromHtml(strMsg)); + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchH3eDeviceActivity.java b/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchH3eDeviceActivity.java new file mode 100644 index 0000000..738b919 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchH3eDeviceActivity.java @@ -0,0 +1,559 @@ +package com.yonsz.z1.device.deviceadd; + +import android.content.BroadcastReceiver; +import android.content.Intent; +import android.content.SharedPreferences; +import android.media.MediaPlayer; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.view.animation.RotateAnimation; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.hiflying.smartlink.ISmartLinker; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.BindDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity4.A1A2Entity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.model.Module; +import com.yonsz.z1.tcpudp.net.Udp1Broadcast; +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.tcpudp.utils.Utils; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.fragment.Scene5Fragment; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; + +import java.net.DatagramPacket; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.difference.DifferConstans.APPID_S_VOICE; +import static com.yonsz.z1.net.Constans.BIND_FAIL; +import static com.yonsz.z1.net.Constans.BIND_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_ZI_VER_FAIL; +import static com.yonsz.z1.net.Constans.GET_ZI_VER_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * @time 2017/6/13 0:10 + * @desc ${TODO} + */ +public class SearchH3eDeviceActivity extends BaseActivity { + private static final String TAG = "CustomizedActivity"; + private static final int LINK_WIFI_SUCCESS = 1; + private static final int LINK_WIFI_SUCCESS_MARK = 2; + private static final int LINK_WIFI_SUCCESS_CIRCLE = 3; + protected ISmartLinker mSnifferSmartLinker; + protected Handler mViewHandler = new Handler(); + private TitleView mTitleView; + private StateButton mStateButton; + private Button bt_start_config; + private ImageView mScanTop; + private RotateAnimation rotateAnimation; + private ImageView mImageView01, mImageView02, mImageView03, mImageView04, mImageView05; + private ImageView markIv01, markIv02, markIv03, markIv04, markIv05; + private ImageView circleIv01, circleIv02, circleIv03, circleIv04, circleIv05; + private TextView msg1, msg2, msg3, msg4, msg5; + private AlphaAnimation alphaAnimation; + private boolean mIsConncting = false; + // protected ProgressDialog mWaitingDialog; + private BroadcastReceiver mWifiChangedReceiver; + private String ssid, pswd; + private int sec = 30; + private TimerTask timerTask; + private Timer timer; + private String mac; + private String moduleIP; + private MediaPlayer mediaPlayer01; + private int searchDeviceNum = 0; + private int addedNumber = 0; + + private List mModules; + private Udp1Broadcast udpBroadcast; + private WifiManager wifimanager; + private String deviceIp = "", ziId = ""; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("可以刷新了")) { + mModules = loadDevices(); + getDeviceIp(); + if (!deviceIp.isEmpty()) { + searchDeviceNum++; + mac = ziId; + Message msg1 = mHandler.obtainMessage(LINK_WIFI_SUCCESS_CIRCLE); + msg1.obj = searchDeviceNum; + mHandler.sendMessage(msg1); + } + } + } + + private void getDeviceIp() { + if (!TextUtils.isEmpty(SharedpreferencesUtil.get(ziId, ""))) { + deviceIp = SharedpreferencesUtil.get(ziId, "").toString(); + } else { + for (int i = 0; i < mModules.size(); i++) { + if (mModules.get(i).getMac().equals(ziId)) { + deviceIp = mModules.get(i).getIp(); + } + } + } + Log.i("netty", "SolidVersionActivity onCreate()" + deviceIp + "==="); + } + + private List loadDevices() { + List modules = new ArrayList(); + SharedPreferences preferences = getSharedPreferences("module_list", MODE_PRIVATE); + int count = preferences.getInt(Constants.KEY_MODULE_COUNT, 0); + Module module; + + for (int i = 0; i < count; i++) { + module = new Module(); + module.setId(preferences.getInt(Constants.KEY_PRE_ID + i, -1)); + module.setIp(preferences.getString(Constants.KEY_PRE_IP + i, null)); + module.setMac(preferences.getString(Constants.KEY_PRE_MAC + i, null)); + module.setModuleID(preferences.getString(Constants.KEY_PRE_MODULEID + i, null)); + modules.add(module); + } + return modules; + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_search_h3e); + wifimanager = (WifiManager) this.getApplicationContext().getSystemService(WIFI_SERVICE); + udpBroadcast = Scene5Fragment.getUdpBroadcast1(); + udpBroadcast.send(Utils.getCMDScanModules(this)); + + initView(); + } + + @Override + public void onStart() { + Log.i("UdpBroadcast", "onStart"); + + super.onStart(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initView() { + ziId = getIntent().getExtras().get("result").toString(); + mStateButton = (StateButton) findViewById(R.id.bt_sec); + bt_start_config = (Button) findViewById(R.id.bt_start_config); + bt_start_config.setOnClickListener(this); + mTitleView = (TitleView) findViewById(R.id.title_wifi_search); + mScanTop = (ImageView) findViewById(R.id.iv_scan_top); + msg1 = (TextView) findViewById(R.id.msg1); + msg2 = (TextView) findViewById(R.id.msg2); + msg3 = (TextView) findViewById(R.id.msg3); + msg4 = (TextView) findViewById(R.id.msg4); + msg5 = (TextView) findViewById(R.id.msg5); + mImageView01 = (ImageView) findViewById(R.id.imageView01); + mImageView02 = (ImageView) findViewById(R.id.imageView02); + mImageView03 = (ImageView) findViewById(R.id.imageView03); + mImageView04 = (ImageView) findViewById(R.id.imageView04); + mImageView05 = (ImageView) findViewById(R.id.imageView05); + markIv01 = (ImageView) findViewById(R.id.iv_mark01); + markIv02 = (ImageView) findViewById(R.id.iv_mark02); + markIv03 = (ImageView) findViewById(R.id.iv_mark03); + markIv04 = (ImageView) findViewById(R.id.iv_mark04); + markIv05 = (ImageView) findViewById(R.id.iv_mark05); + circleIv01 = (ImageView) findViewById(R.id.iv_circle_search01); + circleIv02 = (ImageView) findViewById(R.id.iv_circle_search02); + circleIv03 = (ImageView) findViewById(R.id.iv_circle_search03); + circleIv04 = (ImageView) findViewById(R.id.iv_circle_search04); + circleIv05 = (ImageView) findViewById(R.id.iv_circle_search05); + rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(SearchH3eDeviceActivity.this, R.anim.rotate360_anim); + alphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(SearchH3eDeviceActivity.this, R.anim.alpha_anim); + mScanTop.startAnimation(rotateAnimation); + mTitleView.setHead(R.string.add_device); + mTitleView.setHeadFuntionTxt(""); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (mac != null) { + startActivity(new Intent(SearchH3eDeviceActivity.this, SearchWaitActivity.class)); + finish(); + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void saveDevice() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (mac != null) { + map.put("ziId", mac); + } else { + return; + } + map.put("isOwner", "1"); + map.put("deviceAddress", getIntent().getExtras().get("addressTypeCode").toString()); + map.put("wifiName", getSSid()); + map.put("netType", "0"); + map.put("houseId", getIntent().getExtras().get("houseId").toString()); + if (null != getIntent().getExtras().get("floor")) { + map.put("floor", getIntent().getExtras().get("floor").toString()); + } + map.put("appBrandId", APPID_S_VOICE); + util.requestPostByAsynewApi(NetWorkUrl.SEARCH_DEVICE_BIND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + BindDeviceEntity entity = JSON.parseObject(respone, BindDeviceEntity.class); + Log.i("bind_device", "onSuccess: " + respone); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(BIND_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(BIND_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + mScanTop.clearAnimation(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + // udpBroadcast.close(); + } + + private List decodePackets(List packets) { + + int i = 1; + Module module; + List list = new ArrayList(); + List modules = new ArrayList(); + + DECODE_PACKETS: + for (DatagramPacket packet : packets) { + + String data = new String(packet.getData(), 0, packet.getLength()); + Log.i("UdpBroadcast", i + ": " + data); + if (data.equals(Utils.getCMDScanModules(this))) { + continue; + } + + for (String item : list) { + if (item.equals(data)) { + continue DECODE_PACKETS; + } + } + + list.add(data); + if ((module = Utils.decodeBroadcast2Module(data)) != null) { + module.setId(i); + modules.add(module); + i++; + } + } + + return modules; + } + + /** + * save modules' data to local + * + * @param modules + */ + private void saveDevices(List modules) { + if (modules.size() > 0) { + for (Module module : modules) { + SharedpreferencesUtil.save(module.getMac(), module.getIp()); + if (module.getMac().equalsIgnoreCase(getIntent().getExtras().get("result").toString())) { + searchDeviceNum++; + mac = module.getMac(); + Message msg = mHandler.obtainMessage(LINK_WIFI_SUCCESS_CIRCLE); + msg.obj = searchDeviceNum; + mHandler.sendMessage(msg); + } + } + } else { + } + } + + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_start_config: + Log.i("UdpBroadcast", "onStart"); + sec = 30; + mScanTop.startAnimation(rotateAnimation); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + bt_start_config.setVisibility(View.GONE); + mStateButton.setVisibility(View.VISIBLE); + udpBroadcast.send(Utils.getCMDScanModules(this)); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case LINK_WIFI_SUCCESS_CIRCLE: + mImageView01.setImageDrawable(getResources().getDrawable(R.drawable.icon_device_b3)); + mImageView01.setVisibility(View.VISIBLE); + markIv01.startAnimation(alphaAnimation); + // getZiVer(searchDeviceNum, mac); + saveDevice(); + /*int obj = (int) msg.obj; + switch (obj) { + case 1: + circleIv01.setVisibility(View.VISIBLE); + break; + case 2: + circleIv02.setVisibility(View.VISIBLE); + break; + case 3: + circleIv03.setVisibility(View.VISIBLE); + break; + case 4: + circleIv04.setVisibility(View.VISIBLE); + break; + case 5: + circleIv05.setVisibility(View.VISIBLE); + break; + }*/ + break; + case LINK_WIFI_SUCCESS: + int obj2 = (int) msg.obj; + switch (obj2) { + case 1: + if (SharedpreferencesUtil.get(Constans.VOICE)) { + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording1_1); + mediaPlayer01.start(); + } + } + setPicAnimate(circleIv01, mImageView01, obj2); + break; + case 2: + setPicAnimate(circleIv02, mImageView02, obj2); + break; + case 3: + setPicAnimate(circleIv03, mImageView03, obj2); + break; + case 4: + setPicAnimate(circleIv04, mImageView04, obj2); + break; + case 5: + setPicAnimate(circleIv05, mImageView05, obj2); + break; + } + break; + case LINK_WIFI_SUCCESS_MARK: + int obj3 = (int) msg.obj; + switch (obj3) { + case 1: + markIv01.startAnimation(alphaAnimation); + break; + case 2: + markIv02.startAnimation(alphaAnimation); + break; + case 3: + markIv03.startAnimation(alphaAnimation); + break; + case 4: + markIv04.startAnimation(alphaAnimation); + break; + case 5: + markIv05.startAnimation(alphaAnimation); + break; + } + break; + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else { + if (mac != null && addedNumber > 0) { + startActivity(new Intent(SearchH3eDeviceActivity.this, SearchWaitActivity.class)); + finish(); + } else { + rotateAnimation.cancel(); + mStateButton.setVisibility(View.GONE); + bt_start_config.setVisibility(View.VISIBLE); + // udpBroadcast.close(); + } + } + break; + case BIND_FAIL: + case GET_ZI_VER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case BIND_SUCCESS: + /*addedNumber++; + mTitleView.setHeadFuntionTxtAndSise16("添加");*/ + EventBus.getDefault().post( + new EventBusEntity("关闭")); + startActivity(new Intent(SearchH3eDeviceActivity.this, SearchWaitActivity.class)); + finish(); + break; + case GET_ZI_VER_SUCCESS: + int arg1 = msg.arg1; + A1A2Entity obj1 = (A1A2Entity) msg.obj; + if (obj1.getFlag() == 1) { + switch (arg1) { + case 1: + setPicA1OrA2(mImageView01, obj1, arg1); + break; + case 2: + setPicA1OrA2(mImageView02, obj1, arg1); + break; + case 3: + setPicA1OrA2(mImageView03, obj1, arg1); + break; + case 4: + setPicA1OrA2(mImageView04, obj1, arg1); + break; + case 5: + setPicA1OrA2(mImageView05, obj1, arg1); + break; + } + } else { + switch (arg1) { + case 1: + setPicA1OrA2(mImageView01, obj1, arg1); + setFailMark(obj1, markIv01, msg1); + break; + case 2: + setFailMark(obj1, markIv02, msg2); + setPicA1OrA2(mImageView02, obj1, arg1); + break; + case 3: + setFailMark(obj1, markIv03, msg3); + setPicA1OrA2(mImageView03, obj1, arg1); + break; + case 4: + setFailMark(obj1, markIv04, msg4); + setPicA1OrA2(mImageView04, obj1, arg1); + break; + case 5: + setFailMark(obj1, markIv05, msg5); + setPicA1OrA2(mImageView05, obj1, arg1); + break; + } + } + break; + } + } + + private synchronized void setFailMark(A1A2Entity obj1, ImageView markIv, final TextView msg) { + markIv.setImageResource(R.drawable.icon_add_error); + msg.setVisibility(View.VISIBLE); + msg.setText(obj1.getMsg()); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + if (msg.getVisibility() == View.VISIBLE) { + msg.setVisibility(View.INVISIBLE); + } + } + }, 3000); + } + + private void setPicAnimate(ImageView circleIv, ImageView mImageView, int obj2) { + Message message1 = mHandler.obtainMessage(LINK_WIFI_SUCCESS_MARK); + message1.obj = obj2; + mHandler.sendMessage(message1); + circleIv.setVisibility(View.INVISIBLE); + mImageView.startAnimation(alphaAnimation); + } + + private void setPicA1OrA2(ImageView imageView, A1A2Entity obj1, int deviceNum) { + if (obj1.getData().getVer().equals("A2")) { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.pic_a2)); + } else if (obj1.getData().getConnectFlag().equals("1")) { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.pic_z1_online)); + } else { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.pic_z1)); + } + if (obj1.getData().getVer().equals("A3") && obj1.getData().getStandardCode().contains("H3")) { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.icon_device_b3)); + } + if (obj1.getData().getStandardCode().equals("D1-L")) { + imageView.setImageDrawable(getResources().getDrawable(R.drawable.pic_d1_online)); + } + Message message = mHandler.obtainMessage(LINK_WIFI_SUCCESS); + message.obj = deviceNum; + mHandler.sendMessage(message); + } + + + private String getSSid() { + + WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + if (wm != null) { + WifiInfo wi = wm.getConnectionInfo(); + if (wi != null) { + String ssid = wi.getSSID(); + if (ssid.length() > 2 && ssid.startsWith("\"") && ssid.endsWith("\"")) { + return ssid.substring(1, ssid.length() - 1); + } else { + return ssid; + } + } + } + + return ""; + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchWaitActivity.java b/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchWaitActivity.java new file mode 100644 index 0000000..889cd17 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/deviceadd/SearchWaitActivity.java @@ -0,0 +1,171 @@ +package com.yonsz.z1.device.deviceadd; + +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.widget.TextView; +import android.widget.Toast; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.OnlineEvent; +import com.yonsz.z1.database.entity.ThirdEvent; +import com.yonsz.z1.database.entity.entity4.QureyBindEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.utils.CustomToast; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; + +import java.util.Timer; +import java.util.TimerTask; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.Constans.UPDATE_WAIT; + +/** + * Created by Administrator on 2017/9/26. + */ +public class SearchWaitActivity extends BaseActivity { + private TitleView mTitleView; + private StateButton mStateButton; + private int sec = 10; + private Timer timer; + private int index = 1; + private boolean isOpen = true; + private TextView tvOne, tvTwo, tvThree, tvFour; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_search_wait); + initView(); + } + + //eventbus接收来自netty的信息,注释起上下线通知 + public void onEventMainThread(OnlineEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + /* runOnUiThread(new Runnable() { + @Override + public void run() { + CustomToast.showToast(getApplicationContext(), msg, Toast.LENGTH_SHORT); + finish(); + } + });*/ + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + // mHandler.sendEmptyMessageDelayed(UPDATE_WAIT, 200); + timer(); + } + + private void initView() { + tvOne = (TextView) findViewById(R.id.tv_one); + tvTwo = (TextView) findViewById(R.id.tv_two); + tvThree = (TextView) findViewById(R.id.tv_three); + tvFour = (TextView) findViewById(R.id.tv_four); + mStateButton = (StateButton) findViewById(R.id.bt_sec); + mTitleView = (TitleView) findViewById(R.id.title_search_wait); + mTitleView.setHead(R.string.connact_wifi); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void timer() { + timer = new Timer(true); + TimerTask task = new TimerTask() { + @Override + public void run() { + if (isOpen) { + if (index == 4) { + index = 0; + } + index++; + Message message = new Message(); + message.what = UPDATE_WAIT; + mHandler.sendMessage(message); + } + } + }; + timer.schedule(task, 0, 300); // 延时0ms后执行,5000ms执行一次 + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else { + // Intent intent = new Intent(this, MainActivity4.class); + // intent.putExtra("fromTag", "wait"); + // startActivity(intent); + finish(); + } + break; + case UPDATE_WAIT: + switch (index) { + case 1: + tvOne.setEnabled(true); + tvTwo.setEnabled(false); + tvThree.setEnabled(false); + tvFour.setEnabled(false); + break; + case 2: + tvOne.setEnabled(false); + tvTwo.setEnabled(true); + tvThree.setEnabled(false); + tvFour.setEnabled(false); + break; + case 3: + tvOne.setEnabled(false); + tvTwo.setEnabled(false); + tvThree.setEnabled(true); + tvFour.setEnabled(false); + break; + case 4: + tvOne.setEnabled(false); + tvTwo.setEnabled(false); + tvThree.setEnabled(false); + tvFour.setEnabled(true); + break; + } + break; + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + isOpen = false; + if (timer != null) { + timer.cancel();//退出计时器 + } + timer = null; + + EventBus.getDefault().post( + new QureyBindEntity("SearchWaitActivity")); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/fan/FanLearnActivity.java b/app/src/main/java/com/yonsz/z1/device/fan/FanLearnActivity.java new file mode 100644 index 0000000..a89c886 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/fan/FanLearnActivity.java @@ -0,0 +1,756 @@ +package com.yonsz.z1.device.fan; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.StudyEntity; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.DeviceStateEntity; +import com.yonsz.z1.database.entity.entity4.LocalControlEvent; +import com.yonsz.z1.device.LearnGuideActivity; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.device.tv.FanList1Activity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.utils.ConnectNettyUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.R.id.tv_wind_speed; +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.APP_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_OPEN; +import static com.yonsz.z1.net.Constans.FAN_SHAKE; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.FAN_TIME; +import static com.yonsz.z1.net.Constans.FAN_TYPE; +import static com.yonsz.z1.net.Constans.FAN_WIND; +import static com.yonsz.z1.net.Constans.LEARN_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_LOCAL_CONTROL; +import static com.yonsz.z1.net.Constans.isLocalControl; +import static com.yonsz.z1.net.NetWorkUrl.QUERY_DEVICE_LASTINFO; + +/** + * Created by Administrator on 2017/6/19. + */ + +public class FanLearnActivity extends BaseActivity { + private TitleView mTitleView; + private TextView windType, windTypeBg, openFan, openFanBg, timing, timingBg, windSpeed, windSpeedBg, shakeHead, shakeheadbg, learnInstruction, learnComplete; + private ImageView openFanMark, timingMark, windSpeedMark, shakeHeadMark, windTypeMark; + private LinearLayout learningLl, fanContinueLearnLl, fanTopLl; + private AlphaAnimation mAlphaAnimation; + private boolean isLearn; + private String userId; + private String ziId; + private boolean openTag = false, shakeTag = false, windTag = false, timeTag = false, windTypeTag = false; + private String fanName; + private String deviceIp = ""; + private ImageView fanBladeIv; + private RotateAnimation rotateAnimation; + private ImageView localControlIv; + + public void onEventMainThread(AppControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = APP_CONTROL_SUCCESS; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LocalControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = SHOW_LOCAL_CONTROL; + message.obj = msg; + mHandler.sendMessage(message); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fan_learn); + initView(); + initListener(); + } + + private void initView() { + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + String fanStateTag = (String) getIntent().getExtras().get("fanStateTag"); + if (fanStateTag.equals("0")) { + isLearn = true; + } else { + isLearn = false; + } + localControlIv = (ImageView) findViewById(R.id.iv_local_control); + fanBladeIv = (ImageView) findViewById(R.id.iv_fan_blade); + openFanMark = (ImageView) findViewById(R.id.tv_fan_open_mark); + timingMark = (ImageView) findViewById(R.id.tv_timing_mark); + windSpeedMark = (ImageView) findViewById(R.id.tv_wind_speed_mark); + shakeHeadMark = (ImageView) findViewById(R.id.tv_shake_head_mark); + windTypeMark = (ImageView) findViewById(R.id.tv_wind_type_mark); + + openFan = (TextView) findViewById(R.id.tv_fan_open); + openFanBg = (TextView) findViewById(R.id.tv_fan_open_bg); + timing = (TextView) findViewById(R.id.tv_timing); + timingBg = (TextView) findViewById(R.id.tv_timing_bg); + windSpeed = (TextView) findViewById(tv_wind_speed); + windSpeedBg = (TextView) findViewById(R.id.tv_wind_speed_bg); + shakeHead = (TextView) findViewById(R.id.tv_shake_head); + shakeheadbg = (TextView) findViewById(R.id.tv_shake_head_bg); + windType = (TextView) findViewById(R.id.tv_wind_type); + windTypeBg = (TextView) findViewById(R.id.tv_wind_type_bg); + + fanTopLl = (LinearLayout) findViewById(R.id.ll_fan_top); + learnInstruction = (TextView) findViewById(R.id.tv_learn_instruction); + learnComplete = (TextView) findViewById(R.id.tv_learn_complete); + learningLl = (LinearLayout) findViewById(R.id.ll_learning); + fanContinueLearnLl = (LinearLayout) findViewById(R.id.ll_fan_continue_learn); + + mTitleView = (TitleView) findViewById(R.id.title_fan); + if (TextUtils.isEmpty(getIntent().getExtras().get("fanName").toString())) { + fanName =getString(R.string.fan); + } else { + fanName = getIntent().getExtras().get("fanName").toString(); + } + mTitleView.setHead(fanName); + mTitleView.clearBackGroud(); + rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(FanLearnActivity.this, R.anim.rotate360_fan_anim); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + shakeheadbg.clearAnimation(); + windSpeedBg.clearAnimation(); + timingBg.clearAnimation(); + openFanBg.clearAnimation(); + windTypeBg.clearAnimation(); + if (isLearn) { + isLearn = false; + //查询学习按键 + queryStudyValue(); + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(FanLearnActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + ConfirmDialog dialog = new ConfirmDialog(FanLearnActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + deleteChildDevice(FAN_TAG, ziId); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + //重新命名 + Intent intent1 = new Intent(FanLearnActivity.this, FanList1Activity.class); + intent1.putExtra("ziId", ziId); + intent1.putExtra("nameTag", "name"); + intent1.putExtra("id", getIntent().getExtras().get("id").toString()); + intent1.putExtra("deviceType", FAN_TAG); + startActivityForResult(intent1, MODIFY_DEVICE_NAME); + break; + case 3: + //语令说明 + Intent intent = new Intent(FanLearnActivity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", FAN_TAG); + startActivity(intent); + break; + case 4: + //遥控学习 + isLearn = true; + //查询学习按键 + queryStudyValue(); + break; + } + } + }); + dialog2.setContent(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + if (isLearn) { + showLearn(); + } else { + showControl(); + } + + //查询学习按键 + queryStudyValue(); + ConnectNettyUtil.connectNetty(ziId, deviceIp, this); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (isLocalControl) { + NettyManager.closeCtx(); + } + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + private void showControl() { + // mTitleView.setHeadFuntionTxt(R.string.voice_said); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + fanTopLl.setVisibility(View.GONE); + learningLl.setVisibility(View.GONE); + openFanMark.setVisibility(View.GONE); + windSpeedMark.setVisibility(View.GONE); + timingMark.setVisibility(View.GONE); + windTypeMark.setVisibility(View.GONE); + shakeHeadMark.setVisibility(View.GONE); + fanContinueLearnLl.setVisibility(View.GONE); + + if (!windTag) { + windSpeed.setAlpha(0.5f); + windSpeed.setEnabled(false); + } else { + windSpeed.setAlpha(1.0f); + windSpeed.setEnabled(true); + } + if (!shakeTag) { + shakeHead.setAlpha(0.5f); + shakeHead.setEnabled(false); + } else { + shakeHead.setAlpha(1.0f); + shakeHead.setEnabled(true); + } + if (!openTag) { + openFan.setAlpha(0.5f); + openFan.setEnabled(false); + } else { + openFan.setAlpha(1.0f); + openFan.setEnabled(true); + } + if (!timeTag) { + timing.setAlpha(0.5f); + timing.setEnabled(false); + } else { + timing.setAlpha(1.0f); + timing.setEnabled(true); + } + if (!windTypeTag) { + windType.setAlpha(0.5f); + windType.setEnabled(false); + } else { + windType.setAlpha(1.0f); + windType.setEnabled(true); + } + } + + private void showLearn() { + mAlphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(FanLearnActivity.this, R.anim.alpha_anim_device); + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setHeadFuntionGone(); + fanTopLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learningLl.setVisibility(View.VISIBLE); + openFanMark.setVisibility(View.GONE); + windSpeedMark.setVisibility(View.GONE); + timingMark.setVisibility(View.GONE); + windTypeMark.setVisibility(View.GONE); + shakeHeadMark.setVisibility(View.GONE); + fanContinueLearnLl.setVisibility(View.GONE); + windSpeed.setAlpha(1.0f); + windSpeed.setEnabled(true); + shakeHead.setAlpha(1.0f); + shakeHead.setEnabled(true); + openFan.setAlpha(1.0f); + openFan.setEnabled(true); + windType.setAlpha(1.0f); + windType.setEnabled(true); + timing.setAlpha(1.0f); + timing.setEnabled(true); + if (windTag) { + windSpeedMark.setVisibility(View.VISIBLE); + } + if (shakeTag) { + shakeHeadMark.setVisibility(View.VISIBLE); + } + if (openTag) { + openFanMark.setVisibility(View.VISIBLE); + } + if (timeTag) { + timingMark.setVisibility(View.VISIBLE); + } + if (windTypeTag) { + windTypeMark.setVisibility(View.VISIBLE); + } + + if (!openTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText(R.string.Switch); + timingBg.clearAnimation(); + shakeheadbg.clearAnimation(); + windSpeedBg.clearAnimation(); + windTypeBg.clearAnimation(); + openFanBg.startAnimation(mAlphaAnimation); + } else if (!windTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + timingBg.clearAnimation(); + openFanBg.clearAnimation(); + shakeheadbg.clearAnimation(); + windTypeBg.clearAnimation(); + learnInstruction.setText(R.string.wind_speed_fan); + windSpeedBg.startAnimation(mAlphaAnimation); + } else if (!shakeTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + windSpeedBg.clearAnimation(); + timingBg.clearAnimation(); + openFanBg.clearAnimation(); + windTypeBg.clearAnimation(); + learnInstruction.setText(R.string.shake_head); + shakeheadbg.startAnimation(mAlphaAnimation); + } else if (!windTypeTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + windSpeedBg.clearAnimation(); + timingBg.clearAnimation(); + openFanBg.clearAnimation(); + shakeheadbg.clearAnimation(); + learnInstruction.setText(R.string.wind_type); + windTypeBg.startAnimation(mAlphaAnimation); + } else if (!timeTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + openFanBg.clearAnimation(); + windSpeedBg.clearAnimation(); + shakeheadbg.clearAnimation(); + windTypeBg.clearAnimation(); + learnInstruction.setText(R.string.time); + timingBg.startAnimation(mAlphaAnimation); + } else { + shakeheadbg.clearAnimation(); + windSpeedBg.clearAnimation(); + timingBg.clearAnimation(); + openFanBg.clearAnimation(); + windTypeBg.clearAnimation(); + learningLl.setVisibility(View.GONE); + learnComplete.setVisibility(View.VISIBLE); + } + /* if (!windTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + timingBg.clearAnimation(); + openFanBg.clearAnimation(); + shakeheadbg.clearAnimation(); + learnInstruction.setText("风速"); + windSpeedBg.startAnimation(mAlphaAnimation); + } else if (!shakeTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + windSpeedBg.clearAnimation(); + timingBg.clearAnimation(); + openFanBg.clearAnimation(); + learnInstruction.setText("摇头"); + shakeheadbg.startAnimation(mAlphaAnimation); + } else if (!openTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("开关"); + timingBg.clearAnimation(); + shakeheadbg.clearAnimation(); + windSpeedBg.clearAnimation(); + openFanBg.startAnimation(mAlphaAnimation); + } else if (!timeTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + openFanBg.clearAnimation(); + windSpeedBg.clearAnimation(); + shakeheadbg.clearAnimation(); + learnInstruction.setText("定时"); + timingBg.startAnimation(mAlphaAnimation); + } else { + shakeheadbg.clearAnimation(); + windSpeedBg.clearAnimation(); + timingBg.clearAnimation(); + openFanBg.clearAnimation(); + learningLl.setVisibility(View.GONE); + learnComplete.setVisibility(View.VISIBLE); + }*/ + } + + private void queryStudyValue() { + + } + + private void initListener() { + openFan.setOnClickListener(this); + timing.setOnClickListener(this); + windSpeed.setOnClickListener(this); + shakeHead.setOnClickListener(this); + windType.setOnClickListener(this); + fanContinueLearnLl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + Intent intent; + if (isLearn) { + switch (v.getId()) { + case R.id.tv_fan_open: + intent = new Intent(FanLearnActivity.this, LearnGuideActivity.class); + intent.putExtra("learnGuide", 1); + intent.putExtra("ziId", ziId); + // startActivityForResult(intent, LEARN_RESULT); + startActivity(intent); + break; + case R.id.tv_timing: + intent = new Intent(FanLearnActivity.this, LearnGuideActivity.class); + intent.putExtra("learnGuide", 4); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case tv_wind_speed: + intent = new Intent(FanLearnActivity.this, LearnGuideActivity.class); + intent.putExtra("learnGuide", 3); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_shake_head: + intent = new Intent(FanLearnActivity.this, LearnGuideActivity.class); + intent.putExtra("learnGuide", 2); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_wind_type: + intent = new Intent(FanLearnActivity.this, LearnGuideActivity.class); + intent.putExtra("learnGuide", 5); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + } + } else { + switch (v.getId()) { + case R.id.tv_fan_open: + // ToastUtil.show(FanLearnActivity.this, "控制开关"); + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_OPEN)); + } else { + sendAirControlOrder(1); + } + break; + case R.id.tv_timing: + // ToastUtil.show(FanLearnActivity.this, "控制定时"); + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_TIME)); + } else { + sendAirControlOrder(2); + } + break; + case tv_wind_speed: + // ToastUtil.show(FanLearnActivity.this, "控制风速"); + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_WIND)); + } else { + sendAirControlOrder(3); + } + break; + case R.id.tv_shake_head: + // ToastUtil.show(FanLearnActivity.this, "控制摇头"); + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_SHAKE)); + } else { + sendAirControlOrder(4); + } + break; + case R.id.tv_wind_type: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_TYPE)); + } else { + sendAirControlOrder(5); + } + break; + case R.id.ll_fan_continue_learn: + isLearn = true; + //查询学习按键 + queryStudyValue(); + break; + } + } + } + + //发送开关指令 + private void sendAirControlOrder(int position) { + setShake(); + if (DensityUtil.isNetworkConnected(this)) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + switch (position) { + case 1: + map.put("sendMsg", FAN_OPEN); + break; + case 2: + map.put("sendMsg", FAN_TIME); + break; + case 3: + map.put("sendMsg", FAN_WIND); + break; + case 4: + map.put("sendMsg", FAN_SHAKE); + break; + case 5: + map.put("sendMsg", FAN_TYPE); + break; + } + + /*util.requestPostByAsyn(ziId, NetWorkUrl.SEND_CONTROL_AIR_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addChildDevice", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } else { + ToastUtil.show(this, R.string.net_error); + } + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + ToastUtil.show(this, entity1.getMsg()); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case QUERY_STUDY_SUCCESS: + StudyEntity entity = (StudyEntity) msg.obj; + if (entity != null) { + setIsLearned(entity); + } + if (isLearn) { + showLearn(); + } else { + showControl(); + } + break; + case QUERY_STUDY_FAIL: + + break; + case SEND_CONTROL_ORDER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DELETE_CHILDDEVICE_SUCCESS: + + break; + case DELETE_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case APP_CONTROL_SUCCESS: + NettyEntity nettyEntity1 = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + if (nettyEntity1.getDeviceType().equals(FAN_TAG)) { + if (nettyEntity1.getOpenFlag().equals("1")) { + fanBladeIv.startAnimation(rotateAnimation); + ToastUtil.show(this, "风扇已打开"); + } else { + fanBladeIv.clearAnimation(); + } + } + break; + case QUERY_DEVICE_LASTINFO_SUCCESS: + DeviceStateEntity parseObject = (DeviceStateEntity) msg.obj; + if (parseObject.getData().getOpenFlag().equals("1")) { + fanBladeIv.startAnimation(rotateAnimation); + } else { + fanBladeIv.clearAnimation(); + } + break; + case SHOW_LOCAL_CONTROL: + String obj2 = (String) msg.obj; + if (obj2.equals("1")) { + localControlIv.setVisibility(View.VISIBLE); + } else { + localControlIv.setVisibility(View.GONE); + } + break; + } + } + + private void setIsLearned(StudyEntity entity) { + if (entity.getObj() != null) { + for (int i = 0; i < entity.getObj().size(); i++) { + switch (entity.getObj().get(i)) { + case FAN_OPEN: + openTag = true; + break; + case FAN_SHAKE: + shakeTag = true; + break; + case FAN_WIND: + windTag = true; + break; + case FAN_TIME: + timeTag = true; + break; + case FAN_TYPE: + windTypeTag = true; + break; + } + } + } + } + + @Override + public void onResume() { + super.onResume(); + queryDeviceLastInfo(getIntent().getExtras().get("id").toString(), FAN_TAG); + if (isLearn) { + queryStudyValue(); + } + } + + private void queryDeviceLastInfo(String deviceId, String deviceType) { + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case LEARN_RESULT: + if (data != null && data.getExtras().get("learnGuide") != null) { + int learnGuide = (int) data.getExtras().get("learnGuide"); + switch (learnGuide) { + case 1: + openFanMark.setVisibility(View.VISIBLE); + break; + case 2: + shakeHeadMark.setVisibility(View.VISIBLE); + break; + case 3: + windSpeedMark.setVisibility(View.VISIBLE); + break; + case 4: + timingMark.setVisibility(View.VISIBLE); + break; + case 5: + windTypeMark.setVisibility(View.VISIBLE); + break; + } + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("deviceName") != null) { + fanName = data.getExtras().get("deviceName").toString().trim(); + mTitleView.setHead(fanName); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/light/LightActivity.java b/app/src/main/java/com/yonsz/z1/device/light/LightActivity.java new file mode 100644 index 0000000..0577dc3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/light/LightActivity.java @@ -0,0 +1,809 @@ +package com.yonsz.z1.device.light; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Vibrator; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.LinearLayoutManager; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.LightListEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.VoiceControllEntity; +import com.yonsz.z1.database.entity.VoiceEvent; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.BottomDialog; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.id.ll_sweep_continue_learn; +import static com.yonsz.z1.R.id.tv_light_add; +import static com.yonsz.z1.device.light.LightAdapter.nowPosition; +import static com.yonsz.z1.device.light.LightAdapter.positionTag; +import static com.yonsz.z1.net.Constans.ADDLIGHT_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADDLIGHT_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.DELLIGHT_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.DELLIGHT_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.LIGHT_LEARN_SUCCESS; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.SELECTINFO_BYZI_FAIL; +import static com.yonsz.z1.net.Constans.SELECTINFO_BYZI_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_VOICECONTROLL_INFO_FAIL; +import static com.yonsz.z1.net.Constans.SEND_VOICECONTROLL_INFO_SUCCESS; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHT_ENTITYNAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHT_ENTITYNAME_SUCCESS; + +/** + * Created by Administrator on 2017/9/8. + */ + +public class LightActivity extends BaseActivity { + private TitleView mTitleView; + private SwipeMenuRecyclerView mRecyclerView; + private SwipeRefreshLayout mRefreshLayout; + private LightAdapter mLightAdapter; + private List mdatas; + private boolean isLearn; + private boolean isDelete = false; + private LinearLayout learningLl; + private RelativeLayout lightBottomRl; + private String ziId; + private String userId; + private TextView mAddLight; + private LoadingDialog mLoadingDialog; + private int voicePosition; + private boolean isDeleteAll = false; + /** + * 刷新。 + */ + private SwipeRefreshLayout.OnRefreshListener mRefreshListener = new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + nowPosition = 0; + selectInfoByZi(); + } + }; + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.y76); + + // 1. MATCH_PARENT 自适应高度,保持和Item一样高; + // 2. 指定具体的高,比如80; + // 3. WRAP_CONTENT,自身高度,不推荐; + int height = getResources().getDimensionPixelSize(R.dimen.y76); + // int height = ViewGroup.LayoutParams.MATCH_PARENT; + // 添加右侧的,如果不添加,则右侧不会出现菜单。 + /*{ + SwipeMenuItem deleteItem = new SwipeMenuItem(LightActivity.this) + .setBackground(R.color.z1_ff0000) + .setText("删除") + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + swipeRightMenu.addMenuItem(deleteItem);// 添加菜单到右侧。 + }*/ + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_control); + initView(); + initListener(); + selectInfoByZi(); + } + + @Override + public void onResume() { + super.onResume(); + selectInfoByZi(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + nowPosition = 0; + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(VoiceEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (isDeleteAll) { + + } else { + Message message = new Message(); + message.what = LIGHT_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + String lightStateTag = (String) getIntent().getExtras().get("lightStateTag"); + if (lightStateTag.equals("0")) { + isLearn = true; + } else { + isLearn = false; + } + mAddLight = (TextView) findViewById(tv_light_add); + learningLl = (LinearLayout) findViewById(ll_sweep_continue_learn); + lightBottomRl = (RelativeLayout) findViewById(R.id.rl_bottom); + mTitleView = (TitleView) findViewById(R.id.title_light); + mTitleView.setHead(R.string.light); + mTitleView.clearBackGroud(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (isLearn) { + isLearn = false; + //查询学习按键 + showControl(); + /*mLightAdapter = new LightAdapter(LightActivity.this, mdatas, isLearn); + mRecyclerView.setAdapter(mLightAdapter);*/ + positionTag = false; + mLightAdapter.setIsLearn(false); + mLightAdapter.notifyDataSetChanged(); + } else { + if (nowPosition != 0) { + nowPosition = 0; + } + if (mdatas.size() != 0) { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(LightActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + isDeleteAll = false; + // deleteChildDevice(LIGHT_TAG, ziId); + isDelete = true; + mLightAdapter.setIsDelete(isDelete); + mLightAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntionTxt(R.string.delete); + mTitleView.setHeadFuntionGone(); + mTitleView.setBackTxt(getString(R.string.cancel)); + break; + case 2: + //重新命名 + + break; + case 3: + //语令说明 + Intent intent = new Intent(LightActivity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", LIGHT_TAG); + startActivity(intent); + + break; + case 4: + //遥控学习 + isLearn = true; + positionTag = false; + showLearn(); + mLightAdapter.setIsLearn(true); + mLightAdapter.notifyDataSetChanged(); + break; + } + } + }); + dialog2.setContent(); + dialog2.setLearnTxt(R.string.Add_Light); + dialog2.setSureBtnTxt(R.string.Delete_light); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + } + + @Override + public void onFunctionText() { + + } + }); + if (isLearn) { + showLearn(); + } else { + showControl(); + } + mdatas = new ArrayList<>(); + mLightAdapter = new LightAdapter(this, mdatas, isLearn, isDelete); + /*mRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresh_layout); + mRefreshLayout.setOnRefreshListener(mRefreshListener); // 刷新监听*/ + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_parent_device_list); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setItemViewCacheSize(0);//试图解决复用的问题 + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setSwipeMenuCreator(swipeMenuCreator); + // mRecyclerView.setSwipeMenuItemClickListener(mMenuItemClickListener); + mRecyclerView.setAdapter(mLightAdapter); + // mRecyclerView.setSwipeItemClickListener(this); + + mLightAdapter.setOnItemLightClickListener(new LightAdapter.OnItemLightClickListener() { + @Override + public void onLearnLightClick(int position, int i) { + Intent intent = new Intent(LightActivity.this, LightLearnActivity.class); + intent.putExtra("id", mdatas.get(position).getId()); + intent.putExtra("studyType", i + ""); + startActivity(intent); + } + + @Override + public void onLightOpenCloseClick(int position, int i) { + //控制开关 + switch (i) { + case 0: + setShake(); + //关灯 + initLoadDialog(); + studyAndControllLight(mdatas.get(position).getOffInfrared()); + break; + case 1: + setShake(); + //开灯 + initLoadDialog(); + studyAndControllLight(mdatas.get(position).getOnInfrared()); + break; + } + } + + @Override + public void onVoiceClick(final int position, int voiceControlTag) { + final Handler ThreadHandler = new Handler(); + switch (voiceControlTag) { + case 1: + setShake(); + ConfirmDialog dialog = new ConfirmDialog(LightActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //获取编码,记录当前的位置 + voicePosition = position; + //设置定时器 + ThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + Message message = new Message(); + message.what = LIGHT_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + }, 6000); + allowVoiceControll(1, mdatas.get(position).getId()); + break; + } + } + }); + dialog.setContent("开启语音控制?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + setShake(); + ConfirmDialog dialog1 = new ConfirmDialog(LightActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //获取编码,记录当前的位置 + voicePosition = position; + //设置定时器 + ThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + Message message = new Message(); + message.what = LIGHT_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + }, 6000); + allowVoiceControll(0, mdatas.get(position).getId()); + break; + } + } + }); + dialog1.setContent("关闭语音控制?"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + break; + case 3: + ToastUtil.show(LightActivity.this, "请完成开关键学习"); + break; + case 4: + BottomDialog dialog2 = new BottomDialog(LightActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除 + /*if (mdatas.get(position).getVoiceFlag().equals("1")) { + allowVoiceControll(0, mdatas.get(position).getId()); + }*/ + delLightEntity(position); + mdatas.remove(position); + showLearn(); + if (mdatas.size() != 0) { + nowPosition = mdatas.size() - 1; + } else { + nowPosition = 0; + } + mLightAdapter.notifyDataSetChanged(); + break; + case 2: + //重新命名 + showModifyPop(position, 1); + break; + } + } + }); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + break; + } + } + }); + + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + //获取声控编码 + private void allowVoiceControll(int i, String id) { + /* initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("idInfo", id); + map.put("ziId", ziId); + map.put("controlFlag", String.valueOf(i)); + netWorkUtil.requestPostByAsynew(NetWorkUrl.ALLOW_VOICE_CONTROLL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("allowVoiceControll", "ShareDeviceActivity onSuccess()" + respone); + VoiceControllEntity obj = JSON.parseObject(respone, VoiceControllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void showControl() { + // mTitleView.setHeadFuntionTxt("说明"); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + learningLl.setVisibility(View.GONE); + lightBottomRl.setVisibility(View.GONE); + } + + private void showLearn() { + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionGone(); + if (mdatas != null && mdatas.size() != 0) { + mTitleView.setHeadFuntionTxtColor(true); + } else { + mTitleView.setHeadFuntionTxtColor(false); + } + learningLl.setVisibility(View.GONE); + lightBottomRl.setVisibility(View.VISIBLE); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECTINFO_BYZI_SUCCESS: + // mRefreshLayout.setRefreshing(false); + LightListEntity obj = (LightListEntity) msg.obj; + mdatas.clear(); + if (obj.getObj() != null) { + mdatas.addAll(0, obj.getObj()); + } else { + showLearn(); + mLightAdapter.setIsLearn(true); + mLightAdapter.notifyDataSetChanged(); + } + mLightAdapter.notifyDataSetChanged(); + break; + case ADDLIGHT_ENTITY_SUCCESS: + LightEntity lightEntity = (LightEntity) msg.obj; + mdatas.add(lightEntity.getObj()); + showLearn(); + if (mdatas.size() != 0) { + nowPosition = mdatas.size() - 1; + } else { + nowPosition = 0; + } + DisplayMetrics dm = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(dm); + mRecyclerView.smoothScrollToPosition(dm.DENSITY_HIGH / 9 * 7); + mLightAdapter.notifyDataSetChanged(); + break; + case ADDLIGHT_ENTITY_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_LIGHT_ENTITYNAME_SUCCESS: + LightEntity lightEntity1 = (LightEntity) msg.obj; + int arg1 = msg.arg1; + mdatas.get(arg1).setAddressName(lightEntity1.getObj().getAddressName()); + mLightAdapter.notifyDataSetChanged(); + break; + case ALLOW_VOICE_CONTROLL_SUCCESS: + VoiceControllEntity controllEntity = (VoiceControllEntity) msg.obj; + String sendMsg = controllEntity.getObj().getCodeList().get(0); + sendVoiceControllInfo(sendMsg); + break; + case SEND_VOICECONTROLL_INFO_SUCCESS: + /*LightEntity entity = (LightEntity) msg.obj; + ToastUtil.show(this, entity.getMsg());*/ + break; + case LIGHT_LEARN_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + if (mdatas.get(voicePosition).getVoiceFlag().equals("1")) { + mdatas.get(voicePosition).setVoiceFlag("0"); + ToastUtil.show(LightActivity.this, "关闭语音成功"); + } else { + mdatas.get(voicePosition).setVoiceFlag("1"); + ToastUtil.show(LightActivity.this, "开启语音成功"); + } + mLightAdapter.notifyItemChanged(voicePosition); + } + break; + case STUDY_ANDCONTROLL_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case STUDY_ANDCONTROLL_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + break; + case DELLIGHT_ENTITY_SUCCESS: + selectInfoByZi(); + VoiceControllEntity controllEntity2 = (VoiceControllEntity) msg.obj; + if (controllEntity2 != null && controllEntity2.getObj() != null) { + if (controllEntity2.getObj().getVoiceFlag().equals("1")) { + String sendMsg2 = controllEntity2.getObj().getCodeList().get(0); + sendVoiceControllInfo(sendMsg2); + } + } + break; + case DELETE_CHILDDEVICE_SUCCESS: + + break; + } + } + + //声控灯的开启和关闭 + private void sendVoiceControllInfo(String sendMsg) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("sendMsg", sendMsg); + map.put("userId", userId); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_VOICECONTROLL_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sendVoiceControllInfo", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_VOICECONTROLL_INFO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEND_VOICECONTROLL_INFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_VOICECONTROLL_INFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void selectInfoByZi() { + + } + + private void initListener() { + mAddLight.setOnClickListener(this); + learningLl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case tv_light_add: + showModifyPop(0, 0); + break; + case ll_sweep_continue_learn: + isLearn = true; + positionTag = false; + showLearn(); + /*mLightAdapter = new LightAdapter(LightActivity.this, mdatas, isLearn); + mRecyclerView.setAdapter(mLightAdapter);*/ + mLightAdapter.setIsLearn(true); + mLightAdapter.notifyDataSetChanged(); + break; + } + } + + private void studyAndControllLight(String infrared) { + /* if (DensityUtil.isNetworkConnected(this)) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("sendMsg", infrared); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + util.requestPostByAsyn(ziId, NetWorkUrl.STUDY_ANDCONTROLL_LIGHT, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("studyAndControllLight", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } else { + ToastUtil.show(this, R.string.net_error); + }*/ + } + + public void showModifyPop(final int adapterPosition, final int i) { + RenameNameDialog dialog = new RenameNameDialog(LightActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + if (i == 0) { + addLightEntity(positioName); + } else { + updateLightEntityName(positioName, mdatas.get(adapterPosition).getId(), adapterPosition); + } + break; + } + } + }); + dialog.setMaxEms(4); + if (i == 0) { + dialog.setContent("所添加的灯位置进行命名"); + } else { + dialog.setOldName(mdatas.get(adapterPosition).getAddressName()); + dialog.setContent("要修改的灯的名称"); + } + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void updateLightEntityName(String positioName, String id, final int adapterPosition) { + /* if (TextUtils.isEmpty(positioName)) { + ToastUtil.show(LightActivity.this, "位置不能为空"); + return; + } + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", id); + map.put("addressName", positioName.trim()); + netWorkUtil.requestPostByAsynew(NetWorkUrl.UPDATE_LIGHT_ENTITYNAME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateLightEntityName", "ShareDeviceActivity onSuccess()" + respone); + LightEntity obj = JSON.parseObject(respone, LightEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_LIGHT_ENTITYNAME_SUCCESS); + msg.obj = obj; + msg.arg1 = adapterPosition; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_LIGHT_ENTITYNAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_LIGHT_ENTITYNAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void delLightEntity(int adapterPosition) { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", mdatas.get(adapterPosition).getId()); + map.put("deviceType", LIGHT_TAG); + netWorkUtil.requestPostByAsynew(NetWorkUrl.DELLIGHT_ENTITY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("delLightEntity", "ShareDeviceActivity onSuccess()" + respone); + VoiceControllEntity obj = JSON.parseObject(respone, VoiceControllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELLIGHT_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DELLIGHT_ENTITY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DELLIGHT_ENTITY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void addLightEntity(String positioName) { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + if (!TextUtils.isEmpty(positioName)) { + map.put("addressName", positioName.trim()); + } else { + map.put("addressName", getString(R.string.keting)); + } + netWorkUtil.requestPostByAsynew(NetWorkUrl.ADDLIGHT_ENTITY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addLightEntity", "ShareDeviceActivity onSuccess()" + respone); + LightEntity obj = JSON.parseObject(respone, LightEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADDLIGHT_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADDLIGHT_ENTITY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADDLIGHT_ENTITY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + +} diff --git a/app/src/main/java/com/yonsz/z1/device/light/LightAdapter.java b/app/src/main/java/com/yonsz/z1/device/light/LightAdapter.java new file mode 100644 index 0000000..8347d0f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/light/LightAdapter.java @@ -0,0 +1,317 @@ +package com.yonsz.z1.device.light; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; + +import java.util.List; + +import static com.yonsz.z1.R.id.cb_light_room; + +/** + * Created by Administrator on 2017/9/8. + */ +public class LightAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mObjEntity; + private boolean isLearn; + private boolean isDelete; + private AlphaAnimation mAlphaAnimation; + private OnItemLightClickListener mLightClickListener; + private int voiceControlTag = 0; + public static boolean positionTag = false; + public static int nowPosition = -1; + + public LightAdapter(Context mContext, List mObjEntity, boolean isLearn, boolean isDelete) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + this.isLearn = isLearn; + mAlphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(mContext, R.anim.alpha_anim_device); + } + + public void setIsLearn(boolean isLearn1) { + isLearn = isLearn1; + } + + public void setIsDelete(boolean isDelete1) { + isDelete = isDelete1; + } + + @Override + public LightAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(LightAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView lightRoom; + private CheckBox mCheckBoxRoom; + private TextView mLightOpen, mLightClose; + private TextView mLightOpenBg, mLightCloseBg; + private ImageView mLightOpenMark, mLightCloseMark; + private TextView lightEdit; + private TextView tv_light_position_bg; + private CheckBox deleteCb; + + + public MessageViewHolder(View view) { + super(view); + lightRoom = (TextView) itemView.findViewById(R.id.tv_light_room); + lightEdit = (TextView) itemView.findViewById(R.id.tv_light_edit); + mCheckBoxRoom = (CheckBox) itemView.findViewById(cb_light_room); + mCheckBoxRoom.setClickable(false); + + mLightOpen = (TextView) itemView.findViewById(R.id.tv_light_open); + mLightOpenBg = (TextView) itemView.findViewById(R.id.tv_light_open_bg); + mLightOpenMark = (ImageView) itemView.findViewById(R.id.tv_light_open_mark); + mLightClose = (TextView) itemView.findViewById(R.id.tv_light_close); + mLightCloseBg = (TextView) itemView.findViewById(R.id.tv_light_close_bg); + tv_light_position_bg = (TextView) itemView.findViewById(R.id.tv_light_position_bg); + mLightCloseMark = (ImageView) itemView.findViewById(R.id.tv_light_close_mark); + deleteCb = (CheckBox) itemView.findViewById(R.id.cb_delete); + } + + public void setViews(final int position) { + final LightDetaiEntity detaiEntity = mObjEntity.get(position); + if (isDelete) { + deleteCb.setVisibility(View.VISIBLE); + } else { + deleteCb.setVisibility(View.GONE); + } + if (detaiEntity.getAddressName() != null) { + lightRoom.setText(detaiEntity.getAddressName()); + mCheckBoxRoom.setText(detaiEntity.getAddressName().substring(0, 1)); + } + if (isLearn) { + detaiEntity.setVoiceControlTag(4); + lightEdit.setBackground(mContext.getResources().getDrawable(R.drawable.icon_learn_modify)); + mCheckBoxRoom.setChecked(false); + mCheckBoxRoom.setTextColor(0xffffffff); + mLightClose.setEnabled(true); + mLightClose.setAlpha(1.0f); + mLightOpen.setEnabled(true); + mLightOpen.setAlpha(1.0f); + mLightOpenBg.setVisibility(View.GONE); + mLightCloseBg.setVisibility(View.GONE); + //positionTag nowPosition + if (nowPosition != -1 && (!detaiEntity.getOnFlag().equals("1") || !detaiEntity.getOffFlag().equals("1"))) { + if (position == nowPosition) { + boolean AlphaTag; + if (detaiEntity.getOnFlag().equals("1")) { + mLightOpenMark.setVisibility(View.VISIBLE); + AlphaTag = true; + } else { + mLightOpenMark.setVisibility(View.GONE); + mLightOpenBg.setVisibility(View.VISIBLE); + mLightOpenBg.startAnimation(mAlphaAnimation); + detaiEntity.setOpenBlingBling(true); + AlphaTag = false; + } + if (detaiEntity.getOffFlag().equals("1")) { + mLightCloseMark.setVisibility(View.VISIBLE); + } else { + mLightCloseMark.setVisibility(View.GONE); + if (AlphaTag) { + mLightCloseBg.setVisibility(View.VISIBLE); + mLightCloseBg.startAnimation(mAlphaAnimation); + detaiEntity.setCloseBlingBling(true); + } + } + } + } else { + if (nowPosition != -1 && nowPosition == position && detaiEntity.getOnFlag().equals("1") && detaiEntity.getOffFlag().equals("1")) { + positionTag = false; + nowPosition = -1; + } + if (positionTag) { + if (detaiEntity.getOnFlag().equals("1")) { + mLightOpenMark.setVisibility(View.VISIBLE); + } else { + mLightOpenMark.setVisibility(View.GONE); + } + if (detaiEntity.getOffFlag().equals("1")) { + mLightCloseMark.setVisibility(View.VISIBLE); + } else { + mLightCloseMark.setVisibility(View.GONE); + } + } else { + boolean AlphaTag; + if (detaiEntity.getOnFlag().equals("1")) { + mLightOpenMark.setVisibility(View.VISIBLE); + AlphaTag = true; + } else { + mLightOpenMark.setVisibility(View.GONE); + mLightOpenBg.setVisibility(View.VISIBLE); + mLightOpenBg.startAnimation(mAlphaAnimation); + nowPosition = position; + detaiEntity.setOpenBlingBling(true); + AlphaTag = false; + positionTag = true; + } + if (detaiEntity.getOffFlag().equals("1")) { + mLightCloseMark.setVisibility(View.VISIBLE); + } else { + mLightCloseMark.setVisibility(View.GONE); + if (AlphaTag) { + mLightCloseBg.setVisibility(View.VISIBLE); + mLightCloseBg.startAnimation(mAlphaAnimation); + nowPosition = position; + detaiEntity.setCloseBlingBling(true); + positionTag = true; + } + } + } + } + if (mObjEntity.size() == 1 && position == 0) { + boolean AlphaTag; + if (detaiEntity.getOnFlag().equals("1")) { + mLightOpenMark.setVisibility(View.VISIBLE); + AlphaTag = true; + } else { + mLightOpenMark.setVisibility(View.GONE); + mLightOpenBg.setVisibility(View.VISIBLE); + mLightOpenBg.startAnimation(mAlphaAnimation); + detaiEntity.setOpenBlingBling(true); + AlphaTag = false; + positionTag = true; + } + if (detaiEntity.getOffFlag().equals("1")) { + mLightCloseMark.setVisibility(View.VISIBLE); + } else { + mLightCloseMark.setVisibility(View.GONE); + if (AlphaTag) { + mLightCloseBg.setVisibility(View.VISIBLE); + mLightCloseBg.startAnimation(mAlphaAnimation); + positionTag = true; + } + } + } + + if (detaiEntity.getOffFlag().equals("1")) { + mLightCloseMark.setVisibility(View.VISIBLE); + } else { + mLightCloseMark.setVisibility(View.GONE); + } + if (detaiEntity.getOnFlag().equals("1")) { + mLightOpenMark.setVisibility(View.VISIBLE); + } else { + mLightOpenMark.setVisibility(View.GONE); + } + } else { + //声控的状态 + if (detaiEntity.getVoiceFlag() != null && detaiEntity.getVoiceFlag().equals("1")) { + detaiEntity.setVoiceControlTag(2); + lightEdit.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_on)); + } else if (detaiEntity.getVoiceFlag() != null && detaiEntity.getOffFlag().equals("1") && detaiEntity.getOnFlag().equals("1")) { + detaiEntity.setVoiceControlTag(1); + lightEdit.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_off)); + } else { + detaiEntity.setVoiceControlTag(3); + lightEdit.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_unor)); + } + mLightOpenBg.setVisibility(View.GONE); + mLightCloseBg.setVisibility(View.GONE); + mLightCloseMark.setVisibility(View.GONE); + mLightOpenMark.setVisibility(View.GONE); + //开关的状态 + if (detaiEntity.getOffFlag().equals("1")) { + mLightClose.setAlpha(1.0f); + mLightClose.setEnabled(true); + } else { + mLightClose.setAlpha(0.5f); + mLightClose.setEnabled(false); + } + if (detaiEntity.getOnFlag().equals("1")) { + mLightOpen.setAlpha(1.0f); + mLightOpen.setEnabled(true); + } else { + mLightOpen.setAlpha(0.5f); + mLightOpen.setEnabled(false); + } + } + mLightOpen.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (!isLearn) { + mCheckBoxRoom.setChecked(true); + mCheckBoxRoom.setTextColor(0xfff7ac00); + tv_light_position_bg.setBackground(mContext.getResources().getDrawable(R.drawable.icon_light01_on)); + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } else { + nowPosition = position; + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1); + } + } + } + }); + mLightClose.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!isLearn) { + mCheckBoxRoom.setChecked(false); + mCheckBoxRoom.setTextColor(0xffffffff); + tv_light_position_bg.setBackground(mContext.getResources().getDrawable(R.drawable.icon_light01)); + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } + } else { + nowPosition = position; + positionTag = false; + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0); + } + } + } + }); + lightEdit.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, detaiEntity.getVoiceControlTag()); + } + } + }); + + } + } + + + public void setOnItemLightClickListener(OnItemLightClickListener listener) { + this.mLightClickListener = listener; + } + + public interface OnItemLightClickListener { + + public void onLearnLightClick(int position, int i); + + public void onLightOpenCloseClick(int position, int i); + + public void onVoiceClick(int position, int voiceControlTag); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/light/LightLearnActivity.java b/app/src/main/java/com/yonsz/z1/device/light/LightLearnActivity.java new file mode 100644 index 0000000..196700f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/light/LightLearnActivity.java @@ -0,0 +1,168 @@ +package com.yonsz.z1.device.light; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.SAVELIGHT_STUDYINFO_FAIL; +import static com.yonsz.z1.net.Constans.SAVELIGHT_STUDYINFO_SUCCESS; + +/** + * Created by Administrator on 2017/9/11. + */ +public class LightLearnActivity extends BaseActivity { + private TitleView mTitleViewl; + private Button nextConfig; + private CheckBox selectUnnorReveal; + private String studyType; + private ImageView iv_bg; + private MediaPlayer mediaPlayer01; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_learn); + initView(); + } + + private void initView() { + studyType = getIntent().getExtras().get("studyType").toString(); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + iv_bg = (ImageView) findViewById(R.id.iv_bg); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + saveLightStudyInfo(); + } + }); + mTitleViewl = (TitleView) findViewById(R.id.title_light_learn); + mTitleViewl.setHead(R.string.learn_guide); + mTitleViewl.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + selectUnnorReveal.setOnClickListener(this); + /* if (studyType.equals("1")) { + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.light_open); + mediaPlayer01.start(); + } + } else { + iv_bg.setImageDrawable(getResources().getDrawable(R.drawable.pic_light_learn02)); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.light_close); + mediaPlayer01.start(); + } + }*/ + } + + private void saveLightStudyInfo() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", getIntent().getExtras().get("id").toString()); + map.put("studyType", studyType); + netWorkUtil.requestPostByAsynew(NetWorkUrl.SAVELIGHT_STUDYINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("saveLightStudyInfo", "ShareDeviceActivity onSuccess()" + respone); + LightEntity obj = JSON.parseObject(respone, LightEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SAVELIGHT_STUDYINFO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SAVELIGHT_STUDYINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SAVELIGHT_STUDYINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + } else { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SAVELIGHT_STUDYINFO_SUCCESS: + LightEntity obj = (LightEntity) msg.obj; + Intent intent = new Intent(LightLearnActivity.this, SureLightLearnActivity.class); + if (studyType.equals("1")) { + intent.putExtra("onInfrared", obj.getObj().getOnInfrared()); + } else { + intent.putExtra("offInfrared", obj.getObj().getOffInfrared()); + } + intent.putExtra("ziId", obj.getObj().getZiId()); + intent.putExtra("id", obj.getObj().getId()); + intent.putExtra("studyType", studyType); + startActivity(intent); + finish(); + break; + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/light/LightLearnFailActivity.java b/app/src/main/java/com/yonsz/z1/device/light/LightLearnFailActivity.java new file mode 100644 index 0000000..89c01a3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/light/LightLearnFailActivity.java @@ -0,0 +1,81 @@ +package com.yonsz.z1.device.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import de.greenrobot.event.EventBus; + +/** + * Created by Administrator on 2017/9/11. + */ +public class LightLearnFailActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_sure_fail; + private String studyType; + private ImageView iv_bg; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_learn_fail); + initView(); + } + + private void initView() { + studyType = getIntent().getExtras().get("studyType").toString(); + iv_bg = (ImageView) findViewById(R.id.iv_bg); + bt_sure_fail = (Button) findViewById(R.id.bt_sure_fail); + mTitleView = (TitleView) findViewById(R.id.title_sure_light_fail); + mTitleView.setHead("学习注意事项"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (studyType.equals("1")) { + + } else { + iv_bg.setImageDrawable(getResources().getDrawable(R.drawable.pic_light_learn04)); + } + + bt_sure_fail.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(LightLearnFailActivity.this, LightLearnActivity.class); + intent.putExtra("id", getIntent().getExtras().get("id").toString()); + intent.putExtra("studyType", getIntent().getExtras().get("studyType").toString()); + startActivity(intent); + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/light/SureLightLearnActivity.java b/app/src/main/java/com/yonsz/z1/device/light/SureLightLearnActivity.java new file mode 100644 index 0000000..6013d7c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/light/SureLightLearnActivity.java @@ -0,0 +1,220 @@ +package com.yonsz.z1.device.light; + +import android.app.Service; +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_STUDYFLAG_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_STUDYFLAG_SUCCESS; + +/** + * Created by Administrator on 2017/9/11. + */ +public class SureLightLearnActivity extends BaseActivity { + private TitleView mTitleView; + private TextView openLight, openLightBelow, guide1Tv, guide2Tv, guide3Tv; + private TextView noUse; + private Button sureBtn; + private String ziId; + private String studyType; + private MediaPlayer mediaPlayer01; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sure_light_learn); + initView(); + initListener(); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + + private void initView() { + studyType = getIntent().getExtras().get("studyType").toString(); + ziId = (String) getIntent().getExtras().get("ziId"); + openLight = (TextView) findViewById(R.id.tv_open_light); + openLightBelow = (TextView) findViewById(R.id.tv_open_light_below); + guide1Tv = (TextView) findViewById(R.id.tv_guide1); + guide2Tv = (TextView) findViewById(R.id.tv_guide2); + guide3Tv = (TextView) findViewById(R.id.tv_guide3); + noUse = (TextView) findViewById(R.id.tv_no_use); + sureBtn = (Button) findViewById(R.id.bt_sure_config); + mTitleView = (TitleView) findViewById(R.id.title_sure_light); + mTitleView.setHead(R.string.learn_guide); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + studyAndControllLight(); + } + + private void initListener() { + openLight.setOnClickListener(this); + noUse.setOnClickListener(this); + sureBtn.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_open_light: + setShake(); + studyAndControllLight(); + break; + case R.id.tv_no_use: + Intent intent = new Intent(SureLightLearnActivity.this, LightLearnFailActivity.class); + intent.putExtra("id", getIntent().getExtras().get("id").toString()); + intent.putExtra("studyType", studyType); + startActivity(intent); + finish(); + break; + case R.id.bt_sure_config: + updateStudyFlag(); + break; + } + } + + private void updateStudyFlag() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (studyType.equals("1")) { + map.put("studyFlag", "1"); + } else { + map.put("studyFlag", "0"); + } + map.put("id", getIntent().getExtras().get("id").toString()); + netWorkUtil.requestPostByAsynew(NetWorkUrl.UPDATE_STUDYFLAG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateStudyFlag", "ShareDeviceActivity onSuccess()" + respone); + LightEntity obj = JSON.parseObject(respone, LightEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_STUDYFLAG_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_STUDYFLAG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_STUDYFLAG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void studyAndControllLight() { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (studyType.equals("1")) { + map.put("sendMsg", getIntent().getExtras().get("onInfrared").toString()); + } else { + map.put("sendMsg", getIntent().getExtras().get("offInfrared").toString()); + } + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + util.requestPostByAsyn(ziId, NetWorkUrl.STUDY_ANDCONTROLL_LIGHT, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("studyAndControllLight", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case STUDY_ANDCONTROLL_SUCCESS: + + break; + case UPDATE_STUDYFLAG_SUCCESS: + finish(); + break; + case UPDATE_STUDYFLAG_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/sweep/SweepActivity.java b/app/src/main/java/com/yonsz/z1/device/sweep/SweepActivity.java new file mode 100644 index 0000000..88df76d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/sweep/SweepActivity.java @@ -0,0 +1,1016 @@ +package com.yonsz.z1.device.sweep; + +import android.app.Service; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.StudyEntity; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.DeviceStateEntity; +import com.yonsz.z1.database.entity.entity4.LocalControlEvent; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.device.tv.FanItem; +import com.yonsz.z1.device.tv.OnFanItemClickListener; +import com.yonsz.z1.device.tv.PieChartView; +import com.yonsz.z1.device.tv.SweepListActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.utils.ConnectNettyUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.view.TitleView; + + +import static com.yonsz.z1.R.id.ll_sweep_continue_learn; +import static com.yonsz.z1.device.tv.PieChartView.isLongClickModule1; +import static com.yonsz.z1.net.Constans.APP_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.LEARN_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SHOW_LOCAL_CONTROL; +import static com.yonsz.z1.net.Constans.SWEEP_ALONG; +import static com.yonsz.z1.net.Constans.SWEEP_DOWN; +import static com.yonsz.z1.net.Constans.SWEEP_LEFT; +import static com.yonsz.z1.net.Constans.SWEEP_OK; +import static com.yonsz.z1.net.Constans.SWEEP_OPEN; +import static com.yonsz.z1.net.Constans.SWEEP_RIGHT; +import static com.yonsz.z1.net.Constans.SWEEP_STRONG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_UP; +import static com.yonsz.z1.net.Constans.isLocalControl; + +/** + * Created by Administrator on 2017/9/7. + */ + +public class SweepActivity extends BaseActivity { + public int mId; + private TitleView mTitleView; + private PieChartView chartView; + private TextView mDown, mLeft, mUp, mRight; + private String userId; + private String ziId; + private AlphaAnimation mAlphaAnimation; + private boolean isLearn; + private TextView learnInstruction, learnComplete; + private LinearLayout learningLl, sweepContinueLearnLl; + private TextView mOpenClose, mAlong, mOk, mStrong; + private TextView mOpenCloseBg, mAlongBg, mOkBg, mStrongBg; + private ImageView mOpenCloseMark, mAlongMark, mOkMark, mStrongMark, mDownMark, mLeftMark, mUpMark, mRightMark; + private boolean mOpenCloseTag, mOkTag, mDownTag, mLeftTag, mUpTag, mRightTag, mStrongTag, mAlongTag; + private String sweepName; + private String deviceIp = ""; + private ImageView localControlIv, greenCircle; + + public void onEventMainThread(AppControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = APP_CONTROL_SUCCESS; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LocalControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = SHOW_LOCAL_CONTROL; + message.obj = msg; + mHandler.sendMessage(message); + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sweep_control); + initView(); + initListener(); + } + + + private void initView() { + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + String sweepStateTag = (String) getIntent().getExtras().get("sweepStateTag"); + if (sweepStateTag.equals("0")) { + isLearn = true; + } else { + isLearn = false; + } + localControlIv = (ImageView) findViewById(R.id.iv_local_control); + greenCircle = (ImageView) findViewById(R.id.iv_online_green_circle); + learnInstruction = (TextView) findViewById(R.id.tv_learn_instruction); + learnComplete = (TextView) findViewById(R.id.tv_learn_complete); + learningLl = (LinearLayout) findViewById(R.id.ll_learning); + sweepContinueLearnLl = (LinearLayout) findViewById(ll_sweep_continue_learn); + + mDown = (TextView) findViewById(R.id.iv_down); + mLeft = (TextView) findViewById(R.id.iv_left); + mUp = (TextView) findViewById(R.id.iv_up); + mRight = (TextView) findViewById(R.id.iv_right); + mOpenClose = (TextView) findViewById(R.id.tv_sweep_open); + mOk = (TextView) findViewById(R.id.tv_sweep_ok); + mAlong = (TextView) findViewById(R.id.tv_along); + mStrong = (TextView) findViewById(R.id.tv_strong); + + mOpenCloseBg = (TextView) findViewById(R.id.tv_sweep_open_bg); + mOkBg = (TextView) findViewById(R.id.tv_sweep_ok_bg); + mAlongBg = (TextView) findViewById(R.id.tv_along_bg); + mStrongBg = (TextView) findViewById(R.id.tv_strong_bg); + + mDownMark = (ImageView) findViewById(R.id.iv_down_bg); + mLeftMark = (ImageView) findViewById(R.id.iv_left_bg); + mUpMark = (ImageView) findViewById(R.id.iv_up_bg); + mRightMark = (ImageView) findViewById(R.id.iv_right_bg); + mOpenCloseMark = (ImageView) findViewById(R.id.tv_sweep_open_mark); + mOkMark = (ImageView) findViewById(R.id.tv_sweep_ok_mark); + mAlongMark = (ImageView) findViewById(R.id.tv_along_mark); + mStrongMark = (ImageView) findViewById(R.id.tv_strong_mark); + + chartView = (PieChartView) findViewById(R.id.pieChartView); + chartView.setFanClickAbleData( + new double[]{90, 90, 90, 90}, + new int[]{Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT}, 0, mHandler); + + setPanClick(); + + mTitleView = (TitleView) findViewById(R.id.title_sweep); + if (TextUtils.isEmpty(getIntent().getExtras().get("sweepName").toString())) { + sweepName = "扫地机"; + } else { + sweepName = getIntent().getExtras().get("sweepName").toString(); + } + mTitleView.setHead(sweepName); + mTitleView.clearBackGroud(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + clearAlph(); + clearMark(); + if (isLearn) { + isLearn = false; + //查询学习按键 + queryStudyValue(); + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(SweepActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除扫地机 + ConfirmDialog dialog = new ConfirmDialog(SweepActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + deleteChildDevice(SWEEP_TAG, ziId); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + //重新命名 + Intent intent1 = new Intent(SweepActivity.this, SweepListActivity.class); + intent1.putExtra("ziId", ziId); + intent1.putExtra("nameTag", "name"); + intent1.putExtra("id", getIntent().getExtras().get("id").toString()); + intent1.putExtra("deviceType", SWEEP_TAG); + startActivityForResult(intent1, MODIFY_DEVICE_NAME); + break; + case 3: + //语令说明 + Intent intent = new Intent(SweepActivity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", SWEEP_TAG); + startActivity(intent); + break; + case 4: + //遥控学习 + isLearn = true; + //查询学习按键 + queryStudyValue(); + break; + } + } + }); + dialog2.setContent(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + + @Override + public void onFunctionText() { + + } + }); + mAlphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(SweepActivity.this, R.anim.alpha_anim_device); + if (isLearn) { + showLearn(); + } else { + showControl(); + } + //查询学习按键 + queryStudyValue(); + ConnectNettyUtil.connectNetty(ziId, deviceIp, this); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (isLocalControl) { + NettyManager.closeCtx(); + } + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + private void clearMark() { + learnComplete.setVisibility(View.GONE); + mOpenCloseMark.setVisibility(View.GONE); + mUpMark.setVisibility(View.GONE); + mDownMark.setVisibility(View.GONE); + mLeftMark.setVisibility(View.GONE); + mRightMark.setVisibility(View.GONE); + mOkMark.setVisibility(View.GONE); + mStrongMark.setVisibility(View.GONE); + mAlongMark.setVisibility(View.GONE); + } + + private void clearAlph() { + mAlongBg.clearAnimation(); + mStrongBg.clearAnimation(); + mOkBg.clearAnimation(); + mRight.clearAnimation(); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + } + + private void showControl() { + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + // mTitleView.setHeadFuntionTxt(R.string.voice_said); + learningLl.setVisibility(View.GONE); + sweepContinueLearnLl.setVisibility(View.GONE); + controlShowAlph(); + } + + private void controlShowAlph() { + if (!mOpenCloseTag) { + mOpenClose.setAlpha(0.5f); + mOpenClose.setEnabled(false); + } else { + mOpenClose.setAlpha(1.0f); + mOpenClose.setEnabled(true); + } + if (!mAlongTag) { + mAlong.setAlpha(0.5f); + mAlong.setEnabled(false); + } else { + mAlong.setAlpha(1.0f); + mAlong.setEnabled(true); + } + if (!mOkTag) { + mOk.setAlpha(0.5f); + mOk.setEnabled(false); + } else { + mOk.setAlpha(1.0f); + mOk.setEnabled(true); + } + if (!mStrongTag) { + mStrong.setAlpha(0.5f); + mStrong.setEnabled(false); + } else { + mStrong.setAlpha(1.0f); + mStrong.setEnabled(true); + } + } + + private void showLearn() { + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setHeadFuntionGone(); + learnComplete.setVisibility(View.GONE); + learningLl.setVisibility(View.VISIBLE); + sweepContinueLearnLl.setVisibility(View.GONE); + setLearnAlph(); + learnShowMark(); + + if (!mOpenCloseTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText(R.string.Switch); + mOpenCloseBg.startAnimation(mAlphaAnimation); + } else if (!mUpTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("向上"); + mUp.startAnimation(mAlphaAnimation); + mOpenCloseBg.clearAnimation(); + } else if (!mDownTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("向下"); + mDown.startAnimation(mAlphaAnimation); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + } else if (!mLeftTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("向左"); + mLeft.startAnimation(mAlphaAnimation); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + } else if (!mRightTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("向右"); + mRight.startAnimation(mAlphaAnimation); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + } else if (!mOkTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("回充"); + mOkBg.startAnimation(mAlphaAnimation); + mRight.clearAnimation(); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + } else if (!mAlongTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText(R.string.Edgeways_mode); + mAlongBg.startAnimation(mAlphaAnimation); + mOkBg.clearAnimation(); + mRight.clearAnimation(); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + } else if (!mStrongTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText(R.string.Strong_mode); + mStrongBg.startAnimation(mAlphaAnimation); + mOkBg.clearAnimation(); + mRight.clearAnimation(); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mAlongBg.clearAnimation(); + mOpenCloseBg.clearAnimation(); + } else { + learningLl.setVisibility(View.GONE); + learnComplete.setVisibility(View.VISIBLE); + clearAlph(); + } + } + + private void setLearnAlph() { + mOpenClose.setAlpha(1.0f); + mOpenClose.setEnabled(true); + mAlong.setAlpha(1.0f); + mAlong.setEnabled(true); + mOk.setAlpha(1.0f); + mOk.setEnabled(true); + mStrong.setAlpha(1.0f); + mStrong.setEnabled(true); + } + + private void learnShowMark() { + if (mOpenCloseTag) { + mOpenCloseMark.setVisibility(View.VISIBLE); + } + if (mAlongTag) { + mAlongMark.setVisibility(View.VISIBLE); + } + if (mOkTag) { + mOkMark.setVisibility(View.VISIBLE); + } + if (mStrongTag) { + mStrongMark.setVisibility(View.VISIBLE); + } + if (mDownTag) { + mDownMark.setVisibility(View.VISIBLE); + } + if (mLeftTag) { + mLeftMark.setVisibility(View.VISIBLE); + } + if (mUpTag) { + mUpMark.setVisibility(View.VISIBLE); + } + if (mRightTag) { + mRightMark.setVisibility(View.VISIBLE); + } + } + + private void queryStudyValue() { + + } + + private void initListener() { + mOpenClose.setOnClickListener(this); + mOk.setOnClickListener(this); + mStrong.setOnClickListener(this); + mAlong.setOnClickListener(this); + sweepContinueLearnLl.setOnClickListener(this); + } + + private void setPanClick() { + chartView.setOnFanClick(new OnFanItemClickListener() { + @Override + public void onFanClick(FanItem fanItem) { + mId = fanItem.getId(); + Intent intent; + if (isLearn) { + switch (mId) { + case 0: + mDown.setVisibility(View.VISIBLE); + intent = new Intent(SweepActivity.this, SweepLearnGuideActivity.class); + intent.putExtra("learnGuide", 3); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case 1: + mLeft.setVisibility(View.VISIBLE); + intent = new Intent(SweepActivity.this, SweepLearnGuideActivity.class); + intent.putExtra("learnGuide", 4); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case 2: + mUp.setVisibility(View.VISIBLE); + intent = new Intent(SweepActivity.this, SweepLearnGuideActivity.class); + intent.putExtra("learnGuide", 2); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case 3: + mRight.setVisibility(View.VISIBLE); + intent = new Intent(SweepActivity.this, SweepLearnGuideActivity.class); + intent.putExtra("learnGuide", 5); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + } + } else { + Log.i("OnTouchListener", "点击---处理" + mId); + switch (mId) { + case 0: + if (!mDownTag) { + mDown.setClickable(false); + mDown.setEnabled(false); + } else { + mDown.setEnabled(true); + mDown.setVisibility(View.VISIBLE); + } + break; + case 1: + if (!mLeftTag) { + mLeft.setEnabled(false); + } else { + mLeft.setEnabled(true); + mLeft.setVisibility(View.VISIBLE); + } + break; + case 2: + if (!mUpTag) { + mUp.setEnabled(false); + } else { + mUp.setEnabled(true); + mUp.setVisibility(View.VISIBLE); + } + break; + case 3: + if (!mRightTag) { + mRight.setEnabled(false); + } else { + mRight.setEnabled(true); + mRight.setVisibility(View.VISIBLE); + } + break; + } + } + } + + @Override + public void onFanLongClick(FanItem fanItem) { + mId = fanItem.getId(); + if (isLearn) { + + } else { + if (isLongClickModule1) { + Log.i("OnTouchListener", "处理长按---处理" + mId); + switch (mId) { + case 0: + if (!mDownTag) { + mDown.setClickable(false); + mDown.setEnabled(false); + } else { + mDown.setEnabled(true); + mDown.setVisibility(View.VISIBLE); + longPressSao(SWEEP_DOWN); + } + break; + case 1: + if (!mLeftTag) { + mLeft.setEnabled(false); + } else { + mLeft.setEnabled(true); + mLeft.setVisibility(View.VISIBLE); + longPressSao(SWEEP_LEFT); + } + break; + case 2: + if (!mUpTag) { + mUp.setEnabled(false); + } else { + mUp.setEnabled(true); + mUp.setVisibility(View.VISIBLE); + longPressSao(SWEEP_UP); + } + break; + case 3: + if (!mRightTag) { + mRight.setEnabled(false); + } else { + mRight.setEnabled(true); + mRight.setVisibility(View.VISIBLE); + longPressSao(SWEEP_RIGHT); + } + break; + } + } + } + } + + @Override + public void onUp(FanItem fanItem) { + mId = fanItem.getId(); + if (isLearn) { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + switch (mId) { + case 0: + mDown.setVisibility(View.INVISIBLE); + break; + case 1: + mLeft.setVisibility(View.INVISIBLE); + break; + case 2: + mUp.setVisibility(View.INVISIBLE); + break; + case 3: + mRight.setVisibility(View.INVISIBLE); + break; + } + } + }, 200); + } else { + if (isLongClickModule1) { + Log.i("OnTouchListener", "处理长按---处理抬起" + mId); + switch (mId) { + case 0: + mDown.setVisibility(View.INVISIBLE); + cancleLongPress(SWEEP_DOWN); + break; + case 1: + mLeft.setVisibility(View.INVISIBLE); + cancleLongPress(SWEEP_LEFT); + break; + case 2: + mUp.setVisibility(View.INVISIBLE); + cancleLongPress(SWEEP_UP); + break; + case 3: + mRight.setVisibility(View.INVISIBLE); + cancleLongPress(SWEEP_RIGHT); + break; + } + } else { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Log.i("OnTouchListener", "点击---处理抬起" + mId); + switch (mId) { + case 0: + if (mDownTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_DOWN)); + } else + sendAirControlOrder(SWEEP_DOWN); + } + mDown.setVisibility(View.INVISIBLE); + break; + case 1: + if (mLeftTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_LEFT)); + } else + sendAirControlOrder(SWEEP_LEFT); + } + mLeft.setVisibility(View.INVISIBLE); + break; + case 2: + if (mUpTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_UP)); + } else + sendAirControlOrder(SWEEP_UP); + } + mUp.setVisibility(View.INVISIBLE); + break; + case 3: + if (mRightTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_RIGHT)); + } else + sendAirControlOrder(SWEEP_RIGHT); + } + mRight.setVisibility(View.INVISIBLE); + break; + } + } + }, 200); + } + } + } + }); + } + + private void cancleLongPress(String sendMsg) { + + } + + + private void longPressSao(String sendMsg) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("code", sendMsg); + map.put("macId", ziId); + util.requestPostByAsynewApi(NetWorkUrl.LONGPRESS_SAO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("longPressTv", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(LONGPRESS_SAO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(LONGPRESS_SAO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(LONGPRESS_SAO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void onClick(View v) { + Intent intent; + if (isLearn) { + switch (v.getId()) { + case R.id.tv_sweep_open: + intent = new Intent(SweepActivity.this, SweepLearnGuideActivity.class); + intent.putExtra("learnGuide", 1); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_sweep_ok: + intent = new Intent(SweepActivity.this, SweepLearnGuideActivity.class); + intent.putExtra("learnGuide", 6); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_along: + intent = new Intent(SweepActivity.this, SweepLearnGuideActivity.class); + intent.putExtra("learnGuide", 7); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_strong: + intent = new Intent(SweepActivity.this, SweepLearnGuideActivity.class); + intent.putExtra("learnGuide", 8); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + } + } else { + switch (v.getId()) { + case R.id.tv_sweep_open: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_OPEN)); + } else + sendAirControlOrder(SWEEP_OPEN); + break; + case R.id.tv_sweep_ok: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_OK)); + } else + sendAirControlOrder(SWEEP_OK); + break; + case R.id.tv_along: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_ALONG)); + } else + sendAirControlOrder(SWEEP_ALONG); + break; + case R.id.tv_strong: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_STRONG)); + } else + sendAirControlOrder(SWEEP_STRONG); + break; + case ll_sweep_continue_learn: + isLearn = true; + //查询学习按键 + queryStudyValue(); + break; + } + } + } + + //发送开关指令 + private void sendAirControlOrder(String order) { + setShake(); + /*if (DensityUtil.isNetworkConnected(this)) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + map.put("sendMsg", order); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_CONTROL_AIR_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addChildDevice", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } else { + ToastUtil.show(this, R.string.net_error); + }*/ + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_UP: + switch (mId) { + case 0: + mDown.setVisibility(View.INVISIBLE); + break; + case 1: + mLeft.setVisibility(View.INVISIBLE); + break; + case 2: + mUp.setVisibility(View.INVISIBLE); + break; + case 3: + mRight.setVisibility(View.INVISIBLE); + break; + } + break; + } + return true; + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case QUERY_STUDY_SUCCESS: + StudyEntity entity = (StudyEntity) msg.obj; + if (entity != null) { + setIsLearned(entity); + } + if (isLearn) { + showLearn(); + } else { + showControl(); + } + break; + case QUERY_STUDY_FAIL: + + break; + case SEND_CONTROL_ORDER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DELETE_CHILDDEVICE_SUCCESS: + + break; + case SHOW_LOCAL_CONTROL: + String obj2 = (String) msg.obj; + if (obj2.equals("1")) { + localControlIv.setVisibility(View.VISIBLE); + } else { + localControlIv.setVisibility(View.GONE); + } + break; + case APP_CONTROL_SUCCESS: + NettyEntity nettyEntity1 = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + if (nettyEntity1.getDeviceType().equals(SWEEP_TAG)) { + if (nettyEntity1.getOpenFlag().equals("1")) { + greenCircle.setVisibility(View.VISIBLE); + greenCircle.startAnimation(mAlphaAnimation); + ToastUtil.show(this, "扫地机已打开"); + } else { + greenCircle.setVisibility(View.GONE); + greenCircle.clearAnimation(); + } + } + break; + case QUERY_DEVICE_LASTINFO_SUCCESS: + DeviceStateEntity parseObject = (DeviceStateEntity) msg.obj; + if (parseObject.getData().getOpenFlag().equals("1")) { + greenCircle.setVisibility(View.VISIBLE); + greenCircle.startAnimation(mAlphaAnimation); + ToastUtil.show(this, "扫地机已打开"); + } else { + greenCircle.setVisibility(View.GONE); + greenCircle.clearAnimation(); + } + break; + } + } + + private void setIsLearned(StudyEntity entity) { + if (entity.getObj() != null) { + for (int i = 0; i < entity.getObj().size(); i++) { + switch (entity.getObj().get(i)) { + case SWEEP_OPEN: + mOpenCloseTag = true; + break; + case SWEEP_UP: + mUpTag = true; + break; + case SWEEP_DOWN: + mDownTag = true; + break; + case SWEEP_LEFT: + mLeftTag = true; + break; + case SWEEP_RIGHT: + mRightTag = true; + break; + case SWEEP_OK: + mOkTag = true; + break; + case SWEEP_STRONG: + mStrongTag = true; + break; + case SWEEP_ALONG: + mAlongTag = true; + break; + } + } + } + } + + @Override + public void onResume() { + super.onResume(); + queryDeviceLastInfo(getIntent().getExtras().get("id").toString(), SWEEP_TAG); + if (isLearn) { + queryStudyValue(); + } + } + + private void queryDeviceLastInfo(String deviceId, String deviceType) { + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case LEARN_RESULT: + if (data != null && data.getExtras().get("learnGuide") != null) { + int learnGuide = (int) data.getExtras().get("learnGuide"); + switch (learnGuide) { + case 1: + mOpenCloseMark.setVisibility(View.VISIBLE); + break; + case 2: + mUpMark.setVisibility(View.VISIBLE); + break; + case 3: + mDownMark.setVisibility(View.VISIBLE); + break; + case 4: + mLeftMark.setVisibility(View.VISIBLE); + break; + case 5: + mRightMark.setVisibility(View.VISIBLE); + break; + case 6: + mOkMark.setVisibility(View.VISIBLE); + break; + case 7: + mAlongMark.setVisibility(View.VISIBLE); + break; + case 8: + mStrongMark.setVisibility(View.VISIBLE); + break; + } + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("deviceName") != null) { + sweepName = data.getExtras().get("deviceName").toString().trim(); + mTitleView.setHead(sweepName); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/sweep/SweepLearnGuideActivity.java b/app/src/main/java/com/yonsz/z1/device/sweep/SweepLearnGuideActivity.java new file mode 100644 index 0000000..0d19e13 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/sweep/SweepLearnGuideActivity.java @@ -0,0 +1,327 @@ +package com.yonsz.z1.device.sweep; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.LearnEvent; +import com.yonsz.z1.database.entity.LearnFailEvent; +import com.yonsz.z1.database.entity.SecondEvent; +import com.yonsz.z1.device.SureLearnActivity; +import com.yonsz.z1.device.airconditioner.AirAutoFailActivity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.FAN_LEARN_FAIL; +import static com.yonsz.z1.net.Constans.FAN_LEARN_ING; +import static com.yonsz.z1.net.Constans.FAN_LEARN_SUCCESS; +import static com.yonsz.z1.net.Constans.SWEEP_ALONG; +import static com.yonsz.z1.net.Constans.SWEEP_DOWN; +import static com.yonsz.z1.net.Constans.SWEEP_LEFT; +import static com.yonsz.z1.net.Constans.SWEEP_OK; +import static com.yonsz.z1.net.Constans.SWEEP_OPEN; +import static com.yonsz.z1.net.Constans.SWEEP_RIGHT; +import static com.yonsz.z1.net.Constans.SWEEP_STRONG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_UP; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * Created by Administrator on 2017/9/7. + */ +public class SweepLearnGuideActivity extends BaseActivity { + private TitleView mTitleView; + private TextView mLearnGuide; + private String userId; + private String ziId; + private int learnGuide; + private StateButton mStateButton; + private int sec = 30; + private LinearLayout ll_learn_bg; + private TextView getLearnGuide; + private MediaPlayer mediaPlayer01; + private LoadingDialog mLoadingDialog; + private boolean learningFlag = false; + private TextView tv_2_second; + private TextView tv_press; + private String deviceType = SWEEP_TAG; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_learn_guide); + //注册eventBus + // EventBus.getDefault().register(this); + NettyHandlerUtil.getInstance(); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initView() { + mStateButton = (StateButton) findViewById(R.id.bt_sec); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + mLearnGuide = (TextView) findViewById(R.id.tv_learn_guide); + mTitleView = (TitleView) findViewById(R.id.title_learn_guide); + ll_learn_bg = (LinearLayout) findViewById(R.id.ll_learn_bg); + ll_learn_bg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_swap)); + getLearnGuide = (TextView) findViewById(R.id.tv_guide_device); + tv_2_second = (TextView) findViewById(R.id.tv_2_second); + tv_press = (TextView) findViewById(R.id.tv_press); + getLearnGuide.setText("提示灯变为红色后,将扫地机遥控器对"); + mTitleView.setHead(R.string.sweep_learn_guide); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (getIntent().getExtras().get("learnGuide") != null) { + learnGuide = Integer.parseInt(getIntent().getExtras().get("learnGuide").toString()); + switch (learnGuide) { + case 1: + mLearnGuide.setText(R.string.Switch); + enterLearnState("power"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_22); + mediaPlayer01.start(); + } + break; + case 2: + mLearnGuide.setText("向上"); + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + enterLearnState("up"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_24); + mediaPlayer01.start(); + } + break; + case 3: + mLearnGuide.setText("向下"); + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + enterLearnState("down"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_25); + mediaPlayer01.start(); + } + break; + case 4: + mLearnGuide.setText("向左"); + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + enterLearnState("left"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_26); + mediaPlayer01.start(); + } + break; + case 5: + mLearnGuide.setText("向右"); + tv_press.setText("长按"); + tv_2_second.setVisibility(View.VISIBLE); + enterLearnState("right"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_27); + mediaPlayer01.start(); + } + break; + case 6: + mLearnGuide.setText("回充"); + enterLearnState("charge"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_23); + mediaPlayer01.start(); + } + break; + case 7: + mLearnGuide.setText(R.string.Edgeways_mode); + enterLearnState("edgewise"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_28); + mediaPlayer01.start(); + } + break; + case 8: + mLearnGuide.setText(R.string.Strong_mode); + enterLearnState("strong"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_29); + mediaPlayer01.start(); + } + break; + } + } + } + + private void enterLearnState(final String sendMsg) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("appId", DifferConstans.APPID_S); + map.put("macId", ziId); + map.put("ziId", ziId); + map.put("sendMsg", sendMsg); + map.put("oper", sendMsg); + map.put("pushKey", sendMsg); + map.put("deviceType", deviceType); + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + util.requestPostByAsynewApi(NetWorkUrl.INFRARED_KEYSTUDY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("enterLearnState", "onSuccess: " + respone); + // mHandler.sendEmptyMessage(FAN_LEARN_SUCCESS); + } + + @Override + public void onFail(String message) { + + } + }); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(SecondEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnFailEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_FAIL; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_ING; + mHandler.sendMessage(message); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FAN_LEARN_SUCCESS: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(SweepLearnGuideActivity.this, "学习成功"); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(SweepLearnGuideActivity.this, SureLearnActivity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("type", SWEEP_TAG); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent); + finish(); + } + }, 1000); + break; + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + /*if (mLoadingDialog != null) { + mLoadingDialog.setMessage(sec + ""); + }*/ + } else { + if (learningFlag) { + Intent intent = new Intent(SweepLearnGuideActivity.this, SureLearnActivity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("type", SWEEP_TAG); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent); + finish(); + } else { + finish(); + } + } + break; + case FAN_LEARN_ING: + initLoadDialog(); + learningFlag = true; + sec = 10; + break; + case FAN_LEARN_FAIL: + Intent intent1 = new Intent(SweepLearnGuideActivity.this, AirAutoFailActivity.class); + intent1.putExtra("ziId", ziId); + intent1.putExtra("tag", SWEEP_TAG); + intent1.putExtra("learnGuide", learnGuide); + startActivity(intent1); + finish(); + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.setMessage(R.string.saving); + mLoadingDialog.show(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + //取消eventBus注册 + // EventBus.getDefault().unregister(this); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/switcher/SureSwitchLearnActivity.java b/app/src/main/java/com/yonsz/z1/device/switcher/SureSwitchLearnActivity.java new file mode 100644 index 0000000..65a626e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/switcher/SureSwitchLearnActivity.java @@ -0,0 +1,207 @@ +package com.yonsz.z1.device.switcher; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.R.id.tv_open_light; +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.DEL_ERROR_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.DEL_ERROR_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.SWITCH_OPEN; +import static com.yonsz.z1.net.Constans.UPDATE_STUDYFLAG_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_STUDYFLAG_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.DEL_STUDY_FAIL; + +/** + * Created by Administrator on 2017/10/16. + */ +public class SureSwitchLearnActivity extends BaseActivity { + private TitleView mTitleView; + private String type; + private TextView noUse; + private Button sureBtn; + private TextView openLight; + private int learnGuide; + private String ziId; + private String studyKey; + private String studyType; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sure_switch_learn); + initView(); + initListener(); + } + + private void initView() { + studyType = getIntent().getExtras().get("studyType").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + type = getIntent().getExtras().get("type").toString(); + learnGuide = Integer.parseInt(getIntent().getExtras().get("learnGuide").toString()); + openLight = (TextView) findViewById(tv_open_light); + noUse = (TextView) findViewById(R.id.tv_no_use); + sureBtn = (Button) findViewById(R.id.bt_sure_config); + mTitleView = (TitleView) findViewById(R.id.title_sure_light); + mTitleView.setHead(R.string.Socket_remote_learning); + openLight.setText(R.string.On_off); + studyKey = SWITCH_OPEN; + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + sendAirControlOrder(studyKey); + } + + private void initListener() { + noUse.setOnClickListener(this); + sureBtn.setOnClickListener(this); + openLight.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_no_use: + //调删除的接口 + delStudyFail(); + break; + case R.id.bt_sure_config: + updateStudyFlag(); + // finish(); + break; + case R.id.tv_open_light: + sendAirControlOrder(studyKey); + break; + } + } + + private void updateStudyFlag() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("studyFlag", "1"); + map.put("id", getIntent().getExtras().get("id").toString()); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.UPDAT_PLUG_STUDYFLAG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateStudyFlag", "ShareDeviceActivity onSuccess()" + respone); + LightEntity obj = JSON.parseObject(respone, LightEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_STUDYFLAG_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_STUDYFLAG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_STUDYFLAG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void delStudyFail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", getIntent().getExtras().get("id").toString()); + netWorkUtil.requestPostByAsynewApi(DEL_STUDY_FAIL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("delStudyFail", "ShareDeviceActivity onSuccess()" + respone); + LightEntity obj = JSON.parseObject(respone, LightEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //发送开关指令 + private void sendAirControlOrder(String order) { + + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case SEND_CONTROL_ORDER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DEL_ERROR_STUDY_SUCCESS: + intent = new Intent(SureSwitchLearnActivity.this, SwitcherLearnActivity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("ziId", ziId); + intent.putExtra("id", getIntent().getExtras().get("id").toString()); + intent.putExtra("studyType", getIntent().getExtras().get("studyType").toString()); + startActivity(intent); + finish(); + break; + case UPDATE_STUDYFLAG_SUCCESS: + finish(); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/switcher/SwitcherActivity.java b/app/src/main/java/com/yonsz/z1/device/switcher/SwitcherActivity.java new file mode 100644 index 0000000..d97df0b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/switcher/SwitcherActivity.java @@ -0,0 +1,745 @@ +package com.yonsz.z1.device.switcher; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Vibrator; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.LinearLayoutManager; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuBridge; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.LightListEntity; +import com.yonsz.z1.database.entity.PlugEvent; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.VoiceSwitchControlEntity; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.device.light.LightAdapter; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.BottomDialog; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.PositionPopupWindow; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.id.ll_sweep_continue_learn; +import static com.yonsz.z1.R.id.tv_curtains_add; +import static com.yonsz.z1.net.Constans.ADDBLIND_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADDBLIND_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.BLIND_LEARN_SUCCESS; +import static com.yonsz.z1.net.Constans.DELBLIND_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.DELBLIND_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECTBLIND_BYZI_FAIL; +import static com.yonsz.z1.net.Constans.SELECTBLIND_BYZI_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDPID_STUDYBLIND_FAIL; +import static com.yonsz.z1.net.Constans.SENDVOICE_BLINDMSG_FAIL; +import static com.yonsz.z1.net.Constans.SENDVOICE_BLINDMSG_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_VOICE_BLINDMSG_FAIL; +import static com.yonsz.z1.net.Constans.SEND_VOICE_BLINDMSG_SUCCESS; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATEBLIND_ENTITYNAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATEBLIND_ENTITYNAME_SUCCESS; + +/** + * Created by Administrator on 2017/9/13. + */ +public class SwitcherActivity extends BaseActivity { + private TitleView mTitleView; + private SwipeMenuRecyclerView mRecyclerView; + // private SwipeRefreshLayout mRefreshLayout; + private SwitcherAdapter mSwitcherAdapter; + private List mdatas; + private boolean isLearn; + private boolean isDelete = false; + private LinearLayout learningLl; + private RelativeLayout lightBottomRl; + private String ziId; + private String userId; + private TextView mAddCurtains; + private LoadingDialog mLoadingDialog; + private int voicePosition; + private boolean isDeleteAll = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_switcher_control); + initView(); + initListener(); + selectInfoByZi(); + } + + @Override + public void onResume() { + super.onResume(); + if (isLearn) { + mSwitcherAdapter.positionTagSwitcher = false; + } + selectInfoByZi(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mSwitcherAdapter.positionTagInt = -1; + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(PlugEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (isDeleteAll) { + + } else { + Message message = new Message(); + message.what = BLIND_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + String switcherStateTag = (String) getIntent().getExtras().get("switcherStateTag"); + if (switcherStateTag.equals("0")) { + isLearn = true; + } else { + isLearn = false; + } + mAddCurtains = (TextView) findViewById(tv_curtains_add); + learningLl = (LinearLayout) findViewById(ll_sweep_continue_learn); + lightBottomRl = (RelativeLayout) findViewById(R.id.rl_bottom); + mTitleView = (TitleView) findViewById(R.id.title_curtains); + mTitleView.setHead(R.string.chazuo); + mTitleView.clearBackGroud(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (isDelete) { + isDelete = false; + mSwitcherAdapter.setIsDelete(isDelete); + mSwitcherAdapter.notifyDataSetChanged(); + } else { + finish(); + } + } + + @Override + public void onFunction() { + if (isDelete) { + ConfirmDialog dialog = new ConfirmDialog(SwitcherActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + isDelete = false; + mSwitcherAdapter.setIsDelete(isDelete); + mSwitcherAdapter.notifyDataSetChanged(); + break; + case 1: + isDelete = false; + mSwitcherAdapter.setIsDelete(isDelete); + mSwitcherAdapter.notifyDataSetChanged(); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else if (isLearn) { + isLearn = false; + //查询学习按键 + showControl(); + /*mLightAdapter = new LightAdapter(LightActivity.this, mdatas, isLearn); + mRecyclerView.setAdapter(mLightAdapter);*/ + mSwitcherAdapter.setIsLearn(false); + mSwitcherAdapter.notifyDataSetChanged(); + } else { + if (mSwitcherAdapter.positionTagInt != -1) { + mSwitcherAdapter.positionTagInt = -1; + } + mSwitcherAdapter.positionTagSwitcher = false; + if (mdatas.size() != 0) { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(SwitcherActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + isDeleteAll = false; + isDelete = true; + mSwitcherAdapter.setIsDelete(isDelete); + mSwitcherAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntionTxt(R.string.delete); + mTitleView.setHeadFuntionGone(); + mTitleView.setBackTxt(getString(R.string.cancel)); + // deleteChildDevice(SWITCH_TAG, ziId); + break; + case 2: + //重新命名 + break; + case 3: + //语令说明 + Intent intent = new Intent(SwitcherActivity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", SWITCH_TAG); + startActivity(intent); + break; + case 4: + //遥控学习 + isLearn = true; + showLearn(); + mSwitcherAdapter.setIsLearn(true); + mSwitcherAdapter.notifyDataSetChanged(); + break; + } + } + }); + dialog2.setContent(); + dialog2.setLearnTxt(R.string.Add_socket); + dialog2.setSureBtnTxt(R.string.Delete_socket); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + } + + @Override + public void onFunctionText() { + + } + }); + if (isLearn) { + showLearn(); + } else { + showControl(); + } + mdatas = new ArrayList<>(); + mSwitcherAdapter = new SwitcherAdapter(this, mdatas, isLearn, isDelete); + /*mRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresh_layout); + mRefreshLayout.setOnRefreshListener(mRefreshListener); // 刷新监听*/ + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_parent_device_list); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setItemViewCacheSize(0);//试图解决复用的问题 + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setSwipeMenuCreator(swipeMenuCreator); + // mRecyclerView.setSwipeMenuItemClickListener(mMenuItemClickListener); + mRecyclerView.setAdapter(mSwitcherAdapter); + mSwitcherAdapter.setOnItemLightClickListener(new LightAdapter.OnItemLightClickListener() { + @Override + public void onLearnLightClick(int position, int i) { + Intent intent = new Intent(SwitcherActivity.this, SwitcherLearnActivity.class); + intent.putExtra("id", mdatas.get(position).getId()); + intent.putExtra("ziId", mdatas.get(position).getZiId()); + intent.putExtra("studyType", "1"); + startActivity(intent); + } + + @Override + public void onLightOpenCloseClick(int position, int i) { + //控制窗帘 + switch (i) { + case 0: + setShake(); + //关开关 + studyAndControllPlug(mdatas.get(position).getOffInfrared()); + break; + case 1: + //开关的图标 + // sendPidStudyBlind(mdatas.get(position).getPid(), "ff", "02"); + break; + case 2: + setShake(); + //开开关 + studyAndControllPlug(mdatas.get(position).getOnInfrared()); + // studyAndControllLight(mdatas.get(position).getOnInfrared()); + break; + } + } + + @Override + public void onVoiceClick(final int position, int voiceControlTag) { + final Handler ThreadHandler = new Handler(); + switch (voiceControlTag) { + case 1: + setShake(); + ConfirmDialog dialog = new ConfirmDialog(SwitcherActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //获取编码,记录当前的位置 + voicePosition = position; + //设置定时器 + ThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + Message message = new Message(); + message.what = BLIND_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + }, 6000); + sendVoiceBlindMsg(1, mdatas.get(position).getId()); + break; + } + } + }); + dialog.setContent("开启语音控制?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + setShake(); + ConfirmDialog dialog1 = new ConfirmDialog(SwitcherActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //获取编码,记录当前的位置 + voicePosition = position; + //设置定时器 + ThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + Message message = new Message(); + message.what = BLIND_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + }, 6000); + sendVoiceBlindMsg(0, mdatas.get(position).getId()); + break; + } + } + }); + dialog1.setContent("关闭语音控制?"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + break; + case 3: + ToastUtil.show(SwitcherActivity.this, "请完成窗帘学习"); + break; + case 4: + BottomDialog dialog2 = new BottomDialog(SwitcherActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除 + delPlugEntity(position); + mdatas.remove(position); + showLearn(); + if (mdatas.size() != 0) { + mSwitcherAdapter.positionTagInt = mdatas.size() - 1; + } else { + mSwitcherAdapter.positionTagInt = 0; + } + mSwitcherAdapter.positionTagSwitcher = true; + mSwitcherAdapter.notifyDataSetChanged(); + break; + case 2: + //重新命名 + showPositionBottom(); + // showModifyPop(position, 1); + break; + } + } + }); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + break; + } + } + }); + } + + //获取声控编码 + private void sendVoiceBlindMsg(int controlFlag, String id) { + + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void showControl() { + // mTitleView.setHeadFuntionTxt("说明"); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + learningLl.setVisibility(View.GONE); + lightBottomRl.setVisibility(View.GONE); + } + + private void showLearn() { + mSwitcherAdapter.positionTagSwitcher = false; + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setHeadFuntionGone(); + if (mdatas != null && mdatas.size() != 0) { + mTitleView.setHeadFuntionTxtColor(true); + } else { + mTitleView.setHeadFuntionTxtColor(false); + } + learningLl.setVisibility(View.GONE); + lightBottomRl.setVisibility(View.VISIBLE); + } + + private void initListener() { + mAddCurtains.setOnClickListener(this); + learningLl.setOnClickListener(this); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECTBLIND_BYZI_SUCCESS: + // mRefreshLayout.setRefreshing(false); + LightListEntity obj = (LightListEntity) msg.obj; + mdatas.clear(); + if (obj.getObj() != null) { + mdatas.addAll(0, obj.getObj()); + } else { + showLearn(); + mSwitcherAdapter.setIsLearn(true); + mSwitcherAdapter.notifyDataSetChanged(); + } + mSwitcherAdapter.notifyDataSetChanged(); + break; + case ADDBLIND_ENTITY_SUCCESS: + LightEntity lightEntity = (LightEntity) msg.obj; + mdatas.add(lightEntity.getObj()); + showLearn(); + if (mdatas.size() != 0) { + mSwitcherAdapter.positionTagInt = mdatas.size() - 1; + } else { + mSwitcherAdapter.positionTagInt = 0; + } + mSwitcherAdapter.positionTagSwitcher = true; + DisplayMetrics dm = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(dm); + mRecyclerView.smoothScrollToPosition(dm.DENSITY_HIGH / 9 * 7); + mSwitcherAdapter.notifyDataSetChanged(); + break; + case ADDBLIND_ENTITY_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATEBLIND_ENTITYNAME_SUCCESS: + mSwitcherAdapter.positionTagSwitcher = false; + LightEntity lightEntity1 = (LightEntity) msg.obj; + int arg1 = msg.arg1; + mdatas.get(arg1).setAddressName(lightEntity1.getObj().getAddressName()); + mSwitcherAdapter.notifyDataSetChanged(); + break; + case SENDVOICE_BLINDMSG_SUCCESS: + VoiceSwitchControlEntity controllEntity = (VoiceSwitchControlEntity) msg.obj; + String sendMsg = controllEntity.getObj().getVoiceCode(); + sendVoiceControllInfo(sendMsg); + break; + case BLIND_LEARN_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + if (mdatas.get(voicePosition).getVoiceFlag().equals("1")) { + mdatas.get(voicePosition).setVoiceFlag("0"); + ToastUtil.show(SwitcherActivity.this, "关闭语音成功"); + } else { + mdatas.get(voicePosition).setVoiceFlag("1"); + ToastUtil.show(SwitcherActivity.this, "开启语音成功"); + } + mSwitcherAdapter.notifyItemChanged(voicePosition); + } + break; + case SENDPID_STUDYBLIND_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DELBLIND_ENTITY_SUCCESS: + VoiceSwitchControlEntity controllEntity2 = (VoiceSwitchControlEntity) msg.obj; + if (controllEntity2 != null && controllEntity2.getObj() != null) { + if (controllEntity2.getObj().getVoiceFlag().equals("1")) { + String sendMsg2 = controllEntity2.getObj().getVoiceCode(); + sendVoiceControllInfo(sendMsg2); + } + } + break; + case DELETE_CHILDDEVICE_SUCCESS: + + break; + } + } + + //声控插座的开启和关闭 + private void sendVoiceControllInfo(String sendMsg) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("sendMsg", sendMsg); + map.put("userId", userId); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_VOICEPLUG_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sendVoiceControllInfo", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_VOICE_BLINDMSG_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEND_VOICE_BLINDMSG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_VOICE_BLINDMSG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void selectInfoByZi() { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.SELECT_INFO_BYPLUG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectInfoByZi", "ShareDeviceActivity onSuccess()" + respone); + LightListEntity obj = JSON.parseObject(respone, LightListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECTBLIND_BYZI_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECTBLIND_BYZI_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECTBLIND_BYZI_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + /** + * 刷新。 + */ + private SwipeRefreshLayout.OnRefreshListener mRefreshListener = new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + selectInfoByZi(); + } + }; + + @Override + public void onClick(View v) { + switch (v.getId()) { + case tv_curtains_add: + showModifyPop(0, 0); + // showPositionBottom(); + break; + case ll_sweep_continue_learn: + isLearn = true; + showLearn(); + mSwitcherAdapter.setIsLearn(true); + mSwitcherAdapter.notifyDataSetChanged(); + break; + } + } + + private void showPositionBottom() { + View rootview = LayoutInflater.from(SwitcherActivity.this).inflate(R.layout.activity_switcher_control, null); + PositionPopupWindow popupWindow = new PositionPopupWindow(this, "2", new PositionPopupWindow.OnCompleteListener() { + @Override + public void onComplete(String time, List conditionList) { + Log.i("showPositionBottom", "SwitcherActivity onComplete()" + time + conditionList.toString()); + } + }); + popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); + } + + private void studyAndControllPlug(String infrared) { + + } + + + public void showModifyPop(final int adapterPosition, final int i) { + RenameNameDialog dialog = new RenameNameDialog(SwitcherActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + if (i == 0) { + //添加窗帘 + addPlugEntity(positioName); + } else { + updatePlugEntityName(positioName, mdatas.get(adapterPosition).getId(), adapterPosition); + } + break; + } + } + }); + dialog.setMaxEms(4); + if (i == 0) { + dialog.setContent("所添加的窗帘位置进行命名"); + } else { + dialog.setOldName(mdatas.get(adapterPosition).getAddressName()); + dialog.setContent("要修改的窗帘的名称"); + } + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void updatePlugEntityName(String positioName, String id, final int adapterPosition) { + + } + + private void delPlugEntity(int position) { + } + + private void addPlugEntity(String positioName) { + } + + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.y76); + + // 1. MATCH_PARENT 自适应高度,保持和Item一样高; + // 2. 指定具体的高,比如80; + // 3. WRAP_CONTENT,自身高度,不推荐; + int height = getResources().getDimensionPixelSize(R.dimen.y76); + // int height = ViewGroup.LayoutParams.MATCH_PARENT; + // 添加右侧的,如果不添加,则右侧不会出现菜单。 + /*{ + SwipeMenuItem deleteItem = new SwipeMenuItem(CurtainsActivity.this) + .setBackground(R.color.z1_ff0000) + .setText("删除") + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + swipeRightMenu.addMenuItem(deleteItem);// 添加菜单到右侧。 + }*/ + } + }; + + /** + * RecyclerView的Item的Menu点击监听。 + */ + private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() { + @Override + public void onItemClick(SwipeMenuBridge menuBridge) { + menuBridge.closeMenu(); + + int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。 + final int adapterPosition = menuBridge.getAdapterPosition(); // RecyclerView的Item的position。 + int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。 + + if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) { + Intent intent; + switch (menuPosition) { + case 0: + mdatas.remove(adapterPosition); + mSwitcherAdapter.notifyDataSetChanged(); + // delLightEntity(adapterPosition); + break; + } + } + } + }; + +} diff --git a/app/src/main/java/com/yonsz/z1/device/switcher/SwitcherAdapter.java b/app/src/main/java/com/yonsz/z1/device/switcher/SwitcherAdapter.java new file mode 100644 index 0000000..3bba92f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/switcher/SwitcherAdapter.java @@ -0,0 +1,250 @@ +package com.yonsz.z1.device.switcher; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.widget.CheckBox; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.device.light.LightAdapter; +import com.yonsz.z1.listener.NoDoubleClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2017/9/18. + */ +public class SwitcherAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mObjEntity; + private boolean isLearn; + private boolean isDelete; + private AlphaAnimation mAlphaAnimation; + private LightAdapter.OnItemLightClickListener mLightClickListener; + private int voiceControlTag = 0; + public static boolean positionTagSwitcher = false; + public static int positionTagInt = -1; + + public SwitcherAdapter(Context mContext, List mObjEntity, boolean isLearn, boolean isDelete) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + this.isLearn = isLearn; + this.isDelete = isDelete; + mAlphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(mContext, R.anim.alpha_anim_device); + } + + public void setIsLearn(boolean isLearn1) { + isLearn = isLearn1; + } + + public void setIsDelete(boolean isDelete1) { + isDelete = isDelete1; + } + + @Override + public SwitcherAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_switcher, + parent, false); + return new SwitcherAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(SwitcherAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView curtainsRoom, curtainsRoomInner; + private TextView curtainsEdit, curtainsState; + private TextView mCurtainsStudy; + private TextView mCurtainsStudyBg; + private TextView tv_curtains_open; + private ImageView mCurtainsStudyMark; + private FrameLayout mCurtainsOpne, mCurtainsStop, mCurtainsClose; + private LinearLayout learnLl; + private RelativeLayout controlLl; + private CheckBox deleteCb; + + + public MessageViewHolder(View view) { + super(view); + curtainsRoom = (TextView) itemView.findViewById(R.id.tv_curtains_room); + curtainsRoomInner = (TextView) itemView.findViewById(R.id.tv_curtains_room_inner); + curtainsEdit = (TextView) itemView.findViewById(R.id.tv_curtains_edit_learn); + curtainsState = (TextView) itemView.findViewById(R.id.tv_curtains_edit); + mCurtainsOpne = (FrameLayout) itemView.findViewById(R.id.fl_curtains_open); + mCurtainsClose = (FrameLayout) itemView.findViewById(R.id.fl_curtains_close); + mCurtainsStop = (FrameLayout) itemView.findViewById(R.id.fl_curtains_stop); + mCurtainsStudy = (TextView) itemView.findViewById(R.id.tv_curtains_stop_learn); + mCurtainsStudyBg = (TextView) itemView.findViewById(R.id.tv_curtains_stop_bg_learn); + mCurtainsStudyMark = (ImageView) itemView.findViewById(R.id.tv_curtains_stop_mark_learn); + tv_curtains_open = (TextView) itemView.findViewById(R.id.tv_curtains_open); + learnLl = (LinearLayout) itemView.findViewById(R.id.ll_curtains_top_learn); + controlLl = (RelativeLayout) itemView.findViewById(R.id.ll_curtains_top); + deleteCb = (CheckBox) itemView.findViewById(R.id.cb_delete); + } + + public void setViews(final int position) { + final LightDetaiEntity detaiEntity = mObjEntity.get(position); + if (isDelete) { + deleteCb.setVisibility(View.VISIBLE); + } else { + deleteCb.setVisibility(View.GONE); + } + if (isLearn) { + mCurtainsStudyBg.setVisibility(View.GONE); + mCurtainsStudyMark.setVisibility(View.GONE); + + if (positionTagInt != -1 && positionTagInt == position && !detaiEntity.getStudyFlag().equals("1")) { + mCurtainsStudyBg.setVisibility(View.VISIBLE); + mCurtainsStudyBg.startAnimation(mAlphaAnimation); + } + if (positionTagSwitcher) { + if (detaiEntity.getStudyFlag().equals("1")) { + mCurtainsStudyMark.setVisibility(View.VISIBLE); + } else { + mCurtainsStudyMark.setVisibility(View.GONE); + } + } else { + if (detaiEntity.getStudyFlag().equals("1")) { + mCurtainsStudyMark.setVisibility(View.VISIBLE); + } else { + mCurtainsStudyMark.setVisibility(View.GONE); + mCurtainsStudyBg.setVisibility(View.VISIBLE); + mCurtainsStudyBg.startAnimation(mAlphaAnimation); + detaiEntity.setBlingBling(true); + positionTagSwitcher = true; + positionTagInt = position; + } + } + /*if (detaiEntity.isBlingBling()) { + mCurtainsStudyBg.startAnimation(mAlphaAnimation); + } else { + mCurtainsStudyBg.clearAnimation(); + }*/ + } else { + mCurtainsStudyBg.setVisibility(View.GONE); + mCurtainsStudyMark.setVisibility(View.GONE); + if (detaiEntity.getStudyFlag() != null && detaiEntity.getStudyFlag().equals("1")) { + /*mCurtainsOpne.setAlpha(1.0f); + mCurtainsOpne.setEnabled(true);*/ + mCurtainsClose.setAlpha(1.0f); + mCurtainsClose.setEnabled(true); + mCurtainsStop.setAlpha(1.0f); + mCurtainsStop.setEnabled(true); + } else { + /*mCurtainsOpne.setAlpha(0.5f); + mCurtainsOpne.setEnabled(false);*/ + mCurtainsClose.setAlpha(0.5f); + mCurtainsClose.setEnabled(false); + mCurtainsStop.setAlpha(0.5f); + mCurtainsStop.setEnabled(false); + } + } + if (isLearn) { + controlLl.setVisibility(View.GONE); + learnLl.setVisibility(View.VISIBLE); + curtainsRoom.setVisibility(View.GONE); + curtainsRoomInner.setVisibility(View.VISIBLE); + if (detaiEntity.getAddressName() != null) { + curtainsRoomInner.setText(detaiEntity.getAddressName()); + } + } else { + controlLl.setVisibility(View.VISIBLE); + learnLl.setVisibility(View.GONE); + curtainsRoomInner.setVisibility(View.GONE); + curtainsRoom.setVisibility(View.VISIBLE); + if (detaiEntity.getAddressName() != null) { + curtainsRoom.setText(detaiEntity.getAddressName()); + } + } + if (isLearn) { + + } else { + if (detaiEntity.getVoiceFlag().equals("1")) { + detaiEntity.setVoiceControlTag(2); + curtainsState.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_on)); + } else if (detaiEntity.getStudyFlag().equals("1")) { + detaiEntity.setVoiceControlTag(1); + curtainsState.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_off)); + } else { + detaiEntity.setVoiceControlTag(3); + curtainsState.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_unor)); + } + } + mCurtainsStudy.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0); + } + } + }); + + curtainsState.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, detaiEntity.getVoiceControlTag()); + } + } + }); + curtainsEdit.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 4); + } + } + }); + + mCurtainsOpne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + }); + mCurtainsClose.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 0); + tv_curtains_open.setBackground(mContext.getResources().getDrawable(R.drawable.icon_index_chazuo02)); + } + } + }); + mCurtainsStop.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 2); + tv_curtains_open.setBackground(mContext.getResources().getDrawable(R.drawable.icon_index_chazuo_on)); + } + } + }); + } + } + + public void setOnItemLightClickListener(LightAdapter.OnItemLightClickListener listener) { + this.mLightClickListener = listener; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/device/switcher/SwitcherLearnActivity.java b/app/src/main/java/com/yonsz/z1/device/switcher/SwitcherLearnActivity.java new file mode 100644 index 0000000..e7ddb19 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/switcher/SwitcherLearnActivity.java @@ -0,0 +1,163 @@ +package com.yonsz.z1.device.switcher; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.SAVELIGHT_STUDYINFO_FAIL; +import static com.yonsz.z1.net.Constans.SAVELIGHT_STUDYINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; + +/** + * Created by Administrator on 2017/9/18. + */ +public class SwitcherLearnActivity extends BaseActivity { + private TitleView mTitleViewl; + private Button nextConfig; + private CheckBox selectUnnorReveal; + private String studyType; + private ImageView iv_bg; + private MediaPlayer mediaPlayer01; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_switcher_learn); + initView(); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + // SoundPlayUtils.play(5); + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_100); + mediaPlayer01.start(); + } + } + + private void initView() { + studyType = getIntent().getExtras().get("studyType").toString(); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + iv_bg = (ImageView) findViewById(R.id.iv_bg); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + saveSwitchStudyInfo(); + } + }); + mTitleViewl = (TitleView) findViewById(R.id.title_light_learn); + mTitleViewl.setHead(R.string.Socket_remote_learning); + mTitleViewl.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + selectUnnorReveal.setOnClickListener(this); + } + + private void saveSwitchStudyInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", getIntent().getExtras().get("id").toString()); + map.put("studyType", studyType); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.SAVE_PLUG_STUDYINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("saveLightStudyInfo", "ShareDeviceActivity onSuccess()" + respone); + LightEntity obj = JSON.parseObject(respone, LightEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SAVELIGHT_STUDYINFO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SAVELIGHT_STUDYINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SAVELIGHT_STUDYINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + } else { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SAVELIGHT_STUDYINFO_SUCCESS: + LightEntity obj = (LightEntity) msg.obj; + Intent intent = new Intent(SwitcherLearnActivity.this, SureSwitchLearnActivity.class); + intent.putExtra("onInfrared", obj.getObj().getOnInfrared()); + intent.putExtra("offInfrared", obj.getObj().getOffInfrared()); + intent.putExtra("id", getIntent().getExtras().get("id").toString()); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("studyType", studyType); + intent.putExtra("learnGuide", 0); + intent.putExtra("type", SWITCH_TAG); + startActivity(intent); + finish(); + break; + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/AddByHandActivity.java b/app/src/main/java/com/yonsz/z1/device/tv/AddByHandActivity.java new file mode 100644 index 0000000..8a3a713 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/AddByHandActivity.java @@ -0,0 +1,306 @@ +package com.yonsz.z1.device.tv; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.AnimationUtils; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.device.airconditioner.AddAirAutoActivity; +import com.yonsz.z1.device.airconditioner.AirhandFailActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.VibratorUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; + +/** + * Created by Administrator on 2017/6/19. + */ + +public class AddByHandActivity extends BaseActivity { + public final int MESSAGE_SEARCH_PROGRESS = 1; + public final int MESSAGE_SEARCH_COMPLETE = 2; + private TitleView mTitleView; + private RotateAnimation rotateAnimation; + private ImageView rotateIv; + private TextView longClick; + private long[] pattern = new long[]{30, 400, 30, 400}; + private String mGroup; + private String mBrand; + private List mGroupList; + private List mBrandList; + private TextView currentNumber, totalNumber; + private int currentIndex = 0, totalIndex; + private boolean b_first; + private boolean b_stop_flag; + private String userId; + private String ziId; + private String sendMsg; + private MediaPlayer mediaPlayer01; + private TextView bt_loss_auto; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_remote); + initView(); + initListener(); + // SoundPlayUtils.play(2); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_4); + mediaPlayer01.start(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + private void initView() { + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + if (getIntent().getExtras() != null) { + mGroup = (String) getIntent().getExtras().get("tmp_group_list"); + mBrand = (String) getIntent().getExtras().get("tmp_brand"); + mGroupList = Arrays.asList(mGroup.split(",")); + mBrandList = Arrays.asList(mBrand.split(",")); + totalIndex = mGroupList.size(); + } + bt_loss_auto = (TextView) findViewById(R.id.bt_loss_auto); + currentNumber = (TextView) findViewById(R.id.tv_current_number); + totalNumber = (TextView) findViewById(R.id.tv_total_number); + currentNumber.setText(0 + ""); + totalNumber.setText(mGroupList.size() + ""); + mTitleView = (TitleView) findViewById(R.id.title_add_remote); + rotateIv = (ImageView) findViewById(R.id.iv_rotate); + longClick = (TextView) findViewById(R.id.tv_long_click); + mTitleView.setHead(R.string.add_air_auto); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void initListener() { + longClick.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + Intent intent; + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + Log.i("AddByHandActivity", "ACTION_DOWN"); + b_stop_flag = false; + rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(AddByHandActivity.this, R.anim.rotate360_center_anim); + rotateIv.startAnimation(rotateAnimation); + VibratorUtil.Vibrate(AddByHandActivity.this, pattern, true); + + if (!b_first) { + currentIndex++; + if (currentIndex > totalIndex) { + currentIndex = 0; + } + } + b_first = false; + + ThreadSearch thread = new ThreadSearch(); + thread.start(); + + break; + case MotionEvent.ACTION_UP: + Log.i("AddByHandActivity", "ACTION_UP"); + b_stop_flag = true; + rotateAnimation.cancel(); + VibratorUtil.cancle(); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(AddByHandActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(AddByHandActivity.this, DeviceControlActivity.class); + } + intent.putExtra("airStateTag", "2"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceBrand", mBrand); + intent.putExtra("airName", mBrand); + if (mGroupList.size() > currentIndex) { + intent.putExtra("mGroupList", mGroupList.get(currentIndex)); + } else { + intent.putExtra("mGroupList", mGroupList.get(currentIndex - 1)); + } + intent.putExtra("id", "air"); + startActivity(intent); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + break; + case MotionEvent.ACTION_MOVE: + Log.i("AddByHandActivity", "ACTION_MOVE"); + break; + case MotionEvent.ACTION_CANCEL: + Log.i("AddByHandActivity", "ACTION_CANCEL"); + b_stop_flag = true; + rotateAnimation.cancel(); + VibratorUtil.cancle(); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(AddByHandActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(AddByHandActivity.this, DeviceControlActivity.class); + } + intent.putExtra("airStateTag", "2"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceBrand", mBrand); + intent.putExtra("airName", mBrand); + if (mGroupList.size() > currentIndex) { + intent.putExtra("mGroupList", mGroupList.get(currentIndex)); + } else { + intent.putExtra("mGroupList", mGroupList.get(currentIndex - 1)); + } + intent.putExtra("id", "air"); + startActivity(intent); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + break; + } + return true; + } + }); + + bt_loss_auto.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(AddByHandActivity.this, AddAirAutoActivity.class); + intent.putExtra("airStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case MESSAGE_SEARCH_PROGRESS: + currentNumber.setText(currentIndex + ""); + int s = Integer.parseInt(mGroupList.get(currentIndex)); + String hexString = Integer.toHexString(s); + switch (hexString.length()) { + case 1: + sendMsg = "0" + hexString + "00"; + break; + case 2: + sendMsg = hexString + "00"; + break; + case 3: + sendMsg = hexString.substring(1, 3) + "0" + hexString.substring(0, 1); + break; + } + airAutoSendOrder(); + break; + case MESSAGE_SEARCH_COMPLETE: + + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + } + } + + private void airAutoSendOrder() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); +// map.put("userId", userId); + map.put("macId", ziId); + map.put("code", sendMsg); + util.requestPostByAsynewApi(NetWorkUrl.SEARCH_ROUND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("airAutoSendOrder", "onSuccess: " + respone); + + } + + @Override + public void onFail(String message) { + + } + }); + } + + class ThreadSearch extends Thread { + public void run() { + for (int i = currentIndex; i <= totalIndex; i++) { + if (b_stop_flag) { + break; + } + currentIndex = i; + //从下一个开始搜索 + if (currentIndex >= totalIndex) { + //跳转到失败页面 + b_stop_flag = true; + rotateAnimation.cancel(); + VibratorUtil.cancle(); + Intent intent = new Intent(AddByHandActivity.this, AirhandFailActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("tmp_brand", mBrand); + startActivity(intent); + finish(); + } else { + Message msg = mHandler.obtainMessage(MESSAGE_SEARCH_PROGRESS); + mHandler.sendMessage(msg); + } + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + Message msg = mHandler.obtainMessage(MESSAGE_SEARCH_COMPLETE); + mHandler.sendMessage(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/AddRemoteActivity.java b/app/src/main/java/com/yonsz/z1/device/tv/AddRemoteActivity.java new file mode 100644 index 0000000..e4ddc3c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/AddRemoteActivity.java @@ -0,0 +1,230 @@ +package com.yonsz.z1.device.tv; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.AnimationUtils; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.VibratorUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +/** + * Created by Administrator on 2017/6/19. + */ + +public class AddRemoteActivity extends BaseActivity { + public final int MESSAGE_SEARCH_PROGRESS = 1; + public final int MESSAGE_SEARCH_COMPLETE = 2; + private TitleView mTitleView; + private RotateAnimation rotateAnimation; + private ImageView rotateIv; + private TextView longClick; + private long[] pattern = new long[]{30, 400, 30, 400}; + private String mGroup; + private String mBrand; + private List mGroupList; + private List mBrandList; + private TextView currentNumber, totalNumber; + private int currentIndex = 0, totalIndex; + private boolean b_first; + private boolean b_stop_flag; + private String userId; + private String ziId; + private String sendMsg; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_remote); + initView(); + initListener(); + } + + private void initView() { + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + if (getIntent().getExtras() != null) { + mGroup = (String) getIntent().getExtras().get("tmp_group_list"); + mBrand = (String) getIntent().getExtras().get("tmp_brand"); + mGroupList = Arrays.asList(mGroup.split(",")); + mBrandList = Arrays.asList(mBrand.split(",")); + totalIndex = mGroupList.size(); + } + currentNumber = (TextView) findViewById(R.id.tv_current_number); + totalNumber = (TextView) findViewById(R.id.tv_total_number); + currentNumber.setText(0 + ""); + totalNumber.setText(mGroupList.size() + ""); + mTitleView = (TitleView) findViewById(R.id.title_add_remote); + rotateIv = (ImageView) findViewById(R.id.iv_rotate); + longClick = (TextView) findViewById(R.id.tv_long_click); + mTitleView.setHead(R.string.add_air_auto); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void initListener() { + longClick.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + b_stop_flag = false; + rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(AddRemoteActivity.this, R.anim.rotate360_center_anim); + rotateIv.startAnimation(rotateAnimation); + VibratorUtil.Vibrate(AddRemoteActivity.this, pattern, true); + + //从下一个开始搜索 + if (!b_first) { + currentIndex++; + if (currentIndex > totalIndex) { + currentIndex = 0; + } + } + b_first = false; + + ThreadSearch thread = new ThreadSearch(); + thread.start(); + break; + case MotionEvent.ACTION_UP: + b_stop_flag = true; + rotateAnimation.cancel(); + VibratorUtil.cancle(); + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(AddRemoteActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(AddRemoteActivity.this, DeviceControlActivity.class); + } + intent.putExtra("airStateTag", "2"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceBrand", mBrand); + intent.putExtra("mGroupList", mGroupList.get(currentIndex)); + intent.putExtra("airName", mBrand); + intent.putExtra("id", "air"); + startActivity(intent); + break; + case MotionEvent.ACTION_CANCEL: + b_stop_flag = true; + rotateAnimation.cancel(); + VibratorUtil.cancle(); + Intent intent1; + if (AppIdUtil.isBaseZhiKong()) { + intent1 = new Intent(AddRemoteActivity.this, DeviceControlByRoomActivity.class); + } else { + intent1 = new Intent(AddRemoteActivity.this, DeviceControlActivity.class); + } + intent1.putExtra("airStateTag", "2"); + intent1.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent1.putExtra("deviceBrand", mBrand); + intent1.putExtra("mGroupList", mGroupList.get(currentIndex)); + intent1.putExtra("airName", mBrand); + intent1.putExtra("id", "air"); + startActivity(intent1); + break; + } + return true; + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case MESSAGE_SEARCH_PROGRESS: + currentNumber.setText(currentIndex + ""); + int s = Integer.parseInt(mGroupList.get(currentIndex)); + String hexString = Integer.toHexString(s); + switch (hexString.length()) { + case 1: + sendMsg = "0" + hexString + "00"; + break; + case 2: + sendMsg = hexString + "00"; + break; + case 3: + sendMsg = hexString.substring(1, 3) + "0" + hexString.substring(0, 1); + break; + } + airAutoSendOrder(); + break; + case MESSAGE_SEARCH_COMPLETE: + + break; + } + } + + private void airAutoSendOrder() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); +// map.put("userId", userId); + map.put("macId", ziId); + map.put("code", sendMsg); + util.requestPostByAsynewApi(NetWorkUrl.SEARCH_ROUND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addChildDevice", "onSuccess: " + respone); + + } + + @Override + public void onFail(String message) { + + } + }); + } + + class ThreadSearch extends Thread { + public void run() { + for (int i = currentIndex; i <= totalIndex; i++) { + if (b_stop_flag) { + break; + } + currentIndex = i; + Message msg = mHandler.obtainMessage(MESSAGE_SEARCH_PROGRESS); + mHandler.sendMessage(msg); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + Message msg = mHandler.obtainMessage(MESSAGE_SEARCH_COMPLETE); + mHandler.sendMessage(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/AirListActivity.java b/app/src/main/java/com/yonsz/z1/device/tv/AirListActivity.java new file mode 100644 index 0000000..2733aab --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/AirListActivity.java @@ -0,0 +1,263 @@ +package com.yonsz.z1.device.tv; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.utils.PingYinUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.device.tv.Device.tmp_brand; +import static com.yonsz.z1.device.tv.Device.tmp_group_list; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; + +/** + * Created by Administrator on 2017/6/19. + */ + +public class AirListActivity extends BaseActivity { + private TitleView mTitleView; + private List mGroupList;//码组列表 + private ListView brandsListView; + public MyAdapter adapter; + public ArrayList arr;//品牌列表 + private SideBar sideBar; + private List list; + private EditText searchEt; + Handler myhandler = new Handler(); + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_brand_list); + initView(); + initListener(); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + + private void initView() { + searchEt = (EditText) findViewById(R.id.et_search); + mGroupList = new ArrayList(); + brandsListView = (ListView) findViewById(R.id.listview_brand_list); + mTitleView = (TitleView) findViewById(R.id.title_brand_list); + mTitleView.setHead(R.string.select_air_brand); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + sideBar = (SideBar) findViewById(R.id.side_bar); + arr = new ArrayList(); + adapter = new MyAdapter(this); + brandsListView.setAdapter(adapter); + } + + private void initListener() { + searchEt.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + // TODO Auto-generated method stub + //这个应该是在改变的时候会做的动作吧,具体还没用到过。 + } + + @Override + public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, + int arg3) { + // TODO Auto-generated method stub + //这是文本框改变之前会执行的动作 + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + /**这是文本框改变之后 会执行的动作 + * 因为我们要做的就是,在文本框改变的同时,我们的listview的数据也进行相应的变动,并且如一的显示在界面上。 + * 所以这里我们就需要加上数据的修改的动作了。 + */ + myhandler.post(eChanged); + } + }); + } + + /** + * 关于界面UI的更新,可以使用Handler,通过Post一个Runnable去更新,Runnable会去根据搜索框的文本对mData里的数据进行更新。 + */ + Runnable eChanged = new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + String data = searchEt.getText().toString(); + + mGroupList.clear(); + arr.clear(); + BrandList brands = new BrandList(); + getmDataSub(brands.arc, data); + + adapter.notifyDataSetChanged(); + + } + }; + + /** + * 可能对mData的理解会有点问题,因为数据更新完后,每一次的筛选数据都是放在mData里,那么原本的数据呢,当然就是在mListTitle和mListText里。根据获得数据的getmDataSub的代码即可知。 + */ + + private void getmDataSub(List mDataSubs, String data) { + int length = mDataSubs.size(); + for (int i = 0; i < length; ++i) { + if (mDataSubs.get(i).getName().contains(data) || PingYinUtil.getPingYin(mDataSubs.get(i).getName()).contains(data)) { + Brand b = list.get(i); + arr.add(b.name); + mGroupList.add(b.group_list); + } + } + } + + + @Override + public void onResume() { + super.onResume(); + load_brand(); + searchEt.setText(""); + } + + public void load_brand() { + mGroupList.clear(); + arr.clear(); + adapter.notifyDataSetChanged(); + + BrandList brands = new BrandList(); + list = null; + Brand all = new Brand(); //全部品牌 + + //这里根据码库显示语言:不要从Language中取 + all.name = "全部品牌"; + + list = brands.arc; + + //全部品牌的码组列表 + StringBuilder tmp = new StringBuilder(); + for (int i = 0; i < 550; i++) { + tmp.append(String.format("%d,", i)); + } + all.group_list = tmp.toString(); + + + //先添加一个全部品牌 + arr.add(all.name); + mGroupList.add(all.group_list); + + //再添加其余的品牌列表 + for (int i = 0; i < list.size(); i++) { + Brand b = list.get(i); + arr.add(b.name); + mGroupList.add(b.group_list); + } + + adapter.notifyDataSetChanged(); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + } + } + + private class MyAdapter extends BaseAdapter { + private Context context; + private LayoutInflater inflater; + + public MyAdapter(Context context) { + super(); + this.context = context; + inflater = LayoutInflater.from(context); + + } + + @Override + public int getCount() { + return arr.size(); + } + + @Override + public Object getItem(int arg0) { + return arg0; + } + + @Override + public long getItemId(int arg0) { + return arg0; + } + + @Override + public View getView(final int position, View view, ViewGroup arg2) { + if (view == null) { + view = inflater.inflate(R.layout.brandlist_listview_item, null); + } + final TextView edit = (TextView) view.findViewById(R.id.name); + edit.setText(arr.get(position)); + view.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (position < mGroupList.size()) { + tmp_group_list = mGroupList.get(position); + tmp_brand = arr.get(position); + } + Intent intent = new Intent(v.getContext(), AddByHandActivity.class); + intent.putExtra("tmp_brand", tmp_brand); + intent.putExtra("tmp_group_list", tmp_group_list); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + startActivity(intent); + // finish(); + } + }); + return view; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/Brand.java b/app/src/main/java/com/yonsz/z1/device/tv/Brand.java new file mode 100644 index 0000000..1862c95 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/Brand.java @@ -0,0 +1,68 @@ +package com.yonsz.z1.device.tv; + +/** + * Created by Administrator on 2017/6/19. + */ + +public class Brand implements Comparable{ + public void setName(String name) { + this.name = name; + } + + public void setGroup_list(String group_list) { + this.group_list = group_list; + } + + public void setPinyin(String pinyin) { + this.pinyin = pinyin; + } + + public void setFirstLetter(String firstLetter) { + this.firstLetter = firstLetter; + } + + String name; //名称 + String group_list; //码组列表 + private String pinyin; // 姓名对应的拼音 + private String firstLetter; // 拼音的首字母 + + public Brand() { + /*pinyin = Cn2Spell.getPinYin(name); // 根据姓名获取拼音 + firstLetter = pinyin.substring(0, 1).toUpperCase(); // 获取拼音首字母并转成大写 + if (!firstLetter.matches("[A-Z]")) { // 如果不在A-Z中则默认为“#” + firstLetter = "#"; + }*/ + } + + public Brand(String name) { + this.name = name; + pinyin = Cn2Spell.getPinYin(name); // 根据姓名获取拼音 + firstLetter = pinyin.substring(0, 1).toUpperCase(); // 获取拼音首字母并转成大写 + if (!firstLetter.matches("[A-Z]")) { // 如果不在A-Z中则默认为“#” + firstLetter = "#"; + } + } + + public String getName() { + return name; + } + + public String getPinyin() { + return pinyin; + } + + public String getFirstLetter() { + return firstLetter; + } + + @Override + public int compareTo(Brand another) { + if (firstLetter.equals("#") && !another.getFirstLetter().equals("#")) { + return 1; + } else if (!firstLetter.equals("#") && another.getFirstLetter().equals("#")){ + return -1; + } else { + return pinyin.compareToIgnoreCase(another.getPinyin()); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/BrandList.java b/app/src/main/java/com/yonsz/z1/device/tv/BrandList.java new file mode 100644 index 0000000..f5cf45f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/BrandList.java @@ -0,0 +1,6616 @@ +package com.yonsz.z1.device.tv; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.R.string.fan; + +/** + * Created by Administrator on 2017/6/19. + */ + +public class BrandList { + + public List aux; //国外 + public List dvb; //国内DVB --- OK + public List stb; //国外机顶盒 + public List atv; //国内TV --- OK + public List ctv; //国外TV + public List dvd; //国外DVD + public List arc; // + public List fan; // + + public BrandList() { + aux = new ArrayList(); + dvb = new ArrayList(); + stb = new ArrayList(); + atv = new ArrayList(); + ctv = new ArrayList(); + dvd = new ArrayList(); + arc = new ArrayList(); + fan = new ArrayList(); + + + /********************************************************************* + * 国内DVB品牌表 + **********************************************************************/ + { + Brand b = new Brand(); + b.name = "安徽"; + b.group_list = "8,292,267,269,340"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "北京"; + b.group_list = "104,160,143,69,271"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "福建"; + b.group_list = "076,77,78,79,55,118,357,358,338,118,105,147,148,98,284,283,343,321,334,337"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "甘肃"; + b.group_list = "299,286"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "广东"; + b.group_list = "288,0,124,9,145,100,71,2,29,101,245,362,142,12,130,0,282,310,311,102,131,146,263,298,313,329"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "广西"; + b.group_list = "0,359,4"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "贵州"; + b.group_list = "10,11,14,169"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "海南"; + b.group_list = "32,290"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "河北"; + b.group_list = "190,162,293,84,278,268,330"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "河南"; + b.group_list = "134,160,146,29,213,53,54,194"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "黑龙江"; + b.group_list = "168,91,61,289,294,12,92,57,31,33,297,255,88,280,89,93"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "湖北"; + b.group_list = "0,1,158,157,266,258,257,295,296,94,261,332,262,291,320,351,352,353,354,360"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "湖南"; + b.group_list = "7,138,6,213,276,86,58,95,255,256"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "吉林"; + b.group_list = "52"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "江苏"; + b.group_list = "29,123,107,155,156,50,80,62,15,39,51,314,318,319,355"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "江西"; + b.group_list = "55,254"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "辽宁"; + b.group_list = "125,21,126,66,279,90,176,197,171,64,65,167,259,285,300"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "内蒙古"; + b.group_list = "162,20"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "青海"; + b.group_list = "304,305"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "山东"; + b.group_list = "163,21,121,249,250,361,371,125,85,21,126,303,302,260,102,166,103,165,336,164,309,265,264,346,264,273,274,273,287,275,270,326,308,315,306,323,366"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "山西"; + b.group_list = "17,160,83,56,281,324,23,324,367,307,333"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "陕西"; + b.group_list = "112,87,111,110,109,113,97,204,96"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "上海"; + b.group_list = "154,246,247,248"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "四川"; + b.group_list = "151,5,60,277,327,328"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "天津"; + b.group_list = "161,104,63,281,341"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "香港"; + b.group_list = "144,16,106,70"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "新疆"; + b.group_list = "120,225,316,317"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "云南"; + b.group_list = "30,29,149,28"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "浙江"; + b.group_list = "150,3,120,119,121,331,369,116,29,117,128,129,99,301,122,128,129,325,368,252,68,252,253,30,152,151,122,129,322,365,339,153,119,335,370,312,364"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "重庆"; + b.group_list = "13,108,29,159"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "电信"; + b.group_list = "347,348,349,356,350,272"; + dvb.add(b); + } + { + Brand b = new Brand(); + b.name = "中星九号"; + b.group_list = "73,74,75,342"; + dvb.add(b); + } + /********************************************************************* + * 风扇品牌 + **********************************************************************/ + { + Brand b = new Brand(); + b.name = "美的"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "艾美特"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "格力"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "先锋"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "华生"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "联创"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "海尔"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "富士宝"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "长城"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "宝尔玛"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "样子"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "荣事达"; + b.group_list = "0"; + fan.add(b); + } + { + Brand b = new Brand(); + b.name = "其他品牌"; + b.group_list = "0"; + fan.add(b); + } + + + /********************************************************************* + * 国内TV品牌表 + **********************************************************************/ + { + Brand b = new Brand(); + b.name = "长虹"; + b.group_list = "284,350,57,65,305,122,51,53,346,109,35,73,293,17,86,177,45,19,276,194,186,253,288,358,328,6,283,377,21,231,334,254,316,268,20,298,292,40,221,407,412,417,510,452,387,512,392,397,517,402"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "康佳"; + b.group_list = "53,99,205,106,131,159,19,193,276,105,145,187,170,233,148,146,66,332,247,368,84,317,72,275,301,140,39,93,176,18,229,356,314,119,272,208,230,320,173,357,326,427,432,437,442,447,386,504,507,481"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "创维"; + b.group_list = "53,91,293,195,261,167,252,276,129,263,5,233,181,190,66,299,78,370,256,327,60,344,303,244,353,149,197,204,198,192,257,182,158,308,68,286,333,92,201,262,55,74,54,188,215,258,306,341,44,255,117,164,377,406,411,416,421,496,426,391,483,393,488,472"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "TCL"; + b.group_list = "17,134,218,276,263,342,181,3,150,360,285,62,199,257,206,132,207,239,42,212,200,30,12,383,312,318,259,143,270,180,101,161,348,460,433,438,443,418,503,428,543"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "厦华"; + b.group_list = "53,109,174,295,91,293,134,159,359,335,167,354,148,16,233,263,206,38,245,120,97,361,343,0,77,398,396,401,409,492,519,520,414,419,389,399,511,404"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "海信"; + b.group_list = "284,183,374,350,51,346,249,91,195,261,177,136,69,302,66,269,237,340,278,365,88,366,294,37,369,287,24,168,228,213,63,110,50,98,111,144,83,47,225,25,104,349,133,243,152,130,330,296,274,240,58,304,196,363,331,291,172,459,464,394,502,516,405"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "海尔"; + b.group_list = "69,302,372,2,9,29,202,6,228,213,63,59,14,234,120,250,168,319,494,506,499"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "金星"; + b.group_list = "374,350,53,108,174,91,106,293,96,17,177,103,276,263,233,65,171,136,66,366,144,28"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "熊猫"; + b.group_list = "142,53,109,155,166,114,174,91,35,73,293,102,300,134,335,57,177,45,17,241,263,233,322,65,179,223,127,353,135,157,156,48,251,128,190"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "索尼"; + b.group_list = "248,351,94,46,82,266,100,280,71,64,435,440,445,489,527,425,430"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "松下(乐声)"; + b.group_list = "41,142,10,346,249,155,166,23,34,495,490"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "日立"; + b.group_list = "374,249,346,295,284,183,350,51,351,362,321,410,446,390,395,400"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "夏普(声宝)"; + b.group_list = "373,238,109,91,178,307,191,441,419,456,431,436,514"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "三菱"; + b.group_list = "53,17"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "东芝"; + b.group_list = "284,346,109,295,293,134,335,374,350,249,73,226,322,11,65,233,358,352,371,310,214,422"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "飞利浦"; + b.group_list = "108,114,174,96,102,300,246,210,216,485,403,413,480"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "三星"; + b.group_list = "350,53,109,155,174,91,293,185,96,102,300,355,17,65,332,67,434,439,444,424"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "三洋"; + b.group_list = "350,284,374,346,249,293,189,134,335,233,302,141,273,125,315,56,337,184,4,515"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "日电"; + b.group_list = "183,53,109,309,91,293,134,335,174,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "西湖"; + b.group_list = "53,114,174,293,227,102,300,134,233,354,88,157,209,203,367,113"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "大宇"; + b.group_list = "49,31,85"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "北京"; + b.group_list = "350,49,53,43,109,114,174,91,295,73,205,226,85,293,102,300,355,134,335,35,233,65,96,31,17,155,1,163,83,47,8,118"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "高路华"; + b.group_list = "284,183,374,350,51,109,91,293,134,359,335,195,261,224,263,153,88,157,116"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "乐华"; + b.group_list = "53,108,109,114,174,91,102,300,165,265,30,222,271"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "TCBO东宝 TOS东凌"; + b.group_list = "109,91,293,134,335,187,233,190,69"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "福日"; + b.group_list = "374,53,249,114,174,73,293,131,102,300,134,335,167,179,103,233,136"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "安华"; + b.group_list = "99,142,106,339"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "百花"; + b.group_list = "109,91,293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "百合花"; + b.group_list = "114,174,102,300"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "百乐"; + b.group_list = "109,91,49,43,35,295,73,205,226,85,31"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "宝声"; + b.group_list = "53,91,109"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "宝花石"; + b.group_list = "293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "彩虹"; + b.group_list = "53,91,109"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "彩星"; + b.group_list = "114,174,102,300,263"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "长城"; + b.group_list = "53,109,99,114,174,91,293,102,300,134,335,142,49,43,295,35,73,205,226,85,31,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "成都"; + b.group_list = "53,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "长风"; + b.group_list = "53,134,335,195,261,174,233,293"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "长飞"; + b.group_list = "53,109,91,31,67"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "长海"; + b.group_list = "53,91,109,67"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "春兰"; + b.group_list = "282,66,88"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "春风"; + b.group_list = "109,91,293,134,335,233,223"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "春笋"; + b.group_list = "53,91,109"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "东大"; + b.group_list = "109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "东海"; + b.group_list = "109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "飞鹿"; + b.group_list = "53,109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "黄河"; + b.group_list = "53,109,114,174,91,102,300,17,69,127,13"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "潢海美"; + b.group_list = "109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "黄山"; + b.group_list = "53,109,114,174,91,106,293,102,300,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "华日"; + b.group_list = "374,293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "海燕"; + b.group_list = "53,114,174,293,102,300,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "海虹"; + b.group_list = "109,91,35,295,73,205,226,187,69,271"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "海乐"; + b.group_list = "106,339"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "环宇"; + b.group_list = "53,249,114,174,293,102,300,134,335,57,177,45,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "虹美"; + b.group_list = "373,53,109,238,114,174,91,293,102,300,335,57,177,45,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "红岩"; + b.group_list = "53,293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "菊花"; + b.group_list = "53,114,174,293,102,300,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "金海"; + b.group_list = "57,177,45,153"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "金凤"; + b.group_list = "142,53,155,166"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "金塔"; + b.group_list = "109,114,174,91,293,102,300,134,335,57,177,45,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "金鹊"; + b.group_list = "53,91,109"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "金雀"; + b.group_list = "106,293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "嘉华"; + b.group_list = "99,339,142,106,293,190,26,162"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "康虹"; + b.group_list = "57,45,177"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "昆仑"; + b.group_list = "142,53,155,166,293,91,49,31,102,96"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "凯歌"; + b.group_list = "53,109,114,174,91,293,102,300,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "康力"; + b.group_list = "295,49,109,43,91,35,73,226,85,293,263,121,157,349"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "康立"; + b.group_list = "109,114,174,91,102,300,53,35,295,73,205,31,94"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "康艺"; + b.group_list = "109,91,293,134,335,233,323"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "孔雀"; + b.group_list = "53,109,114,174,91,293,102,248,300,223"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "快乐"; + b.group_list = "109,91,293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "龙江"; + b.group_list = "53,293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "利华"; + b.group_list = "53"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "牡丹"; + b.group_list = "142,10,53,109,41,155,166,91,106,293,96,102,300,134,335,23,277,103,233,190,66,211,281,26,120,56"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "美乐"; + b.group_list = "53,114,174,293,102,300,134,335,57,177,45,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "梦寐"; + b.group_list = "114,174,102,300"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "南声"; + b.group_list = "53,293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "青岛"; + b.group_list = "142,53,155,166,293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "如意"; + b.group_list = "53,249,114,174,102,300"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "神彩"; + b.group_list = "374,109,91,293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "山茶"; + b.group_list = "53,293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "上海"; + b.group_list = "57,53,109,99,166,114,174,91,293,102,300,134,335,177,45,233,67"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "韶峰"; + b.group_list = "53,249,284,183,374,114"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "沈阳"; + b.group_list = "53,109,91,261,195,293"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "塞格"; + b.group_list = "53,91,109"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "松柏"; + b.group_list = "109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "三元"; + b.group_list = "373,53,109,238,114,174,91,102,300"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "三键"; + b.group_list = "293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "泰山"; + b.group_list = "53,109,91,31,227,85,226,205,73,295"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "天鹅"; + b.group_list = "373,53,238"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "通广"; + b.group_list = "293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "威牌"; + b.group_list = "109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "翔宇"; + b.group_list = "109,91,106"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "雪莲"; + b.group_list = "114,174,102,300,57,177,45"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "星海"; + b.group_list = "109,91,293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "山水"; + b.group_list = "350"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "JIAN SHENG"; + b.group_list = "147"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "襄阳"; + b.group_list = "293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "幸福"; + b.group_list = "109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "新日松"; + b.group_list = "57,177,45,190"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "莺歌"; + b.group_list = "109,114,174,91,102,300"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "宇航"; + b.group_list = "109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "永固"; + b.group_list = "109,91,114,174,102,300"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "永宝"; + b.group_list = "57,177,45"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "珠海"; + b.group_list = "109,91,31"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "888牌"; + b.group_list = "293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "赣新"; + b.group_list = "53,99,114,174,295,102,248,300"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "华发"; + b.group_list = "374,109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "华强"; + b.group_list = "293,134,335,233,151"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "JVC"; + b.group_list = "322,260"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "飞跃"; + b.group_list = "53,109,114,174,91,102,300"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "飞浪"; + b.group_list = "109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "南宝"; + b.group_list = "109,91,293,134,335,57,177,45,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "飞燕"; + b.group_list = "293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "新思达"; + b.group_list = "67"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "NEC"; + b.group_list = "322,325,465,470,484,466,514"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "彩凌"; + b.group_list = "136"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "奥林普"; + b.group_list = "147"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "上广电"; + b.group_list = "126,137,232"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "WARUMAIA"; + b.group_list = "85,49,31"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "优拉纳斯"; + b.group_list = "53,114,174,102,300"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "高士达"; + b.group_list = "57,43,114,174,102,300,354,325"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "优视达"; + b.group_list = "109,91,57,177,45"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "爱华"; + b.group_list = "57,177,45"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "豁达特技"; + b.group_list = "106,142,99,339"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "佳丽彩"; + b.group_list = "109,91,73,293,134,335,233,223,202"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "奥林匹亚"; + b.group_list = "293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "胜利"; + b.group_list = "309"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "狮龙"; + b.group_list = "109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "雅佳"; + b.group_list = "293,134,335,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "皇冠"; + b.group_list = "293,134,335,49,43,91,35,295,73,205,226,85,31,233"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "富士通"; + b.group_list = "224"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "富丽"; + b.group_list = "339"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "尼康"; + b.group_list = "57,177,45"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "LG"; + b.group_list = "174,102,354,300,325,364,345,36,526"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "INTEL"; + b.group_list = "242"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "SUMO"; + b.group_list = "115"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "DIGITEC"; + b.group_list = "115,169,139"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "SANKEN"; + b.group_list = "138"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "PKLYTRON"; + b.group_list = "89,154,115"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "KANGHUA"; + b.group_list = "69"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "明基"; + b.group_list = "267"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "三灵"; + b.group_list = "90,217"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "创佳"; + b.group_list = "263,190"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "东杰"; + b.group_list = "263,171,190"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "金利普"; + b.group_list = "227,177"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "日声"; + b.group_list = "171"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "康鑫"; + b.group_list = "187,190,147"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "数源"; + b.group_list = "88,157"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "日芝"; + b.group_list = "263,171"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "汇佳板"; + b.group_list = "190"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "金鑫板"; + b.group_list = "147"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "满天星"; + b.group_list = "311"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "港泰"; + b.group_list = "171"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "松电"; + b.group_list = "190"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "欧凌"; + b.group_list = "190"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "SEYE"; + b.group_list = "171"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "神彩"; + b.group_list = "177,190"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "日红"; + b.group_list = "263"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "鑫萌板"; + b.group_list = "147"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "天科板"; + b.group_list = "190"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "天庚板"; + b.group_list = "190"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "东凌"; + b.group_list = "187"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "DETRON"; + b.group_list = "219"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "黄龙"; + b.group_list = "109,91"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "杂牌机"; + b.group_list = "90,217,177,263,187,171,190,136,69,147,82,311,202,290,220,264,32,338,70,123,107,95"; + atv.add(b); + } + + { + Brand b = new Brand(); + b.name = "外挂码表test"; + b.group_list = "32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783,32784,32785,32786,32787,32788,32789,32790,32791,32792,32793,32794,32795,32796,32797,32798,32799,32800,32801,32802,32803,32804,32805,32806,32807,32809,32810,32811,32812,32813,32814,32815,32816,32817,32818,32819,32820,32821,32822,32823"; + atv.add(b); + } + { + Brand b = new Brand(); + b.name = "其他品牌"; + b.group_list = "0"; + atv.add(b); + } + + + /********************************************************************* + 国外AUX品牌表 + **********************************************************************/ + + { + Brand b = new Brand(); + b.name = "ACCELE"; + b.group_list = "37,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ADC"; + b.group_list = "490,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ADCOM"; + b.group_list = "767,73,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ADMIRAL"; + b.group_list = "24,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ADVENTURA"; + b.group_list = "726,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "AIKO"; + b.group_list = "826,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "AIWA"; + b.group_list = "585,885,786,687,126,324,528,726,967,372,885,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "AKAI"; + b.group_list = "324,524,424,624,724,27,931,335,173,375,684,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ALLEGRO"; + b.group_list = "326,534,925,126,142,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "AMERICAN HIGH"; + b.group_list = "830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "APEX"; + b.group_list = "245,596,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "APPLE iPOD"; + b.group_list = "190,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ASHA"; + b.group_list = "37,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "AT&T"; + b.group_list = "938,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "AUDIO DYNAMICS"; + b.group_list = "239,339,25,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "AUDIO TECHNICA"; + b.group_list = "168,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "AUDIOVOX"; + b.group_list = "126,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "BEAUMARK"; + b.group_list = "37,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "BELL & HOWELL"; + b.group_list = "428,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "BELL EXPRESSVU"; + b.group_list = "366,167,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "BOSE"; + b.group_list = "868,79,179,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "BROKSONIC"; + b.group_list = "227,626,327,632,41,398,325,530,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CABLEVISION"; + b.group_list = "252,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CALIFORNIA AUDIO LABS"; + b.group_list = "273,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CALIX"; + b.group_list = "126,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CANDLE"; + b.group_list = "625,126,37,25,825,26,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CANON"; + b.group_list = "124,535,830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CAPEHART"; + b.group_list = "534,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CAPETRONIC"; + b.group_list = "568,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CARVER"; + b.group_list = "184,330,268,368,468,184,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CASIO"; + b.group_list = "379,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CCE"; + b.group_list = "826,237,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CENTRIOS"; + b.group_list = "877,977,78,1107,87,979,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CHARTER"; + b.group_list = "954,852,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CINEVISION"; + b.group_list = "126,142,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CITIZEN"; + b.group_list = "284,625,126,826,37,25,825,26,284,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "COLORTYME"; + b.group_list = "25,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "COLT"; + b.group_list = "237,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "COMCAST"; + b.group_list = "954,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "COX"; + b.group_list = "954,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CRAIG"; + b.group_list = "126,37,237,426,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CRITERION"; + b.group_list = "446,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CURTIS MATHES"; + b.group_list = "124,330,324,35,37,437,25,526,830,379,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "CYBERNEX"; + b.group_list = "37,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "DAEWOO"; + b.group_list = "529,625,626,826,35,825,26,726,798,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "DBX"; + b.group_list = "239,339,25,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "DELPHI"; + b.group_list = "472,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "DENON"; + b.group_list = "981,383,886,132,668,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "DIAMOND VISION"; + b.group_list = "291,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "DIMENSIA"; + b.group_list = "124,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "DIRECTV"; + b.group_list = "1506,1278,1378,1478,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "DISH NETWORK"; + b.group_list = "167,366,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "DREAMBOX"; + b.group_list = "663,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "DURABRAND"; + b.group_list = "279,126,142,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "DYNATECH"; + b.group_list = "324,726,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ECHOSTAR"; + b.group_list = "167,366,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ELECTROHOME"; + b.group_list = "126,27,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ELECTROPHONIC"; + b.group_list = "126,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "EMERSON"; + b.group_list = "626,126,826,227,327,630,632,134,37,625,924,324,128,228,428,528,447,247,724,325,526,726,27,527,827,927,628,530,830,731,634,735,767,968,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "EMTEC"; + b.group_list = "1140,1240,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "EXPRESSVU"; + b.group_list = "366,167,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "FISHER"; + b.group_list = "83,783,32,428,328,330,25,426,928,29,243,368,169,269,369,473,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "FORTEC STAR"; + b.group_list = "558,157,257,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "FUJI"; + b.group_list = "524,830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "FUNAI"; + b.group_list = "324,247,447,726,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "GARRARD"; + b.group_list = "726,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "GE"; + b.group_list = "124,732,135,835,37,429,830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "GENEXXA"; + b.group_list = "968,469,573,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "GOLDSTAR"; + b.group_list = "278,324,126,435,534,236,25,673,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "GO-VIDEO"; + b.group_list = "37,139,342,244,147,798,438,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "GRADIENTE"; + b.group_list = "726,126,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "HARLEY DAVIDSON"; + b.group_list = "726,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "HARMAN KARDON"; + b.group_list = "82,483,25,27,669,770,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "HARWOOD"; + b.group_list = "237,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "HEADQUARTER"; + b.group_list = "428,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "HI-Q"; + b.group_list = "426,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "HITACHI"; + b.group_list = "538,324,336,931,834,543,469,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "HUGHES"; + b.group_list = "659,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "HUGHES NETWORK"; + b.group_list = "763,659,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "HUMAX"; + b.group_list = "892,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ILLICO"; + b.group_list = "252,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ILO"; + b.group_list = "597,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "INFINITY"; + b.group_list = "430,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "INKEL"; + b.group_list = "769,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "INSIGNIA"; + b.group_list = "1208,126,392,142,578,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "INSTANT REPLAY"; + b.group_list = "324,830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "INTEQ"; + b.group_list = "126,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "iPOD "; + b.group_list = "90,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "JC PENNEY"; + b.group_list = "124,126,428,37,538,239,339,830,931,834,935,25,670,379,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "JCL"; + b.group_list = "830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "JENSEN"; + b.group_list = "538,931,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "JVC"; + b.group_list = "680,982,583,239,339,428,326,443,691,25,931,869,982,1808,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "KENWOOD"; + b.group_list = "789,969,482,283,484,884,588,428,239,339,25,931,569,969,170,374,474,484,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "KLH"; + b.group_list = "237,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "KODA"; + b.group_list = "977,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "KODAK"; + b.group_list = "126,830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "KOSS"; + b.group_list = "143,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "KRELL"; + b.group_list = "268,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "KYOCERA"; + b.group_list = "490,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "LG"; + b.group_list = "324,534,435,392,1641,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "LITEON"; + b.group_list = "1508,597,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "LLOYD"; + b.group_list = "324,726,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "LOGIK"; + b.group_list = "237,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "LUXMAN"; + b.group_list = "270,370,574,475,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "LXI"; + b.group_list = "324,126,379,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MAGNAVOX"; + b.group_list = "281,83,193,277,330,430,534,324,224,124,230,125,247,93,598,830,230,268,774,681,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MAGNIN"; + b.group_list = "37,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MARANTZ"; + b.group_list = "470,84,330,428,239,339,530,830,535,25,268,470,570,874,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MARTA"; + b.group_list = "126,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MATSUSHITA"; + b.group_list = "830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MCS"; + b.group_list = "670,379,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MEDION"; + b.group_list = "291,597,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MEI"; + b.group_list = "830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MEMOREX"; + b.group_list = "330,126,428,32,632,534,37,224,324,335,426,726,830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MEXXTECH"; + b.group_list = "334,546,596,1907,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MGA"; + b.group_list = "630,27,770,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MGN TECHNOLOGY"; + b.group_list = "37,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MIDLAND"; + b.group_list = "429,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MINOLTA"; + b.group_list = "538,834,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MISSION"; + b.group_list = "268,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MITSUBISHI"; + b.group_list = "389,630,431,538,239,339,131,27,770,870,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MONTGOMERY WARD"; + b.group_list = "224,631,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MOTOROLA"; + b.group_list = "224,830,954,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MTC"; + b.group_list = "324,37,726,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "MULTITECH"; + b.group_list = "324,37,726,429,237,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "NAD"; + b.group_list = "773,575,975,773,975,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "NAKAMICHI"; + b.group_list = "970,71,784,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "NEC"; + b.group_list = "428,239,339,530,731,831,931,25,526,670,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "NELSON"; + b.group_list = "87,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "NEO"; + b.group_list = "174,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "NEXXTECH"; + b.group_list = "1208,1107,679,879,480,580,584,87,787,679,879,480,580,584,87,787,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "NIKKO"; + b.group_list = "126,168,968,269,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "NOBLEX"; + b.group_list = "37,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "NORCENT"; + b.group_list = "494,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "NSM"; + b.group_list = "268,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "OLYMPUS"; + b.group_list = "830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ONKYO"; + b.group_list = "182,782,82,199,171,271,873,782,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "OPTIMUS"; + b.group_list = "368,376,476,576,776,876,77,980,525,37,937,126,737,39,739,224,368,468,469,569,371,471,571,671,76,376,776,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "OPTONICA"; + b.group_list = "37,631,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ORION"; + b.group_list = "227,632,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PANASONIC"; + b.group_list = "780,682,183,983,987,88,99,696,937,739,39,124,345,830,273,974,675,683,887,938,340,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PANSAT"; + b.group_list = "1105,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PENTAX"; + b.group_list = "538,25,834,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PHILCO"; + b.group_list = "330,124,125,830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PHILIPS"; + b.group_list = "177,83,983,84,184,277,377,330,430,439,939,247,230,830,598,268,774,184,738,36,136,763,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PHILIPS-MAGNAVOX"; + b.group_list = "330,430,224,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PILOT"; + b.group_list = "126,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PINNACLE"; + b.group_list = "1605,1705,1805,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PIONEER"; + b.group_list = "689,385,288,388,489,299,132,538,239,339,1010,935,469,771,871,573,676,385,289,592,399,252,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "POLAROID"; + b.group_list = "596,1813,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PORTLAND"; + b.group_list = "825,26,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PROSCAN"; + b.group_list = "124,432,966,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PROTEC"; + b.group_list = "237,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PROTON"; + b.group_list = "268,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "PULSAR"; + b.group_list = "534,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "QUARTER"; + b.group_list = "428,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "QUARTZ"; + b.group_list = "428,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "QUASAR"; + b.group_list = "937,39,124,739,830,273,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "RADIO SHACK"; + b.group_list = "272,77,980,282,188,288,388,488,189,489,589,124,224,324,525,126,428,835,37,737,937,426,726,27,29,830,631,335,468,571,272,676,280,488,89,289,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "RADIX"; + b.group_list = "126,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "RANDEX"; + b.group_list = "126,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "RCA"; + b.group_list = "373,274,878,779,181,384,186,288,388,688,788,888,189,489,589,546,693,124,126,432,532,732,832,932,33,133,233,135,835,37,538,424,429,830,834,542,767,368,971,973,676,181,86,988,89,289,542,966,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "RCN"; + b.group_list = "954,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "REALISTIC"; + b.group_list = "883,124,224,324,126,428,37,737,937,426,726,27,29,830,631,335,767,368,568,968,469,570,371,571,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "REPLAYTV"; + b.group_list = "938,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "RICOH"; + b.group_list = "936,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "RIO"; + b.group_list = "142,380,126,142,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ROGERS"; + b.group_list = "252,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ROTEL"; + b.group_list = "268,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "RUNCO"; + b.group_list = "534,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SABA"; + b.group_list = "593,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SAE"; + b.group_list = "268,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SAMSUNG"; + b.group_list = "47,37,437,625,538,147,895,997,624,335,775,1440,959,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SAMTRON"; + b.group_list = "139,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SANKY"; + b.group_list = "224,534,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SANSUI"; + b.group_list = "632,239,339,41,227,398,931,268,72,973,75,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SANYO"; + b.group_list = "172,824,32,328,428,37,426,243,368,172,473,175,875,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SCIENTIFIC ATLANTA"; + b.group_list = "252,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SCOTT"; + b.group_list = "478,625,626,327,630,735,325,927,767,968,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SEARS"; + b.group_list = "937,126,428,330,538,41,247,426,928,29,830,834,935,569,570,379,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SHARP"; + b.group_list = "768,70,582,637,737,224,324,228,825,27,631,569,570,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SHERWOOD"; + b.group_list = "272,282,487,587,769,570,471,272,587,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SHINTOM"; + b.group_list = "524,936,538,237,337,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SHOGUN"; + b.group_list = "37,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SHURE"; + b.group_list = "670,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SIGNATURE"; + b.group_list = "324,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SINGER"; + b.group_list = "830,237,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SIRIUS"; + b.group_list = "276,70,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SKYFI"; + b.group_list = "174,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SONIC BLUE"; + b.group_list = "938,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SONY"; + b.group_list = "976,933,479,579,180,381,481,581,984,85,185,285,985,200,539,34,524,933,936,540,38,138,238,639,372,880,81,681,838,367,537,300,400,500,567,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "STS"; + b.group_list = "538,830,834,490,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SUPERSCAN"; + b.group_list = "247,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SYLVANIA"; + b.group_list = "591,324,330,630,124,247,726,830,225,447,1212,268,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "SYMPHONIC"; + b.group_list = "324,225,247,726,447,591,572,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TANDY"; + b.group_list = "324,428,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TAO"; + b.group_list = "174,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TASHIKO"; + b.group_list = "126,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TATUNG"; + b.group_list = "931,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TEAC"; + b.group_list = "672,382,187,287,387,324,726,931,269,570,571,572,672,772,287,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TECHNICS"; + b.group_list = "780,682,183,983,987,88,830,273,974,683,887,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TECHWOOD"; + b.group_list = "1708,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TEKNIKA"; + b.group_list = "324,126,134,726,830,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TEVION"; + b.group_list = "446,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "THETA DIGITAL"; + b.group_list = "774,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TIME WARNER"; + b.group_list = "252,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TiVO"; + b.group_list = "738,838,36,136,367,999,892,592,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TMK"; + b.group_list = "37,526,731,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TOSHIBA"; + b.group_list = "625,727,627,330,630,437,538,94,441,29,735,773,1013,999,998,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TOTEVISION"; + b.group_list = "126,37,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "TRUTECH"; + b.group_list = "798,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ULTIMATE TV"; + b.group_list = "966,567,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "UNITECH"; + b.group_list = "37,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "VECTOR RESEARCH"; + b.group_list = "625,239,339,25,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "VENTURER"; + b.group_list = "176,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "VERIZON"; + b.group_list = "954,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "VICTOR"; + b.group_list = "239,339,869,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "VIDEO CONCEPTS"; + b.group_list = "625,239,339,25,27,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "VIDEOSONIC"; + b.group_list = "37,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "VIDEOTRON"; + b.group_list = "252,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "WARDS"; + b.group_list = "124,224,324,625,126,37,538,426,726,27,830,631,234,834,735,237,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "WHITE WESTINGHOUSE"; + b.group_list = "324,529,447,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "WONDER"; + b.group_list = "877,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "XM RADIO"; + b.group_list = "472,174,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "XR-1000"; + b.group_list = "726,830,237,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "YAMAHA"; + b.group_list = "781,881,485,685,785,286,386,486,586,378,25,931,239,339,168,872,972,74,286,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ZENITH"; + b.group_list = "269,674,576,577,178,278,80,83,380,686,142,534,326,826,228,430,224,324,435,336,936,437,126,524,632,824,239,339,529,438,925,142,269,674,577,80,686,267,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "ZENITH"; + b.group_list = "269,674,576,577,178,278,80,83,380,686,142,534,326,826,228,430,224,324,435,336,936,437,126,524,632,824,239,339,529,438,925,142,269,674,577,80,686,267,"; + aux.add(b); + } + { + Brand b = new Brand(); + b.name = "External File Test"; + b.group_list = "32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783,32784,32785,32786,32787,32788,32789,32790,32791,32792,32793,32794,32795,32796,32797,32798,32799,32800,32801,32802,32803,32804,32805,32806,32807,32809,32810,32811,32812,32813,32814,32815,32816,32817"; + aux.add(b); + } + + + /********************************************************************* + 国外DVD品牌表 + **********************************************************************/ + + { + Brand b = new Brand(); + b.name = "ACESONIC"; + b.group_list = "1513,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ADVENT"; + b.group_list = "893,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "AFREEY"; + b.group_list = "343,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "AIWA"; + b.group_list = "43,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "AKAI"; + b.group_list = "141,145,1112,1912,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ALLEGRO"; + b.group_list = "126,142,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "AMES"; + b.group_list = "744,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "AMW"; + b.group_list = "393,493,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ANABA"; + b.group_list = "797,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "APEX"; + b.group_list = "240,640,740,840,44,644,245,545,146,347,547,495,992,741,596,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ASPIRE"; + b.group_list = "994,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ASTAR"; + b.group_list = "1910,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "A-TREND"; + b.group_list = "940,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "AUDIOVOX"; + b.group_list = "1640,793,1313,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "AXION"; + b.group_list = "793,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "B & K"; + b.group_list = "499,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "BLAUPUNKT"; + b.group_list = "644,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "BLUESKY"; + b.group_list = "143,146,1114,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "BLU-RAY"; + b.group_list = "1742,1941,1541,1441,1341,1241,1540,1514,142,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "BODYSONIC"; + b.group_list = "343,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "BOSE"; + b.group_list = "868,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "BOSS"; + b.group_list = "792,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "BOSTON ACOUSTIC"; + b.group_list = "1411,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "BRITANIA"; + b.group_list = "1141,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "BROKSONIC"; + b.group_list = "894,398,41,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CAVS"; + b.group_list = "1113,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CENTRIOS"; + b.group_list = "796,1308,1408,793,1007,1107,1507,1607,1707,1008,1108,1807,546,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CHANGHONG"; + b.group_list = "741,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CINEVISION"; + b.group_list = "142,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CITECH"; + b.group_list = "1908,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CITIZEN"; + b.group_list = "1908,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CLASSIC"; + b.group_list = "744,1706,741,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "COBY"; + b.group_list = "294,296,396,293,146,494,91,1710,1711,1712,1812,1014,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CONCEPT"; + b.group_list = "644,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CONIA"; + b.group_list = "146,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CONTEL"; + b.group_list = "1741,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CRITERION"; + b.group_list = "446,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CURTIS INTERNATIONAL"; + b.group_list = "594,494,91,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CYBERHOME"; + b.group_list = "1906,940,100,595,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CYBERVISION"; + b.group_list = "1740,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "CYTRON"; + b.group_list = "246,440,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DAEWOO"; + b.group_list = "645,745,46,798,198,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DENON"; + b.group_list = "1742,641,743,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DENZEL"; + b.group_list = "444,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DESAY"; + b.group_list = "497,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DIAMOND VISION"; + b.group_list = "496,890,291,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DIGITREX"; + b.group_list = "146,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DIGIX"; + b.group_list = "95,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DISNEY"; + b.group_list = "447,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DRIVE"; + b.group_list = "1011,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DUAL"; + b.group_list = "346,0,297,444,246,1810,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DURABRAND"; + b.group_list = "546,142,246,1210,1310,1410,1510,1610,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "DVD 2000"; + b.group_list = "841,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "EIGERVISION"; + b.group_list = "1213,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ELTA"; + b.group_list = "45,145,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "EMERSON"; + b.group_list = "142,695,591,247,447,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ESA"; + b.group_list = "297,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ESCIENT"; + b.group_list = "1842,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "FARENHEIT"; + b.group_list = "697,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "FISHER"; + b.group_list = "243,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "FUNAI"; + b.group_list = "247,447,591,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "GE"; + b.group_list = "542,644,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "GOLDSTAR"; + b.group_list = "142,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "GO-VIDEO"; + b.group_list = "744,395,798,47,891,791,342,244,147,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "GPX"; + b.group_list = "295,96,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "GRADIENTE"; + b.group_list = "143,1940,1041,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "GREENHILL"; + b.group_list = "644,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "HAAZ"; + b.group_list = "746,846,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "HAIER"; + b.group_list = "195,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "HARMAN KARDON"; + b.group_list = "344,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "HD-DVD"; + b.group_list = "1941,1541,1441,1341,1241,1514,1612,142,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "HITACHI"; + b.group_list = "42,342,444,543,340,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "HITEKER"; + b.group_list = "146,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "HUMAX"; + b.group_list = "892,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ILO"; + b.group_list = "597,1608,1912,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "INFINITY"; + b.group_list = "343,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "INITIAL"; + b.group_list = "644,1608,1110,1512,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "INSIGNIA"; + b.group_list = "1741,1608,1208,247,793,644,192,392,142,1242,1342,1442,1942,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "INTEGRA"; + b.group_list = "843,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "JBL"; + b.group_list = "344,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "JVC"; + b.group_list = "441,242,442,98,691,1808,443,993,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "JWIN"; + b.group_list = "640,990,191,1412,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "KAWASAKI"; + b.group_list = "196,546,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "KENWOOD"; + b.group_list = "641,544,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "KISS"; + b.group_list = "444,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "KLH"; + b.group_list = "644,292,240,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "KONKA"; + b.group_list = "642,742,842,942,192,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "KOSS"; + b.group_list = "143,440,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "KXD"; + b.group_list = "91,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "LASONIC"; + b.group_list = "1642,746,496,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "LENOXX"; + b.group_list = "794,145,1310,1410,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "LG"; + b.group_list = "1042,1641,142,898,392,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "LINN"; + b.group_list = "945,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "LIQUIDVIDEO"; + b.group_list = "793,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "LITEON"; + b.group_list = "899,891,491,597,1508,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MAGNAVOX"; + b.group_list = "1542,441,442,447,599,799,699,247,193,93,598,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MARANTZ"; + b.group_list = "441,142,442,943,799,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MAXENT"; + b.group_list = "993,991,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MEDION"; + b.group_list = "792,246,991,291,597,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MEMOREX"; + b.group_list = "41,246,1606,1413,1913,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MERIDIAN"; + b.group_list = "441,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MICROSOFT"; + b.group_list = "542,1611,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MICROVISION"; + b.group_list = "792,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MINTEK"; + b.group_list = "644,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MITSUBISHI"; + b.group_list = "644,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MUSTEK"; + b.group_list = "744,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "MYRON & DAVIS"; + b.group_list = "897,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "NAD"; + b.group_list = "1142,142,944,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "NAKAMICHI"; + b.group_list = "844,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "NEC"; + b.group_list = "142,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "NESA"; + b.group_list = "644,897,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "NEXXTECH"; + b.group_list = "1741,1208,896,97,197,297,95,1806,1007,1107,1207,1307,1907,1008,546,596,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "NORCENT"; + b.group_list = "294,899,394,194,494,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ONKYO"; + b.group_list = "441,843,199,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "OPTIMUS"; + b.group_list = "42,941,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ORION"; + b.group_list = "41,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ORITRON"; + b.group_list = "143,1607,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PACIFIC"; + b.group_list = "246,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PANASONIC"; + b.group_list = "1541,241,641,99,698,345,696,340,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PHILCO"; + b.group_list = "1840,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PHILIPS"; + b.group_list = "1514,298,93,1314,1414,1214,441,442,943,177,599,799,699,247,447,598,1211,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PHILIPS-MAGNAVOX"; + b.group_list = "441,442,943,599,699,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PIONEER"; + b.group_list = "1441,1341,941,42,299,399,498,592,1010,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PIVA"; + b.group_list = "1109,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "POLAROID"; + b.group_list = "140,397,596,1813,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "POLK AUDIO"; + b.group_list = "441,442,799,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PORTLAND"; + b.group_list = "145,896,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "POWER ACOUSTIK"; + b.group_list = "1312,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PROLINE"; + b.group_list = "143,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PROSCAN"; + b.group_list = "542,690,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PROSONIC"; + b.group_list = "294,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PROTRON"; + b.group_list = "194,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "PYLE"; + b.group_list = "692,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "RADIO SHACK"; + b.group_list = "546,946,593,693,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "RCA"; + b.group_list = "542,143,644,546,946,693,690,1913,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "REGENT"; + b.group_list = "794,1210,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "REOC"; + b.group_list = "746,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "RIO"; + b.group_list = "142,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "RJ TECHNOLOGY"; + b.group_list = "1209,1311,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ROSEN"; + b.group_list = "694,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ROTEL"; + b.group_list = "242,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SABA"; + b.group_list = "593,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SAMPO"; + b.group_list = "343,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SAMSUNG"; + b.group_list = "1540,1440,1340,342,47,895,997,790,1511,147,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SANSUI"; + b.group_list = "41,398,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SANYO"; + b.group_list = "92,546,243,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SEARS"; + b.group_list = "41,247,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SEG"; + b.group_list = "444,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SELECTRON"; + b.group_list = "1309,1409,1509,1609,1709,1809,1909,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SEMP"; + b.group_list = "440,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SENSORY SCIENCE"; + b.group_list = "891,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SHARP"; + b.group_list = "1941,341,391,492,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SHERWOOD"; + b.group_list = "144,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SHINCO"; + b.group_list = "644,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SHINSONIC"; + b.group_list = "644,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SONIC BLUE"; + b.group_list = "395,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SONY"; + b.group_list = "1241,300,400,500,541,200,540,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SOUNDSTORM"; + b.group_list = "692,792,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SOVA"; + b.group_list = "1111,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SUNGALE"; + b.group_list = "996,396,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SUPERSCAN"; + b.group_list = "247,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SUPERSONIC"; + b.group_list = "96,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SV2000"; + b.group_list = "247,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SVA"; + b.group_list = "146,492,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SYLVANIA"; + b.group_list = "247,447,1212,591,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "SYMPHONIC"; + b.group_list = "247,447,591,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "TASCAM"; + b.group_list = "242,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "TEAC"; + b.group_list = "42,546,142,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "TECHNICS"; + b.group_list = "641,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "TECHWOOD"; + b.group_list = "944,1708,442,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "TERAPIN"; + b.group_list = "995,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "TEVION"; + b.group_list = "440,246,346,446,646,746,846,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "THETA DIGITAL"; + b.group_list = "42,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "TIVO"; + b.group_list = "892,592,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "TOSHIBA"; + b.group_list = "1612,1013,1613,41,441,998,94,999,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "TREDEX"; + b.group_list = "795,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "TRUTECH"; + b.group_list = "1906,798,1713,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "UNITED"; + b.group_list = "546,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "VENTURER"; + b.group_list = "1613,546,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "WESTINGHOUSE"; + b.group_list = "300,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "WHARFEDALE"; + b.group_list = "845,343,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "WHITE WESTINGHOUSE"; + b.group_list = "447,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "X-BOX"; + b.group_list = "542,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "XENIUS"; + b.group_list = "440,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "YAMAHA"; + b.group_list = "1841,643,599,699,442,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "YAMAKAWA"; + b.group_list = "445,444,1407,"; + dvd.add(b); + } + { + Brand b = new Brand(); + b.name = "ZENITH"; + b.group_list = "441,142,392,"; + dvd.add(b); + } + + + /********************************************************************* + 国外CBL&STB品牌表 + **********************************************************************/ + + { + Brand b = new Brand(); + b.name = "ABC"; + b.group_list = "747,947,48,148,248,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ADELPHIA"; + b.group_list = "852,752,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ADTH"; + b.group_list = "1904,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ALLEGRO"; + b.group_list = "54,154,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "AMERICAST"; + b.group_list = "354,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "AMPLICA"; + b.group_list = "159,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ANTRONIX"; + b.group_list = "448,548,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ARCHER"; + b.group_list = "448,548,648,748,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "AT&T"; + b.group_list = "1976,752,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "BELL"; + b.group_list = "1177,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "BELL EXPRESSVU"; + b.group_list = "67,366,167,464,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "BELL SOUTH"; + b.group_list = "354,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "CABLETENNA"; + b.group_list = "448,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "CABLEVIEW"; + b.group_list = "448,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "CABLEVISION"; + b.group_list = "252,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "CENTURY"; + b.group_list = "356,748,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "CHANNEL MASTER"; + b.group_list = "359,459,559,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "CHAPPARAL"; + b.group_list = "657,757,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "CHARTER"; + b.group_list = "852,554,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "CHEYENNE"; + b.group_list = "757,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "CITIZEN"; + b.group_list = "748,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "CLEARMAX"; + b.group_list = "847,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "COGECO"; + b.group_list = "752,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "COLOR VOICE"; + b.group_list = "848,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "COMCAST"; + b.group_list = "948,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "COMTRONICS"; + b.group_list = "954,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "CONTEC"; + b.group_list = "49,149,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "COOLSAT"; + b.group_list = "1205,256,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "COX"; + b.group_list = "554,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "DIGITAL MUSIC EXPRESS"; + b.group_list = "53,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "DIGIWAV"; + b.group_list = "1005,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "DIRECT"; + b.group_list = "1506,1278,1378,1478,863,864,564,963,259,260,263,962,664,65,265,465,765,866,966,367,567,362,563,355,455,555,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "DIRECTOR"; + b.group_list = "752,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "DISH NETWORK"; + b.group_list = "167,366,464,862,67,460,560,660,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "DISHPRO"; + b.group_list = "460,560,660,67,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "DRAKE"; + b.group_list = "857,59,360,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "DREAMBOX"; + b.group_list = "63,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "DX ANTENNA"; + b.group_list = "458,859,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "EASTERN"; + b.group_list = "349,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ECHOSPHERE"; + b.group_list = "464,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ECHOSTAR"; + b.group_list = "167,366,464,862,67,460,560,660,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "EVERQUEST"; + b.group_list = "49,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "EXPRESSVU"; + b.group_list = "67,366,167,464,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "FORTEC STAR"; + b.group_list = "558,157,257,357,457,557,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "FUJITSU"; + b.group_list = "760,860,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "GARRARD"; + b.group_list = "748,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "GC ELECTRONICS"; + b.group_list = "548,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "GE"; + b.group_list = "1578,1804,265,566,365,863,966,666,766,866,556,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "GEMINI"; + b.group_list = "161,255,549,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "GENERAL INSTRUMENT(GI)"; + b.group_list = "364,865,965,66,466,665,166,58,158,258,960,552,747,148,752,952,453,654,754,53,48,947,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "GLOBECAST"; + b.group_list = "956,1306,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "GO VIDEO"; + b.group_list = "662,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "GOLDSTAR"; + b.group_list = "51,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "HAMLIN"; + b.group_list = "747,649,749,849,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "HITACHI"; + b.group_list = "465,564,664,864,765,362,947,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "HUGHES NETWORK"; + b.group_list = "864,465,564,644,763,765,362,659,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ILLICO"; + b.group_list = "252,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "JASCO"; + b.group_list = "748,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "JERROLD"; + b.group_list = "552,747,148,453,48,752,947,254,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "JVC"; + b.group_list = "464,862,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "KENWOOD"; + b.group_list = "461,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "LG"; + b.group_list = "362,864,765,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "LUXOR"; + b.group_list = "561,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "MACOM"; + b.group_list = "661,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "MAGNAVOX"; + b.group_list = "259,862,565,150,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "MEMOREX"; + b.group_list = "250,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "MICROYAL"; + b.group_list = "1977,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "MITSUBISHI"; + b.group_list = "765,864,465,564,664,362,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "MOTOROLA"; + b.group_list = "266,466,463,156,554,1077,552,148,952,453,654,754,48,752,954,254,947,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "MOVIE TIME"; + b.group_list = "350,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "NEOSAT"; + b.group_list = "1777,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "NET"; + b.group_list = "456,262,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "NORSTAT"; + b.group_list = "761,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "NOVAPLEX"; + b.group_list = "155,454,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "NOWTV"; + b.group_list = "1106,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "NSC"; + b.group_list = "350,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "OAK"; + b.group_list = "249,550,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ORION"; + b.group_list = "1877,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "PACE"; + b.group_list = "63,163,266,854,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "PANASONIC"; + b.group_list = "264,260,261,647,452,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "PANSAT"; + b.group_list = "1105,60,1406,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "PARAGON"; + b.group_list = "250,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "PHILIPS"; + b.group_list = "755,259,862,763,564,664,864,465,765,565,362,162,748,549,150,650,750,850,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "PHILIPS-MAGNAVOX"; + b.group_list = "259,862,565,152,55,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "PIONEER"; + b.group_list = "62,51,449,252,950,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "PRIMESTAR"; + b.group_list = "364,665,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "PROSAT"; + b.group_list = "957,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "PROSCAN"; + b.group_list = "1804,265,365,666,966,766,866,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "PULSAR"; + b.group_list = "250,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "QUASAR"; + b.group_list = "250,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "RADIO SHACK"; + b.group_list = "353,152,55,154,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "RCA"; + b.group_list = "1804,265,566,365,863,467,966,666,766,866,411,647,748,352,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "RCN"; + b.group_list = "554,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "REALISTIC"; + b.group_list = "961,358,548,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "REGAL"; + b.group_list = "849,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "REGENCY"; + b.group_list = "349,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "REMBRANDT"; + b.group_list = "947,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ROGERS"; + b.group_list = "252,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "RUNCO"; + b.group_list = "250,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SAMSONIC"; + b.group_list = "1078,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SAMSUNG"; + b.group_list = "61,959,962,263,563,655,51,49,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SCIENTIFIC ATLANTA"; + b.group_list = "451,351,252,155,852,248,251,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SHARP"; + b.group_list = "62,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SHAW"; + b.group_list = "752,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SIERRA I II III"; + b.group_list = "757,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SIGNAL"; + b.group_list = "49,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SIGNATURE"; + b.group_list = "947,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SKY NETWORK"; + b.group_list = "855,755,63,163,266,355,455,555,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SL MARX"; + b.group_list = "49,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SONY"; + b.group_list = "963,367,567,160,861,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SPRUCER"; + b.group_list = "647,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "STANDARD"; + b.group_list = "551,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "STAR SIGHT"; + b.group_list = "964,352,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "STAR TRAK"; + b.group_list = "462,253,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "STARCHOICE"; + b.group_list = "665,166,364,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "STARCOM"; + b.group_list = "747,453,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "STARGATE"; + b.group_list = "49,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "STS"; + b.group_list = "458,658,758,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SUPER GUIDE"; + b.group_list = "562,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "SYLVANIA"; + b.group_list = "759,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "TANDY"; + b.group_list = "651,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "TELEVIEW"; + b.group_list = "49,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "TELSAT"; + b.group_list = "356,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "TEXSCAN"; + b.group_list = "551,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "THOMSON"; + b.group_list = "755,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "TIME WARNER"; + b.group_list = "554,252,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "TOCOM"; + b.group_list = "48,752,952,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "TOSHIBA"; + b.group_list = "765,864,465,564,664,362,858,64,164,764,250,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "TV86"; + b.group_list = "350,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "TVA"; + b.group_list = "756,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ULTIMATETV"; + b.group_list = "966,567,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "UNIDEN"; + b.group_list = "964,958,762,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "UNIKA"; + b.group_list = "448,548,748,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "UNITED"; + b.group_list = "361,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "UNITED CABLE"; + b.group_list = "747,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "UNIVERSAL"; + b.group_list = "448,548,648,748,851,54,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "VERIZON"; + b.group_list = "252,554,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "VIDEO CIPHER Ⅱ"; + b.group_list = "59,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "VIDEO TECH"; + b.group_list = "656,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "VIDEOTRON"; + b.group_list = "252,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "VIDEOWAY"; + b.group_list = "52,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "VIEWSAT"; + b.group_list = "1305,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "VIEWSTAR"; + b.group_list = "149,150,350,651,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "VISIONETICS"; + b.group_list = "1206,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "VISIONTEC"; + b.group_list = "856,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "V-TECH"; + b.group_list = "1505,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "WEB TV"; + b.group_list = "862,160,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ZENITH"; + b.group_list = "363,65,267,161,266,857,59,360,165,951,154,748,250,753,853,953,"; + stb.add(b); + } + { + Brand b = new Brand(); + b.name = "ZENITH NETWORK"; + b.group_list = "354,"; + stb.add(b); + } + + /********************************************************************* + 国外TV品牌表 + **********************************************************************/ + + { + Brand b = new Brand(); + b.name = "ABEX"; + b.group_list = "120,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ACER"; + b.group_list = "1917,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ADMIRAL"; + b.group_list = "603,224,701,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ADVENT"; + b.group_list = "1718,213,318,219,893,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ADVENTURA"; + b.group_list = "19,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "AIKO"; + b.group_list = "407,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "AIWA"; + b.group_list = "121,221,324,528,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "AKAI"; + b.group_list = "112,801,309,1315,1415,27,1112,1912,1515,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ALLERON"; + b.group_list = "706,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "AMARK"; + b.group_list = "603,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "AMTRON"; + b.group_list = "906,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ANAM NATIONAL"; + b.group_list = "906,901,104,805,920,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "AOC"; + b.group_list = "2,102,502,1502,3,217,119,320,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "APEX"; + b.group_list = "23,223,123,1814,741,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ARCHER"; + b.group_list = "603,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ASPECT"; + b.group_list = "507,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "AUDIOVOX"; + b.group_list = "1018,1118,906,1503,1313,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "AXION"; + b.group_list = "319,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "BANG & OLUFSEN"; + b.group_list = "620,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "BELCOR"; + b.group_list = "2,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "BELL & HOWELL"; + b.group_list = "704,506,601,701,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "BENQ"; + b.group_list = "709,909,711,1616,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "BLUESKY"; + b.group_list = "1117,16,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "BRANFORD"; + b.group_list = "906,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "BROKSONIC"; + b.group_list = "316,115,632,41,894,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "BROKWOOD"; + b.group_list = "2,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CANDLE"; + b.group_list = "2,502,19,402,0,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CAPEHART"; + b.group_list = "119,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CCE"; + b.group_list = "1916,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CELEBRITY"; + b.group_list = "801,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CELERA"; + b.group_list = "23,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CENTRIOS"; + b.group_list = "518,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CENTURION"; + b.group_list = "502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CETRONIC"; + b.group_list = "805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CHANGHONG"; + b.group_list = "23,741,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CINERAL"; + b.group_list = "407,16,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CITIZEN"; + b.group_list = "2,502,906,112,512,520,115,701,402,805,407,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CLAIRTONE"; + b.group_list = "3,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CLASSIC"; + b.group_list = "23,741,805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CLP"; + b.group_list = "16,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CLP CLASSIC"; + b.group_list = "10,11,8,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "COBY"; + b.group_list = "1710,1014,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "COLOR VOICE"; + b.group_list = "602,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "COLORTYME"; + b.group_list = "2,502,602,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CONCERTO"; + b.group_list = "2,502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CONCIERGE"; + b.group_list = "713,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CONTEC"; + b.group_list = "906,802,3,805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CORNEA"; + b.group_list = "606,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CRAIG"; + b.group_list = "906,805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CROSLEY"; + b.group_list = "807,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CROWN"; + b.group_list = "906,805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CTX"; + b.group_list = "603,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CURTIS MATHES"; + b.group_list = "704,112,614,2,502,601,506,512,437,701,103,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CXC"; + b.group_list = "906,805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "CYBERVISION"; + b.group_list = "16,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DAEWOO"; + b.group_list = "614,2,502,611,102,415,905,615,505,46,609,805,407,303,602,214,403,314,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DAYTRON"; + b.group_list = "2,502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DELL"; + b.group_list = "522,404,814,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DIAMOND VISION"; + b.group_list = "622,496,810,291,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DIGIMATE"; + b.group_list = "1303,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DIGISTAR"; + b.group_list = "1503,118,413,213,318,814,1603,1716,1816,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DIMENSIA"; + b.group_list = "704,601,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DISNEY"; + b.group_list = "417,115,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DUKANE"; + b.group_list = "507,808,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DUMONT"; + b.group_list = "713,2,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DURABRAND"; + b.group_list = "520,115,916,323,317,1115,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DYNASTY"; + b.group_list = "805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "DYNEX"; + b.group_list = "1718,115,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ELECTROBAND"; + b.group_list = "801,3,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ELECTROHOME"; + b.group_list = "2,502,27,901,803,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ELEKTRA"; + b.group_list = "701,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ELEMENT"; + b.group_list = "1918,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ELITE VIDEO"; + b.group_list = "321,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "EMERSON"; + b.group_list = "1818,2,502,6,115,506,706,520,906,316,505,614,622,324,924,27,128,228,632,134,247,605,705,805,703,903,4,519,106,104,304,604,804,5,105,305,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ENVISION"; + b.group_list = "1519,2,502,9,1502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ESA"; + b.group_list = "520,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "FISHER"; + b.group_list = "506,612,428,619,802,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "FLUID"; + b.group_list = "1104,1204,1304,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "FUJITSU"; + b.group_list = "1419,321,706,1202,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "FUNAI"; + b.group_list = "706,520,906,324,247,508,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "FUTURETEC"; + b.group_list = "906,805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "GATEWAY"; + b.group_list = "206,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "GE"; + b.group_list = "704,312,18,2,502,6,7,601,835,901,114,103,803,806,310,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "GIBRALTER"; + b.group_list = "713,2,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "GOLDSTAR"; + b.group_list = "2,502,102,324,435,802,307,609,217,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "GPX"; + b.group_list = "96,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "GRADIENTE"; + b.group_list = "1902,2,916,1617,1517,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "GRUNDY"; + b.group_list = "706,906,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "GUESTVISION"; + b.group_list = "721,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "GVISION"; + b.group_list = "1102,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "HAIER"; + b.group_list = "709,223,323,317,1316,195,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "HALLMARK"; + b.group_list = "2,502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "HARVARD"; + b.group_list = "906,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "HAUPPAUGE"; + b.group_list = "1421,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "HEWLETT PACKARD"; + b.group_list = "1103,1002,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "HISENSE"; + b.group_list = "1219,908,819,223,1203,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "HITACHI"; + b.group_list = "410,507,815,607,808,2,502,710,1801,701,802,707,315,515,715,519,324,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "HYUNDAI"; + b.group_list = "1015,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ILO"; + b.group_list = "421,1608,1004,1903,216,520,1515,1912,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "IMA"; + b.group_list = "906,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "IN FOCUS"; + b.group_list = "601,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "INFINITY"; + b.group_list = "807,430,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "INITIAL"; + b.group_list = "1608,216,1110,1512,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "INSIGNIA"; + b.group_list = "1719,1619,1119,1718,911,520,323,115,914,213,318,1416,247,504,192,1242,1342,1442,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "INTEGRA"; + b.group_list = "719,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "INTEQ"; + b.group_list = "713,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "JANEIL"; + b.group_list = "19,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "JBL"; + b.group_list = "807,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "JC PENNEY"; + b.group_list = "704,2,102,502,112,312,512,7,601,310,402,802,103,803,604,806,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "JCB"; + b.group_list = "801,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "JENSEN"; + b.group_list = "2,502,914,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "JVC"; + b.group_list = "607,204,321,508,617,326,993,802,108,308,715,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "KAWASAKI"; + b.group_list = "196,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SAWASHO"; + b.group_list = "2,502,801,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "KAYPANI"; + b.group_list = "119,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "KEC"; + b.group_list = "805,906,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "KENWOOD"; + b.group_list = "2,502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "KLH"; + b.group_list = "23,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "KLOSS NOVABEAM"; + b.group_list = "408,19,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "KOGI"; + b.group_list = "1102,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "KONKA"; + b.group_list = "906,702,203,306,208,911,842,942,504,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "KTV"; + b.group_list = "906,3,703,805,608,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "KURAZAI"; + b.group_list = "701,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "LASONIC"; + b.group_list = "622,496,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "LEGEND"; + b.group_list = "213,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "LG"; + b.group_list = "15,2,606,502,102,117,814,324,435,802,307,609,217,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "LIQUIDVIDEO"; + b.group_list = "319,418,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "LODGENET"; + b.group_list = "1618,704,821,601,701,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "LOEWE"; + b.group_list = "722,807,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "LOGIK"; + b.group_list = "704,601,701,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "LUCE"; + b.group_list = "107,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "LUXMAN"; + b.group_list = "2,502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "LXI"; + b.group_list = "704,2,502,506,807,312,512,601,324,103,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MAGNASONIC"; + b.group_list = "706,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MAGNAVOX"; + b.group_list = "1019,807,2,502,919,1914,224,430,247,402,408,109,715,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MAJESTIC"; + b.group_list = "704,601,701,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MARANTZ"; + b.group_list = "807,719,2,502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MAXENT"; + b.group_list = "206,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MEDION"; + b.group_list = "922,421,417,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MEGATRON"; + b.group_list = "2,502,507,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MEI"; + b.group_list = "3,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MEMOREX"; + b.group_list = "2,502,506,706,115,704,601,1302,428,632,701,41,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MGA"; + b.group_list = "2,102,502,706,802,803,715,619,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MIDLAND"; + b.group_list = "704,713,7,312,103,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MINTEK"; + b.group_list = "216,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MINUTZ"; + b.group_list = "806,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MISAKAI"; + b.group_list = "520,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MITSUBISHI"; + b.group_list = "102,716,706,2,502,27,803,715,619,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MONIVISION"; + b.group_list = "205,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MONTGOMERY WARD"; + b.group_list = "704,701,601,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MOTEVA"; + b.group_list = "506,1902,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MOTOROLA"; + b.group_list = "603,901,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MTC"; + b.group_list = "2,102,502,112,512,3,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MULTITECH"; + b.group_list = "906,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MULTIVISION"; + b.group_list = "10,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "MYRON&DAVIS"; + b.group_list = "822,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "NAD"; + b.group_list = "2,502,512,120,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "NEC"; + b.group_list = "1040,719,2,102,502,901,602,111,715,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "NET TV"; + b.group_list = "206,14,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "NEXXTECH"; + b.group_list = "1806,318,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "NIKEI"; + b.group_list = "805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "NIKKO"; + b.group_list = "2,502,407,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "NIKO"; + b.group_list = "1915,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "NORCENT"; + b.group_list = "223,905,207,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "NTC"; + b.group_list = "407,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "OLEVIA"; + b.group_list = "1304,1802,1615,1815,1217,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ONCOMMAND"; + b.group_list = "721,1717,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ONKING"; + b.group_list = "805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ONWA"; + b.group_list = "906,805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "OPTIMUS"; + b.group_list = "618,120,39,739,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "OPTOMA"; + b.group_list = "1404,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "OPTONICA"; + b.group_list = "603,111,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ORION"; + b.group_list = "713,115,105,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PANASONIC"; + b.group_list = "1819,718,416,7,618,807,39,739,345,696,901,608,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PHILCO"; + b.group_list = "807,2,102,502,919,702,1417,408,109,715,901,402,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PHILIPS"; + b.group_list = "17,1019,807,22,20,422,122,222,322,2,520,919,521,621,709,1516,1017,430,247,901,402,408,109,210,310,715,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PHILIPS-MAGNAVOX"; + b.group_list = "807,22,322,919,224,430,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PILOT"; + b.group_list = "2,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PIONEER"; + b.group_list = "120,719,808,2,502,610,519,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PIVA"; + b.group_list = "1109,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PLANAR"; + b.group_list = "1302,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "POLAROID"; + b.group_list = "1319,1817,1104,819,918,914,1503,1215,504,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PORTLAND"; + b.group_list = "2,102,502,415,614,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PRECISION"; + b.group_list = "218,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PRICE CLUB"; + b.group_list = "112,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PRIMA"; + b.group_list = "1503,118,213,318,219,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PRINCETON GRAPHICS"; + b.group_list = "603,511,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PRISM"; + b.group_list = "7,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PROSCAN"; + b.group_list = "704,312,103,601,817,917,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PROTON"; + b.group_list = "820,2,502,1602,910,119,220,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PROTRON"; + b.group_list = "1303,1317,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PROVIEW"; + b.group_list = "1104,1204,1304,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "PULSAR"; + b.group_list = "713,2,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "QUASAR"; + b.group_list = "718,416,7,618,807,39,739,901,608,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "RADIO SHACK"; + b.group_list = "704,2,406,506,906,618,502,324,835,601,802,705,805,111,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "RCA"; + b.group_list = "704,2,406,7,11,611,811,312,514,720,102,502,601,817,917,835,901,103,803,211,912,114,519,320,420,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "REALISTIC"; + b.group_list = "704,2,406,506,906,618,502,601,324,802,705,805,111,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "RHAPSODY"; + b.group_list = "3,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "RUNCO"; + b.group_list = "713,719,712,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SAMPO"; + b.group_list = "14,206,2,502,119,802,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SAMSUNG"; + b.group_list = "112,309,209,512,302,502,2,102,110,818,895,437,802,103,609,12,212,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SAMSUX"; + b.group_list = "502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SAMTRON"; + b.group_list = "112,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SANSUI"; + b.group_list = "115,632,41,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SANTECA"; + b.group_list = "21,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SANYO"; + b.group_list = "506,311,612,2,428,802,412,619,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SCEPTRE"; + b.group_list = "1318,1814,516,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SCOTCH"; + b.group_list = "2,502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SCOTT"; + b.group_list = "1515,2,502,706,906,4,105,805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SEARS"; + b.group_list = "704,807,506,706,112,2,502,312,512,612,520,601,812,509,41,247,802,103,619,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SELECTRON"; + b.group_list = "1803,1603,1703,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SEMP"; + b.group_list = "1701,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SHARP"; + b.group_list = "509,913,907,603,2,502,224,228,202,111,813,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SHOGUN"; + b.group_list = "2,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SIGNATURE"; + b.group_list = "704,601,701,903,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SIMPSON"; + b.group_list = "402,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SONIC"; + b.group_list = "3,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SONY"; + b.group_list = "414,902,801,708,639,816,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SOUNDESIGN"; + b.group_list = "2,502,706,906,402,805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SOVA"; + b.group_list = "1901,1111,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SOYO"; + b.group_list = "1614,1714,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SPECTRA"; + b.group_list = "622,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SPECTRAVISION"; + b.group_list = "921,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SQUAREVIEW"; + b.group_list = "520,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SSS"; + b.group_list = "2,906,805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "STAR SIGHT"; + b.group_list = "8,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "STARLITE"; + b.group_list = "906,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SUPERSCAN"; + b.group_list = "812,509,247,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SUPERSONIC"; + b.group_list = "96,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SUPRA"; + b.group_list = "2,809,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SUPREMACY"; + b.group_list = "19,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SUPREME"; + b.group_list = "801,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SVA"; + b.group_list = "223,822,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SYLVANIA"; + b.group_list = "807,2,502,115,520,919,715,324,247,402,708,109,715,717,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SYMPHONIC"; + b.group_list = "906,520,324,247,4,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "SYNTAX"; + b.group_list = "1304,1615,1815,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TANDY"; + b.group_list = "603,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TATUNG"; + b.group_list = "709,421,901,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TECHNICS"; + b.group_list = "7,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TECHWOOD"; + b.group_list = "2,502,7,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TEKNIKA"; + b.group_list = "704,2,102,502,706,906,112,512,618,601,19,701,402,802,805,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TELECAPTION"; + b.group_list = "313,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TELERENT"; + b.group_list = "704,601,701,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TERA"; + b.group_list = "2,220,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TEVION"; + b.group_list = "421,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TMK"; + b.group_list = "2,502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TOSHIBA"; + b.group_list = "517,419,512,613,719,112,506,111,618,627,437,41,94,802,111,313,715,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "TRUTECH"; + b.group_list = "1504,1116,1713,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "UNIVERSAL"; + b.group_list = "806,310,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "VENTURER"; + b.group_list = "1919,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "VICTOR"; + b.group_list = "607,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "VIDEOCON"; + b.group_list = "1218,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "VIDTECH"; + b.group_list = "2,102,502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "VIEWSONIC"; + b.group_list = "1519,206,808,1003,1016,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "VIKING"; + b.group_list = "19,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "VIORE"; + b.group_list = "1403,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "VIZIO"; + b.group_list = "1518,1418,709,812,915,1702,606,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "WARDS"; + b.group_list = "704,807,2,102,502,706,601,408,109,310,111,513,806,701,402,4,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "WESTINGHOUSE"; + b.group_list = "915,13,1216,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "WHITE WESTINGHOUSE"; + b.group_list = "611,614,415,215,1402,324,609,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "YAMAHA"; + b.group_list = "618,2,102,502,"; + ctv.add(b); + } + { + Brand b = new Brand(); + b.name = "ZENITH"; + b.group_list = "713,502,606,409,710,415,507,714,405,712,15,916,8,2,115,224,324,326,228,430,632,435,437,903,505,"; + ctv.add(b); + } + + + /********************************************************************* + 空调品牌表 + **********************************************************************/ + { + Brand b = new Brand(); + b.name = "格力"; + b.group_list = "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "长虹"; + b.group_list = "45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "美的/东芝 "; + b.group_list = "25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "HiSense海信"; + b.group_list = "320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "松下/乐声"; + b.group_list = "110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "日立"; + b.group_list = "395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "志高"; + b.group_list = "75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "三菱"; + b.group_list = "165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "扬子"; + b.group_list = "521,522,523,524,525,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "科龙/华宝"; + b.group_list = "225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "奥克斯"; + b.group_list = "250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "海尔"; + b.group_list = "140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "富士通"; + b.group_list = "340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "夏普/声宝"; + b.group_list = "275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "惠而浦"; + b.group_list = "440,441,442,443,444,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "大金"; + b.group_list = "295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "LG"; + b.group_list = "385,386,387,388,389,390,391,392,393,394,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "杂牌"; + b.group_list = "495,500,503,510,511,513,515,517,519,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "华凌"; + b.group_list = "360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "TCL"; + b.group_list = "410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "格兰仕"; + b.group_list = "205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "三洋"; + b.group_list = "425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "NEC春兰"; + b.group_list = "475,476,477,478,479,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "新科"; + b.group_list = "480,481,482,483,484,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "澳柯玛"; + b.group_list = "470,471,472,473,474,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "伊莱克斯"; + b.group_list = "450,451,452,453,454,455,456,457,458,459,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "三星"; + b.group_list = "485,486,487,488,489,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "乐华"; + b.group_list = "445,446,447,448,449,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "开利"; + b.group_list = "490,491,492,493,494,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "约克"; + b.group_list = "460,461,462,463,464,465,466,467,468,469,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "麦克维尔"; + b.group_list = "505,506,507,508,509,"; + arc.add(b); + } + { + Brand b = new Brand(); + b.name = "外挂码表test"; + b.group_list = "32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,"; + arc.add(b); + } + } + + /********************************************************************* + * 国外各设备全部码组(同品牌表一样需要g_remote_num_tran 转换后才是最终的码组号) + * 国内设备全部码组就是从0开始按依次加到设备的最大码组数 + * 国内DVB_all_group 0 ~ 371 + * 国内ATV_all_group 0 ~ 549 + * 国内ARC_all_group 0 ~ 1000 + **********************************************************************/ + static short g_remote_all_group[][] =/*其中数组的第一个为总数*/ + { + //国外TV + {360, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 14, 15, 13, 17, 18, 19, 41, 22, 21, 23, 27, 39, 20, 46, + 94, 96, 102, 103, 104, 105, 106, 107, 108, 109, 110, 522, 111, 114, 115, 117, 118, 119, 120, 121, 122, 123, 126, 128, 134, 142, + 192, 195, 196, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 222, 221, 223, 224, + 228, 247, 291, 300, 302, 303, 304, 306, 305, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 326, 327, 341, 345, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 413, 412, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 428, 435, 430, 437, 447, 496, 502, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 112, 528, + 529, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 712, 615, 617, 618, 619, 620, 621, 622, 626, 627, 632, 639, + 696, 701, 702, 703, 704, 705, 706, 707, 708, 721, 710, 711, 614, 713, 709, 715, 716, 717, 718, 719, 720, 714, 722, 739, 741, 793, + 801, 802, 803, 804, 805, 806, 808, 807, 809, 810, 811, 812, 819, 814, 815, 816, 817, 818, 813, 820, 821, 822, 826, 835, 893, 842, + 894, 895, 901, 902, 903, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 942, 993, + 1002, 1003, 1004, 1014, 1015, 1016, 1017, 1018, 1919, 1040, 1102, 1103, 1104, 1109, 1110, 1111, 1112, 1115, 1116, 1117, 1118, 1119, 1202, 1203, 1204, 1215, + 1216, 1217, 1218, 1242, 1219, 1302, 1303, 1304, 1313, 1315, 1316, 1317, 1318, 1342, 1319, 1402, 1403, 1404, 1415, 1416, 1417, 1418, 1419, 1442, 1502, 1503, + 1504, 1512, 1515, 1019, 1517, 1518, 1602, 1519, 1603, 1608, 1719, 1615, 1617, 1616, 1618, 1619, 1640, 1701, 1702, 1703, 1710, 1713, 1714, 1716, 1717, 1718, + 1614, 1801, 1802, 1803, 1806, 1814, 1815, 1816, 1817, 1818, 1819, 1901, 1916, 1903, 1914, 1912, 1915, 1902, 1917, 1918, 1516, 1942,}, + //国外DVD + {315, + 0, 41, 42, 43, 44, 45, 46, 47, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 126, 140, 141, 142, 143, 144, 145, 146, + 147, 177, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 240, 241, 242, 243, 244, 245, 246, 247, 279, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 340, 341, 342, 343, 344, 345, 346, 347, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 440, 441, 442, 443, 444, 445, 446, 447, 456, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 540, 541, 542, 543, 544, 545, 546, + 547, 553, 591, 592, 593, 594, 595, 596, 597, 598, 599, 640, 641, 642, 643, 644, 645, 646, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 740, 741, 742, 743, 744, 745, 746, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 824, 840, 841, 842, 843, 844, 845, + 846, 868, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 940, 941, 942, 943, 944, 945, 946, 990, 991, 992, 993, 994, 995, 996, + 997, 998, 999, 1007, 1008, 1010, 1011, 1013, 1014, 1041, 1042, 1074, 1075, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1141, 1142, 1174, 1207, 1208, + 1209, 1210, 1211, 1212, 1213, 1214, 1241, 1242, 1274, 1276, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1340, 1341, 1342, 1374, 1376, 1377, 1407, 1408, + 1409, 1410, 1411, 1412, 1413, 1414, 1440, 1441, 1442, 1474, 1476, 1477, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1540, 1541, 1542, 1574, 1576, 1577, + 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1640, 1641, 1642, 1673, 1674, 1675, 1676, 1677, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1740, 1741, + 1742, 1773, 1774, 1775, 1776, 1806, 1807, 1808, 1809, 1810, 1812, 1813, 1840, 1841, 1842, 1873, 1874, 1906, 1907, 1908, 1909, 1910, 1912, 1913, 1940, 1941, + 1942, 1973, 1974,}, + //国外CBL&SAT + {213, + 48, 49, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 148, 149, 150, 152, 154, 155, 156, 157, 158, + 159, 160, 161, 162, 163, 164, 165, 166, 167, 248, 249, 250, 251, 252, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 411, 448, 449, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 548, 549, 550, 551, 552, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 644, 647, 648, 649, 650, 651, 654, 655, 656, 657, 658, 659, 660, 661, 662, 664, + 665, 666, 747, 748, 749, 750, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 847, 848, 849, 850, 851, + 852, 852, 853, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 947, 948, 950, 951, 952, 953, 954, 956, 957, 958, 959, + 960, 961, 962, 963, 964, 965, 966, 1005, 1077, 1077, 1078, 1105, 1106, 1177, 1205, 1206, 1278, 1305, 1306, 1378, 1406, 1478, 1505, 1506, 1578, 1777, + 1804, 1877, 1904, 1976, 1977,}, + //国外AUX + {501, + 24, 25, 26, 27, 29, 32, 33, 34, 35, 36, 37, 38, 39, 41, 47, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 98, 99, 124, 125, 126, 128, 131, 132, 133, 134, 135, + 136, 138, 139, 140, 142, 143, 147, 157, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 193, 199, 200, 201, 224, 225, 227, 228, 230, 233, 234, 236, 237, 238, 239, 243, 244, 245, 247, 252, + 257, 267, 268, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 291, 292, 299, + 300, 324, 325, 326, 327, 328, 330, 334, 335, 336, 337, 339, 340, 342, 345, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 398, 399, 400, 401, 424, 426, 428, 429, 430, + 431, 432, 435, 437, 438, 439, 441, 443, 446, 447, 456, 468, 469, 470, 471, 472, 473, 474, 475, 476, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 493, 494, 495, 498, 500, 524, 525, 526, 527, 528, 529, 530, 532, 534, 535, 537, 538, 539, + 540, 542, 543, 546, 553, 554, 558, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 591, 592, 593, 595, 596, 597, 598, 599, 624, 625, 626, 627, 628, 630, 631, 632, 634, 637, 639, 659, 663, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 691, 693, 695, 696, 699, 724, 726, + 727, 731, 732, 735, 737, 738, 739, 744, 759, 763, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 794, 796, 798, 824, 825, 826, 827, 830, 831, 832, 834, 835, 838, 852, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 883, 884, 885, 886, 887, 888, 891, 892, 894, 895, 897, 898, 924, 925, 927, 928, 931, + 932, 933, 935, 936, 937, 938, 939, 954, 959, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 979, 980, 981, 982, 983, + 984, 985, 987, 988, 991, 994, 997, 998, 999, 1010, 1013, 1042, 1074, 1075, 1077, 1105, 1107, 1140, 1174, 1177, 1208, 1211, 1212, 1214, 1240, 1274, + 1276, 1278, 1308, 1374, 1376, 1377, 1378, 1409, 1411, 1413, 1414, 1440, 1474, 1476, 1477, 1478, 1506, 1508, 1510, 1511, 1542, 1574, 1576, 1577, 1578, 1605, + 1606, 1607, 1609, 1610, 1611, 1641, 1642, 1673, 1674, 1675, 1676, 1677, 1705, 1706, 1707, 1708, 1773, 1774, 1775, 1776, 1777, 1804, 1805, 1808, 1813, 1873, + 1874, 1906, 1907, 1909, 1973, 1974, 1976,}, + + }; + + + /********************************************************************* + * 国外各设备码组号转换表 + **********************************************************************/ + static short g_remote_num_tran[] = + { + 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 70, 71 + , 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125 + , 126, 128, 131, 132, 133, 134, 135, 136, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 152, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175 + , 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219 + , 220, 221, 222, 223, 224, 225, 227, 228, 230, 233, 234, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268 + , 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315 + , 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 330, 334, 335, 336, 337, 339, 340, 341, 342, 343, 344, 345, 346, 347, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365 + , 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409 + , 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 424, 426, 428, 429, 430, 431, 432, 435, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460 + , 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 502, 504, 505, 506, 507 + , 508, 509, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 524, 525, 526, 527, 528, 529, 530, 532, 534, 535, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556 + , 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 601, 602 + , 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 617, 618, 619, 620, 621, 622, 624, 625, 626, 627, 628, 630, 631, 632, 634, 637, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 654, 655 + , 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 668, 669, 670, 671, 672, 673, 674, 675, 676, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 701, 702, 703 + , 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 724, 726, 727, 731, 732, 735, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 752, 753, 754, 755, 756 + , 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 801, 802, 803 + , 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 824, 825, 826, 827, 830, 831, 832, 834, 835, 838, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 855 + , 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 883, 884, 885, 886, 887, 888, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 901, 902, 903 + , 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 927, 928, 931, 932, 933, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 950, 951, 952, 953, 954 + , 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 979, 980, 981, 982, 983, 984, 985, 987, 988, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + //尤雷阳 2013-10-27 重新加了断行 + 1002, 1003, 1004, 1005, 1007, 1008, 1010, 1011, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1040, 1041, 1042, 1074, 1075, 1077, 1078, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, + 1117, 1118, 1119, 1140, 1141, 1142, 1174, 1177, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1240, 1241, 1242, 1274, 1276, 1278, 1302, 1303, 1304, 1305, 1306, 1307, + 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1340, 1341, 1342, 1374, 1376, 1377, 1378, 1402, 1403, 1404, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1440, 1441, + 1442, 1474, 1476, 1477, 1478, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1540, 1541, 1542, 1574, 1576, 1577, 1578, + 1602, 1603, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1640, 1641, 1642, 1673, 1674, 1675, 1676, 1677, 1701, 1702, 1703, 1705, 1706, 1707, 1708, 1709, 1710, 1711, + 1712, 1713, 1714, 1716, 1717, 1718, 1719, 1740, 1741, 1742, 1773, 1774, 1775, 1776, 1777, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1840, 1841, + 1842, 1873, 1874, 1877, 1901, 1902, 1903, 1904, 1906, 1907, 1908, 1909, 1910, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1940, 1941, 1942, 1973, 1974, 1976, 1977 + }; + + +} + diff --git a/app/src/main/java/com/yonsz/z1/device/tv/Cn2Spell.java b/app/src/main/java/com/yonsz/z1/device/tv/Cn2Spell.java new file mode 100644 index 0000000..3eca29e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/Cn2Spell.java @@ -0,0 +1,78 @@ +package com.yonsz.z1.device.tv; + + +import net.sourceforge.pinyin4j.PinyinHelper; +import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; +import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; +import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; + +/** + * 汉字转换位汉语拼音,英文字符不变 + */ +public class Cn2Spell { + + public static StringBuffer sb = new StringBuffer(); + + /** + * 获取汉字字符串的首字母,英文字符不变 + * 例如:阿飞→af + */ + public static String getPinYinHeadChar(String chines) { + sb.setLength(0); + char[] chars = chines.toCharArray(); + HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); + defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); + defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); + for (int i = 0; i < chars.length; i++) { + if (chars[i] > 128) { + try { + sb.append(PinyinHelper.toHanyuPinyinStringArray(chars[i], defaultFormat)[0].charAt(0)); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + sb.append(chars[i]); + } + } + return sb.toString(); + } + + /** + * 获取汉字字符串的第一个字母 + */ + public static String getPinYinFirstLetter(String str) { + sb.setLength(0); + char c = str.charAt(0); + String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c); + if (pinyinArray != null) { + sb.append(pinyinArray[0].charAt(0)); + } else { + sb.append(c); + } + return sb.toString(); + } + + /** + * 获取汉字字符串的汉语拼音,英文字符不变 + */ + public static String getPinYin(String chines) { + sb.setLength(0); + char[] nameChar = chines.toCharArray(); + HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); + defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); + defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); + for (int i = 0; i < nameChar.length; i++) { + if (nameChar[i] > 128) { + try { + sb.append(PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0]); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + sb.append(nameChar[i]); + } + } + return sb.toString(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/device/tv/Device.java b/app/src/main/java/com/yonsz/z1/device/tv/Device.java new file mode 100644 index 0000000..97f0183 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/Device.java @@ -0,0 +1,10 @@ +package com.yonsz.z1.device.tv; + +/** + * Created by Administrator on 2017/6/19. + */ + +public class Device { + public static String tmp_brand; //临时品牌 + public static String tmp_group_list; //临时码组列表 +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/FanItem.java b/app/src/main/java/com/yonsz/z1/device/tv/FanItem.java new file mode 100644 index 0000000..f9dc752 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/FanItem.java @@ -0,0 +1,104 @@ +package com.yonsz.z1.device.tv; + +/** + * 扇形Item数据
+ * Created on 2016/4/22 + * + * @author yekangqi + */ +public class FanItem{ + private int id; + //数值,跟显示有关 + private float value; + //实际上的数据 + private float realValue; + //百分比 + private int percent; + //颜色 + private int color; + //角度 + private float angle; + //开始角度 + private float startAngle; + //顺序 + private int index; + + public FanItem(int id, float value, int color) { + this.setId(id); + this.setValue(value); + this.setColor(color); + } + + @Override + public String toString() { + return "FanItem{" + + "id=" + getId() + + ", angle=" + getAngle() + + ", startAngle=" + getStartAngle() + + '}'; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public float getValue() { + return value; + } + + public void setValue(float value) { + this.value = value; + } + + public float getRealValue() { + return realValue; + } + + public void setRealValue(float realValue) { + this.realValue = realValue; + } + + public int getPercent() { + return percent; + } + + public void setPercent(int percent) { + this.percent = percent; + } + + public int getColor() { + return color; + } + + public void setColor(int color) { + this.color = color; + } + + public float getAngle() { + return angle; + } + + public void setAngle(float angle) { + this.angle = angle; + } + + public float getStartAngle() { + return startAngle; + } + + public void setStartAngle(float startAngle) { + this.startAngle = startAngle; + } + + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/FanList1Activity.java b/app/src/main/java/com/yonsz/z1/device/tv/FanList1Activity.java new file mode 100644 index 0000000..f75fdc6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/FanList1Activity.java @@ -0,0 +1,398 @@ +package com.yonsz.z1.device.tv; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.DeviceListEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.device.fan.FanLearnActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.PingYinUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_CONN_DEVICE_SUCCESS; + +/** + * Created by Administrator on 2017/10/10. + */ +public class FanList1Activity extends BaseActivity { + private TitleView mTitleView; + private ListView brandsListView; + public MyAdapter adapter; + private ArrayList fan;//品牌列表 + private List list; + private List stringList; + private EditText searchEt; + Handler myhandler = new Handler(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_brand_list); + initView(); + initListener(); + queryDeviceBrand(); + } + + private void queryDeviceBrand() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", FAN_TAG); + netWorkUtil.requestPostByAsynew(QUERY_DEVICE_BRAND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceBrand", "ShareDeviceActivity onSuccess()" + respone); + DeviceListEntity obj = JSON.parseObject(respone, DeviceListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + + private void initView() { + searchEt = (EditText) findViewById(R.id.et_search); + stringList = new ArrayList<>(); + fan = new ArrayList(); + brandsListView = (ListView) findViewById(R.id.listview_brand_list); + mTitleView = (TitleView) findViewById(R.id.title_brand_list); + mTitleView.setHead(R.string.select_fan_brand); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + adapter = new MyAdapter(this); + brandsListView.setAdapter(adapter); + } + + private void initListener() { + searchEt.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + + @Override + public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + + @Override + public void afterTextChanged(Editable s) { + /**这是文本框改变之后 会执行的动作 + * 因为我们要做的就是,在文本框改变的同时,我们的listview的数据也进行相应的变动,并且如一的显示在界面上。 + * 所以这里我们就需要加上数据的修改的动作了。 + */ + myhandler.post(eChanged); + } + }); + } + + /** + * 关于界面UI的更新,可以使用Handler,通过Post一个Runnable去更新,Runnable会去根据搜索框的文本对mData里的数据进行更新。 + */ + Runnable eChanged = new Runnable() { + + @Override + public void run() { + String data = searchEt.getText().toString(); + fan.clear(); + getmDataSub(stringList, data); + adapter.notifyDataSetChanged(); + } + }; + + /** + * 可能对mData的理解会有点问题,因为数据更新完后,每一次的筛选数据都是放在mData里,那么原本的数据呢,当然就是在mListTitle和mListText里。根据获得数据的getmDataSub的代码即可知。 + */ + + private void getmDataSub(List mDataSubs, String data) { + int length = mDataSubs.size(); + for (int i = 0; i < length; ++i) { + if (mDataSubs.get(i).contains(data) || PingYinUtil.getPingYin(mDataSubs.get(i)).contains(data)) { + fan.add(mDataSubs.get(i)); + } + } + fan.add("其他品牌"); + } + + + @Override + public void onResume() { + super.onResume(); + // queryDeviceBrand(); + searchEt.setText(""); + } + + public void load_brand() { + fan.clear(); + adapter.notifyDataSetChanged(); + //再添加其余的品牌列表 + for (int i = 0; i < stringList.size(); i++) { + fan.add(stringList.get(i)); + if (i == stringList.size() - 1) { + fan.add("其他品牌"); + } + } + adapter.notifyDataSetChanged(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + String deviceId = entity1.getObj().getDeviceId(); + switch (deviceId) { + case FAN_TAG: + Intent intent = new Intent(FanList1Activity.this, FanLearnActivity.class); + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("fanName", entity1.getObj().getDeviceBrand().toString()); + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + finish(); + break; + } + break; + case QUERY_DEVICE_BRAND_FAIL: + + break; + case QUERY_DEVICE_BRAND_SUCCESS: + DeviceListEntity entity2 = (DeviceListEntity) msg.obj; + stringList = entity2.getObj(); + load_brand(); + break; + case UPDATE_CONN_DEVICE_SUCCESS: + AddChildDeviceEntity obj = (AddChildDeviceEntity) msg.obj; + Intent intent = new Intent(FanList1Activity.this, FanLearnActivity.class); + intent.putExtra("deviceName", obj.getObj().getDeviceBrand()); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + break; + } + } + + private class MyAdapter extends BaseAdapter { + private Context context; + private LayoutInflater inflater; + + public MyAdapter(Context context) { + super(); + this.context = context; + inflater = LayoutInflater.from(context); + + } + + @Override + public int getCount() { + return fan.size(); + } + + @Override + public Object getItem(int arg0) { + return arg0; + } + + @Override + public long getItemId(int arg0) { + return arg0; + } + + @Override + public View getView(final int position, View view, ViewGroup arg2) { + if (view == null) { + view = inflater.inflate(R.layout.brandlist_listview_item, null); + } + final TextView edit = (TextView) view.findViewById(R.id.name); + if (position == fan.size()) { + // edit.setText("其他品牌"); + } else { + edit.setText(fan.get(position)); + } + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!TextUtils.isEmpty(getIntent().getExtras().get("nameTag").toString())) { + if (position == fan.size() - 1) { + showModifyPop(0, 0); + } else { + updateConnDevice(fan.get(position)); + } + } else { + if (position == fan.size() - 1) { + showModifyPop(0, 0); + } else { + addChildDevice(getIntent().getExtras().get("ziId").toString(), FAN_TAG, fan.get(position)); + } + } + } + }); + return view; + } + + public void showModifyPop(final int adapterPosition, final int i) { + ConfirmNameDialog dialog = new ConfirmNameDialog(FanList1Activity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (!TextUtils.isEmpty(getIntent().getExtras().get("nameTag").toString())) { + updateConnDevice(positioName); + } else { + if (TextUtils.isEmpty(positioName)) { + ToastUtil.show(FanList1Activity.this, "品牌不能为空"); + } else { + addChildDevice(getIntent().getExtras().get("ziId").toString(), FAN_TAG, positioName); + } + } + break; + } + } + }); + dialog.setMaxEms(10); + dialog.setHintName(R.string.Enter_brand_name); + dialog.setContent(R.string.Brand_name); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void updateConnDevice(String positioName) { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", getIntent().getExtras().get("id").toString()); + map.put("deviceBrand", positioName.trim()); + netWorkUtil.requestPostByAsynew(UPDATE_CONN_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateConnDevice", "ShareDeviceActivity onSuccess()" + respone); + AddChildDeviceEntity obj = JSON.parseObject(respone, AddChildDeviceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_CONN_DEVICE_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_CONN_DEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_CONN_DEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceId", deviceType); + map.put("deviceType", deviceType); + map.put("deviceBrand", deviceBrand); + util.requestPostByAsynew(NetWorkUrl.ADD_CHILD_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + AddChildDeviceEntity entity = JSON.parseObject(respone, AddChildDeviceEntity.class); + Log.i("addChildDevice", "onSuccess: " + respone); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/FanListActivity.java b/app/src/main/java/com/yonsz/z1/device/tv/FanListActivity.java new file mode 100644 index 0000000..4c14e49 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/FanListActivity.java @@ -0,0 +1,461 @@ +package com.yonsz.z1.device.tv; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.DeviceListEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version4.devicelist.CharacterParser; +import com.yonsz.z1.version4.devicelist.ClearEditText; +import com.yonsz.z1.version4.devicelist.PinyinComparator; +import com.yonsz.z1.version4.devicelist.SortAdapter; +import com.yonsz.z1.version4.devicelist.SortModel; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_SUCCESS; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.NetWorkUrl.QUERY_DEVICE_BRAND; + +/** + * Created by Administrator on 2017/10/10. + */ +public class FanListActivity extends BaseActivity { + private TitleView mTitleView; + private List stringList; + private EditText searchEt; + private ListView sortListView; + private com.yonsz.z1.version4.devicelist.SideBar sideBar; + private TextView dialog; + private SortAdapter adapter; + private ClearEditText mClearEditText; + private String rid; + private String deviceType; + /** + * 汉字转换成拼音的类 + */ + private CharacterParser characterParser; + private List SourceDateList; + /** + * 根据拼音来排列ListView里面的数据类 + */ + private PinyinComparator pinyinComparator; + private String ziId; + private LoadingDialog mLoadingDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_brand_list4); + deviceType = getIntent().getExtras().get("deviceType").toString(); + initView(); + queryDeviceBrand(); + } + + private void queryDeviceBrand() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", deviceType); + netWorkUtil.requestPostByAsynew(QUERY_DEVICE_BRAND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceBrand", "ShareDeviceActivity onSuccess()" + respone); + DeviceListEntity obj = JSON.parseObject(respone, DeviceListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("关闭")) { + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + searchEt = (EditText) findViewById(R.id.et_search); + stringList = new ArrayList<>(); + mTitleView = (TitleView) findViewById(R.id.title_brand_list); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (deviceType) { + case FAN_TAG: + mTitleView.setHead(R.string.select_fan_brand); + break; + case SWEEP_TAG: + mTitleView.setHead(R.string.select_sweep_brand); + break; + case TV_TAG: + mTitleView.setHead(R.string.select_tvone_brand); + break; + case TVONE_TAG: + mTitleView.setHead(R.string.select_tv_brand); + break; + } + + //实例化汉字转拼音类 + characterParser = CharacterParser.getInstance(); + pinyinComparator = new PinyinComparator(); + sideBar = (com.yonsz.z1.version4.devicelist.SideBar) findViewById(R.id.sidrbar); + dialog = (TextView) findViewById(R.id.dialog); + sideBar.setTextView(dialog); + //设置右侧触摸监听 + sideBar.setOnTouchingLetterChangedListener(new com.yonsz.z1.version4.devicelist.SideBar.OnTouchingLetterChangedListener() { + + @Override + public void onTouchingLetterChanged(String s) { + //该字母首次出现的位置 + int position = adapter.getPositionForSection(s.charAt(0)); + if (position != -1) { + sortListView.setSelection(position); + } + } + }); + sortListView = (ListView) findViewById(R.id.country_lvcountry); + sortListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + + subsetAdd(ziId, deviceType, ((SortModel) adapter.getItem(position)).getName()); + /*switch (deviceType) { + case FAN_TAG: + addChildDevice(ziId, deviceType, ((SortModel) adapter.getItem(position)).getName()); + break; + case SWEEP_TAG: + addChildDevice(ziId, deviceType, ((SortModel) adapter.getItem(position)).getName()); + break; + case TV_TAG: + addChildDevice(ziId, deviceType, ((SortModel) adapter.getItem(position)).getName()); + break; + case TVONE_TAG: + addChildDevice(ziId, deviceType, ((SortModel) adapter.getItem(position)).getName()); + break; + }*/ + } + }); + + mClearEditText = (ClearEditText) findViewById(R.id.et_search); + //根据输入框输入值的改变来过滤搜索 + mClearEditText.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + //当输入框里面的值为空,更新为原来的列表,否则为过滤数据列表 + filterData(s.toString()); + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case ADD_CHILDDEVICE_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + String deviceId = entity1.getObj().getDeviceId(); + Intent intent; + switch (deviceId) { + case FAN_TAG: + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(FanListActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanListActivity.this, DeviceControlActivity.class); + } + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("fanName", entity1.getObj().getDeviceBrand().toString()); + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + finish(); + break; + case SWEEP_TAG: + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(FanListActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanListActivity.this, DeviceControlActivity.class); + } + intent.putExtra("sweepStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("sweepName", entity1.getObj().getDeviceBrand().toString()); + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + finish(); + break; + case TV_TAG: + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(FanListActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanListActivity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("tvName", entity1.getObj().getAssistBrand().toString()); + intent.putExtra("assistFlag", "1"); + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + finish(); + break; + case TVONE_TAG: + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(FanListActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanListActivity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("tvName", entity1.getObj().getDeviceBrand().toString()); + intent.putExtra("assistFlag", "0"); + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + finish(); + break; + } + break; + case QUERY_DEVICE_BRAND_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case ADD_CHILDDEVICE_FAIL: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + case QUERY_DEVICE_BRAND_SUCCESS: + DeviceListEntity entity2 = (DeviceListEntity) msg.obj; + stringList = entity2.getObj(); + stringList.add(0, "其他"); + SourceDateList = filledData(stringList); + // 根据a-z进行排序源数据 + Collections.sort(SourceDateList, pinyinComparator); + adapter = new SortAdapter(this, SourceDateList); + sortListView.setAdapter(adapter); + break; + } + } + + /** + * 为ListView填充数据 + * + * @param date + * @return + */ + private List filledData(List date) { + List mSortList = new ArrayList(); + if (date.size() != 0) { + for (int i = 0; i < date.size(); i++) { + SortModel sortModel = new SortModel(); + sortModel.setName(date.get(i)); + //汉字转换成拼音 + String pinyin = characterParser.getSelling(date.get(i)); + String sortString = pinyin.substring(0, 1).toUpperCase(); + // 正则表达式,判断首字母是否是英文字母 + if (sortString.matches("[A-Z]")) { + sortModel.setSortLetters(sortString.toUpperCase()); + } else { + sortModel.setSortLetters("#"); + } + mSortList.add(sortModel); + } + } else { + + } + return mSortList; + } + + /** + * 根据输入框中的值来过滤数据并更新ListView + * + * @param filterStr + */ + private void filterData(String filterStr) { + List filterDateList = new ArrayList(); + + if (TextUtils.isEmpty(filterStr)) { + filterDateList = SourceDateList; + } else { + filterDateList.clear(); + for (SortModel sortModel : SourceDateList) { + String name = sortModel.getName(); + if (name.indexOf(filterStr.toString()) != -1 || characterParser.getSelling(name).startsWith(filterStr.toString())) { + filterDateList.add(sortModel); + } + } + } + + // 根据a-z进行排序 + Collections.sort(filterDateList, pinyinComparator); + adapter.updateListView(filterDateList); + } + private void subsetAdd(String ziId, String deviceType, String deviceBrand) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", "0"); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + map.put("addressId", localAddAddressId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + /*initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceId", deviceType); + map.put("deviceType", deviceType); + map.put("deviceBrand", deviceBrand); + util.requestPostByAsynew(NetWorkUrl.ADD_CHILD_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + AddChildDeviceEntity entity = JSON.parseObject(respone, AddChildDeviceEntity.class); + Log.i("addChildDevice", "onSuccess: " + respone); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/OnFanItemClickListener.java b/app/src/main/java/com/yonsz/z1/device/tv/OnFanItemClickListener.java new file mode 100644 index 0000000..72a3dc5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/OnFanItemClickListener.java @@ -0,0 +1,21 @@ +package com.yonsz.z1.device.tv; + +/** + * 扇形的点击事件回调
+ * Created on 2016/4/22 + * + * @author yekangqi + */ +public interface OnFanItemClickListener { + /** + * 扇形点击事件 + * + * @param fanItem + */ + void onFanClick(FanItem fanItem); + + void onFanLongClick(FanItem fanItem); + + void onUp(FanItem fanItem); + +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/PieChartView.java b/app/src/main/java/com/yonsz/z1/device/tv/PieChartView.java new file mode 100644 index 0000000..e064ed1 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/PieChartView.java @@ -0,0 +1,686 @@ +package com.yonsz.z1.device.tv; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.PointF; +import android.graphics.Rect; +import android.graphics.RectF; +import android.os.Build; +import android.os.Handler; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; + +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * 可点击的扇形图
+ * Created on 2016/3/23 + * + * @author yekangqi + */ +public class PieChartView extends View { + private static final String TAG = "PieChartView"; + private static final int Gravity_TOP = 0; + private static final int Gravity_CENTRE = 1; + private static final int Gravity_FIXXY = 2; + private RectF FanRectF;//主绘图区域 + private RectF offsetRectF;//偏移的区域 + private Paint p;//画笔 + private PointF centre;//圆心 + private PointF startPoint;//开始画扇形的开始点 + private float radius;//外圆的半径 + private float centreRadius;//内圆半径,不可点击 + private int firstOffset = 0;//第一个扇形的偏移值(突出效果) + private List datas;//扇形Item数据 + private OnFanItemClickListener onFanClick;//单击回调 + private boolean isFistOffSet;//是否 第一个扇形的偏移值 + private double SO = -1;//左边到圆心距离 + private int Gravity = Gravity_TOP;//重力 + private Handler handler; + private boolean isUp = false; + + public PieChartView(Context context) { + super(context); + init(context, null); + } + + public PieChartView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + public PieChartView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public PieChartView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(context, attrs); + } + + /** + * 初始化 + * + * @param context + * @param attrs + */ + private void init(Context context, AttributeSet attrs) { + int lableTextSize = 0; + if (null != context && null != attrs) { + TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.PieChartView); + Gravity = ta.getInt(R.styleable.PieChartView_gravity, Gravity_TOP); + centreRadius = ta.getDimensionPixelSize(R.styleable.PieChartView_centreRadius, 0); + firstOffset = ta.getDimensionPixelSize(R.styleable.PieChartView_firstOffset, 0); + lableTextSize = ta.getDimensionPixelSize(R.styleable.PieChartView_lableTextSize, 0); + ta.recycle(); + } + + // 创建画笔 + p = new Paint(); + p.setAntiAlias(true); + p.setTextSize(lableTextSize); + p.setTextAlign(Paint.Align.CENTER); + + setIsFistOffSet(firstOffset > 0); + if (isInEditMode()) { + p.setTextSize(32); + datas = new ArrayList<>(); + datas.add(new FanItem(1, 75, Color.GRAY)); + datas.add(new FanItem(2, 15, Color.GREEN)); + datas.add(new FanItem(3, 60, Color.DKGRAY)); + datas.add(new FanItem(4, 25, Color.GREEN)); + datas.add(new FanItem(5, 90, Color.BLUE)); + initDatas(datas); + } + } + + public void setDatas(List datas) { + this.datas = datas; + initDatas(this.datas); + } + + public List getDatas() { + return datas; + } + + /** + * 设置是否偏移 + * + * @param isFistOffSet + */ + public void setIsFistOffSet(boolean isFistOffSet) { + this.isFistOffSet = isFistOffSet; + } + + /** + * 获取绘制矩形 + * + * @return + */ + public RectF getFanRectF() { + return FanRectF; + } + + /** + * 设置可点击的扇形数据 + * + * @param datas 数据源 + * @param productColors 颜色 + * @param minClickAbleAreaPercent 可点击的最小百分比(如果比这百分比小就用这个的) + */ + public void setFanClickAbleData(double[] datas, int[] productColors, double minClickAbleAreaPercent, Handler handler) { + this.handler = handler; + if (null == datas || datas.length > productColors.length) { + return; + } + float totalAll = 0f; + for (double value : datas) { + totalAll += value; + } + double blankValue = totalAll * minClickAbleAreaPercent; + List itemList = new ArrayList<>(); + for (int i = 0; i < datas.length; i++) { + //修正点击范围 + Double value = datas[i]; + if (value < blankValue) { + value = blankValue; + } + FanItem item = new FanItem(i, Float.parseFloat(value.toString()), productColors[i]); + item.setRealValue((float) datas[i]); + item.setPercent((int) (100 * datas[i] / totalAll)); + itemList.add(item); + } + setDatas(itemList); + postInvalidate(); + } + + /** + * 移动到第一个 + * + * @param first + */ + public void setToFirst(FanItem first) { + if (null != first && null != datas && first.getIndex() != 0) { + Log.d(TAG, "排序前" + datas.toString()); + List afterList = datas.subList(first.getIndex(), datas.size()); + List beforeList = datas.subList(0, first.getIndex()); + + this.datas = new ArrayList<>(); + for (int i = 0; i < afterList.size(); i++) { + datas.add(afterList.get(i)); + } + for (int i = 0; i < beforeList.size(); i++) { + datas.add(beforeList.get(i)); + } + initDatas(datas); + Log.d(TAG, "排序后" + datas.toString()); + } + } + + /** + * 初始化角度数据 + * + * @param datas + */ + private void initDatas(List datas) { + if (null == datas) { + return; + } + float total = 0; + for (int i = 0; i < datas.size(); i++) { + total += datas.get(i).getValue(); + } + float startAngle = -1; + for (int i = 0; i < datas.size(); i++) { + FanItem f = datas.get(i); + f.setIndex(i); + f.setAngle(360 * (f.getValue() / total)); + //第一个开始 + if (-1 == startAngle) { + startAngle = 90 - f.getAngle() / 2; + } + if (startAngle < 0) { + startAngle = startAngle + 360; + } else if (startAngle > 360) { + startAngle = startAngle - 360; + } + f.setStartAngle(startAngle); + startAngle = startAngle + f.getAngle(); + } + } + + /** + * 扇形的绘图信息 + */ + private void initFanDrawAbleInfo() { + if (null == FanRectF) { + switch (Gravity) { + case Gravity_TOP: { + FanRectF = new RectF(0, 0, getWidth(), getWidth()); + break; + } + case Gravity_CENTRE: { + int w = getWidth(); + int h = getHeight(); + if (w == h) { + FanRectF = new RectF(0, 0, w, w); + } else if (h > w) { + FanRectF = new RectF(0, (h - w) / 2, w, w); + } else if (w > h) { + FanRectF = new RectF((w - h) / 2, 0, h, h); + } + break; + } + case Gravity_FIXXY: { + FanRectF = new RectF(0, 0, getWidth(), getHeight()); + break; + } + } + + } + if (null == offsetRectF) { + offsetRectF = new RectF(0, firstOffset, FanRectF.width(), FanRectF.height() + firstOffset); + } + if (null == centre) { + centre = new PointF(FanRectF.centerX(), FanRectF.centerY()); + } + if (null == startPoint) { + startPoint = new PointF(FanRectF.width(), FanRectF.height() / 2); + } + if (SO == -1) { + SO = getDistance(startPoint, centre); + } + radius = FanRectF.width() / 2; + } + + /** + * 在扇形的对角线中间绘制文字 + * + * @param canvas + * @param item + * @param txtCentre + */ + private void drawText(Canvas canvas, RectF txtCentre, FanItem item) { + float angle = (item.getStartAngle() + item.getAngle() + item.getStartAngle()) / 2; + Log.d(TAG, "开始 :" + item.getStartAngle() + " 结束:" + (item.getStartAngle() + item.getAngle()) + " 中心:" + angle); + String str = item.getPercent() + "%"; + Rect txtRect = new Rect(); + p.getTextBounds(str, 0, str.length(), txtRect); + float cenX = (float) (txtCentre.centerX() + (radius - txtRect.height() - txtRect.width()) * Math.cos(Math.toRadians(angle))); + float cexY = (float) (txtCentre.centerY() + (radius - txtRect.height() - txtRect.width()) * Math.sin(Math.toRadians(angle))); + p.setColor(Color.WHITE); + canvas.drawText(str, cenX, cexY, p); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (null == datas) { + return; + } + initFanDrawAbleInfo(); + for (int i = 0; i < datas.size(); i++) { + RectF drawRect; + if (isFistOffSet && 0 == i && datas.size() >= 3) { + drawRect = offsetRectF; + } else { + drawRect = FanRectF; + } + FanItem item = datas.get(i); + p.setColor(item.getColor()); + canvas.drawArc(drawRect, item.getStartAngle(), item.getAngle(), true, p); + drawText(canvas, drawRect, item); + } + } + + + private static long lastClickTime;//防止快速点击 + float xDown, yDown, xUp; + public static boolean isLongClickModule1 = false; + public static boolean isLongClicking = false; + double angle; + FanItem f; + + @Override + public boolean onTouchEvent(MotionEvent e) { + if (e.getAction() == MotionEvent.ACTION_DOWN) { + xDown = e.getX(); + yDown = e.getY(); + isUp = false; + Log.i("OnTouchListenerDown", "TvControlActivity onTouch()" + "按下了"); + handler.postDelayed(new Runnable() { + @Override + public void run() { + if (!isUp) { + Log.i("OnTouchListenerDown", "TvControlActivity onTouch()" + "我开始长按了根据点击的区域发送长按的命令"); + isLongClickModule1 = true; + //根据点击的区域发送长按的命令 + if (isLongClickModule1 && !isLongClicking) { + isLongClicking = true; + Log.v("OnTouchListener", "long"); + if (null != centre && null != datas && null != onFanClick && System.currentTimeMillis() - lastClickTime > 200) { + PointF A = new PointF(xDown, yDown); + double AO = getDistance(A, centre);//A到圆心 + if (AO <= SO && AO > centreRadius)//在环内 + { + double AS = getDistance(A, startPoint);//A到开始点 + angle = Math.toDegrees(Math.acos((AO * AO + SO * SO - AS * AS) / (2 * AO * SO))); + //处理优角 + if (A.y < startPoint.y) { + angle = 360 - angle; + } + Log.d(TAG, "点击的angle_long:" + angle); + //验证角度在哪个扇形里面 + for (int i = 0; i < datas.size(); i++) { + f = datas.get(i); + double endAngle = f.getStartAngle() + f.getAngle(); + boolean isClick = false; + if (endAngle <= 360) { + isClick = angle >= f.getStartAngle() && angle <= endAngle; + } else { + double after360 = endAngle - 360; + if (angle >= f.getStartAngle() && angle <= 360) { + isClick = true; + } + if (angle >= 0 && angle <= after360) { + isClick = true; + } + } + if (isClick) { + onFanClick.onFanLongClick(f); + break; + } + } + lastClickTime = System.currentTimeMillis(); + } + } + } + } else { + Log.i("OnTouchListenerDown", "TvControlActivity onTouch()" + "我已经抬起了根据点击的区域发送点击的命令"); + isLongClickModule1 = false; + //根据点击的区域发送点击的命令 + if (null != centre && null != datas && null != onFanClick) { + PointF A = new PointF(xDown, yDown); + double AO = getDistance(A, centre);//A到圆心 + if (AO <= SO && AO > centreRadius)//在环内 + { + double AS = getDistance(A, startPoint);//A到开始点 + angle = Math.toDegrees(Math.acos((AO * AO + SO * SO - AS * AS) / (2 * AO * SO))); + //处理优角 + if (A.y < startPoint.y) { + angle = 360 - angle; + } + Log.d(TAG, "点击的angle_click:" + angle); + //验证角度在哪个扇形里面 + for (int i = 0; i < datas.size(); i++) { + f = datas.get(i); + double endAngle = f.getStartAngle() + f.getAngle(); + boolean isClick = false; + if (endAngle <= 360) { + isClick = angle >= f.getStartAngle() && angle <= endAngle; + } else { + double after360 = endAngle - 360; + if (angle >= f.getStartAngle() && angle <= 360) { + isClick = true; + } + if (angle >= 0 && angle <= after360) { + isClick = true; + } + } + if (isClick) { + onFanClick.onFanClick(f); + break; + } + } + lastClickTime = System.currentTimeMillis(); + } + } + } + } + }, 200); + } + if (e.getAction() == MotionEvent.ACTION_UP) { + isUp = true; + if (null != centre && null != datas && null != onFanClick) { + PointF A = new PointF(xDown, yDown); + double AO = getDistance(A, centre);//A到圆心 + if (AO <= SO && AO > centreRadius)//在环内 + { + double AS = getDistance(A, startPoint);//A到开始点 + angle = Math.toDegrees(Math.acos((AO * AO + SO * SO - AS * AS) / (2 * AO * SO))); + //处理优角 + if (A.y < startPoint.y) { + angle = 360 - angle; + } + Log.d(TAG, "点击的angle_up1:" + angle); + //验证角度在哪个扇形里面 + for (int i = 0; i < datas.size(); i++) { + f = datas.get(i); + double endAngle = f.getStartAngle() + f.getAngle(); + boolean isClick = false; + if (endAngle <= 360) { + isClick = angle >= f.getStartAngle() && angle <= endAngle; + } else { + double after360 = endAngle - 360; + if (angle >= f.getStartAngle() && angle <= 360) { + isClick = true; + } + if (angle >= 0 && angle <= after360) { + isClick = true; + } + } + if (isClick) { + onFanClick.onUp(f); + break; + } + } + lastClickTime = System.currentTimeMillis(); + } else { + Log.d(TAG, "点击的angle_up_out:" + angle); + onFanClick.onUp(f); + } + } + if (isLongClickModule1) { + //如果是长按了做取消的动作 + Log.i("OnTouchListenerUp", "TvControlActivity onTouch()" + "如果是长按了做取消的动作"); + } else { + Log.i("OnTouchListenerUp", "TvControlActivity onTouch()" + "根据点击的区域消除点击的背景"); + } + if (isLongClickModule1) { + isLongClickModule1 = false; + isLongClicking = false; + } + } + + /*if (e.getAction() == MotionEvent.ACTION_DOWN) { + xDown = e.getX(); + yDown = e.getY(); + Log.v("OnTouchListener", "Down"); + Log.d(TAG, "*******ACTION_UP*******"); + // if (null != centre && null != datas && null != onFanClick && System.currentTimeMillis() - lastClickTime > 200) { + if (null != centre && null != datas && null != onFanClick) { + PointF A = new PointF(e.getX(), e.getY()); + double AO = getDistance(A, centre);//A到圆心 + if (AO <= SO && AO > centreRadius)//在环内 + { + double AS = getDistance(A, startPoint);//A到开始点 + angle = Math.toDegrees(Math.acos((AO * AO + SO * SO - AS * AS) / (2 * AO * SO))); + //处理优角 + if (A.y < startPoint.y) { + angle = 360 - angle; + } + Log.d(TAG, "点击的angle_click:" + angle); + //验证角度在哪个扇形里面 + for (int i = 0; i < datas.size(); i++) { + f = datas.get(i); + double endAngle = f.getStartAngle() + f.getAngle(); + boolean isClick = false; + if (endAngle <= 360) { + isClick = angle >= f.getStartAngle() && angle <= endAngle; + } else { + double after360 = endAngle - 360; + if (angle >= f.getStartAngle() && angle <= 360) { + isClick = true; + } + if (angle >= 0 && angle <= after360) { + isClick = true; + } + } + if (isClick) { + onFanClick.onFanClick(f); + break; + } + } + lastClickTime = System.currentTimeMillis(); + } + } + + } else if (e.getAction() == MotionEvent.ACTION_UP) {// 松开处理 + //获取松开时的x坐标 + Log.v("OnTouchListener", "Up"); + if (null != centre && null != datas && null != onFanClick) { + PointF A = new PointF(e.getX(), e.getY()); + double AO = getDistance(A, centre);//A到圆心 + if (AO <= SO && AO > centreRadius)//在环内 + { + double AS = getDistance(A, startPoint);//A到开始点 + angle = Math.toDegrees(Math.acos((AO * AO + SO * SO - AS * AS) / (2 * AO * SO))); + //处理优角 + if (A.y < startPoint.y) { + angle = 360 - angle; + } + Log.d(TAG, "点击的angle_up1:" + angle); + //验证角度在哪个扇形里面 + for (int i = 0; i < datas.size(); i++) { + f = datas.get(i); + double endAngle = f.getStartAngle() + f.getAngle(); + boolean isClick = false; + if (endAngle <= 360) { + isClick = angle >= f.getStartAngle() && angle <= endAngle; + } else { + double after360 = endAngle - 360; + if (angle >= f.getStartAngle() && angle <= 360) { + isClick = true; + } + if (angle >= 0 && angle <= after360) { + isClick = true; + } + } + if (isClick) { + onFanClick.onUp(f); + break; + } + } + lastClickTime = System.currentTimeMillis(); + } else { + Log.d(TAG, "点击的angle_up_out:" + angle); + onFanClick.onUp(f); + } + } + + if (isLongClickModule1) { + } else { + if (null != centre && null != datas && null != onFanClick) { + PointF A = new PointF(e.getX(), e.getY()); + double AO = getDistance(A, centre);//A到圆心 + if (AO <= SO && AO > centreRadius)//在环内 + { + double AS = getDistance(A, startPoint);//A到开始点 + angle = Math.toDegrees(Math.acos((AO * AO + SO * SO - AS * AS) / (2 * AO * SO))); + //处理优角 + if (A.y < startPoint.y) { + angle = 360 - angle; + } + Log.d(TAG, "点击的angle_up:" + angle); + //验证角度在哪个扇形里面 + for (int i = 0; i < datas.size(); i++) { + f = datas.get(i); + double endAngle = f.getStartAngle() + f.getAngle(); + boolean isClick = false; + if (endAngle <= 360) { + isClick = angle >= f.getStartAngle() && angle <= endAngle; + } else { + double after360 = endAngle - 360; + if (angle >= f.getStartAngle() && angle <= 360) { + isClick = true; + } + if (angle >= 0 && angle <= after360) { + isClick = true; + } + } + if (isClick) { + // onFanClick.onUp(f); + break; + } + } + lastClickTime = System.currentTimeMillis(); + } + } + } + if (isLongClickModule1) { + isLongClickModule1 = false; + isLongClicking = false; + } + xUp = e.getX(); + } else if (e.getAction() == MotionEvent.ACTION_MOVE) { + //当滑动时背景为选中状态 //检测是否长按,在非长按时检测 + if (!isLongClickModule1) { + isLongClickModule1 = isLongPressed(xDown, yDown, e.getX(), + e.getY(), e.getDownTime(), e.getEventTime(), 200); + } + if (isLongClickModule1 && !isLongClicking) { + //处理长按事件 + isLongClicking = true; + Log.v("OnTouchListener", "long"); + if (null != centre && null != datas && null != onFanClick && System.currentTimeMillis() - lastClickTime > 200) { + PointF A = new PointF(e.getX(), e.getY()); + double AO = getDistance(A, centre);//A到圆心 + if (AO <= SO && AO > centreRadius)//在环内 + { + double AS = getDistance(A, startPoint);//A到开始点 + angle = Math.toDegrees(Math.acos((AO * AO + SO * SO - AS * AS) / (2 * AO * SO))); + //处理优角 + if (A.y < startPoint.y) { + angle = 360 - angle; + } + Log.d(TAG, "点击的angle_long:" + angle); + //验证角度在哪个扇形里面 + for (int i = 0; i < datas.size(); i++) { + f = datas.get(i); + double endAngle = f.getStartAngle() + f.getAngle(); + boolean isClick = false; + if (endAngle <= 360) { + isClick = angle >= f.getStartAngle() && angle <= endAngle; + } else { + double after360 = endAngle - 360; + if (angle >= f.getStartAngle() && angle <= 360) { + isClick = true; + } + if (angle >= 0 && angle <= after360) { + isClick = true; + } + } + if (isClick) { + onFanClick.onFanLongClick(f); + break; + } + } + lastClickTime = System.currentTimeMillis(); + } + } + } else { + + } + } else { + //其他模式 + Log.v("OnTouchListener", "other"); + }*/ + return true; + } + + static boolean isLongPressed(float lastX, float lastY, float thisX, + float thisY, long lastDownTime, long thisEventTime, + long longPressTime) { + float offsetX = Math.abs(thisX - lastX); + float offsetY = Math.abs(thisY - lastY); + long intervalTime = thisEventTime - lastDownTime; + //去除移动的距离做测试 + /*if (offsetX <= 10 && offsetY <= 10 && intervalTime >= longPressTime) { + return true; + }*/ + if (intervalTime >= longPressTime) { + return true; + } + return false; + } + + public OnFanItemClickListener getOnFanClick() { + return onFanClick; + } + + public void setOnFanClick(OnFanItemClickListener onFanClick) { + this.onFanClick = onFanClick; + } + + /** + * 两点之间的距离 + * + * @param a + * @param b + * @return + */ + private double getDistance(PointF a, PointF b) { + return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2)); + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/SideBar.java b/app/src/main/java/com/yonsz/z1/device/tv/SideBar.java new file mode 100644 index 0000000..17f7f7c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/SideBar.java @@ -0,0 +1,213 @@ +package com.yonsz.z1.device.tv; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.widget.TextView; + +import com.yonsz.z1.R; + +public class SideBar extends TextView { + private String[] letters = new String[]{"A", "B", "C", "D", "E", "F", "G", "H", "I", + "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", + "W", "X", "Y", "Z", "#"}; + private Paint textPaint; + private Paint bigTextPaint; + private Paint scaleTextPaint; + + private Canvas canvas; + private int itemH; + private int w; + private int h; + /** + * 普通情况下字体大小 + */ + float singleTextH; + /** + * 缩放离原始的宽度 + */ + private float scaleWidth; + /** + * 滑动的Y + */ + private float eventY = 0; + /** + * 缩放的倍数 + */ + private int scaleSize = 1; + /** + * 缩放个数item,即开口大小 + */ + private int scaleItemCount = 6; + private ISideBarSelectCallBack callBack; + + public SideBar(Context context) { + this(context, null); + } + + public SideBar(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public SideBar(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(attrs); + } + + private void init(AttributeSet attrs) { + if (attrs != null) { + TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.SideBar); + scaleSize = ta.getInteger(R.styleable.SideBar_scaleSize, 1); + scaleItemCount = ta.getInteger(R.styleable.SideBar_scaleItemCount, 6); + scaleWidth = ta.getDimensionPixelSize(R.styleable.SideBar_scaleWidth, dp(100)); + ta.recycle(); + } + textPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + textPaint.setColor(getCurrentTextColor()); + textPaint.setTextSize(getTextSize()); + textPaint.setTextAlign(Paint.Align.CENTER); + bigTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + bigTextPaint.setColor(getCurrentTextColor()); + bigTextPaint.setTextSize(getTextSize() * (scaleSize + 3)); + bigTextPaint.setTextAlign(Paint.Align.CENTER); + scaleTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + scaleTextPaint.setColor(getCurrentTextColor()); + scaleTextPaint.setTextSize(getTextSize() * (scaleSize + 1)); + scaleTextPaint.setTextAlign(Paint.Align.CENTER); + } + + public void setDataResource(String[] data) { + letters = data; + invalidate(); + } + + public void setOnStrSelectCallBack(ISideBarSelectCallBack callBack) { + this.callBack = callBack; + } + + /** + * 设置字体缩放比例 + * + * @param scale + */ + public void setScaleSize(int scale) { + scaleSize = scale; + invalidate(); + } + + /** + * 设置缩放字体的个数,即开口大小 + * + * @param scaleItemCount + */ + public void setScaleItemCount(int scaleItemCount) { + this.scaleItemCount = scaleItemCount; + invalidate(); + } + + private int dp(int px) { + final float scale = getContext().getResources().getDisplayMetrics().density; + return (int) (px * scale + 0.5f); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + case MotionEvent.ACTION_MOVE: + if (event.getX() > (w - getPaddingRight() - singleTextH - 10)) { + eventY = event.getY(); + invalidate(); + return true; + } else { + eventY = 0; + invalidate(); + break; + } + case MotionEvent.ACTION_CANCEL: + eventY = 0; + invalidate(); + return true; + case MotionEvent.ACTION_UP: + if (event.getX() > (w - getPaddingRight() - singleTextH - 10)) { + eventY = 0; + invalidate(); + return true; + } else + break; + } + return super.onTouchEvent(event); + } + + + @Override + protected void onDraw(Canvas canvas) { + this.canvas = canvas; + DrawView(eventY); + } + + private void DrawView(float y) { + int currentSelectIndex = -1; + if (y != 0) { + for (int i = 0; i < letters.length; i++) { + float currentItemY = itemH * i; + float nextItemY = itemH * (i + 1); + if (y >= currentItemY && y < nextItemY) { + currentSelectIndex = i; + if (callBack != null) { + callBack.onSelectStr(currentSelectIndex, letters[i]); + } + //画大的字母 + Paint.FontMetrics fontMetrics = bigTextPaint.getFontMetrics(); + float bigTextSize = fontMetrics.descent - fontMetrics.ascent; + canvas.drawText(letters[i], w - getPaddingRight() - scaleWidth - bigTextSize, singleTextH + itemH * i, bigTextPaint); + } + } + } + drawLetters(y, currentSelectIndex); + } + + private void drawLetters(float y, int index) { + //第一次进来没有缩放情况,默认画原图 + if (index == -1) { + w = getMeasuredWidth(); + h = getMeasuredHeight(); + itemH = h / letters.length; + Paint.FontMetrics fontMetrics = textPaint.getFontMetrics(); + singleTextH = fontMetrics.descent - fontMetrics.ascent; + for (int i = 0; i < letters.length; i++) { + canvas.drawText(letters[i], w - getPaddingRight(), singleTextH + itemH * i, textPaint); + } + //触摸的时候画缩放图 + } else { + //遍历所有字母 + for (int i = 0; i < letters.length; i++) { + //要画的字母的起始Y坐标 + float currentItemToDrawY = singleTextH + itemH * i; + float centerItemToDrawY; + if (index < i) + centerItemToDrawY = singleTextH + itemH * (index + scaleItemCount); + else + centerItemToDrawY = singleTextH + itemH * (index - scaleItemCount); + float delta = 1 - Math.abs((y - currentItemToDrawY) / (centerItemToDrawY - currentItemToDrawY)); + float maxRightX = w - getPaddingRight(); + //如果大于0,表明在y坐标上方 + scaleTextPaint.setTextSize(getTextSize() + getTextSize() * delta); + float drawX = maxRightX - scaleWidth * delta; + //超出边界直接花在边界上 + if (drawX > maxRightX) + canvas.drawText(letters[i], maxRightX, singleTextH + itemH * i, textPaint); + else + canvas.drawText(letters[i], drawX, singleTextH + itemH * i, scaleTextPaint); + } + } + } + + public interface ISideBarSelectCallBack { + void onSelectStr(int index, String selectStr); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/SweepListActivity.java b/app/src/main/java/com/yonsz/z1/device/tv/SweepListActivity.java new file mode 100644 index 0000000..782f293 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/SweepListActivity.java @@ -0,0 +1,409 @@ +package com.yonsz.z1.device.tv; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.DeviceListEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.device.sweep.SweepActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.PingYinUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_SUCCESS; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_CONN_DEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.NetWorkUrl.QUERY_DEVICE_BRAND; + +/** + * Created by Administrator on 2017/10/10. + */ +public class SweepListActivity extends BaseActivity { + private TitleView mTitleView; + private List mGroupList;//码组列表 + private ListView brandsListView; + public MyAdapter adapter; + public ArrayList sweep;//品牌列表 + private SideBar sideBar; + private List list; + private EditText searchEt; + private List stringList; + Handler myhandler = new Handler(); + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_brand_list); + initView(); + initListener(); + queryDeviceBrand(); + } + + private void queryDeviceBrand() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", "005"); + netWorkUtil.requestPostByAsynew(QUERY_DEVICE_BRAND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceBrand", "ShareDeviceActivity onSuccess()" + respone); + DeviceListEntity obj = JSON.parseObject(respone, DeviceListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + + private void initView() { + searchEt = (EditText) findViewById(R.id.et_search); + mGroupList = new ArrayList(); + stringList = new ArrayList(); + brandsListView = (ListView) findViewById(R.id.listview_brand_list); + mTitleView = (TitleView) findViewById(R.id.title_brand_list); + mTitleView.setHead(R.string.select_sweep_brand); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + sideBar = (SideBar) findViewById(R.id.side_bar); + sweep = new ArrayList(); + adapter = new MyAdapter(this); + brandsListView.setAdapter(adapter); + } + + private void initListener() { + searchEt.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + + @Override + public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + + @Override + public void afterTextChanged(Editable s) { + /**这是文本框改变之后 会执行的动作 + * 因为我们要做的就是,在文本框改变的同时,我们的listview的数据也进行相应的变动,并且如一的显示在界面上。 + * 所以这里我们就需要加上数据的修改的动作了。 + */ + myhandler.post(eChanged); + } + }); + } + + /** + * 关于界面UI的更新,可以使用Handler,通过Post一个Runnable去更新,Runnable会去根据搜索框的文本对mData里的数据进行更新。 + */ + Runnable eChanged = new Runnable() { + + @Override + public void run() { + String data = searchEt.getText().toString(); + sweep.clear(); + getmDataSub(stringList, data); + adapter.notifyDataSetChanged(); + } + }; + + /** + * 可能对mData的理解会有点问题,因为数据更新完后,每一次的筛选数据都是放在mData里,那么原本的数据呢,当然就是在mListTitle和mListText里。根据获得数据的getmDataSub的代码即可知。 + */ + + private void getmDataSub(List mDataSubs, String data) { + int length = mDataSubs.size(); + for (int i = 0; i < length; ++i) { + if (mDataSubs.get(i).contains(data) || PingYinUtil.getPingYin(mDataSubs.get(i)).contains(data)) { + sweep.add(mDataSubs.get(i)); + } + } + } + + + @Override + public void onResume() { + super.onResume(); + queryDeviceBrand(); + searchEt.setText(""); + } + + public void load_brand() { + sweep.clear(); + adapter.notifyDataSetChanged(); + //再添加其余的品牌列表 + for (int i = 0; i < stringList.size(); i++) { + sweep.add(stringList.get(i)); + } + adapter.notifyDataSetChanged(); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + String deviceId = entity1.getObj().getDeviceId(); + switch (deviceId) { + case SWEEP_TAG: + Intent intent = new Intent(SweepListActivity.this, SweepActivity.class); + intent.putExtra("sweepStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("sweepName", entity1.getObj().getDeviceBrand().toString()); + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + finish(); + break; + } + break; + case QUERY_DEVICE_BRAND_SUCCESS: + DeviceListEntity entity2 = (DeviceListEntity) msg.obj; + stringList = entity2.getObj(); + load_brand(); + break; + case UPDATE_CONN_DEVICE_SUCCESS: + AddChildDeviceEntity obj = (AddChildDeviceEntity) msg.obj; + Intent intent = new Intent(SweepListActivity.this, SweepActivity.class); + intent.putExtra("deviceName", obj.getObj().getDeviceBrand()); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + break; + } + } + + private class MyAdapter extends BaseAdapter { + private Context context; + private LayoutInflater inflater; + + public MyAdapter(Context context) { + super(); + this.context = context; + inflater = LayoutInflater.from(context); + + } + + @Override + public int getCount() { + return sweep.size() + 1; + } + + @Override + public Object getItem(int arg0) { + return arg0; + } + + @Override + public long getItemId(int arg0) { + return arg0; + } + + @Override + public View getView(final int position, View view, ViewGroup arg2) { + if (view == null) { + view = inflater.inflate(R.layout.brandlist_listview_item, null); + } + final TextView edit = (TextView) view.findViewById(R.id.name); + if (position == sweep.size()) { + edit.setText("其他品牌"); + } else { + edit.setText(sweep.get(position)); + } + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!TextUtils.isEmpty(getIntent().getExtras().get("nameTag").toString())) { + if (position == sweep.size()) { + showModifyPop(0, 0); + } else { + updateConnDevice(sweep.get(position)); + } + } else { + if (position == sweep.size()) { + showModifyPop(0, 0); + } else { + subsetAdd(getIntent().getExtras().get("ziId").toString(), SWEEP_TAG, sweep.get(position)); + } + } + + } + }); + return view; + } + } + + public void showModifyPop(final int adapterPosition, final int i) { + ConfirmNameDialog dialog = new ConfirmNameDialog(SweepListActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (!TextUtils.isEmpty(getIntent().getExtras().get("nameTag").toString())) { + updateConnDevice(positioName); + } else { + if (TextUtils.isEmpty(positioName)) { + ToastUtil.show(SweepListActivity.this, "品牌不能为空"); + } else { + subsetAdd(getIntent().getExtras().get("ziId").toString(), SWEEP_TAG, positioName); + } + } + // addChildDevice(getIntent().getExtras().get("ziId").toString(), SWEEP_TAG, positioName); + break; + } + } + }); + dialog.setMaxEms(10); + dialog.setHintName(R.string.Enter_brand_name); + dialog.setContent(R.string.Brand_name); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void updateConnDevice(String positioName) { + + } + + private void subsetAdd(String ziId, String deviceType, String deviceBrand) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", "0"); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + map.put("addressId", localAddAddressId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /* private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceId", deviceType); + map.put("deviceType", deviceType); + map.put("deviceBrand", deviceBrand); + util.requestPostByAsynew(NetWorkUrl.ADD_CHILD_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + AddChildDeviceEntity entity = JSON.parseObject(respone, AddChildDeviceEntity.class); + Log.i("addChildDevice", "onSuccess: " + respone); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + }*/ +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/TvControlActivity.java b/app/src/main/java/com/yonsz/z1/device/tv/TvControlActivity.java new file mode 100644 index 0000000..ab6f34a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/TvControlActivity.java @@ -0,0 +1,1584 @@ +package com.yonsz.z1.device.tv; + +import android.app.Service; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.StudyEntity; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.DeviceStateEntity; +import com.yonsz.z1.database.entity.entity4.LocalControlEvent; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.utils.ConnectNettyUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.R.id.tv_tv_voice; +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.device.tv.PieChartView.isLongClickModule1; +import static com.yonsz.z1.net.Constans.APP_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.CANCLE_LONGPRESS_FAIL; +import static com.yonsz.z1.net.Constans.CANCLE_LONGPRESS_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.LEARN_RESULT; +import static com.yonsz.z1.net.Constans.LONGPRESS_TV_FAIL; +import static com.yonsz.z1.net.Constans.LONGPRESS_TV_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_LOCAL_CONTROL; +import static com.yonsz.z1.net.Constans.TV_BACK; +import static com.yonsz.z1.net.Constans.TV_DOWN; +import static com.yonsz.z1.net.Constans.TV_HOME; +import static com.yonsz.z1.net.Constans.TV_JIDINGHE; +import static com.yonsz.z1.net.Constans.TV_LEFT; +import static com.yonsz.z1.net.Constans.TV_MENU; +import static com.yonsz.z1.net.Constans.TV_OK; +import static com.yonsz.z1.net.Constans.TV_OPEN; +import static com.yonsz.z1.net.Constans.TV_RIGHT; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.TV_UP; +import static com.yonsz.z1.net.Constans.TV_VOICE; +import static com.yonsz.z1.net.Constans.TV_VOLADD; +import static com.yonsz.z1.net.Constans.TV_VOLREDUCE; +import static com.yonsz.z1.net.Constans.isLocalControl; +import static com.yonsz.z1.net.NetWorkUrl.QUERY_DEVICE_LASTINFO; + +/** + * Created by Administrator on 2017/6/29. + */ + +public class TvControlActivity extends BaseActivity implements View.OnLongClickListener, View.OnTouchListener { + public int mId; + private TitleView mTitleView; + private PieChartView chartView; + private TextView mDown, mLeft, mUp, mRight; + private int longId; + private String userId; + private String ziId; + private AlphaAnimation mAlphaAnimation; + private boolean isLearn; + private LinearLayout learningLl, tvContinueLearnLl; + private TextView learnInstruction, learnComplete; + private TextView mOpenClose, mVoice, mOk, mHome, mBack, mMenu, mVolAdd, mVolReduce; + private TextView mOpenCloseBg, mVoiceBg, mOkBg, mHomeBg, mBackBg, mMenuBg, mVolAddBg, mVolReduceBg; + private ImageView mOpenCloseMark, mVoiceMark, mOkMark, mHomeMark, mBackMark, mMenuMark, mVolAddMark, mVolReduceMark, mDownMark, mLeftMark, mUpMark, mRightMark; + private boolean mOpenCloseTag, mVoiceTag, mOkTag, mHomeTag, mBackTag, mMenuTag, mVolAddTag, mVolReduceTag, mDownTag, mLeftTag, mUpTag, mRightTag; + private ImageView mVoicePic, mHomePic, mBackPic, mMenuPic, mVolAddPic, mVolRedPic; + private String tvName; + private boolean isTv; + private TextView jidingheVisible, tvVisible; + private String deviceIp = ""; + private ImageView localControlIv, greenCircle; + + + static boolean isLongPressed(float lastX, float lastY, float thisX, + float thisY, long lastDownTime, long thisEventTime, + long longPressTime) { + float offsetX = Math.abs(thisX - lastX); + float offsetY = Math.abs(thisY - lastY); + long intervalTime = thisEventTime - lastDownTime; + if (offsetX <= 10 && offsetY <= 10 && intervalTime >= longPressTime) { + return true; + } + return false; + } + + public void onEventMainThread(AppControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = APP_CONTROL_SUCCESS; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LocalControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = SHOW_LOCAL_CONTROL; + message.obj = msg; + mHandler.sendMessage(message); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tv_control); + initView(); + initListener(); + // NettyHandlerUtil.initNetty(); + } + + private void initView() { + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + String fanStateTag = (String) getIntent().getExtras().get("tvStateTag"); + if (getIntent().getExtras().get("assistFlag").toString().equals("1")) { + isTv = false; + } else { + isTv = true; + } + if (fanStateTag.equals("0")) { + isLearn = true; + } else { + isLearn = false; + } + localControlIv = (ImageView) findViewById(R.id.iv_local_control); + greenCircle = (ImageView) findViewById(R.id.iv_online_green_circle); + learnInstruction = (TextView) findViewById(R.id.tv_learn_instruction); + learnComplete = (TextView) findViewById(R.id.tv_learn_complete); + learningLl = (LinearLayout) findViewById(R.id.ll_learning); + tvContinueLearnLl = (LinearLayout) findViewById(R.id.ll_tv_continue_learn); + jidingheVisible = (TextView) findViewById(R.id.tv_jidinghe_visible); + tvVisible = (TextView) findViewById(R.id.tv_tv_visible); + + mDown = (TextView) findViewById(R.id.iv_down); + mLeft = (TextView) findViewById(R.id.iv_left); + mUp = (TextView) findViewById(R.id.iv_up); + mRight = (TextView) findViewById(R.id.iv_right); + mOpenClose = (TextView) findViewById(R.id.tv_tv_open); + mVoice = (TextView) findViewById(tv_tv_voice); + mOk = (TextView) findViewById(R.id.tv_tv_ok); + mHome = (TextView) findViewById(R.id.tv_tv_home); + mMenu = (TextView) findViewById(R.id.tv_tv_menu); + mBack = (TextView) findViewById(R.id.tv_tv_back); + mVolAdd = (TextView) findViewById(R.id.tv_tv_voladd); + mVolReduce = (TextView) findViewById(R.id.tv_tv_volreduce); + + + mOpenCloseBg = (TextView) findViewById(R.id.tv_tv_open_bg); + mVoiceBg = (TextView) findViewById(R.id.tv_tv_voice_bg); + mOkBg = (TextView) findViewById(R.id.tv_tv_ok_bg); + mHomeBg = (TextView) findViewById(R.id.tv_tv_home_bg); + mMenuBg = (TextView) findViewById(R.id.tv_tv_menu_bg); + mBackBg = (TextView) findViewById(R.id.tv_tv_back_bg); + mVolAddBg = (TextView) findViewById(R.id.tv_tv_voladd_bg); + mVolReduceBg = (TextView) findViewById(R.id.tv_tv_volreduce_bg); + + mDownMark = (ImageView) findViewById(R.id.iv_down_bg); + mLeftMark = (ImageView) findViewById(R.id.iv_left_bg); + mUpMark = (ImageView) findViewById(R.id.iv_up_bg); + mRightMark = (ImageView) findViewById(R.id.iv_right_bg); + mOpenCloseMark = (ImageView) findViewById(R.id.tv_tv_open_mark); + mVoiceMark = (ImageView) findViewById(R.id.tv_tv_voice_mark); + mOkMark = (ImageView) findViewById(R.id.tv_tv_ok_mark); + mHomeMark = (ImageView) findViewById(R.id.tv_tv_home_mark); + mMenuMark = (ImageView) findViewById(R.id.tv_tv_menu_mark); + mBackMark = (ImageView) findViewById(R.id.tv_tv_back_mark); + mVolAddMark = (ImageView) findViewById(R.id.tv_tv_voladd_mark); + mVolReduceMark = (ImageView) findViewById(R.id.tv_tv_volreduce_mark); + + mVoicePic = (ImageView) findViewById(R.id.iv_tv_voice); + mHomePic = (ImageView) findViewById(R.id.iv_tv_home); + mMenuPic = (ImageView) findViewById(R.id.iv_tv_menu); + mBackPic = (ImageView) findViewById(R.id.iv_tv_back); + mVolAddPic = (ImageView) findViewById(R.id.iv_tv_add); + mVolRedPic = (ImageView) findViewById(R.id.iv_tv_reduce); + chartView = (PieChartView) findViewById(R.id.pieChartView); + chartView.setFanClickAbleData( + new double[]{90, 90, 90, 90}, + new int[]{Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT}, 0, mHandler); + setPanClick(); + mAlphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(TvControlActivity.this, R.anim.alpha_anim_device); + mTitleView = (TitleView) findViewById(R.id.title_tv); + if (TextUtils.isEmpty(getIntent().getExtras().get("tvName").toString())) { + tvName = "电视"; + } else { + tvName = getIntent().getExtras().get("tvName").toString(); + } + mTitleView.setHead(tvName); + mTitleView.clearBackGroud(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + clearAlph(); + clearMark(); + if (isLearn) { + isLearn = false; + //查询学习按键 + queryStudyValue(); + showControl(); + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(TvControlActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + ConfirmDialog dialog = new ConfirmDialog(TvControlActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + deleteChildDevice(TV_TAG, ziId); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + //重新命名 + if (isTv) { + Intent intent1 = new Intent(TvControlActivity.this, TvListOneActivity.class); + intent1.putExtra("ziId", ziId); + intent1.putExtra("nameTag", "name"); + intent1.putExtra("id", getIntent().getExtras().get("id").toString()); + startActivityForResult(intent1, MODIFY_DEVICE_NAME); + } else { + Intent intent1 = new Intent(TvControlActivity.this, TvListOneActivity.class); + intent1.putExtra("ziId", ziId); + intent1.putExtra("nameTag", "name"); + intent1.putExtra("id", getIntent().getExtras().get("id").toString()); + startActivityForResult(intent1, MODIFY_DEVICE_NAME); + } + break; + case 3: + //语令说明 + Intent intent = new Intent(TvControlActivity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", TV_TAG); + startActivity(intent); + break; + case 4: + + //遥控学习 + isLearn = true; + showLearn(); + //查询学习按键 + queryStudyValue(); + break; + } + } + }); + dialog2.setContent(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + if (isTv) { + tvVisible.setVisibility(View.GONE); + jidingheVisible.setVisibility(View.GONE); + mVoicePic.setImageDrawable(getResources().getDrawable(R.drawable.icon_quiet_press)); + } else { + tvVisible.setVisibility(View.VISIBLE); + jidingheVisible.setVisibility(View.VISIBLE); + } + + if (isLearn) { + showLearn(); + } else { + showControl(); + } + //查询学习按键 + queryStudyValue(); + ConnectNettyUtil.connectNetty(ziId, deviceIp, this); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (isLocalControl) { + NettyManager.closeCtx(); + } + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + private void clearMark() { + learnComplete.setVisibility(View.GONE); + mOpenCloseMark.setVisibility(View.GONE); + mUpMark.setVisibility(View.GONE); + mDownMark.setVisibility(View.GONE); + mLeftMark.setVisibility(View.GONE); + mRightMark.setVisibility(View.GONE); + mOkMark.setVisibility(View.GONE); + mHomeMark.setVisibility(View.GONE); + mBackMark.setVisibility(View.GONE); + mMenuMark.setVisibility(View.GONE); + mVoiceMark.setVisibility(View.GONE); + mVolAddMark.setVisibility(View.GONE); + mVolReduceMark.setVisibility(View.GONE); + } + + private void clearAlph() { + mVolReduceBg.clearAnimation(); + mVolAddBg.clearAnimation(); + mBackBg.clearAnimation(); + mMenuBg.clearAnimation(); + mHomeBg.clearAnimation(); + mOkBg.clearAnimation(); + mRight.clearAnimation(); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + mVoiceBg.clearAnimation(); + } + + private void showControl() { + // mTitleView.setHeadFuntionTxt(R.string.voice_said); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + learningLl.setVisibility(View.GONE); + tvContinueLearnLl.setVisibility(View.GONE); + controlShowAlph(); + } + + private void controlShowAlph() { + if (!mOpenCloseTag) { + mOpenClose.setAlpha(0.5f); + mOpenClose.setEnabled(false); + } else { + mOpenClose.setAlpha(1.0f); + mOpenClose.setEnabled(true); + } + if (!mVoiceTag) { + mVoice.setAlpha(0.5f); + mVoicePic.setAlpha(0.5f); + mVoice.setEnabled(false); + } else { + mVoice.setAlpha(1.0f); + mVoicePic.setAlpha(1.0f); + mVoice.setEnabled(true); + } + if (!mOkTag) { + mOk.setAlpha(0.5f); + mOk.setEnabled(false); + } else { + mOk.setAlpha(1.0f); + mOk.setEnabled(true); + } + if (!mHomeTag) { + mHome.setAlpha(0.5f); + mHomePic.setAlpha(0.5f); + mHome.setEnabled(false); + } else { + mHome.setAlpha(1.0f); + mHomePic.setAlpha(1.0f); + mHome.setEnabled(true); + } + if (!mBackTag) { + mBack.setAlpha(0.5f); + mBackPic.setAlpha(0.5f); + mBack.setEnabled(false); + } else { + mBack.setAlpha(1.0f); + mBackPic.setAlpha(1.0f); + mBack.setEnabled(true); + } + if (!mMenuTag) { + mMenu.setAlpha(0.5f); + mMenuPic.setAlpha(0.5f); + mMenu.setEnabled(false); + } else { + mMenu.setAlpha(1.0f); + mMenuPic.setAlpha(1.0f); + mMenu.setEnabled(true); + } + if (!mVolAddTag) { + mVolAdd.setAlpha(0.5f); + mVolAddPic.setAlpha(0.5f); + mVolAdd.setEnabled(false); + } else { + mVolAdd.setAlpha(1.0f); + mVolAddPic.setAlpha(1.0f); + mVolAdd.setEnabled(true); + } + if (!mVolReduceTag) { + mVolReduce.setAlpha(0.5f); + mVolRedPic.setAlpha(0.5f); + mVolReduce.setEnabled(false); + } else { + mVolReduce.setAlpha(1.0f); + mVolRedPic.setAlpha(1.0f); + mVolReduce.setEnabled(true); + } + + } + + private void showLearn() { + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setHeadFuntionGone(); + learnComplete.setVisibility(View.GONE); + learningLl.setVisibility(View.VISIBLE); + tvContinueLearnLl.setVisibility(View.GONE); + setLearnAlph(); + learnShowMark(); + + if (!mOpenCloseTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + if (isTv) { + learnInstruction.setText(R.string.Switch); + } else { + learnInstruction.setText("机顶盒"); + } + mOpenCloseBg.startAnimation(mAlphaAnimation); + } else if (!mVoiceTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + if (isTv) { + learnInstruction.setText("静音"); + } else { + learnInstruction.setText("电视"); + } + mVoiceBg.startAnimation(mAlphaAnimation); + mOpenCloseBg.clearAnimation(); + } else if (!mUpTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("向上"); + mUp.startAnimation(mAlphaAnimation); + mOpenCloseBg.clearAnimation(); + mVoiceBg.clearAnimation(); + } else if (!mDownTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("向下"); + mDown.startAnimation(mAlphaAnimation); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + mVoiceBg.clearAnimation(); + } else if (!mLeftTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("向左"); + mLeft.startAnimation(mAlphaAnimation); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + mVoiceBg.clearAnimation(); + } else if (!mRightTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("向右"); + mRight.startAnimation(mAlphaAnimation); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + mVoiceBg.clearAnimation(); + } else if (!mOkTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("OK"); + mOkBg.startAnimation(mAlphaAnimation); + mRight.clearAnimation(); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + mVoiceBg.clearAnimation(); + } else if (!mHomeTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("HOME"); + mHomeBg.startAnimation(mAlphaAnimation); + mOkBg.clearAnimation(); + mRight.clearAnimation(); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + mVoiceBg.clearAnimation(); + } else if (!mMenuTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("菜单"); + mMenuBg.startAnimation(mAlphaAnimation); + mHomeBg.clearAnimation(); + mOkBg.clearAnimation(); + mRight.clearAnimation(); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + mVoiceBg.clearAnimation(); + } else if (!mBackTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("返回"); + mBackBg.startAnimation(mAlphaAnimation); + mMenuBg.clearAnimation(); + mHomeBg.clearAnimation(); + mOkBg.clearAnimation(); + mRight.clearAnimation(); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + mVoiceBg.clearAnimation(); + } else if (!mVolAddTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("音量+"); + mVolAddBg.startAnimation(mAlphaAnimation); + mBackBg.clearAnimation(); + mMenuBg.clearAnimation(); + mHomeBg.clearAnimation(); + mOkBg.clearAnimation(); + mRight.clearAnimation(); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + mVoiceBg.clearAnimation(); + } else if (!mVolReduceTag) { + learningLl.setVisibility(View.VISIBLE); + learnComplete.setVisibility(View.GONE); + learnInstruction.setText("音量-"); + mVolReduceBg.startAnimation(mAlphaAnimation); + mVolAddBg.clearAnimation(); + mBackBg.clearAnimation(); + mMenuBg.clearAnimation(); + mHomeBg.clearAnimation(); + mOkBg.clearAnimation(); + mRight.clearAnimation(); + mLeft.clearAnimation(); + mDown.clearAnimation(); + mUp.clearAnimation(); + mOpenCloseBg.clearAnimation(); + mVoiceBg.clearAnimation(); + } else { + learningLl.setVisibility(View.GONE); + learnComplete.setVisibility(View.VISIBLE); + clearAlph(); + } + } + + private void setLearnAlph() { + mOpenClose.setAlpha(1.0f); + mOpenClose.setEnabled(true); + mVoice.setAlpha(1.0f); + mVoice.setEnabled(true); + mOk.setAlpha(1.0f); + mOk.setEnabled(true); + mHome.setAlpha(1.0f); + mHome.setEnabled(true); + mBack.setAlpha(1.0f); + mBack.setEnabled(true); + mMenu.setAlpha(1.0f); + mMenu.setEnabled(true); + mVolAdd.setAlpha(1.0f); + mVolAdd.setEnabled(true); + mVolReduce.setAlpha(1.0f); + mVolReduce.setEnabled(true); + mVoicePic.setAlpha(1.0f); + mHomePic.setAlpha(1.0f); + mMenuPic.setAlpha(1.0f); + mBackPic.setAlpha(1.0f); + mVolAddPic.setAlpha(1.0f); + mVolRedPic.setAlpha(1.0f); + } + + private void learnShowMark() { + if (mOpenCloseTag) { + mOpenCloseMark.setVisibility(View.VISIBLE); + } + if (mVoiceTag) { + mVoiceMark.setVisibility(View.VISIBLE); + } + if (mOkTag) { + mOkMark.setVisibility(View.VISIBLE); + } + if (mHomeTag) { + mHomeMark.setVisibility(View.VISIBLE); + } + if (mBackTag) { + mBackMark.setVisibility(View.VISIBLE); + } + if (mMenuTag) { + mMenuMark.setVisibility(View.VISIBLE); + } + if (mVolAddTag) { + mVolAddMark.setVisibility(View.VISIBLE); + } + if (mVolReduceTag) { + mVolReduceMark.setVisibility(View.VISIBLE); + } + if (mDownTag) { + mDownMark.setVisibility(View.VISIBLE); + } + if (mLeftTag) { + mLeftMark.setVisibility(View.VISIBLE); + } + if (mUpTag) { + mUpMark.setVisibility(View.VISIBLE); + } + if (mRightTag) { + mRightMark.setVisibility(View.VISIBLE); + } + } + + private void queryStudyValue() { + + } + + private void initListener() { + mOpenClose.setOnClickListener(this); + mVoice.setOnClickListener(this); + mOk.setOnClickListener(this); + mHome.setOnClickListener(this); + mMenu.setOnClickListener(this); + mBack.setOnClickListener(this); + mVolAdd.setOnClickListener(this); + mVolReduce.setOnClickListener(this); + tvContinueLearnLl.setOnClickListener(this); + tvContinueLearnLl.setOnLongClickListener(this); + + /*mVolAdd.setOnTouchListener(new View.OnTouchListener() { + float xDown, yDown, xUp; + boolean isLongClickModule = false; + boolean isLongClicking = false; + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + xDown = event.getX(); + yDown = event.getY(); + Log.v("OnTouchListener", "Down"); + + } else if (event.getAction() == MotionEvent.ACTION_UP) {// 松开处理 + if (isLongClickModule) { + cancleLongPress(TV_VOLADD); + } + //获取松开时的x坐标 + if (isLongClickModule) { + isLongClickModule = false; + isLongClicking = false; + } + xUp = event.getX(); + + Log.v("OnTouchListener", "Up"); + //按下和松开绝对值差当大于20时滑动,否则不显示 + if ((xUp - xDown) > 20) { + //添加要处理的内容 + } else if ((xUp - xDown) < -20) { + //添加要处理的内容 + } else if (0 == (xDown - xUp)) { + int viewWidth = v.getWidth(); + if (xDown < viewWidth / 3) { + //靠左点击 + } else if (xDown > viewWidth / 3 && xDown < viewWidth * 2 / 3) { + //中间点击 + } else { + //靠右点击 + } + } + } else if (event.getAction() == MotionEvent.ACTION_MOVE) { + //当滑动时背景为选中状态 //检测是否长按,在非长按时检测 + if (!isLongClickModule) { + isLongClickModule = isLongPressed(xDown, yDown, event.getX(), + event.getY(), event.getDownTime(), event.getEventTime(), 100); + } + if (isLongClickModule && !isLongClicking) { + //处理长按事件 + isLongClicking = true; + Log.v("OnTouchListener", "long"); + longPressTv(TV_VOLADD); + } + } else { + //其他模式 + Log.v("OnTouchListener", "other"); + } + return false; + } + });*/ + mVolAdd.setOnTouchListener(new View.OnTouchListener() { + boolean isLongClickModule = false; + boolean isLongClicking = false; + boolean isUp = false; + + @Override + public boolean onTouch(View v, MotionEvent event) { + long downTime = System.currentTimeMillis(); + if (event.getAction() == MotionEvent.ACTION_DOWN) { + isUp = false; + Log.i("OnTouchListenerDown", "TvControlActivity onTouch()" + downTime); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + if (!isUp) { + Log.i("OnTouchListenerDown", "TvControlActivity onTouch()" + "我开始长按了"); + longPressTv(TV_VOLADD); + } else { + Log.i("OnTouchListenerDown", "TvControlActivity onTouch()" + "我已经抬起了"); + } + } + }, 200); + } + if (event.getAction() == MotionEvent.ACTION_UP) { + isUp = true; + long upTime = System.currentTimeMillis(); + Log.i("OnTouchListenerUp", "TvControlActivity onTouch()" + (upTime - downTime)); + if ((upTime - downTime) >= 200) { + Log.i("OnTouchListenerUp", "TvControlActivity onTouch()" + "长按"); + isLongClickModule = true; + } else { + Log.i("OnTouchListenerUp", "TvControlActivity onTouch()" + "非长按"); + isLongClickModule = false; + } + if (isLongClickModule) { + Log.i("OnTouchListenerUp", "TvControlActivity onTouch()" + "取消长按控制"); + cancleLongPress(TV_VOLADD); + } + if (isLongClickModule) { + isLongClickModule = false; + isLongClicking = false; + } + } + if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { + Log.i("OnTouchListenerOut", "TvControlActivity onTouch()"); + cancleLongPress(TV_VOLADD); + } + return false; + } + }); + + mVolReduce.setOnTouchListener(new View.OnTouchListener() { + boolean isLongClickModule = false; + boolean isLongClicking = false; + boolean isUp = false; + + @Override + public boolean onTouch(View v, MotionEvent event) { + long downTime = System.currentTimeMillis(); + if (event.getAction() == MotionEvent.ACTION_DOWN) { + isUp = false; + Log.i("OnTouchListenerDown", "TvControlActivity onTouch()" + downTime); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + if (!isUp) { + Log.i("OnTouchListenerDown", "TvControlActivity onTouch()" + "我开始长按了"); + longPressTv(TV_VOLREDUCE); + } else { + Log.i("OnTouchListenerDown", "TvControlActivity onTouch()" + "我已经抬起了"); + } + } + }, 200); + } + if (event.getAction() == MotionEvent.ACTION_UP) { + isUp = true; + long upTime = System.currentTimeMillis(); + Log.i("OnTouchListenerUp", "TvControlActivity onTouch()" + (upTime - downTime)); + if ((upTime - downTime) >= 200) { + isLongClickModule = true; + } else { + isLongClickModule = false; + } + if (isLongClickModule) { + cancleLongPress(TV_VOLREDUCE); + } + if (isLongClickModule) { + isLongClickModule = false; + isLongClicking = false; + } + } + return false; + } + }); + } + + private void cancleLongPress(String sendMsg) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("sendMsg", sendMsg); + util.requestPostByAsyn(ziId, NetWorkUrl.CANCLE_LONGPRESS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cancleLongPress", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CANCLE_LONGPRESS_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CANCLE_LONGPRESS_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CANCLE_LONGPRESS_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void longPressTv(String sendMsg) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("sendMsg", sendMsg); + util.requestPostByAsyn(ziId, NetWorkUrl.LONGPRESS_TV, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("longPressTv", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(LONGPRESS_TV_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + Message msg = mHandler.obtainMessage(LONGPRESS_TV_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(LONGPRESS_TV_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(LONGPRESS_TV_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + /*@Override + public boolean onTouchEvent(MotionEvent event) { + switcher (event.getAction()) { + case MotionEvent.ACTION_UP: + mDown.setVisibility(View.INVISIBLE); + mLeft.setVisibility(View.INVISIBLE); + mUp.setVisibility(View.INVISIBLE); + mRight.setVisibility(View.INVISIBLE); + break; + } + return true; + }*/ + + @Override + public boolean onTouch(View v, MotionEvent event) { + return false; + } + + private void setPanClick() { + chartView.setOnFanClick(new OnFanItemClickListener() { + @Override + public void onFanClick(FanItem fanItem) { + mId = fanItem.getId(); + Intent intent; + if (isLearn) { + switch (mId) { + case 0: + mDown.setVisibility(View.VISIBLE); + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 3); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case 1: + mLeft.setVisibility(View.VISIBLE); + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 4); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case 2: + mUp.setVisibility(View.VISIBLE); + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 2); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case 3: + mRight.setVisibility(View.VISIBLE); + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 5); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + } + } else { + Log.i("OnTouchListener", "点击---处理" + mId); + switch (mId) { + case 0: + if (!mDownTag) { + mDown.setClickable(false); + mDown.setEnabled(false); + } else { + mDown.setEnabled(true); + mDown.setVisibility(View.VISIBLE); + } + break; + case 1: + if (!mLeftTag) { + mLeft.setEnabled(false); + } else { + mLeft.setEnabled(true); + mLeft.setVisibility(View.VISIBLE); + } + break; + case 2: + if (!mUpTag) { + mUp.setEnabled(false); + } else { + mUp.setEnabled(true); + mUp.setVisibility(View.VISIBLE); + } + break; + case 3: + if (!mRightTag) { + mRight.setEnabled(false); + } else { + mRight.setEnabled(true); + mRight.setVisibility(View.VISIBLE); + } + break; + } + } + } + + @Override + public void onFanLongClick(FanItem fanItem) { + mId = fanItem.getId(); + if (isLearn) { + + } else { + if (isLongClickModule1) { + Log.i("OnTouchListener", "处理长按---处理" + mId); + switch (mId) { + case 0: + if (!mDownTag) { + mDown.setClickable(false); + mDown.setEnabled(false); + } else { + mDown.setEnabled(true); + mDown.setVisibility(View.VISIBLE); + longPressTv(TV_DOWN); + } + break; + case 1: + if (!mLeftTag) { + mLeft.setEnabled(false); + } else { + mLeft.setEnabled(true); + mLeft.setVisibility(View.VISIBLE); + longPressTv(TV_LEFT); + } + break; + case 2: + if (!mUpTag) { + mUp.setEnabled(false); + } else { + mUp.setEnabled(true); + mUp.setVisibility(View.VISIBLE); + longPressTv(TV_UP); + } + break; + case 3: + if (!mRightTag) { + mRight.setEnabled(false); + } else { + mRight.setEnabled(true); + mRight.setVisibility(View.VISIBLE); + longPressTv(TV_RIGHT); + } + break; + } + + } + } + } + + @Override + public void onUp(FanItem fanItem) { + if (fanItem != null) { + mId = fanItem.getId(); + } + if (isLearn) { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + switch (mId) { + case 0: + mDown.setVisibility(View.INVISIBLE); + break; + case 1: + mLeft.setVisibility(View.INVISIBLE); + break; + case 2: + mUp.setVisibility(View.INVISIBLE); + break; + case 3: + mRight.setVisibility(View.INVISIBLE); + break; + } + } + }, 200); + } else { + if (isLongClickModule1) { + Log.i("OnTouchListener", "处理长按---处理抬起" + mId); + switch (mId) { + case 0: + mDown.setVisibility(View.INVISIBLE); + cancleLongPress(TV_DOWN); + break; + case 1: + mLeft.setVisibility(View.INVISIBLE); + cancleLongPress(TV_LEFT); + break; + case 2: + mUp.setVisibility(View.INVISIBLE); + cancleLongPress(TV_UP); + break; + case 3: + mRight.setVisibility(View.INVISIBLE); + cancleLongPress(TV_RIGHT); + break; + } + } else { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Log.i("OnTouchListener", "点击---处理抬起" + mId); + switch (mId) { + case 0: + if (mDownTag) { + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_DOWN)); + } else + sendAirControlOrder(TV_DOWN); + } + mDown.setVisibility(View.INVISIBLE); + break; + case 1: + if (mLeftTag) { + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_LEFT)); + } else + sendAirControlOrder(TV_LEFT); + } + mLeft.setVisibility(View.INVISIBLE); + break; + case 2: + if (mUpTag) { + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_UP)); + } else + sendAirControlOrder(TV_UP); + } + mUp.setVisibility(View.INVISIBLE); + break; + case 3: + if (mRightTag) { + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_RIGHT)); + } else + sendAirControlOrder(TV_RIGHT); + } + mRight.setVisibility(View.INVISIBLE); + break; + } + } + }, 200); + } + } + } + }); + } + + @Override + public boolean onLongClick(View v) { + switch (v.getId()) { + /* case R.id.tv_tv_voladd: + longId = 1; + Log.i("onLongClick", "TvControlActivity onLongClick()" + "长按音量加"); + break; + case R.id.tv_tv_volreduce: + longId = 2; + Log.i("onLongClick", "TvControlActivity onLongClick()" + "长按音量减"); + break;*/ + } + return true; + } + + @Override + public void onClick(View v) { + Intent intent; + if (isLearn) { + switch (v.getId()) { + case R.id.tv_tv_open: + if (isTv) { + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 10); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + } else { + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 1); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + } + break; + case tv_tv_voice: + if (isTv) { + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 13); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + } else { + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 10); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + } + break; + case R.id.tv_tv_ok: + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 6); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_tv_home: + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 7); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_tv_menu: + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 9); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_tv_back: + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 8); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_tv_voladd: + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 11); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_tv_volreduce: + intent = new Intent(TvControlActivity.this, TvLearnGuideActivity.class); + intent.putExtra("learnGuide", 12); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + } + } else { + switch (v.getId()) { + case R.id.tv_tv_open: + if (isTv) { + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_OPEN)); + } else + sendAirControlOrder(TV_OPEN); + } else { + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_JIDINGHE)); + } else + sendAirControlOrder(TV_JIDINGHE); + } + break; + case tv_tv_voice: + if (isTv) { + setShake(); + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_VOICE)); + } else + sendAirControlOrder(TV_VOICE); + } else { + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_OPEN)); + } else + sendAirControlOrder(TV_OPEN); + } + break; + case R.id.tv_tv_ok: + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_OK)); + } else + sendAirControlOrder(TV_OK); + break; + case R.id.tv_tv_home: + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_HOME)); + } else + sendAirControlOrder(TV_HOME); + break; + case R.id.tv_tv_menu: + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_MENU)); + } else + sendAirControlOrder(TV_MENU); + break; + case R.id.tv_tv_back: + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_BACK)); + } else + sendAirControlOrder(TV_BACK); + break; + case R.id.tv_tv_voladd: + Log.i("onLongClick", "TvControlActivity onLongClick()" + "点击音量加"); + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_VOLADD)); + } else + sendAirControlOrder(TV_VOLADD); + break; + case R.id.tv_tv_volreduce: + Log.i("onLongClick", "TvControlActivity onLongClick()" + "点击音量减"); + if (isLocalControl) { + setShake(); + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_VOLREDUCE)); + } else + sendAirControlOrder(TV_VOLREDUCE); + break; + case R.id.ll_tv_continue_learn: + isLearn = true; + //查询学习按键 + queryStudyValue(); + break; + } + } + } + + + //发送开关指令 + private void sendAirControlOrder(String order) { + setShake(); + /* if (DensityUtil.isNetworkConnected(this)) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + map.put("sendMsg", order); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_CONTROL_AIR_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addChildDevice", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } else { + ToastUtil.show(this, R.string.net_error); + }*/ + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case QUERY_STUDY_SUCCESS: + StudyEntity entity = (StudyEntity) msg.obj; + if (entity != null) { + setIsLearned(entity); + } + if (isLearn) { + showLearn(); + } else { + showControl(); + } + break; + case QUERY_STUDY_FAIL: + + break; + case SEND_CONTROL_ORDER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DELETE_CHILDDEVICE_SUCCESS: + ToastUtil.show(this, "删除成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 2000); + break; + case LONGPRESS_TV_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case SHOW_LOCAL_CONTROL: + String obj2 = (String) msg.obj; + if (obj2.equals("1")) { + localControlIv.setVisibility(View.VISIBLE); + } else { + localControlIv.setVisibility(View.GONE); + } + break; + case APP_CONTROL_SUCCESS: + NettyEntity nettyEntity1 = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + if (nettyEntity1.getDeviceType().equals(TV_TAG)) { + if (nettyEntity1.getOpenFlag().equals("1")) { + greenCircle.setVisibility(View.VISIBLE); + greenCircle.startAnimation(mAlphaAnimation); + ToastUtil.show(this, "电视已打开"); + } else { + greenCircle.setVisibility(View.GONE); + greenCircle.clearAnimation(); + } + } + break; + case QUERY_DEVICE_LASTINFO_SUCCESS: + DeviceStateEntity parseObject = (DeviceStateEntity) msg.obj; + if (parseObject.getData().getOpenFlag().equals("1")) { + greenCircle.setVisibility(View.VISIBLE); + greenCircle.startAnimation(mAlphaAnimation); + ToastUtil.show(this, "电视已打开"); + } else { + greenCircle.setVisibility(View.GONE); + greenCircle.clearAnimation(); + } + break; + } + } + + private void setIsLearned(StudyEntity entity) { + if (entity.getObj() != null) { + for (int i = 0; i < entity.getObj().size(); i++) { + switch (entity.getObj().get(i)) { + case TV_OPEN: + if (isTv) { + mOpenCloseTag = true; + } else { + mVoiceTag = true; + } + break; + case TV_UP: + mUpTag = true; + break; + case TV_DOWN: + mDownTag = true; + break; + case TV_LEFT: + mLeftTag = true; + break; + case TV_RIGHT: + mRightTag = true; + break; + case TV_OK: + mOkTag = true; + break; + case TV_HOME: + mHomeTag = true; + break; + case TV_BACK: + mBackTag = true; + break; + case TV_MENU: + mMenuTag = true; + break; + case TV_VOICE: + mVoiceTag = true; + break; + case TV_VOLADD: + mVolAddTag = true; + break; + case TV_VOLREDUCE: + mVolReduceTag = true; + break; + case TV_JIDINGHE: + mOpenCloseTag = true; + break; + } + } + } + } + + @Override + public void onResume() { + super.onResume(); + queryDeviceLastInfo(getIntent().getExtras().get("id").toString(), TV_TAG); + if (isLearn) { + queryStudyValue(); + } + } + + private void queryDeviceLastInfo(String deviceId, String deviceType) { + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case LEARN_RESULT: + if (data != null && data.getExtras().get("learnGuide") != null) { + int learnGuide = (int) data.getExtras().get("learnGuide"); + switch (learnGuide) { + case 1: + mOpenCloseMark.setVisibility(View.VISIBLE); + break; + case 2: + mUpMark.setVisibility(View.VISIBLE); + break; + case 3: + mDownMark.setVisibility(View.VISIBLE); + break; + case 4: + mLeftMark.setVisibility(View.VISIBLE); + break; + case 5: + mRightMark.setVisibility(View.VISIBLE); + break; + case 6: + mOkMark.setVisibility(View.VISIBLE); + break; + case 7: + mHomeMark.setVisibility(View.VISIBLE); + break; + case 8: + mBackMark.setVisibility(View.VISIBLE); + break; + case 9: + mMenuMark.setVisibility(View.VISIBLE); + break; + case 10: + mVoiceMark.setVisibility(View.VISIBLE); + break; + case 11: + mVolAddMark.setVisibility(View.VISIBLE); + break; + case 12: + mVolReduceMark.setVisibility(View.VISIBLE); + break; + case 13: + mVoiceMark.setVisibility(View.VISIBLE); + break; + } + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("deviceName") != null) { + tvName = data.getExtras().get("deviceName").toString().trim(); + mTitleView.setHead(tvName); + } + break; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/device/tv/TvLearnActivity.java b/app/src/main/java/com/yonsz/z1/device/tv/TvLearnActivity.java new file mode 100644 index 0000000..430f2b3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/TvLearnActivity.java @@ -0,0 +1,169 @@ +package com.yonsz.z1.device.tv; + +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; + +/** + * Created by Administrator on 2017/6/22. + */ + +public class TvLearnActivity extends BaseActivity { + private TitleView mTitleView; + private PieChartView chartView; + private TextView tv0, tv1, tv2, tv3, tv4; + public int mId; + private AlphaAnimation mAlphaAnimation; + private boolean isLearn; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tv_learn); + initView(); + } + + private void initView() { + String tvStateTag = (String) getIntent().getExtras().get("tvStateTag"); + if (tvStateTag.equals("0")) { + isLearn = true; + } else { + isLearn = false; + } + mTitleView = (TitleView) findViewById(R.id.title_tv); + mTitleView.setHead(R.string.tv); + if (isLearn) { + mTitleView.setHeadFuntionTxt(R.string.save); + } else { + // mTitleView.setHeadFuntionTxt(R.string.voice_said); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + } + mTitleView.clearBackGroud(); + mAlphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(TvLearnActivity.this, R.anim.alpha_anim_device); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (isLearn) { + // addChildDevice(TV_TAG, "TCL"); + } else { + ToastUtil.show(TvLearnActivity.this, "语音说明,敬请期待!"); + } + } + + @Override + public void onFunctionText() { + + } + }); + if (isLearn) { + + } else { + + } + tv0 = (TextView) findViewById(R.id.iv_down); + tv1 = (TextView) findViewById(R.id.iv_left); + tv2 = (TextView) findViewById(R.id.iv_up); + tv3 = (TextView) findViewById(R.id.iv_right); + tv4 = (TextView) findViewById(R.id.iv_main); + chartView = (PieChartView) findViewById(R.id.pieChartView); + + chartView.setFanClickAbleData( + new double[]{90, 90, 90, 90}, + new int[]{Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT}, 0, mHandler); + + chartView.setOnFanClick(new OnFanItemClickListener() { + @Override + public void onFanClick(FanItem fanItem) { + mId = fanItem.getId(); + switch (mId) { + case 0: + tv0.setVisibility(View.VISIBLE); + break; + case 1: + tv1.setVisibility(View.VISIBLE); + break; + case 2: + tv2.setVisibility(View.VISIBLE); + break; + case 3: + tv3.setVisibility(View.VISIBLE); + break; + } + } + + @Override + public void onFanLongClick(FanItem fanItem) { + + } + + @Override + public void onUp(FanItem fanItem) { + + } + }); + + tv1.startAnimation(mAlphaAnimation); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_UP: + switch (mId) { + case 0: + tv0.setVisibility(View.INVISIBLE); + break; + case 1: + tv1.setVisibility(View.INVISIBLE); + break; + case 2: + tv2.setVisibility(View.INVISIBLE); + break; + case 3: + tv3.setVisibility(View.INVISIBLE); + break; + } + break; + } + return true; + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + ToastUtil.show(this, entity1.getMsg()); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/TvLearnGuideActivity.java b/app/src/main/java/com/yonsz/z1/device/tv/TvLearnGuideActivity.java new file mode 100644 index 0000000..c08996e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/TvLearnGuideActivity.java @@ -0,0 +1,392 @@ +package com.yonsz.z1.device.tv; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.LearnEvent; +import com.yonsz.z1.database.entity.LearnFailEvent; +import com.yonsz.z1.database.entity.SecondEvent; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.device.SureLearnActivity; +import com.yonsz.z1.device.airconditioner.AirAutoFailActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.FAN_LEARN_FAIL; +import static com.yonsz.z1.net.Constans.FAN_LEARN_ING; +import static com.yonsz.z1.net.Constans.FAN_LEARN_SUCCESS; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * Created by Administrator on 2017/6/26. + */ + +public class TvLearnGuideActivity extends BaseActivity { + private TitleView mTitleView; + private TextView mLearnGuide; + private TextView tv_guide_device; + private String userId; + private String ziId; + private int learnGuide; + private StateButton mStateButton; + private int sec = 30; + private MediaPlayer mediaPlayer01; + private LoadingDialog mLoadingDialog; + private boolean learningFlag = false; + private boolean isTv; + private TextView tv_2_second; + private TextView tv_press; + private CharSequence cmds = ""; + private String deviceType; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_learn_guide); + //注册eventBus + // EventBus.getDefault().register(this); + NettyHandlerUtil.getInstance(); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initView() { + isTv = (boolean) getIntent().getExtras().get("isTv"); + mStateButton = (StateButton) findViewById(R.id.bt_sec); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + mLearnGuide = (TextView) findViewById(R.id.tv_learn_guide); + tv_2_second = (TextView) findViewById(R.id.tv_2_second); + tv_press = (TextView) findViewById(R.id.tv_press); + tv_guide_device = (TextView) findViewById(R.id.tv_guide_device); + mTitleView = (TitleView) findViewById(R.id.title_learn_guide); + mTitleView.setHead(R.string.tv_learn_guide); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (isTv) { + deviceType = TV_TAG; + tv_guide_device.setText("提示灯变为红色后,将电视遥控器对"); + } else { + deviceType = TVONE_TAG; + mTitleView.setHead("机顶盒遥控学习"); + } + if (getIntent().getExtras().get("learnGuide") != null) { + learnGuide = Integer.parseInt(getIntent().getExtras().get("learnGuide").toString()); + switch (learnGuide) { + case 1: + tv_guide_device.setText("提示灯变为红色后,将机顶盒遥控器对"); + setViewAndVoiceDate(getString(R.string.Switch), "power", R.raw.recording_77, R.raw.recording_77); + break; + case 2: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("向上", "up", R.raw.recording_8, R.raw.recording_82); + break; + case 3: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("向下", "down", R.raw.recording_9, R.raw.recording_83); + break; + case 4: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("向左", "left", R.raw.recording_10, R.raw.recording_84); + break; + case 5: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("向右", "right", R.raw.recording_11, R.raw.recording_85); + break; + case 6: + setViewAndVoiceDate(getString(R.string.sure), "ok", R.raw.recording_12, R.raw.recording_81); + break; + case 7: + setViewAndVoiceDate(getString(R.string.main_page), "boot", R.raw.recording_13, R.raw.recording_79); + break; + case 8: + setViewAndVoiceDate("返回", "back", R.raw.recording_15, R.raw.recording_80); + break; + case 9: + setViewAndVoiceDate("菜单", "menu", R.raw.recording_14, R.raw.recording_78); + break; + case 10: + tv_guide_device.setText("提示灯变为红色后,将电视遥控器对"); + if (isTv) { + setViewAndVoiceDate("开关", "power", R.raw.recording_6, R.raw.recording_6); + }else { + setViewAndVoiceDate("开关", "powertv", R.raw.recording_6, R.raw.recording_6); + } + break; + case 11: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("音量+", "volplus", R.raw.recording_16, R.raw.recording_86); + break; + case 12: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("音量-", "volminus", R.raw.recording_17, R.raw.recording_87); + break; + case 13: + tv_guide_device.setText("提示灯变为红色后,将电视遥控器对"); + mLearnGuide.setText("静音"); + enterLearnState("mute"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_7); + mediaPlayer01.start(); + } + break; + case 21: + setViewAndVoiceDate("1", "1", R.raw.recording_67, R.raw.recording_88); + break; + case 22: + setViewAndVoiceDate("2", "2", R.raw.recording_68, R.raw.recording_89); + break; + case 23: + setViewAndVoiceDate("3", "3", R.raw.recording_69, R.raw.recording_90); + break; + case 24: + setViewAndVoiceDate("4", "4", R.raw.recording_70, R.raw.recording_91); + break; + case 25: + setViewAndVoiceDate("5", "5", R.raw.recording_71, R.raw.recording_92); + break; + case 26: + setViewAndVoiceDate("6", "6", R.raw.recording_72, R.raw.recording_93); + break; + case 27: + setViewAndVoiceDate("7", "7", R.raw.recording_73, R.raw.recording_94); + break; + case 28: + setViewAndVoiceDate("8", "8", R.raw.recording_74, R.raw.recording_95); + break; + case 29: + setViewAndVoiceDate("9", "9", R.raw.recording_75, R.raw.recording_96); + break; + case 30: + setViewAndVoiceDate("0", "0", R.raw.recording_76, R.raw.recording_97); + break; + case 31: + setViewAndVoiceDate("信号源", "signal", R.raw.recording_98, R.raw.recording_99); + break; + case 32: + mLearnGuide.setText("频道+"); + enterLearnState("chplus"); + break; + case 33: + mLearnGuide.setText("频道-"); + enterLearnState("chminus"); + break; + } + } + } + + private void setViewAndVoiceDate(String name, String key, int recording1, int recording2) { + mLearnGuide.setText(name); + enterLearnState(key); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + if (isTv) { + mediaPlayer01 = MediaPlayer.create(this, recording1); + } else { + mediaPlayer01 = MediaPlayer.create(this, recording2); + } + mediaPlayer01.start(); + } + } + + private void enterLearnState(final String sendMsg) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + map.put("sendMsg", sendMsg); + map.put("oper", sendMsg); + map.put("pushKey", sendMsg); + if (isTv) { + map.put("deviceType", TV_TAG); + } else { + map.put("deviceType", TVONE_TAG); + } + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + util.requestPostByAsynewApi(NetWorkUrl.INFRARED_KEYSTUDY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("enterLearnState", "onSuccess: " + respone); + SimpleEntty entity = JSON.parseObject(respone, SimpleEntty.class); + if (1 == entity.getFlag()) { + } else if (5003 == entity.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + + } + } + + @Override + public void onFail(String message) { + + } + }); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(SecondEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (!msg.equals("学习成功")) { + cmds = msg; + } + Message message = new Message(); + message.what = FAN_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnFailEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = FAN_LEARN_FAIL; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = FAN_LEARN_ING; + mHandler.sendMessage(message); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FAN_LEARN_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + Toast.makeText(TvLearnGuideActivity.this, "学习成功", Toast.LENGTH_SHORT); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(TvLearnGuideActivity.this, SureLearnActivity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("type", deviceType); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + if (!TextUtils.isEmpty(cmds)) { + intent.putExtra("cmds", cmds); + } + startActivity(intent); + finish(); + } + }, 1000); + + break; + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else { + if (learningFlag) { + Intent intent = new Intent(TvLearnGuideActivity.this, SureLearnActivity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + intent.putExtra("type", deviceType); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + if (!TextUtils.isEmpty(cmds)) { + intent.putExtra("cmds", cmds); + } + startActivity(intent); + finish(); + } else { + finish(); + } + } + break; + case FAN_LEARN_ING: + initLoadDialog(); + learningFlag = true; + sec = 10; + break; + case FAN_LEARN_FAIL: + Intent intent1 = new Intent(TvLearnGuideActivity.this, AirAutoFailActivity.class); + intent1.putExtra("ziId", ziId); + intent1.putExtra("tag", TV_TAG); + intent1.putExtra("learnGuide", learnGuide); + intent1.putExtra("isTv", isTv); + intent1.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent1.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent1); + finish(); + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.setMessage(R.string.save); + mLoadingDialog.show(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + //取消eventBus注册 + // EventBus.getDefault().unregister(this); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/TvListActivity.java b/app/src/main/java/com/yonsz/z1/device/tv/TvListActivity.java new file mode 100644 index 0000000..733b457 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/TvListActivity.java @@ -0,0 +1,329 @@ +package com.yonsz.z1.device.tv; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.DeviceListEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version4.devicelist.CharacterParser; +import com.yonsz.z1.version4.devicelist.ClearEditText; +import com.yonsz.z1.version4.devicelist.PinyinComparator; +import com.yonsz.z1.version4.devicelist.SortAdapter; +import com.yonsz.z1.version4.devicelist.SortModel; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_SUCCESS; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_CONN_DEVICE_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.QUERY_DEVICE_BRAND; + +/** + * Created by Administrator on 2017/10/10. + */ +public class TvListActivity extends BaseActivity { + private TitleView mTitleView; + private List stringList; + private TextView tv_below_et; + + + private EditText searchEt; + private ListView sortListView; + private com.yonsz.z1.version4.devicelist.SideBar sideBar; + private TextView dialog; + private SortAdapter adapter; + private ClearEditText mClearEditText; + private String rid; + private String deviceType; + /** + * 汉字转换成拼音的类 + */ + private CharacterParser characterParser; + private List SourceDateList; + /** + * 根据拼音来排列ListView里面的数据类 + */ + private PinyinComparator pinyinComparator; + private String ziId; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_brand_list1); + initView(); + queryDeviceBrand(); + } + + private void queryDeviceBrand() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", TVONE_TAG); + netWorkUtil.requestPostByAsynew(QUERY_DEVICE_BRAND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceBrand", "ShareDeviceActivity onSuccess()" + respone); + DeviceListEntity obj = JSON.parseObject(respone, DeviceListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + tv_below_et = (TextView) findViewById(R.id.tv_below_et); + searchEt = (EditText) findViewById(R.id.et_search); + stringList = new ArrayList<>(); + mTitleView = (TitleView) findViewById(R.id.title_brand_list); + mTitleView.setHead(R.string.select_tv_brand); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (!TextUtils.isEmpty(getIntent().getExtras().get("nameTag").toString())) { + tv_below_et.setVisibility(View.GONE); + } + + tv_below_et.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + addChildDevice(getIntent().getExtras().get("ziId").toString(), TV_TAG, ""); + } + }); + + //实例化汉字转拼音类 + characterParser = CharacterParser.getInstance(); + pinyinComparator = new PinyinComparator(); + sideBar = (com.yonsz.z1.version4.devicelist.SideBar) findViewById(R.id.sidrbar); + dialog = (TextView) findViewById(R.id.dialog); + sideBar.setTextView(dialog); + //设置右侧触摸监听 + sideBar.setOnTouchingLetterChangedListener(new com.yonsz.z1.version4.devicelist.SideBar.OnTouchingLetterChangedListener() { + + @Override + public void onTouchingLetterChanged(String s) { + //该字母首次出现的位置 + int position = adapter.getPositionForSection(s.charAt(0)); + if (position != -1) { + sortListView.setSelection(position); + } + } + }); + sortListView = (ListView) findViewById(R.id.country_lvcountry); + sortListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + addChildDevice(getIntent().getExtras().get("ziId").toString(), TV_TAG, ((SortModel) adapter.getItem(position)).getName()); + } + }); + + mClearEditText = (ClearEditText) findViewById(R.id.et_search); + //根据输入框输入值的改变来过滤搜索 + mClearEditText.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + //当输入框里面的值为空,更新为原来的列表,否则为过滤数据列表 + filterData(s.toString()); + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + String deviceId = entity1.getObj().getDeviceId(); + switch (deviceId) { + case TV_TAG: + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(TvListActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(TvListActivity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + if (entity1.getObj().getAssistFlag().toString().equals("1")) { + intent.putExtra("tvName", entity1.getObj().getAssistBrand().toString()); + intent.putExtra("assistFlag", "1"); + } else { + intent.putExtra("tvName", entity1.getObj().getDeviceBrand().toString()); + intent.putExtra("assistFlag", "0"); + } + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + break; + } + break; + case QUERY_DEVICE_BRAND_FAIL: + + break; + case QUERY_DEVICE_BRAND_SUCCESS: + DeviceListEntity entity2 = (DeviceListEntity) msg.obj; + stringList = entity2.getObj(); + stringList.add(0, "其他"); + SourceDateList = filledData(stringList); + // 根据a-z进行排序源数据 + Collections.sort(SourceDateList, pinyinComparator); + adapter = new SortAdapter(this, SourceDateList); + sortListView.setAdapter(adapter); + break; + case UPDATE_CONN_DEVICE_SUCCESS: + AddChildDeviceEntity obj = (AddChildDeviceEntity) msg.obj; + Intent intent = new Intent(TvListActivity.this, TvControlActivity.class); + intent.putExtra("deviceName", obj.getObj().getAssistBrand()); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + break; + } + } + + /** + * 为ListView填充数据 + * + * @param date + * @return + */ + private List filledData(List date) { + List mSortList = new ArrayList(); + if (date.size() != 0) { + for (int i = 0; i < date.size(); i++) { + SortModel sortModel = new SortModel(); + sortModel.setName(date.get(i)); + //汉字转换成拼音 + String pinyin = characterParser.getSelling(date.get(i)); + String sortString = pinyin.substring(0, 1).toUpperCase(); + // 正则表达式,判断首字母是否是英文字母 + if (sortString.matches("[A-Z]")) { + sortModel.setSortLetters(sortString.toUpperCase()); + } else { + sortModel.setSortLetters("#"); + } + mSortList.add(sortModel); + } + } else { + + } + return mSortList; + } + + /** + * 根据输入框中的值来过滤数据并更新ListView + * + * @param filterStr + */ + private void filterData(String filterStr) { + List filterDateList = new ArrayList(); + + if (TextUtils.isEmpty(filterStr)) { + filterDateList = SourceDateList; + } else { + filterDateList.clear(); + for (SortModel sortModel : SourceDateList) { + String name = sortModel.getName(); + if (name.indexOf(filterStr.toString()) != -1 || characterParser.getSelling(name).startsWith(filterStr.toString())) { + filterDateList.add(sortModel); + } + } + } + + // 根据a-z进行排序 + Collections.sort(filterDateList, pinyinComparator); + adapter.updateListView(filterDateList); + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/device/tv/TvListOneActivity.java b/app/src/main/java/com/yonsz/z1/device/tv/TvListOneActivity.java new file mode 100644 index 0000000..cabd4b9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/device/tv/TvListOneActivity.java @@ -0,0 +1,365 @@ +package com.yonsz.z1.device.tv; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.DeviceListEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entitya2.EventCloseEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.PingYinUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_SUCCESS; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_CONN_DEVICE_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.QUERY_DEVICE_BRAND; + +/** + * Created by Administrator on 2017/10/10. + */ +public class TvListOneActivity extends BaseActivity { + public MyAdapter adapter; + public ArrayList atv;//品牌列表 + Handler myhandler = new Handler(); + private TitleView mTitleView; + private ListView brandsListView; + private List list; + private List stringList; + private EditText searchEt; + /** + * 关于界面UI的更新,可以使用Handler,通过Post一个Runnable去更新,Runnable会去根据搜索框的文本对mData里的数据进行更新。 + */ + Runnable eChanged = new Runnable() { + + @Override + public void run() { + String data = searchEt.getText().toString(); + atv.clear(); + getmDataSub(stringList, data); + adapter.notifyDataSetChanged(); + + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_brand_list); + initView(); + initListener(); + queryDeviceBrand(); + } + + private void queryDeviceBrand() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", TV_TAG); + netWorkUtil.requestPostByAsynew(QUERY_DEVICE_BRAND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceBrand", "ShareDeviceActivity onSuccess()" + respone); + DeviceListEntity obj = JSON.parseObject(respone, DeviceListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + private void initView() { + searchEt = (EditText) findViewById(R.id.et_search); + stringList = new ArrayList<>(); + atv = new ArrayList(); + brandsListView = (ListView) findViewById(R.id.listview_brand_list); + mTitleView = (TitleView) findViewById(R.id.title_brand_list); + mTitleView.setHead(R.string.select_tvone_brand); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + adapter = new MyAdapter(this); + brandsListView.setAdapter(adapter); + } + + private void initListener() { + searchEt.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + + @Override + public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + /**这是文本框改变之后 会执行的动作 + * 因为我们要做的就是,在文本框改变的同时,我们的listview的数据也进行相应的变动,并且如一的显示在界面上。 + * 所以这里我们就需要加上数据的修改的动作了。 + */ + myhandler.post(eChanged); + } + }); + } + + /** + * 可能对mData的理解会有点问题,因为数据更新完后,每一次的筛选数据都是放在mData里,那么原本的数据呢,当然就是在mListTitle和mListText里。根据获得数据的getmDataSub的代码即可知。 + */ + + private void getmDataSub(List mDataSubs, String data) { + int length = mDataSubs.size(); + for (int i = 0; i < length; ++i) { + if (mDataSubs.get(i).contains(data) || PingYinUtil.getPingYin(mDataSubs.get(i)).contains(data)) { + atv.add(mDataSubs.get(i)); + } + } + } + + + @Override + public void onResume() { + super.onResume(); + queryDeviceBrand(); + searchEt.setText(""); + } + + public void load_brand() { + atv.clear(); + adapter.notifyDataSetChanged(); + //再添加其余的品牌列表 + for (int i = 0; i < stringList.size(); i++) { + atv.add(stringList.get(i)); + } + adapter.notifyDataSetChanged(); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + String deviceId = entity1.getObj().getDeviceId(); + switch (deviceId) { + case TV_TAG: + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(TvListOneActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(TvListOneActivity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("tvName", entity1.getObj().getDeviceBrand().toString()); + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + finish(); + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + break; + } + break; + case QUERY_DEVICE_BRAND_FAIL: + + break; + case QUERY_DEVICE_BRAND_SUCCESS: + DeviceListEntity entity2 = (DeviceListEntity) msg.obj; + stringList = entity2.getObj(); + load_brand(); + break; + case UPDATE_CONN_DEVICE_SUCCESS: + AddChildDeviceEntity obj = (AddChildDeviceEntity) msg.obj; + Intent intent = new Intent(TvListOneActivity.this, TvControlActivity.class); + intent.putExtra("deviceName", obj.getObj().getDeviceBrand()); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + break; + } + } + + public void showModifyPop(final int adapterPosition, final int i) { + ConfirmNameDialog dialog = new ConfirmNameDialog(TvListOneActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (!TextUtils.isEmpty(getIntent().getExtras().get("nameTag").toString())) { + updateConnDevice(positioName); + } else { + if (TextUtils.isEmpty(positioName)) { + ToastUtil.show(TvListOneActivity.this, "品牌不能为空"); + } else { + // addChildDevice(getIntent().getExtras().get("ziId").toString(), TV_TAG, positioName); + + Intent intent = new Intent(TvListOneActivity.this, TvListActivity.class); + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceBrand", positioName); + intent.putExtra("nameTag", getIntent().getExtras().get("nameTag").toString()); + startActivity(intent); + finish(); + } + } + break; + } + } + }); + dialog.setMaxEms(10); + dialog.setHintName(R.string.Enter_brand_name); + dialog.setContent(R.string.Brand_name); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void updateConnDevice(String positioName) { + + } + + private class MyAdapter extends BaseAdapter { + private Context context; + private LayoutInflater inflater; + + public MyAdapter(Context context) { + super(); + this.context = context; + inflater = LayoutInflater.from(context); + + } + + @Override + public int getCount() { + return atv.size() + 1; + } + + @Override + public Object getItem(int arg0) { + return arg0; + } + + @Override + public long getItemId(int arg0) { + return arg0; + } + + @Override + public View getView(final int position, View view, ViewGroup arg2) { + if (view == null) { + view = inflater.inflate(R.layout.brandlist_listview_item, null); + } + final TextView edit = (TextView) view.findViewById(R.id.name); + if (position == atv.size()) { + edit.setText("其他品牌"); + } else { + edit.setText(atv.get(position)); + } + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!TextUtils.isEmpty(getIntent().getExtras().get("nameTag").toString())) { + if (position == atv.size()) { + showModifyPop(0, 0); + } else { + updateConnDevice(atv.get(position)); + } + } else { + if (position == atv.size()) { + showModifyPop(0, 0); + } else { + // addChildDevice(getIntent().getExtras().get("ziId").toString(), TV_TAG, atv.get(position)); + Intent intent = new Intent(TvListOneActivity.this, TvListActivity.class); + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceBrand", atv.get(position)); + intent.putExtra("nameTag", getIntent().getExtras().get("nameTag").toString()); + startActivity(intent); + finish(); + } + } + } + }); + return view; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/ChildDeviceListA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/ChildDeviceListA2Activity.java new file mode 100644 index 0000000..bc4eac6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/ChildDeviceListA2Activity.java @@ -0,0 +1,1004 @@ +package com.yonsz.z1.devicea2; + +import android.app.Service; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Color; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Vibrator; +import android.support.design.widget.CoordinatorLayout; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuBridge; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItem; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.DeviceDetailEntity; +import com.yonsz.z1.database.entity.DeviceEntity; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.database.entity.entitya2.EventCloseEntity; +import com.yonsz.z1.database.entity.entitya2.LoadEvent; +import com.yonsz.z1.device.childdevice.ChilidSlideAdapter; +import com.yonsz.z1.device.curtains.CurtainsActivity; +import com.yonsz.z1.device.sweep.SweepActivity; +import com.yonsz.z1.device.switcher.SwitcherActivity; +import com.yonsz.z1.device.tv.TvControlActivity; +import com.yonsz.z1.devicea2.aira2.AirA2Activity; +import com.yonsz.z1.devicea2.childdevicea2.SmartMic2; +import com.yonsz.z1.devicea2.childdevicea2.ViewPagerDelegate2; +import com.yonsz.z1.devicea2.fana2.FanA2Activity; +import com.yonsz.z1.devicea2.fana2.FanListA2Activity; +import com.yonsz.z1.devicea2.safedevice.SafeDeviceActivity; +import com.yonsz.z1.devicea2.sweepa2.SweepA2Activity; +import com.yonsz.z1.devicea2.tva2.HorizontalProgressBarWithNumber; +import com.yonsz.z1.devicea2.tva2.TvA2Activity; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.mydevice.DeviceLossActivity; +import com.yonsz.z1.new433.curtain.CurtainNewActivity; +import com.yonsz.z1.new433.curtain.CurtainsStepOneActivity; +import com.yonsz.z1.new433.light.LightNewActivity; +import com.yonsz.z1.new433.switcher.SwitcherNewActivity; +import com.yonsz.z1.new433.switcher.SwitcherStepOneActivity; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.tcpudp.model.Module; +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.PositionPopupWindow; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_CLOSE; +import static com.yonsz.z1.net.Constans.AIR_OPEN; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.FAN_LEARN_ING; +import static com.yonsz.z1.net.Constans.FAN_OPEN; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.GETZIINFO_FAIL; +import static com.yonsz.z1.net.Constans.GETZIINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.RELOAD_INFRARED_SUCCESS; +import static com.yonsz.z1.net.Constans.REQUEST_ADD_CHILDDEVICE; +import static com.yonsz.z1.net.Constans.SAFE_DEVICE_TAG; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_SUCCESS; +import static com.yonsz.z1.net.Constans.SWEEP_OPEN; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TV_OPEN; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.isLocalControl; +import static com.yonsz.z1.net.NetWorkUrl.CANCEL_DOWNLOAD; +import static com.yonsz.z1.net.NetWorkUrl.YKY_DOWNLOAD; + +/** + * Created by Administrator on 2017/11/9. + */ + +public class ChildDeviceListA2Activity extends BaseActivity implements SwipeItemClickListener { + public static DeviceEntity.ObjEntity mObjEntity = new DeviceEntity.ObjEntity(); + public static int childPosition; + private boolean isAddSwitcher, isAddCurtains, isAddLight; + private ImageView mAdd; + private RelativeLayout mAddRl; + private TitleView mTitleView; + private CoordinatorLayout layout1; + private SwipeMenuRecyclerView mRecyclerView; + private ChilidSlideAdapter mChilidSlideAdapter; + private String ziId; + private boolean isOnline = true; + private boolean isOpen = false; + private SmartMic2 mSmartMic2; + private LinearLayout noWifiTv; + private ViewPagerDelegate2 mViewPagerDelegate2; + private String name; + private List mStringList = new ArrayList<>(); + private RelativeLayout mProgressTop; + private TextView tv_load_back, tv_cancel_load; + private HorizontalProgressBarWithNumber mProgressBar; + private boolean isShowAll; + private String deviceIp; + private List mModules; + + + private Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + Intent intent; + switch (msg.what) { + case REQUEST_ADD_CHILDDEVICE: + String name = (String) msg.obj; + if (DensityUtil.isNetworkConnected(ChildDeviceListA2Activity.this)) { + switch (name) { + case "电视": + intent = new Intent(ChildDeviceListA2Activity.this, FanListA2Activity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + intent.putExtra("deviceType", TV_TAG); + startActivity(intent); + // addChildDevice(ziId, TV_TAG, "未知品牌"); + break; + case "空调": + intent = new Intent(ChildDeviceListA2Activity.this, FanListA2Activity.class); + intent.putExtra("airStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + intent.putExtra("deviceType", AIR_TAG); + startActivity(intent); + break; + case "风扇": + intent = new Intent(ChildDeviceListA2Activity.this, FanListA2Activity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + intent.putExtra("deviceType", FAN_TAG); + startActivity(intent); + // addChildDevice(ziId, FAN_TAG, "未知品牌"); + break; + case "扫地机": + intent = new Intent(ChildDeviceListA2Activity.this, FanListA2Activity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + intent.putExtra("id", ""); + intent.putExtra("deviceType", SWEEP_TAG); + startActivity(intent); + // addChildDevice(ziId, SWEEP_TAG, "未知品牌"); + break; + case "灯光": + if (isAddLight) { + showLightBottom(LIGHT_TAG); + } else { + addChildDevice(ziId, LIGHT_TAG, "未知品牌"); + } + break; + case "窗帘": + showPositionBottom(CURTAINS_TAG); + // addChildDevice(ziId, CURTAINS_TAG, "未知品牌"); + break; + case "插座": + // addChildDevice(ziId, SWITCH_TAG, "未知品牌"); + showPositionBottom(SWITCH_TAG); + break; + } + break; + } else { + ToastUtil.show(ChildDeviceListA2Activity.this, R.string.net_error); + } + } + } + }; + /** + * RecyclerView的Item的Menu点击监听。 + */ + private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() { + @Override + public void onItemClick(SwipeMenuBridge menuBridge) { + menuBridge.closeMenu(); + + int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。 + final int adapterPosition = menuBridge.getAdapterPosition() - 1; // RecyclerView的Item的position,减去头部。 + int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。 + + if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) { + // Toast.makeText(ChildDeviceListA2Activity.this, "list第" + adapterPosition + "; 右侧菜单第" + menuPosition, Toast.LENGTH_SHORT).show(); + if (mStringList.size() != 0 && (mStringList.size() <= mObjEntity.getList().size() || mStringList.size() == mObjEntity.getList().size() - 1)) { + String deviceType = mStringList.get(adapterPosition).getDeviceType(); + if (deviceType.equals(LIGHT_TAG) || deviceType.equals(CURTAINS_TAG) || deviceType.equals(SWITCH_TAG)) { + ToastUtil.show(ChildDeviceListA2Activity.this, R.string.no_delete); + } else if (DensityUtil.isNetworkConnected(ChildDeviceListA2Activity.this)) { + ConfirmDialog dialog = new ConfirmDialog(ChildDeviceListA2Activity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + switch (mStringList.get(adapterPosition).getDeviceType()) { + case TV_TAG: + deleteChildDevice(TV_TAG, ziId); + break; + case AIR_TAG: + deleteChildDevice(AIR_TAG, ziId); + break; + case FAN_TAG: + deleteChildDevice(FAN_TAG, ziId); + break; + case SWEEP_TAG: + deleteChildDevice(SWEEP_TAG, ziId); + break; + } + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else { + ToastUtil.show(ChildDeviceListA2Activity.this, R.string.net_error); + } + } + } + } + }; + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + if (viewType == 0) { + + } else { + int width = getResources().getDimensionPixelSize(R.dimen.x60); + if (mObjEntity.getOnlineFlag().equals("1")) { + // 1. MATCH_PARENT 自适应高度,保持和Item一样高; + // 2. 指定具体的高,比如80; + // 3. WRAP_CONTENT,自身高度,不推荐; + int height = ViewGroup.LayoutParams.MATCH_PARENT; + // 添加右侧的,如果不添加,则右侧不会出现菜单。 + { + SwipeMenuItem deleteItem = new SwipeMenuItem(ChildDeviceListA2Activity.this) + .setBackground(R.color.z1_ff0000) + .setText(R.string.delete) + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + swipeRightMenu.addMenuItem(deleteItem);// 添加菜单到右侧。 + } + } + } + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_child_device_a2); + layout1 = (CoordinatorLayout) findViewById(R.id.layout); + isShowAll = (boolean) getIntent().getExtras().get("isShowAll"); + childPosition = (int) getIntent().getExtras().get("position"); + name = (String) getIntent().getExtras().get("name"); + ziId = (String) getIntent().getExtras().get("ziId"); + isLocalControl = false; + mModules = loadDevices(); + initView(); + } + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case DELETE_CHILDDEVICE_SUCCESS: + + break; + case GETZIINFO_SUCCESS: + DeviceEntity entity = (DeviceEntity) msg.obj; + if (msg.obj != null) { + if (isShowAll) { + + } else { + if (entity != null && entity.getObj().size() != 0) { + for (int i = 0; i < entity.getObj().size(); i++) { + if (entity.getObj().get(i).getIsOwner() != null && entity.getObj().get(i).getIsOwner().equals("1")) { + entity.getObj().remove(i); + i -= 1; + } else { + + } + } + } + } + if (null != entity.getObj() && entity.getObj().size() != 0 && entity.getObj().size() >= childPosition) { + mObjEntity = entity.getObj().get(childPosition); + getStringList(mObjEntity); + } else { + mRecyclerView.setVisibility(View.GONE); + } + } + if (null != mObjEntity.getList()) { + mRecyclerView.setVisibility(View.VISIBLE); + setData(); + } + /*if (mObjEntity.getList() != null) { + } else { + // mRecyclerView.setVisibility(View.GONE); + }*/ + break; + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + String deviceId = entity1.getObj().getDeviceId(); + switch (deviceId) { + case FAN_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, FanA2Activity.class); + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + break; + case TV_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, TvControlActivity.class); + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case SWEEP_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, SweepActivity.class); + intent.putExtra("sweepStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case LIGHT_TAG: + isAddLight = true; + showLightBottom(LIGHT_TAG); + /*intent = new Intent(ChildDeviceListA2Activity.this, LightActivity.class); + intent.putExtra("lightStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent);*/ + break; + case CURTAINS_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, CurtainsActivity.class); + intent.putExtra("curtainsStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case SWITCH_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, SwitcherActivity.class); + intent.putExtra("switcherStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case SAFE_DEVICE_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, SafeDeviceActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", mObjEntity.getAddressId()); + intent.putExtra("devicePosition", mObjEntity.getDeviceAddress().toString()); + intent.putExtra("deviceName", mObjEntity.getZiName().toString()); + startActivity(intent); + break; + } + break; + case ADD_CHILDDEVICE: + intent = new Intent(ChildDeviceListA2Activity.this, SafeDeviceActivity.class); + intent.putExtra("deviceAddress", mObjEntity.getAddressId()); + intent.putExtra("ziId", ziId); + intent.putExtra("devicePosition", mObjEntity.getDeviceAddress().toString()); + intent.putExtra("deviceName", mObjEntity.getZiName().toString()); + startActivity(intent); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case SEND_CONTROL_ORDER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DELETE_CHILDDEVICE_FAIL: + // ToastUtil.show(ChildDeviceListA2Activity.this, R.string.net_error); + break; + case FAN_LEARN_ING: + NettyEntity nettyEntity = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + int countNum = Integer.parseInt(nettyEntity.getCountNum()); + int loadNum = Integer.parseInt(nettyEntity.getLoadNum()); + mProgressBar.setProgress(100000 / countNum * loadNum / 1000); + Log.i("setProgress", "AirA2Activity callBackUiThread()" + (100 / countNum * loadNum)); + if (loadNum / countNum == 1) { + mProgressTop.setVisibility(View.GONE); + } + break; + case RELOAD_INFRARED_SUCCESS: + mProgressTop.setVisibility(View.VISIBLE); + break; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_device_add: + if (DensityUtil.isNetworkConnected(this)) { + if (mObjEntity.getOnlineFlag().equals("1")) { + openSmartMic(); + } else { + ToastUtil.show(ChildDeviceListA2Activity.this, "设备已离线"); + } + } else { + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.tv_no_wifi: + startActivity(new Intent(ChildDeviceListA2Activity.this, DeviceLossActivity.class)); + break; + case R.id.rl_progress_top: + break; + case R.id.tv_load_back: + finish(); + break; + case R.id.tv_cancel_load: + if (null != mObjEntity.getLoadErrorType()) { + cancelDownload(); + } else { + + } + break; + } + } + + private void openSmartMic() { + mSmartMic2 = new SmartMic2(layout1); + mViewPagerDelegate2 = new ViewPagerDelegate2(); + DeviceEntityV4.DataBean dataBean = new DeviceEntityV4.DataBean(); + mSmartMic2.setDelegate(mViewPagerDelegate2).setMenuList(dataBean, handler).show(); + } + + private void cancelDownload() { + + } + + @Override + public void onResume() { + super.onResume(); + if (DensityUtil.isNetworkConnected(this)) { + getZ1Info(); + } else { + ToastUtil.show(this, R.string.net_error); + } + } + + //获取Z1列表 + private void getZ1Info() { + + } + + private List getStringList(DeviceEntity.ObjEntity objEntity) { + mStringList.clear(); + if (objEntity.getList() != null) { + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case AIR_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case TV_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case FAN_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case SWEEP_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + isAddLight = false; + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case LIGHT_TAG: + isAddLight = true; + if (!objEntity.getLightNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + isAddCurtains = false; + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case CURTAINS_TAG: + isAddCurtains = true; + if (!objEntity.getBlindNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + isAddSwitcher = false; + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case SWITCH_TAG: + isAddSwitcher = true; + if (!objEntity.getPlugNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + } + return mStringList; + } + + private void showLightBottom(final String deviveType) { + + } + + private List loadDevices() { + List modules = new ArrayList(); + SharedPreferences preferences = getSharedPreferences("module_list", MODE_PRIVATE); + int count = preferences.getInt(Constants.KEY_MODULE_COUNT, 0); + Module module; + + for (int i = 0; i < count; i++) { + module = new Module(); + module.setId(preferences.getInt(Constants.KEY_PRE_ID + i, -1)); + module.setIp(preferences.getString(Constants.KEY_PRE_IP + i, null)); + module.setMac(preferences.getString(Constants.KEY_PRE_MAC + i, null)); + module.setModuleID(preferences.getString(Constants.KEY_PRE_MODULEID + i, null)); + modules.add(module); + } + return modules; + } + + private void initView() { + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_child_device_list); + noWifiTv = (LinearLayout) findViewById(R.id.tv_no_wifi); + mProgressTop = (RelativeLayout) findViewById(R.id.rl_progress_top); + mProgressBar = (HorizontalProgressBarWithNumber) findViewById(R.id.pg_horizontal_fan); + tv_load_back = (TextView) findViewById(R.id.tv_load_back); + tv_cancel_load = (TextView) findViewById(R.id.tv_cancel_load); + mAdd = (ImageView) findViewById(R.id.bt_device_add); + mAddRl = (RelativeLayout) findViewById(R.id.rl_device_add); + mTitleView = (TitleView) findViewById(R.id.title_child_device); + mTitleView.setHead(name); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mAdd.setOnClickListener(this); + noWifiTv.setOnClickListener(this); + mProgressTop.setOnClickListener(this); + tv_load_back.setOnClickListener(this); + tv_cancel_load.setOnClickListener(this); + + /*if (DensityUtil.isNetworkConnected(this)) { + getZ1Info(); + } else { + ToastUtil.show(this, R.string.net_error); + }*/ + mChilidSlideAdapter = new ChilidSlideAdapter(this, mObjEntity); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setVisibility(View.VISIBLE); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setSwipeMenuCreator(swipeMenuCreator); + mRecyclerView.setSwipeMenuItemClickListener(mMenuItemClickListener); + mRecyclerView.setAdapter(mChilidSlideAdapter); + mRecyclerView.setSwipeItemClickListener(this); + + + if (getIntent().getExtras() != null && getIntent().getExtras().get("deviceDetail") != null) { + mObjEntity = (DeviceEntity.ObjEntity) getIntent().getExtras().get("deviceDetail"); + if (null != mObjEntity.getList()) { + setData(); + } + } + + for (int i = 0; i < mModules.size(); i++) { + if (mModules.get(i).getMac().equals(ziId)) { + deviceIp = mModules.get(i).getIp(); + WifiManager wifimanager; + wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + String ssidAll = wifimanager.getConnectionInfo().getSSID().toString(); + String ssid = ssidAll.substring(1, ssidAll.length() - 1); + Log.i("nettymanager", "ChildDeviceListActivity onCreate()" + deviceIp + "===" + ssid + "===" + mObjEntity.getWifiName()); + if (wifimanager.isWifiEnabled() && ssid.equals(mObjEntity.getWifiName())) { + NettyManager.getInstance(deviceIp); + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (isLocalControl) { + NettyManager.closeCtx(); + } + } + + private void setData() { + if (mObjEntity.getLoadStatus().equals("1")) { + mProgressTop.setVisibility(View.VISIBLE); + } else if (mObjEntity.getLoadStatus().equals("-1")) { + if (mObjEntity.getLoadErrorType() != null) { + // sendKeyInfrared2Mac(mObjEntity.getLoadErrorType().toString()); + reloadInfrared(mObjEntity.getLoadErrorType().toString()); + } + } else { + mProgressTop.setVisibility(View.GONE); + } + if (null != mObjEntity.getOnlineFlag() && mObjEntity.getOnlineFlag().equals("1")) { + noWifiTv.setVisibility(View.GONE); + } else { + noWifiTv.setVisibility(View.VISIBLE); + } + mChilidSlideAdapter.getNewData(mObjEntity); + mChilidSlideAdapter.notifyDataSetChanged(); + /*if (mObjEntity.getList().size() == 7) { + mAddRl.setVisibility(View.GONE); + } else { + mAddRl.setVisibility(View.VISIBLE); + }*/ + mChilidSlideAdapter.setmOnItemClickListener(new OnRecyclerItemClickListener() { + @Override + public void onClick(View view, int position, List photos, int i) { + switch (i) { + case 0: + if (DensityUtil.isNetworkConnected(ChildDeviceListA2Activity.this)) { + if (mObjEntity.getOnlineFlag().equals("1")) { + setShake(); + // Toast.makeText(ChildDeviceListA2Activity.this, "开关机", Toast.LENGTH_SHORT).show(); + if (mStringList.size() != 0) { + switch (mStringList.get(position).getDeviceType()) { + case TV_TAG: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_OPEN)); + // Toast.makeText(ChildDeviceListA2Activity.this, deviceIp, Toast.LENGTH_SHORT).show(); + } else { + sendAirControlOrder(TV_OPEN, ziId); + } + break; + case AIR_TAG: + if (isOpen) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_CLOSE)); + // Toast.makeText(ChildDeviceListA2Activity.this, deviceIp, Toast.LENGTH_SHORT).show(); + } else { + sendAirControlOrder(AIR_CLOSE, ziId); + isOpen = false; + } + } else { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_OPEN)); + // Toast.makeText(ChildDeviceListA2Activity.this, deviceIp, Toast.LENGTH_SHORT).show(); + } else { + sendAirControlOrder(AIR_OPEN, ziId); + isOpen = true; + } + } + break; + case FAN_TAG: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_OPEN)); + // Toast.makeText(ChildDeviceListA2Activity.this, deviceIp, Toast.LENGTH_SHORT).show(); + } else { + sendAirControlOrder(FAN_OPEN, ziId); + } + break; + case SWEEP_TAG: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_OPEN)); + // Toast.makeText(ChildDeviceListA2Activity.this, deviceIp, Toast.LENGTH_SHORT).show(); + } else { + sendAirControlOrder(SWEEP_OPEN, ziId); + } + break; + case LIGHT_TAG: + Toast.makeText(ChildDeviceListA2Activity.this, "暂无功能", Toast.LENGTH_SHORT).show(); + break; + case CURTAINS_TAG: + Toast.makeText(ChildDeviceListA2Activity.this, "暂无功能", Toast.LENGTH_SHORT).show(); + break; + } + } + } + } else { + ToastUtil.show(ChildDeviceListA2Activity.this, R.string.net_error); + } + break; + case 1: + if (mObjEntity.getSafeNum().equals("0")) { + //添加安防大类 + addChildDevice(ziId, SAFE_DEVICE_TAG, "未知品牌"); + } else { + Intent intent = new Intent(ChildDeviceListA2Activity.this, SafeDeviceActivity.class); + intent.putExtra("deviceAddress", mObjEntity.getAddressId()); + intent.putExtra("ziId", ziId); + intent.putExtra("devicePosition", mObjEntity.getDeviceAddress().toString()); + intent.putExtra("deviceName", mObjEntity.getZiName().toString()); + startActivity(intent); + } + break; + } + } + + @Override + public void onLongClick(View view, int position) { + + } + }); + } + + private void reloadInfrared(String deviceType) { + + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + //发送开关指令 + private void sendAirControlOrder(String order, String ziId) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + map.put("macId", ziId); + map.put("sendMsg", order); + util.requestPostByAsyn(ziId, NetWorkUrl.SEND_CONTROL_AIR_ORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addChildDevice", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + + } + + public void onEventMainThread(EventCloseEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LoadEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_ING; + message.obj = msg; + mHandler.sendMessage(message); + } + + private void showPositionBottom(final String deviveType) { + View rootview = LayoutInflater.from(ChildDeviceListA2Activity.this).inflate(R.layout.activity_child_device_a2, null); + PositionPopupWindow popupWindow = new PositionPopupWindow(this, mObjEntity.getAddressId(), new PositionPopupWindow.OnCompleteListener() { + @Override + public void onComplete(String time, List conditionList) { + Log.i("showPositionBottom", "SwitcherActivity onComplete()" + time + conditionList.toString()); + Intent intent; + switch (deviveType) { + case CURTAINS_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, CurtainsStepOneActivity.class); + if (isAddCurtains) { + intent.putExtra("isFirst", "0"); + } else { + intent.putExtra("isFirst", "1"); + } + if (time.equals("13")) { + intent.putExtra("addressId", "0"); + } else { + intent.putExtra("addressId", String.valueOf(Integer.valueOf(time) + 1)); + } + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", mObjEntity.getAddressId()); + startActivity(intent); + break; + case LIGHT_TAG: + + break; + case SWITCH_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, SwitcherStepOneActivity.class); + if (isAddSwitcher) { + intent.putExtra("isFirst", "0"); + } else { + intent.putExtra("isFirst", "1"); + } + if (time.equals("13")) { + intent.putExtra("addressId", "0"); + } else { + intent.putExtra("addressId", String.valueOf(Integer.valueOf(time) + 1)); + } + intent.putExtra("deviceAddress", mObjEntity.getAddressId()); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + } + + } + }); + popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + @Override + public void onItemClick(View itemView, int position) { + position -= 1; + if (DensityUtil.isNetworkConnected(ChildDeviceListA2Activity.this)) { + ziId = mObjEntity.getZiId(); + Intent intent; + if (mStringList.size() != 0 && (mStringList.size() <= mObjEntity.getList().size() || mStringList.size() == mObjEntity.getList().size() - 1)) { + switch (mStringList.get(position).getDeviceType()) { + case TV_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, TvA2Activity.class); + intent.putExtra("tvStateTag", "1"); + intent.putExtra("ziId", ziId); + if (mStringList.get(position).getAssistFlag() != null && mStringList.get(position).getAssistFlag().equals("1")) { + intent.putExtra("tvName", mStringList.get(position).getDeviceBrand().toString()); + intent.putExtra("assistFlag", "1"); + } else { + intent.putExtra("tvName", mStringList.get(position).getDeviceBrand().toString()); + intent.putExtra("assistFlag", "0"); + } + intent.putExtra("id", mStringList.get(position).getId().toString()); + if (1 == 1) { + intent.putExtra("cancelFlag", mStringList.get(position).getCancelFlag().toString()); + intent.putExtra("rid", mStringList.get(position).getRid().toString()); + } + startActivity(intent); + break; + case AIR_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, AirA2Activity.class); + intent.putExtra("airStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("airName", mStringList.get(position).getDeviceBrand().toString()); + if (1 == 1) { + intent.putExtra("cancelFlag", mStringList.get(position).getCancelFlag().toString()); + intent.putExtra("rid", mStringList.get(position).getRid().toString()); + } + startActivity(intent); + break; + case FAN_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, FanA2Activity.class); + intent.putExtra("fanStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("fanName", mStringList.get(position).getDeviceBrand().toString()); + intent.putExtra("id", mStringList.get(position).getId().toString()); + if (1 == 1) { + intent.putExtra("cancelFlag", mStringList.get(position).getCancelFlag().toString()); + intent.putExtra("rid", mStringList.get(position).getRid().toString()); + } + startActivity(intent); + break; + case SWEEP_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, SweepA2Activity.class); + intent.putExtra("sweepStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("sweepName", mStringList.get(position).getDeviceBrand().toString()); + intent.putExtra("id", mStringList.get(position).getId().toString()); + if (1 == 1) { + intent.putExtra("cancelFlag", mStringList.get(position).getCancelFlag().toString()); + intent.putExtra("rid", mStringList.get(position).getRid().toString()); + } + startActivity(intent); + break; + case LIGHT_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, LightNewActivity.class); + if (mObjEntity.getLightNum().toString().equals("0")) { + intent.putExtra("lightStateTag", "0"); + } else { + intent.putExtra("lightStateTag", "1"); + } + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", mObjEntity.getAddressId()); + startActivity(intent); + break; + case CURTAINS_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, CurtainNewActivity.class); + /*if (mObjEntity.getBlindNum().toString().equals("0")) { + intent.putExtra("curtainsStateTag", "0"); + } else { + intent.putExtra("curtainsStateTag", "1"); + }*/ + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", mObjEntity.getAddressId()); + intent.putExtra("deviceAddress", mObjEntity.getAddressId()); + startActivity(intent); + break; + case SWITCH_TAG: + intent = new Intent(ChildDeviceListA2Activity.this, SwitcherNewActivity.class); + /*if (mObjEntity.getPlugNum().toString().equals("0")) { + intent.putExtra("switcherStateTag", "0"); + } else { + intent.putExtra("switcherStateTag", "1"); + }*/ + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", mObjEntity.getAddressId()); + intent.putExtra("deviceAddress", mObjEntity.getAddressId()); + startActivity(intent); + break; + } + } else { + if (DensityUtil.isNetworkConnected(this)) { + getZ1Info(); + } else { + ToastUtil.show(this, R.string.net_error); + } + } + } else { + ToastUtil.show(ChildDeviceListA2Activity.this, R.string.net_error); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/LearnGuideA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/LearnGuideA2Activity.java new file mode 100644 index 0000000..3a99db6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/LearnGuideA2Activity.java @@ -0,0 +1,608 @@ +package com.yonsz.z1.devicea2; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.LearnEvent; +import com.yonsz.z1.database.entity.LearnFailEvent; +import com.yonsz.z1.database.entity.SecondEvent; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.device.airconditioner.AirAutoFailActivity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.AIR_CLEANER; +import static com.yonsz.z1.net.Constans.FAN_CLOSE; +import static com.yonsz.z1.net.Constans.FAN_LEARN_FAIL; +import static com.yonsz.z1.net.Constans.FAN_LEARN_ING; +import static com.yonsz.z1.net.Constans.FAN_LEARN_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_OPEN; +import static com.yonsz.z1.net.Constans.FAN_SHAKE; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.FAN_TIME; +import static com.yonsz.z1.net.Constans.FAN_TYPE; +import static com.yonsz.z1.net.Constans.FAN_WIND; +import static com.yonsz.z1.net.Constans.FAN_WIND_REDUCE; +import static com.yonsz.z1.net.Constans.INDEPENDENT_CODE_AC; +import static com.yonsz.z1.net.Constans.MOVIE_CAMERA; +import static com.yonsz.z1.net.Constans.RGB_LIGHT; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * Created by Administrator on 2017/6/26. + */ + +public class LearnGuideA2Activity extends BaseActivity { + private TitleView mTitleView; + private TextView mLearnGuide; + private String userId; + private String ziId; + private int learnGuide; + private LinearLayout ll_learn_bg; + private TextView getLearnGuide; + private StateButton mStateButton; + private int sec = 30; + private MediaPlayer mediaPlayer01; + private LoadingDialog mLoadingDialog; + private boolean learningFlag = false; + private String deviceType = FAN_TAG; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_learn_guide); + //注册eventBus + // EventBus.getDefault().register(this); + NettyHandlerUtil.getInstance(); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initView() { + if (null != getIntent().getExtras().get("deviceType")) { + deviceType = getIntent().getExtras().get("deviceType").toString(); + } + mStateButton = (StateButton) findViewById(R.id.bt_sec); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + mLearnGuide = (TextView) findViewById(R.id.tv_learn_guide); + mTitleView = (TitleView) findViewById(R.id.title_learn_guide); + ll_learn_bg = (LinearLayout) findViewById(R.id.ll_learn_bg); + ll_learn_bg.setBackgroundResource(R.drawable.pic_instruction_fs); + getLearnGuide = (TextView) findViewById(R.id.tv_guide_device); + switch (deviceType) { + case MOVIE_CAMERA: + getLearnGuide.setText("指示灯变为红色后,将投影仪遥控器对"); + mTitleView.setHead("投影仪遥控器学习"); + break; + case AIR_CLEANER: + getLearnGuide.setText("指示灯变为红色后,将净化器遥控器对"); + mTitleView.setHead("净化器遥控学习"); + break; + case RGB_LIGHT: + getLearnGuide.setText("指示灯变为红色后,将RGB灯带遥控器对"); + mTitleView.setHead("RGB灯带遥控学习"); + break; + case INDEPENDENT_CODE_AC: + getLearnGuide.setText("指示灯变为红色后,将独立空调遥控器对"); + mTitleView.setHead("独立空调遥控学习"); + break; + default: + getLearnGuide.setText("指示灯变为红色后,将风扇遥控器对"); + mTitleView.setHead(R.string.fan_learn_guide); + break; + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (AddressNameUtil.getAiModel(ziId).contains("B3")) { + ll_learn_bg.setBackgroundResource(R.drawable.pic_instruction_b3); + } + if (getIntent().getExtras().get("learnGuide") != null) { + switch (deviceType) { + case MOVIE_CAMERA: + case AIR_CLEANER: + case RGB_LIGHT: + case INDEPENDENT_CODE_AC: + setGuideText(getIntent().getExtras().get("learnGuide").toString()); + enterLearnState1(getIntent().getExtras().get("learnGuide").toString()); + break; + default: + learnGuide = Integer.parseInt(getIntent().getExtras().get("learnGuide").toString()); + switch (learnGuide) { + case 1: + mLearnGuide.setText(R.string.open); + enterLearnState1("power"); + // SoundPlayUtils.play(8); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_18); + mediaPlayer01.start(); + } + break; + case 2: + mLearnGuide.setText(R.string.shake_head); + enterLearnState1("oscillation"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_19); + mediaPlayer01.start(); + } + break; + case 3: + mLearnGuide.setText(R.string.wind_speed_add); + enterLearnState1("speedplus"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_20); + mediaPlayer01.start(); + } + break; + case 4: + mLearnGuide.setText(R.string.time); + enterLearnState1("timer"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_21); + mediaPlayer01.start(); + } + break; + case 5: + mLearnGuide.setText(R.string.wind_type); + enterLearnState1("mode"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_64); + mediaPlayer01.start(); + } + break; + case 6: + mLearnGuide.setText(R.string.close); + enterLearnState1("poweroff"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_18); + mediaPlayer01.start(); + } + break; + case 7: + mLearnGuide.setText(R.string.wind_speed_reduce); + enterLearnState1("speedreduce"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_20); + mediaPlayer01.start(); + } + break; + } + break; + } + } + } + + private void setGuideText(String learnGuide) { + switch (learnGuide) { + case "power": + mLearnGuide.setText("开关"); + break; + case "poweroff": + mLearnGuide.setText("开关"); + break; + case "up": + mLearnGuide.setText("向上"); + break; + case "down": + mLearnGuide.setText("向下"); + break; + case "left": + mLearnGuide.setText("向左"); + break; + case "right": + mLearnGuide.setText("向右"); + break; + case "ok": + mLearnGuide.setText("OK"); + break; + case "menu": + mLearnGuide.setText("菜单"); + break; + case "volplus": + mLearnGuide.setText("音量+"); + break; + case "volminus": + mLearnGuide.setText("音量-"); + break; + case "mute": + mLearnGuide.setText("静音"); + break; + case "zoomplus": + mLearnGuide.setText("放大"); + break; + case "zoomminus": + mLearnGuide.setText("缩小"); + break; + case "signal": + mLearnGuide.setText("输入选择"); + break; + case "exit": + mLearnGuide.setText("返回"); + break; + case "reset": + mLearnGuide.setText("重置"); + break; + case "auto": + mLearnGuide.setText("自动调整"); + break; + case "timer": + mLearnGuide.setText("定时"); + break; + case "speed": + mLearnGuide.setText("风速+"); + break; + case "sleep": + mLearnGuide.setText("睡眠"); + break; + case "childlock": + mLearnGuide.setText("童锁"); + break; + case "windspeedreduction": + mLearnGuide.setText("风速-"); + break; + case "atomize": + mLearnGuide.setText("雾化"); + break; + case "anion": + mLearnGuide.setText("负离子"); + break; + case "sterilize": + mLearnGuide.setText("杀菌"); + break; + case "brightnessPlus": + mLearnGuide.setText("亮度+"); + break; + case "brightnessSpeedPlus": + mLearnGuide.setText("亮/速度+"); + break; + case "brightnessLess": + mLearnGuide.setText("亮度-"); + break; + case "brightnessSpeedLess": + mLearnGuide.setText("亮/速度-"); + break; + case "stop": + mLearnGuide.setText("暂停"); + break; + case "red": + mLearnGuide.setText("红"); + break; + case "green": + mLearnGuide.setText("绿"); + break; + case "darkBlue": + mLearnGuide.setText("深蓝"); + break; + case "white": + mLearnGuide.setText("白"); + break; + case "vermilion": + mLearnGuide.setText("朱砂红"); + break; + case "grassGreen": + mLearnGuide.setText("草绿"); + break; + case "blue": + mLearnGuide.setText("蓝"); + break; + case "amber": + mLearnGuide.setText("琥珀"); + break; + case "jump": + mLearnGuide.setText("跳变"); + break; + case "orange": + mLearnGuide.setText("橙"); + break; + case "skyBlue": + mLearnGuide.setText("天蓝"); + break; + case "bluishViolet": + mLearnGuide.setText("蓝紫"); + break; + case "pink": + mLearnGuide.setText("粉色"); + break; + case "strobe": + mLearnGuide.setText("频闪"); + break; + case "orangeYellow": + mLearnGuide.setText("橙黄"); + break; + case "acidBlue": + mLearnGuide.setText("湖蓝"); + break; + case "purple": + mLearnGuide.setText("紫"); + break; + case "azure": + mLearnGuide.setText("蔚蓝"); + break; + case "gradient": + mLearnGuide.setText("渐变"); + break; + case "lemonYellow": + mLearnGuide.setText("柠檬黄"); + break; + case "blackishgreen": + mLearnGuide.setText("墨绿"); + break; + case "redPurple": + mLearnGuide.setText("红紫"); + break; + case "vividBlue": + mLearnGuide.setText("碧蓝"); + break; + case "smoothGradient": + mLearnGuide.setText("平滑渐变"); + break; + case "redPlus": + mLearnGuide.setText("红色+"); + break; + case "greenPlus": + mLearnGuide.setText("绿色+"); + break; + case "bluePlus": + mLearnGuide.setText("蓝色+"); + break; + case "speedPlus": + mLearnGuide.setText("速度+"); + break; + case "redLess": + mLearnGuide.setText("红色-"); + break; + case "greenLess": + mLearnGuide.setText("绿色-"); + break; + case "blueLess": + mLearnGuide.setText("蓝色-"); + break; + case "speedLess": + mLearnGuide.setText("速度-"); + break; + case "diy1": + mLearnGuide.setText("DIY1"); + break; + case "diy2": + mLearnGuide.setText("DIY2"); + break; + case "diy3": + mLearnGuide.setText("DIY3"); + break; + case "modelCycle": + mLearnGuide.setText("模式循环"); + break; + case "diy4": + mLearnGuide.setText("DIY4"); + break; + case "diy5": + mLearnGuide.setText("DIY5"); + break; + case "diy6": + mLearnGuide.setText("DIY6"); + break; + case "flash": + mLearnGuide.setText("白光屏闪"); + break; + case "jump3": + mLearnGuide.setText("跳变3"); + break; + case "jump7": + mLearnGuide.setText("跳变7"); + break; + case "gradient3": + mLearnGuide.setText("渐变3"); + break; + case "gradient7": + mLearnGuide.setText("渐变7"); + break; + case "tempUp": + mLearnGuide.setText("温度+"); + break; + case "tempDown": + mLearnGuide.setText("温度-"); + break; + case "fanspeed": + mLearnGuide.setText("风速"); + break; + + } + } + + private void enterLearnState1(final String sendMsg) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("appId", DifferConstans.APPID_S); + map.put("macId", ziId); + map.put("ziId", ziId); + map.put("sendMsg", sendMsg); + map.put("oper", sendMsg); + map.put("pushKey", sendMsg); + map.put("deviceType", deviceType); + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + util.requestPostByAsynewApi(NetWorkUrl.INFRARED_KEYSTUDY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("enterLearnState", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(SecondEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnFailEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_FAIL; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_ING; + mHandler.sendMessage(message); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FAN_LEARN_SUCCESS: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(LearnGuideA2Activity.this, "学习成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(LearnGuideA2Activity.this, SureLearnA2Activity.class); + intent.putExtra("learnGuide", getIntent().getExtras().get("learnGuide").toString()); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("type", deviceType); + intent.putExtra("ziId", ziId); + startActivity(intent); + // setResult(LEARN_RESULT, intent); + finish(); + } + }, 1000); + + break; + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + /*if (mLoadingDialog != null) { + mLoadingDialog.setMessage(sec + ""); + }*/ + } else { + if (learningFlag) { + Intent intent = new Intent(LearnGuideA2Activity.this, SureLearnA2Activity.class); + intent.putExtra("learnGuide", getIntent().getExtras().get("learnGuide").toString()); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("type", deviceType); + intent.putExtra("ziId", ziId); + startActivity(intent); + // setResult(LEARN_RESULT, intent); + finish(); + } else { + finish(); + } + } + break; + case SEND_CONTROL_ORDER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case FAN_LEARN_ING: + initLoadDialog(); + learningFlag = true; + sec = 10; + break; + case FAN_LEARN_FAIL: + Intent intent1 = new Intent(LearnGuideA2Activity.this, AirAutoFailActivity.class); + intent1.putExtra("ziId", ziId); + intent1.putExtra("tag", deviceType); + intent1.putExtra("learnGuide", getIntent().getExtras().get("learnGuide").toString()); + intent1.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent1.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent1.putExtra("learnGuide", learnGuide); + startActivity(intent1); + finish(); + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.setMessage(R.string.saving); + mLoadingDialog.show(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + //取消eventBus注册 + // EventBus.getDefault().unregister(this); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/SureLearnA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/SureLearnA2Activity.java new file mode 100644 index 0000000..b2feb35 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/SureLearnA2Activity.java @@ -0,0 +1,821 @@ +package com.yonsz.z1.devicea2; + +import android.app.Service; +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Build; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.support.annotation.RequiresApi; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.DeviceListEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.devicea2.sweepa2.SweepLearnGuideA2Activity; +import com.yonsz.z1.devicea2.tva2.TvLearnGuideA2Activity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ShakeUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.R.id.tv_open_light; +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.AIR_CLEANER; +import static com.yonsz.z1.net.Constans.DEL_ERROR_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.DEL_ERROR_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_CLOSE; +import static com.yonsz.z1.net.Constans.FAN_OPEN; +import static com.yonsz.z1.net.Constans.FAN_SHAKE; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.FAN_TIME; +import static com.yonsz.z1.net.Constans.FAN_TYPE; +import static com.yonsz.z1.net.Constans.FAN_WIND; +import static com.yonsz.z1.net.Constans.FAN_WIND_REDUCE; +import static com.yonsz.z1.net.Constans.INDEPENDENT_CODE_AC; +import static com.yonsz.z1.net.Constans.MOVIE_CAMERA; +import static com.yonsz.z1.net.Constans.RGB_LIGHT; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_SUCCESS; +import static com.yonsz.z1.net.Constans.SWEEP_ALONG; +import static com.yonsz.z1.net.Constans.SWEEP_DOWN; +import static com.yonsz.z1.net.Constans.SWEEP_LEFT; +import static com.yonsz.z1.net.Constans.SWEEP_OK; +import static com.yonsz.z1.net.Constans.SWEEP_OPEN; +import static com.yonsz.z1.net.Constans.SWEEP_RIGHT; +import static com.yonsz.z1.net.Constans.SWEEP_STRONG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_UP; +import static com.yonsz.z1.net.Constans.SWITCH_OPEN; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_BACK; +import static com.yonsz.z1.net.Constans.TV_DOWN; +import static com.yonsz.z1.net.Constans.TV_EIGHT; +import static com.yonsz.z1.net.Constans.TV_FIVE; +import static com.yonsz.z1.net.Constans.TV_FOUR; +import static com.yonsz.z1.net.Constans.TV_HOME; +import static com.yonsz.z1.net.Constans.TV_JIDINGHE; +import static com.yonsz.z1.net.Constans.TV_LEFT; +import static com.yonsz.z1.net.Constans.TV_MENU; +import static com.yonsz.z1.net.Constans.TV_NINE; +import static com.yonsz.z1.net.Constans.TV_OK; +import static com.yonsz.z1.net.Constans.TV_ONE; +import static com.yonsz.z1.net.Constans.TV_OPEN; +import static com.yonsz.z1.net.Constans.TV_RIGHT; +import static com.yonsz.z1.net.Constans.TV_SEVEN; +import static com.yonsz.z1.net.Constans.TV_SIGNAL; +import static com.yonsz.z1.net.Constans.TV_SIX; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.TV_THREE; +import static com.yonsz.z1.net.Constans.TV_TWO; +import static com.yonsz.z1.net.Constans.TV_UP; +import static com.yonsz.z1.net.Constans.TV_VOICE; +import static com.yonsz.z1.net.Constans.TV_VOLADD; +import static com.yonsz.z1.net.Constans.TV_VOLREDUCE; +import static com.yonsz.z1.net.Constans.TV_ZERO; +import static com.yonsz.z1.net.Constans.UPDATE_STUDY_FLAG_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_STUDY_FLAG_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.DEL_ERROR_STUDY; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_STUDY_FLAG; + +/** + * Created by Administrator on 2017/10/16. + */ +public class SureLearnA2Activity extends BaseActivity { + private TitleView mTitleView; + private String type; + private TextView noUse; + private Button sureBtn; + private TextView openLight; + private int learnGuide; + private String ziId; + private String studyKey = ""; + private MediaPlayer mediaPlayer01; + private String key = ""; + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sure_learn); + initView(); + initListener(); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_53); + mediaPlayer01.start(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + type = getIntent().getExtras().get("type").toString(); + openLight = (TextView) findViewById(tv_open_light); + noUse = (TextView) findViewById(R.id.tv_no_use); + sureBtn = (Button) findViewById(R.id.bt_sure_config); + mTitleView = (TitleView) findViewById(R.id.title_sure_light); + switch (type) { + case FAN_TAG: + learnGuide = Integer.parseInt(getIntent().getExtras().get("learnGuide").toString()); + mTitleView.setHead(R.string.fan_learn_guide); + switch (learnGuide) { + case 1: + openLight.setText("开关"); + studyKey = FAN_OPEN; + key = "power"; + break; + case 2: + openLight.setText(R.string.shake_head); + studyKey = FAN_SHAKE; + key = "oscillation"; + break; + case 3: + openLight.setText(R.string.wind_speed_add); + studyKey = FAN_WIND; + key = "speedplus"; + break; + case 4: + openLight.setText(R.string.time); + studyKey = FAN_TIME; + key = "timer"; + break; + case 5: + openLight.setText(R.string.wind_type); + studyKey = FAN_TYPE; + key = "mode"; + break; + case 6: + openLight.setText("开关"); + studyKey = FAN_CLOSE; + key = "poweroff"; + break; + case 7: + openLight.setText(R.string.wind_speed_reduce); + studyKey = FAN_WIND_REDUCE; + key = "speedreduce"; + break; + } + break; + case TV_TAG: + case TVONE_TAG: + learnGuide = Integer.parseInt(getIntent().getExtras().get("learnGuide").toString()); + mTitleView.setHead(R.string.tv_learn_guide); + switch (learnGuide) { + case 1: + openLight.setText("开关"); + studyKey = TV_JIDINGHE; + key = "power"; + break; + case 2: + openLight.setText("向上"); + studyKey = TV_UP; + key = "up"; + break; + case 3: + openLight.setText("向下"); + studyKey = TV_DOWN; + key = "down"; + break; + case 4: + openLight.setText("向左"); + studyKey = TV_LEFT; + key = "left"; + break; + case 5: + openLight.setText("向右"); + studyKey = TV_RIGHT; + key = "right"; + break; + case 6: + openLight.setText("OK"); + studyKey = TV_OK; + key = "ok"; + break; + case 7: + openLight.setText("HOME"); + studyKey = TV_HOME; + key = "boot"; + break; + case 8: + openLight.setText("返回"); + studyKey = TV_BACK; + key = "back"; + break; + case 9: + openLight.setText("菜单"); + studyKey = TV_MENU; + key = "menu"; + break; + case 10: + openLight.setText("开关"); + studyKey = TV_OPEN; + if (type.equals(TV_TAG)) { + key = "power"; + } else if (type.equals(TVONE_TAG)) { + key = "powertv"; + } + break; + case 11: + openLight.setText("音量+"); + studyKey = TV_VOLADD; + key = "volplus"; + break; + case 12: + openLight.setText("音量-"); + studyKey = TV_VOLREDUCE; + key = "volminus"; + break; + case 13: + openLight.setText("静音"); + studyKey = TV_VOICE; + key = "mute"; + break; + case 21: + openLight.setText("1"); + studyKey = TV_ONE; + key = "1"; + break; + case 22: + openLight.setText("2"); + studyKey = TV_TWO; + key = "2"; + break; + case 23: + openLight.setText("3"); + studyKey = TV_THREE; + key = "3"; + break; + case 24: + openLight.setText("4"); + studyKey = TV_FOUR; + key = "4"; + break; + case 25: + openLight.setText("5"); + studyKey = TV_FIVE; + key = "5"; + break; + case 26: + openLight.setText("6"); + studyKey = TV_SIX; + key = "6"; + break; + case 27: + openLight.setText("7"); + studyKey = TV_SEVEN; + key = "7"; + break; + case 28: + openLight.setText("8"); + studyKey = TV_EIGHT; + key = "8"; + break; + case 29: + openLight.setText("9"); + studyKey = TV_NINE; + key = "9"; + break; + case 30: + openLight.setText("0"); + studyKey = TV_ZERO; + key = "0"; + break; + case 31: + openLight.setText("信号源"); + studyKey = TV_SIGNAL; + key = "signal"; + break; + case 32: + openLight.setText("频道+"); + studyKey = ""; + key = "chplus"; + break; + case 33: + openLight.setText("频道-"); + studyKey = ""; + key = "chminus"; + break; + } + break; + case SWEEP_TAG: + learnGuide = Integer.parseInt(getIntent().getExtras().get("learnGuide").toString()); + mTitleView.setHead(R.string.sweep_learn_guide); + switch (learnGuide) { + case 1: + openLight.setText("开关"); + studyKey = SWEEP_OPEN; + key = "power"; + break; + case 2: + openLight.setText("向上"); + studyKey = SWEEP_UP; + key = "up"; + break; + case 3: + openLight.setText("向下"); + studyKey = SWEEP_DOWN; + key = "down"; + break; + case 4: + openLight.setText("向左"); + studyKey = SWEEP_LEFT; + key = "left"; + break; + case 5: + openLight.setText("向右"); + studyKey = SWEEP_RIGHT; + key = "right"; + break; + case 6: + openLight.setText("回充"); + studyKey = SWEEP_OK; + key = "charge"; + break; + case 7: + openLight.setText("沿边"); + studyKey = SWEEP_ALONG; + key = "edgewise"; + break; + case 8: + openLight.setText("强劲"); + studyKey = SWEEP_STRONG; + key = "strong"; + break; + } + break; + case MOVIE_CAMERA: + String learnGuide = getIntent().getExtras().get("learnGuide").toString(); + setGuideText(learnGuide); + mTitleView.setHead("投影仪遥控学习"); + key = learnGuide; + studyKey = "01"; + break; + case AIR_CLEANER: + String learnGuide1 = getIntent().getExtras().get("learnGuide").toString(); + setGuideText(learnGuide1); + mTitleView.setHead("净化器遥控学习"); + key = learnGuide1; + studyKey = "01"; + break; + case RGB_LIGHT: + String learnGuide2 = getIntent().getExtras().get("learnGuide").toString(); + setGuideText(learnGuide2); + mTitleView.setHead("RGB灯带遥控学习"); + key = learnGuide2; + studyKey = "01"; + break; + case INDEPENDENT_CODE_AC: + String learnGuide3 = getIntent().getExtras().get("learnGuide").toString(); + setGuideText(learnGuide3); + mTitleView.setHead("独立空调遥控学习"); + key = learnGuide3; + studyKey = "01"; + break; + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void initListener() { + noUse.setOnClickListener(this); + sureBtn.setOnClickListener(this); + openLight.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_no_use: + //调删除的接口 + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_SUCCESS); + mHandler.sendMessage(msg); + break; + case R.id.bt_sure_config: + updateStudyFlag(); + break; + case R.id.tv_open_light: + subsetControl(key); + break; + } + } + + private void subsetControl(String key) { + ShakeUtil.setShake(this); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + map.put("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + map.put("deviceType", type); + map.put("ziId", ziId); + map.put("oper", key); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_CONTROL, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetControl", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void updateStudyFlag() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", type); + map.put("ziId", ziId); + map.put("key", studyKey); + map.put("oper", key); + map.put("studyFlag", "1"); + netWorkUtil.requestPostByAsynewApi(UPDATE_STUDY_FLAG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateStudyFlag", "ShareDeviceActivity onSuccess()" + respone); + Message msg = mHandler.obtainMessage(UPDATE_STUDY_FLAG_SUCCESS); + mHandler.sendMessage(msg); + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_STUDY_FLAG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /*private void delErrorStudy() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", type); + map.put("ziId", ziId); + map.put("studyKey", studyKey); + netWorkUtil.requestPostByAsynew(DEL_ERROR_STUDY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("delErrorStudy", "ShareDeviceActivity onSuccess()" + respone); + DeviceListEntity obj = JSON.parseObject(respone, DeviceListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + }*/ + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case SEND_CONTROL_ORDER_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DEL_ERROR_STUDY_SUCCESS: + switch (type) { + case AIR_CLEANER: + case FAN_TAG: + case MOVIE_CAMERA: + case RGB_LIGHT: + case INDEPENDENT_CODE_AC: + intent = new Intent(SureLearnA2Activity.this, LearnGuideA2Activity.class); + intent.putExtra("learnGuide", getIntent().getExtras().get("learnGuide").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", type); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent); + break; + case TV_TAG: + intent = new Intent(SureLearnA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", (boolean) getIntent().getExtras().get("isTv")); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent); + break; + case TVONE_TAG: + intent = new Intent(SureLearnA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", false); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivity(intent); + break; + case SWEEP_TAG: + intent = new Intent(SureLearnA2Activity.this, SweepLearnGuideA2Activity.class); + intent.putExtra("learnGuide", getIntent().getExtras().get("learnGuide").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", type); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + break; + } + finish(); + break; + case UPDATE_STUDY_FLAG_SUCCESS: + /*EventBus.getDefault().post( + new LearnWhatEvent(learnGuide + ""));*/ + finish(); + break; + } + } + + private void setGuideText(String learnGuide) { + switch (learnGuide) { + case "power": + openLight.setText("开关"); + break; + case "poweroff": + openLight.setText("开关"); + break; + case "up": + openLight.setText("向上"); + break; + case "down": + openLight.setText("向下"); + break; + case "left": + openLight.setText("向左"); + break; + case "right": + openLight.setText("向右"); + break; + case "ok": + openLight.setText("OK"); + break; + case "menu": + openLight.setText("菜单"); + break; + case "volplus": + openLight.setText("音量+"); + break; + case "volminus": + openLight.setText("音量-"); + break; + case "mute": + openLight.setText("静音"); + break; + case "zoomplus": + openLight.setText("放大"); + break; + case "zoomminus": + openLight.setText("缩小"); + break; + case "signal": + openLight.setText("输入\n选择"); + break; + case "exit": + openLight.setText("返回"); + break; + case "reset": + openLight.setText("重置"); + break; + case "auto": + openLight.setText("自动\n调整"); + break; + case "timer": + openLight.setText("定时"); + break; + case "speed": + openLight.setText("风速+"); + break; + case "sleep": + openLight.setText("睡眠"); + break; + case "childlock": + openLight.setText("童锁"); + break; + case "windspeedreduction": + openLight.setText("风速-"); + break; + case "atomize": + openLight.setText("雾化"); + break; + case "anion": + openLight.setText("负离子"); + break; + case "sterilize": + openLight.setText("杀菌"); + break; + case "brightnessPlus": + openLight.setText("亮度+"); + break; + case "brightnessSpeedPlus": + openLight.setText("亮/速度+"); + break; + case "brightnessLess": + openLight.setText("亮度-"); + break; + case "brightnessSpeedLess": + openLight.setText("亮/速度-"); + break; + case "stop": + openLight.setText("暂停"); + break; + case "red": + openLight.setText("红"); + break; + case "green": + openLight.setText("绿"); + break; + case "darkBlue": + openLight.setText("深蓝"); + break; + case "white": + openLight.setText("白"); + break; + case "vermilion": + openLight.setText("朱砂红"); + break; + case "grassGreen": + openLight.setText("草绿"); + break; + case "blue": + openLight.setText("蓝"); + break; + case "amber": + openLight.setText("琥珀"); + break; + case "jump": + openLight.setText("跳变"); + break; + case "orange": + openLight.setText("橙"); + break; + case "skyBlue": + openLight.setText("天蓝"); + break; + case "bluishViolet": + openLight.setText("蓝紫"); + break; + case "pink": + openLight.setText("粉色"); + break; + case "strobe": + openLight.setText("频闪"); + break; + case "orangeYellow": + openLight.setText("橙黄"); + break; + case "acidBlue": + openLight.setText("湖蓝"); + break; + case "purple": + openLight.setText("紫"); + break; + case "azure": + openLight.setText("蔚蓝"); + break; + case "gradient": + openLight.setText("渐变"); + break; + case "lemonYellow": + openLight.setText("柠檬黄"); + break; + case "blackishgreen": + openLight.setText("墨绿"); + break; + case "redPurple": + openLight.setText("红紫"); + break; + case "vividBlue": + openLight.setText("碧蓝"); + break; + case "smoothGradient": + openLight.setText("平滑渐变"); + break; + case "redPlus": + openLight.setText("红色+"); + break; + case "greenPlus": + openLight.setText("绿色+"); + break; + case "bluePlus": + openLight.setText("蓝色+"); + break; + case "speedPlus": + openLight.setText("速度+"); + break; + case "redLess": + openLight.setText("红色-"); + break; + case "greenLess": + openLight.setText("绿色-"); + break; + case "blueLess": + openLight.setText("蓝色-"); + break; + case "speedLess": + openLight.setText("速度-"); + break; + case "diy1": + openLight.setText("DIY1"); + break; + case "diy2": + openLight.setText("DIY2"); + break; + case "diy3": + openLight.setText("DIY3"); + break; + case "modelCycle": + openLight.setText("模式循环"); + break; + case "diy4": + openLight.setText("DIY4"); + break; + case "diy5": + openLight.setText("DIY5"); + break; + case "diy6": + openLight.setText("DIY6"); + break; + case "flash": + openLight.setText("白光屏闪"); + break; + case "jump3": + openLight.setText("跳变3"); + break; + case "jump7": + openLight.setText("跳变7"); + break; + case "gradient3": + openLight.setText("渐变3"); + break; + case "gradient7": + openLight.setText("渐变7"); + break; + case "tempUp": + openLight.setText("温度+"); + break; + case "tempDown": + openLight.setText("温度-"); + break; + case "fanspeed": + openLight.setText("风速"); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/aira2/AirA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/aira2/AirA2Activity.java new file mode 100644 index 0000000..5acd6f7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/aira2/AirA2Activity.java @@ -0,0 +1,721 @@ +package com.yonsz.z1.devicea2.aira2; + +import android.app.Service; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.support.annotation.RequiresApi; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.SecondEvent; +import com.yonsz.z1.database.entity.entity4.LocalControlEvent; +import com.yonsz.z1.database.entity.entitya2.EventCloseEntity; +import com.yonsz.z1.database.entity.entitya2.KeyEntity; +import com.yonsz.z1.database.entity.entitya2.LoadEvent; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.devicea2.tva2.HorizontalProgressBarWithNumber; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.utils.ConnectNettyUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.AIR_CLOSE; +import static com.yonsz.z1.net.Constans.AIR_COLD; +import static com.yonsz.z1.net.Constans.AIR_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_OPEN; +import static com.yonsz.z1.net.Constans.AIR_POWER; +import static com.yonsz.z1.net.Constans.AIR_RIGHT_LEFT; +import static com.yonsz.z1.net.Constans.AIR_SLEEP; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.AIR_TEM_ADD; +import static com.yonsz.z1.net.Constans.AIR_TEM_REDUCE; +import static com.yonsz.z1.net.Constans.AIR_UP_DOWN; +import static com.yonsz.z1.net.Constans.AIR_WARM; +import static com.yonsz.z1.net.Constans.AIR_WIND_SPEED; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_LEARN_ING; +import static com.yonsz.z1.net.Constans.QUERY_AIR_LASTSTATUS_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_NEXT_TIMER_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_CONNDEVICE_PUSHKEY_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_LOCAL_CONTROL; +import static com.yonsz.z1.net.Constans.isLocalControl; + +/** + * Created by Administrator on 2017/11/10. + */ + +public class AirA2Activity extends BaseActivity { + private static final int MSG_PROGRESS_UPDATE = 0x110; + private TitleView mTitleView; + private String ziId; + private TextView mOpenClose, mLeftRight, mUpDown, mSavePower, mCold, mWarm, mSleep, mAdd, mReduce, mWindSpeed; + private TextView airTempicon, airTempoC, airWindIcon, tv_next_time, tv_next_time_state, tv_next_week; + private boolean mOpenCloseTag = false, mLeftRightTag = false, mUpDownTag = false, mSavePowerTag = false, mColdTag = false, mWarmTag = false, mSleepTag = false, mAddTag = false, mReduceTag = false, mWindSpeedTag = false; + private String airName; + private String cancelFlag; + private TextView mTiming; + private boolean isOpen = false; + private HorizontalProgressBarWithNumber mProgressBar; + private RelativeLayout progressRl; + private TextView progressTv; + private boolean isLoading = false; + private String airStateTag; + private TextView loadBackTv, tv_cancel_load; + private RelativeLayout mProgressTop; + private NettyEntity nettyEntity; + private LoadingDialog mLoadingDialog; + private String deviceIp = ""; + private RelativeLayout airTopBg; + private ImageView airIconStation; + private ImageView localControlIv; + + public void onEventMainThread(LocalControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = SHOW_LOCAL_CONTROL; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LoadEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_ING; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(SecondEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = AIR_CONTROL_SUCCESS; + message.obj = msg; + mHandler.sendMessage(message); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_air_a2); + initView(); + initListener(); + } + + private void initView() { + airStateTag = getIntent().getExtras().get("airStateTag").toString(); + airName = getIntent().getExtras().get("airName").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + mProgressTop = (RelativeLayout) findViewById(R.id.rl_progress_top); + airTopBg = (RelativeLayout) findViewById(R.id.rl_air_top_bg); + localControlIv = (ImageView) findViewById(R.id.iv_local_control); + if (airStateTag.equals("1")) { + isLoading = false; + } else { + NettyHandlerUtil.getInstance(); + isLoading = true; + } + loadBackTv = (TextView) findViewById(R.id.tv_load_back); + tv_cancel_load = (TextView) findViewById(R.id.tv_cancel_load); + + airTempicon = (TextView) findViewById(R.id.tv_air_temp_icon); + airTempoC = (TextView) findViewById(R.id.tv_air_temp_oc); + airWindIcon = (TextView) findViewById(R.id.tv_air_wind_icon); + airIconStation = (ImageView) findViewById(R.id.iv_air_icon_station); + + mOpenClose = (TextView) findViewById(R.id.tv_fan_open); + mLeftRight = (TextView) findViewById(R.id.tv_right_left); + mUpDown = (TextView) findViewById(R.id.tv_up_down); + // mSavePower = (TextView) findViewById(R.id.tv_save_power); + mCold = (TextView) findViewById(R.id.tv_cold); + mWarm = (TextView) findViewById(R.id.tv_warm); + mSleep = (TextView) findViewById(R.id.tv_sleep); + mAdd = (TextView) findViewById(R.id.tv_temperature_add); + mReduce = (TextView) findViewById(R.id.tv_temperature_reduce); + mWindSpeed = (TextView) findViewById(R.id.tv_air_wind_speed); + mTiming = (TextView) findViewById(R.id.tv_timing); + tv_next_time = (TextView) findViewById(R.id.tv_next_time); + tv_next_time_state = (TextView) findViewById(R.id.tv_next_time_state); + tv_next_week = (TextView) findViewById(R.id.tv_next_week); + + progressRl = (RelativeLayout) findViewById(R.id.rl_progress_top); + progressTv = (TextView) findViewById(R.id.tv_progress_top); + mProgressBar = (HorizontalProgressBarWithNumber) findViewById(R.id.pg_horizontal_fan); + // mHandler.sendEmptyMessage(MSG_PROGRESS_UPDATE); + mTitleView = (TitleView) findViewById(R.id.title_aircondition); + mTitleView.clearBackGroud(); + if (airName != null) { + mTitleView.setHead(airName); + } else { + mTitleView.setHead("空调"); + } + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (isLoading) { + + } else { + finish(); + } + } + + @Override + public void onFunction() { + if (isLoading) { + + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(AirA2Activity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + ConfirmDialog dialog = new ConfirmDialog(AirA2Activity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + deleteChildDevice(AIR_TAG, ziId); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + //重新命名 + break; + case 3: + //语令说明 + Intent intent = new Intent(AirA2Activity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", AIR_TAG); + startActivity(intent); + break; + case 4: + break; + } + } + }); + dialog2.setContent(); + dialog2.setLearn(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + if (isLoading) { + progressRl.setVisibility(View.VISIBLE); + } else { + progressRl.setVisibility(View.GONE); + // selectConnDevicePushkey(); + } + + if (null != getIntent().getExtras().get("cancelFlag")) { + cancelFlag = getIntent().getExtras().get("cancelFlag").toString(); + if (cancelFlag.equals("1")) { + ConfirmDialog dialog = new ConfirmDialog(AirA2Activity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + finish(); + break; + case 1: + reloadInfrared(AIR_TAG); + break; + } + } + }); + dialog.setContent(R.string.Data_not_downloaded_reloaded); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else { + + } + } else { + + } + + ConnectNettyUtil.connectNetty(ziId, deviceIp, this); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (isLocalControl) { + NettyManager.closeCtx(); + } + } + + private void initListener() { + mOpenClose.setOnClickListener(this); + mLeftRight.setOnClickListener(this); + mUpDown.setOnClickListener(this); + // mSavePower.setOnClickListener(this); + mCold.setOnClickListener(this); + mWarm.setOnClickListener(this); + mSleep.setOnClickListener(this); + mAdd.setOnClickListener(this); + mReduce.setOnClickListener(this); + mWindSpeed.setOnClickListener(this); + + mTiming.setOnClickListener(this); + mProgressTop.setOnClickListener(this); + loadBackTv.setOnClickListener(this); + tv_cancel_load.setOnClickListener(this); + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + private void reloadInfrared(String deviceType) { + /*NettyHandlerUtil.getInstance(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("deviceType", deviceType); + map.put("rid", getIntent().getExtras().get("rid").toString()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("reloadInfrared", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty message = JSON.parseObject(respone, SimpleEntty.class); + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + msg.obj = message; + mHandler.sendMessage(msg); + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FAN_LEARN_ING: + nettyEntity = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + if (nettyEntity.getMacId().equals(ziId)) { + int countNum = Integer.parseInt(nettyEntity.getCountNum()); + int loadNum = Integer.parseInt(nettyEntity.getLoadNum()); + mProgressBar.setProgress(100000 / countNum * loadNum / 1000); + Log.i("setProgress", "AirA2Activity callBackUiThread()" + (100 / countNum * loadNum)); + if (loadNum / countNum == 1) { + isLoading = false; + progressTv.setText(R.string.load_complete); + progressRl.setVisibility(View.GONE); + if (mLoadingDialog != null && mLoadingDialog.isShowing()) { + + } else { + initLoadDialog(); + } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + selectConnDevicePushkey(); + } + }, 2000); + } + } + break; + case SELECT_CONNDEVICE_PUSHKEY_SUCCESS: + KeyEntity entity1 = (KeyEntity) msg.obj; + List entity1Obj = entity1.getObj(); + if (entity1Obj != null && entity1Obj.size() != 0) { + for (int i = 0; i < entity1Obj.size(); i++) { + Log.i("getPushKey", "FanA2Activity callBackUiThread()" + entity1Obj.get(i).getPushKey()); + switch (entity1Obj.get(i).getPushKey()) { + + } + } + } + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + break; + case DELETE_CHILDDEVICE_SUCCESS: + + break; + case DELETE_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case QUERY_NEXT_TIMER_SUCCESS: + + break; + case QUERY_AIR_LASTSTATUS_SUCCESS: + + break; + case AIR_CONTROL_SUCCESS: + nettyEntity = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + if (nettyEntity.getSwitch().toString().equals("1")) { + isOpen = true; + if (nettyEntity.getTemp() != null) { + airTempoC.setVisibility(View.VISIBLE); + airTempicon.setText(" " + nettyEntity.getTemp().toString()); + } + if (nettyEntity.getModel() != null) { + switch (nettyEntity.getModel().toString()) { + case "1": + //制冷 + airTopBg.setBackground(getResources().getDrawable(R.drawable.pic_refrigeration_back)); + airIconStation.setVisibility(View.VISIBLE); + airIconStation.setImageDrawable(getResources().getDrawable(R.drawable.icon_cold)); + break; + case "4": + //制热 + airTopBg.setBackground(getResources().getDrawable(R.drawable.pic_heating_back)); + airIconStation.setVisibility(View.VISIBLE); + airIconStation.setImageDrawable(getResources().getDrawable(R.drawable.icon_hot)); + break; + case "0": + break; + case "2": + //除湿 + airTopBg.setBackground(getResources().getDrawable(R.drawable.pic_dehumidify_back)); + airIconStation.setVisibility(View.VISIBLE); + airIconStation.setImageDrawable(getResources().getDrawable(R.drawable.icon_chushi)); + break; + case "3": + airIconStation.setVisibility(View.GONE); + break; + } + } + + if (nettyEntity.getSpeed() != null) { + switch (nettyEntity.getSpeed().toString()) { + case "0": + airWindIcon.setText("自动风"); + break; + case "1": + airWindIcon.setText("低速风"); + break; + case "2": + airWindIcon.setText("中速风"); + break; + case "3": + airWindIcon.setText("高速风"); + break; + } + } + } else { + airTopBg.setBackground(getResources().getDrawable(R.drawable.pic_close_back)); + isOpen = false; + airTempicon.setText("已关闭"); + airTempoC.setVisibility(View.GONE); + airIconStation.setVisibility(View.GONE); + airWindIcon.setText(""); + } + break; + case DOWNLOAD_INFRARED_BYRID_SUCCESS: + progressRl.setVisibility(View.VISIBLE); + break; + case SHOW_LOCAL_CONTROL: + String obj2 = (String) msg.obj; + if (obj2.equals("1")) { + localControlIv.setVisibility(View.VISIBLE); + } else { + localControlIv.setVisibility(View.GONE); + } + break; + } + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_timing: + + break; + case R.id.tv_fan_open: + //发送开关指令 + if (isOpen) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_CLOSE)); + } else + controllerDevice(AIR_CLOSE); + isOpen = false; + } else { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_OPEN)); + } else + controllerDevice(AIR_OPEN); + isOpen = true; + } + break; + case R.id.tv_temperature_add: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_TEM_ADD)); + } else + controllerDevice(AIR_TEM_ADD); + break; + case R.id.tv_temperature_reduce: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_TEM_REDUCE)); + } else + controllerDevice(AIR_TEM_REDUCE); + break; + case R.id.tv_air_wind_speed: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_WIND_SPEED)); + } else + controllerDevice(AIR_WIND_SPEED); + break; + case R.id.tv_right_left: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_RIGHT_LEFT)); + } else + controllerDevice(AIR_RIGHT_LEFT); + break; + case R.id.tv_up_down: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_UP_DOWN)); + } else + controllerDevice(AIR_UP_DOWN); + break; + case R.id.tv_cold: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_COLD)); + } else + controllerDevice(AIR_COLD); + break; + case R.id.tv_warm: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_WARM)); + } else + controllerDevice(AIR_WARM); + break; + case R.id.tv_sleep: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_SLEEP)); + } else + controllerDevice(AIR_SLEEP); + break; + case R.id.tv_save_power: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(AIR_POWER)); + } else + controllerDevice(AIR_POWER); + break; + case R.id.rl_progress_top: + break; + case R.id.tv_load_back: + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + finish(); + break; + case R.id.tv_cancel_load: + cancelDownload(); + break; + } + } + + private void cancelDownload() { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceType", AIR_TAG); + netWorkUtil.requestPostByAsynewApi(CANCEL_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cancelDownload", "ShareDeviceActivity onSuccess()" + respone); + finish(); + } + + @Override + public void onFail(String message) { + } + });*/ + } + + @Override + public void onBackPressed() { + if (isLoading) { + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + finish(); + } else { + finish(); + } + } + + @Override + public void onResume() { + super.onResume(); + queryNextTimer(); + queryAirLastStatus(); + } + + private void queryNextTimer() { + + } + + private void queryAirLastStatus() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + netWorkUtil.requestPostByAsynew(QUERY_AIR_LASTSTATUS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryAirLastStatus", "ShareDeviceActivity onSuccess()" + respone); + AirStateEntity obj = JSON.parseObject(respone, AirStateEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_AIR_LASTSTATUS_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_AIR_LASTSTATUS_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_AIR_LASTSTATUS_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void controllerDevice(String sendMsg) { + /*setShake(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); + map.put("sendMsg", sendMsg); + netWorkUtil.requestPostByAsyn(ziId, CONTROLLER_DEVICE_A2, map, "a2/control/device", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("controllerDevice", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void selectConnDevicePushkey() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", AIR_TAG); + map.put("ziId", ziId); + netWorkUtil.requestPostByAsynew(SELECT_CONNDEVICE_PUSHKEY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectConnDevicePushkey", "ShareDeviceActivity onSuccess()" + respone); + KeyEntity obj = JSON.parseObject(respone, KeyEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/aira2/AirTryA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/aira2/AirTryA2Activity.java new file mode 100644 index 0000000..599d59f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/aira2/AirTryA2Activity.java @@ -0,0 +1,325 @@ +package com.yonsz.z1.devicea2.aira2; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.NormalEntity; +import com.yonsz.z1.database.entity.entitya2.RomoteListA2Entity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_FAIL; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDKEY_INFRARED_2MAC_FAIL; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.NetWorkUrl.SEARCH_ROUND; +import static com.yonsz.z1.net.NetWorkUrl.YKY_DOWNLOAD; + +/** + * Created by Administrator on 2017/11/10. + */ + +public class AirTryA2Activity extends BaseActivity { + private TitleView mTitleView; + private Button sureBt; + private String allData; + private List mRoundListEntities = new ArrayList<>(); + private TextView currentNumber, totalNumber; + private int currentIndex, totalIndex; + private TextView tryBt, beforeOne, nextOne; + private String ziId; + private String deviceType; + private String id; + private LoadingDialog mLoadingDialog; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_air_try); + deviceType = getIntent().getExtras().get("deviceType").toString(); + initView(); + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + allData = (String) getIntent().getExtras().get("allData"); + if (allData != null) { + RomoteListA2Entity obj = JSON.parseObject(allData, RomoteListA2Entity.class); + mRoundListEntities = obj.getObj().getRoundList(); + } + currentNumber = (TextView) findViewById(R.id.tv_current_number); + totalNumber = (TextView) findViewById(R.id.tv_total_number); + sureBt = (Button) findViewById(R.id.bt_sure_config); + tryBt = (TextView) findViewById(R.id.tv_open_light); + beforeOne = (TextView) findViewById(R.id.tv_no_use); + nextOne = (TextView) findViewById(R.id.tv_next); + mTitleView = (TitleView) findViewById(R.id.title_fan_try); + mTitleView.setHead(R.string.match_remote); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + sureBt.setOnClickListener(this); + tryBt.setOnClickListener(this); + beforeOne.setOnClickListener(this); + nextOne.setOnClickListener(this); + totalNumber.setText(mRoundListEntities.size() + ""); + totalIndex = mRoundListEntities.size(); + currentIndex = (int) getIntent().getExtras().get("currentIndex"); + currentNumber.setText(currentIndex + ""); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + /** + * 1.添加风扇 + * 2. + */ +// addChildDevice(ziId, deviceType, getIntent().getExtras().get("brandName").toString()); + subsetAdd(ziId, deviceType, getIntent().getExtras().get("brandName").toString()); + /*Intent intent = new Intent(this, FanA2Activity.class); + startActivity(intent);*/ + break; + case R.id.tv_open_light: + setShake(); + searchRound(currentIndex - 1); + break; + case R.id.tv_no_use: + if (currentIndex > 1) { + currentIndex -= 1; + currentNumber.setText(currentIndex + ""); + } +// selectConfrimKeyByRid(); + break; + case R.id.tv_next: + if (currentIndex < totalIndex) { + currentIndex += 1; + currentNumber.setText(currentIndex + ""); + } + break; + } + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void searchRound(int currentIndex) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + // map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); + map.put("code", (int) mRoundListEntities.get(currentIndex).getZip() + mRoundListEntities.get(currentIndex).getKeyInfrared()); + netWorkUtil.requestPostByAsynewApi(SEARCH_ROUND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("searchRound", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else if (1004 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case ADD_CHILDDEVICE_SUCCESS: + case UPDATE_BLINDENTITY_NAME_SUCCESS: + BaseVersion5Entity entity1 = (BaseVersion5Entity) msg.obj; + id = entity1.getData().getId().toString(); +// id = entity1.getObj().getId(); + downloadInfraredByRid(); + break; + case ADD_CHILDDEVICE_FAIL: + case DOWNLOAD_INFRARED_BYRID_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + /*case DOWNLOAD_INFRARED_BYRID_SUCCESS: + sendKeyInfrared2Mac(); + break;*/ + case DOWNLOAD_INFRARED_BYRID_SUCCESS: + NettyHandlerUtil.getInstance(); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(AirTryA2Activity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(AirTryA2Activity.this, DeviceControlActivity.class); + } + intent.putExtra("airStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", id); + intent.putExtra("airName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break; + case SENDKEY_INFRARED_2MAC_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case SEARCH_ROUND_FAIL: + SimpleEntty simpleEntty = (SimpleEntty) msg.obj; + ToastUtil.show(this, simpleEntty.getMsg().toString()); + break; + case SEARCH_ROUND_SUCCESS: + + break; + } + } + + private void downloadInfraredByRid() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("deviceType", deviceType); + map.put("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadInfraredByRid", "ShareDeviceActivity onSuccess()" + respone); + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void subsetAdd(String ziId, String deviceType, String deviceBrand) { + BaseVersion5Entity.DataBean body = new BaseVersion5Entity.DataBean(); + body.setRid(mRoundListEntities.get(currentIndex - 1).getRid()); + body.setDeviceBrand(deviceBrand); + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", "0"); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + map.put("addressId", localAddAddressId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, JSONObject.toJSONString(body), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/MenuRVHandlersa2.java b/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/MenuRVHandlersa2.java new file mode 100644 index 0000000..4fc89cc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/MenuRVHandlersa2.java @@ -0,0 +1,186 @@ +package com.yonsz.z1.devicea2.childdevicea2; + +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; +import android.os.Handler; +import android.os.Message; +import android.support.v4.view.ViewCompat; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.OvershootInterpolator; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.device.childdevice.MenuEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; + +import java.util.List; + +import static com.yonsz.z1.net.Constans.REQUEST_ADD_CHILDDEVICE; + +/** + * Created by Administrator on 2016/9/22. + */ +public class MenuRVHandlersa2 { + private View mView; + private RecyclerView mRecyclerView; + private int mNumColumns; + private List mMenuEntities; + private RvAdapter rvAdapter; + private Handler handler; + private ViewGroup mContext; + private View rootView; + private ImageView iv_scan_device; + + public MenuRVHandlersa2(int mNumColumns, List menuEntities, Handler handler, ViewGroup context, View rootView) { + if (mNumColumns == 3) { + this.mNumColumns = mNumColumns; + this.mMenuEntities = menuEntities; + this.handler = handler; + this.mContext = context; + this.rootView = rootView; + } else { + this.mNumColumns = mNumColumns; + this.mMenuEntities = menuEntities; + this.handler = handler; + this.mContext = context; + this.rootView = rootView; + } + } + + public View onLoadView(ViewGroup viewGroup) { + if (mNumColumns == 3) { + if (mView == null) { + mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_rv_grid_anfang, viewGroup, false); + createviewAnfang(viewGroup); + } + } else { + if (mView == null) { + mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_rv_grid2, viewGroup, false); + createview(viewGroup); + } + } + return mView; + } + + private void createviewAnfang(ViewGroup viewGroup) { + + if (mMenuEntities == null || mMenuEntities.size() == 0) { + return; + } + iv_scan_device = (ImageView) mView.findViewById(R.id.iv_scan_device); + iv_scan_device.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + mContext.removeView(rootView); + Message message = handler.obtainMessage(); + message.what = REQUEST_ADD_CHILDDEVICE; + message.obj = "安防"; + handler.sendMessage(message); + } + }); + } + + private void createview(ViewGroup viewGroup) { + + if (mMenuEntities == null || mMenuEntities.size() == 0) { + return; + } + mRecyclerView = (RecyclerView) mView.findViewById(R.id.rv); + mRecyclerView.setLayoutManager(new GridLayoutManager(mView.getContext(), mNumColumns)); + mRecyclerView.setHasFixedSize(true); + rvAdapter = new RvAdapter(mMenuEntities, viewGroup, handler); + mRecyclerView.setAdapter(rvAdapter); + mRecyclerView.setVisibility(View.VISIBLE); + } + + private class RvAdapter extends RecyclerView.Adapter { + + List mDataList; + private ViewGroup viewGroup; + private Handler handler; + + public RvAdapter(List mMenuEntities, ViewGroup viewGroup, Handler handler) { + mDataList = mMenuEntities; + this.viewGroup = viewGroup; + this.handler = handler; + } + + @Override + public MenuVH onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_rv_grid, null, false); + return new MenuVH(view); + } + + @Override + public void onBindViewHolder(MenuVH holder, final int position) { + + final MenuEntity menuEntity = mDataList.get(position); + if (menuEntity.iconId != 0) { + + holder.iv.setVisibility(View.VISIBLE); + holder.iv.setImageResource(menuEntity.iconId); + } else if (menuEntity.icon != null) { + + holder.iv.setVisibility(View.VISIBLE); + holder.iv.setImageDrawable(menuEntity.icon); + + } else { + holder.iv.setVisibility(View.GONE); + } + holder.name.setText(menuEntity.title); + + holder.iv.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + mContext.removeView(rootView); + Log.i("iv_click", "RvAdapter onClick()" + position); + Message message = handler.obtainMessage(); + message.what = REQUEST_ADD_CHILDDEVICE; + message.obj = menuEntity.deviceType; + handler.sendMessage(message); + } + }); + + animation(holder); + } + + private void animation(MenuVH menuVH) { + ViewCompat.setAlpha(menuVH.itemView, 0); + + ObjectAnimator translationY = ObjectAnimator.ofFloat(menuVH.itemView, "translationY", 500, 0); + translationY.setDuration(500); + translationY.setInterpolator(new OvershootInterpolator(1.6f)); + ObjectAnimator alphaIn = ObjectAnimator.ofFloat(menuVH.itemView, "alpha", 0, 1); + alphaIn.setDuration(100); + AnimatorSet animatorSet = new AnimatorSet(); + animatorSet.playTogether(translationY, alphaIn); + animatorSet.setStartDelay(30 * menuVH.getAdapterPosition()); + animatorSet.start(); + } + + @Override + public int getItemCount() { + return mDataList.size(); + } + + + class MenuVH extends RecyclerView.ViewHolder { + + public ImageView iv; + public TextView name; + + public MenuVH(View itemView) { + super(itemView); + + iv = (ImageView) itemView.findViewById(R.id.iv_click); + name = (TextView) itemView.findViewById(R.id.name); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/SmartMic2.java b/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/SmartMic2.java new file mode 100644 index 0000000..a6d30bf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/SmartMic2.java @@ -0,0 +1,158 @@ +package com.yonsz.z1.devicea2.childdevicea2; + +import android.os.Handler; +import android.view.ViewGroup; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.device.childdevice.MenuEntity; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CLOTHES_HANGER; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.Img; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MUSIC_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; + +/** + * Created by Administrator on 2016/9/21. + */ +public class SmartMic2 { + private final ViewGroup mGroup; + private ViewPagerDelegate2 mDelegate; + private List mMenuEntities; + private Handler handler; + + public SmartMic2(ViewGroup mGroup) { + this.mGroup = mGroup; + } + + public SmartMic2 setMenuList(DeviceEntityV4.DataBean objEntity, Handler handler) { + this.handler = handler; + /* Menu menu = new PopupMenu(mGroup.getContext(), null).getMenu(); + new MenuInflater(mGroup.getContext()).inflate(menuRes, menu);*/ + List menuEntities = getMenuEntityFormMenuRes(objEntity); + + if (mDelegate != null) { + mDelegate.setMenuList(menuEntities, handler); + } else + this.mMenuEntities = menuEntities; + + return this; + } + + private List getMenuEntityFormMenuRes(DeviceEntityV4.DataBean objEntity) { + List list = new ArrayList<>(); + MenuEntity itemEntity1 = new MenuEntity(); + itemEntity1.title = "空调"; + itemEntity1.iconId = Img[1]; + itemEntity1.deviceType = AIR_TAG; + list.add(itemEntity1); + MenuEntity itemEntity2 = new MenuEntity(); + itemEntity2.title = "电视"; + itemEntity2.iconId = Img[0]; + itemEntity2.deviceType = TV_TAG; + list.add(itemEntity2); + MenuEntity itemEntity14 = new MenuEntity(); + itemEntity14.title = "机顶盒"; + itemEntity14.iconId = R.drawable.icon_set_top_box; + itemEntity14.deviceType = TVONE_TAG; + list.add(itemEntity14); + MenuEntity itemEntity3 = new MenuEntity(); + itemEntity3.title = "风扇"; + itemEntity3.iconId = Img[2]; + itemEntity3.deviceType = FAN_TAG; + list.add(itemEntity3); + MenuEntity itemEntity4 = new MenuEntity(); + itemEntity4.title = "扫地机"; + itemEntity4.iconId = Img[3]; + itemEntity4.deviceType = SWEEP_TAG; + list.add(itemEntity4); + MenuEntity itemEntity8 = new MenuEntity(); + itemEntity8.title = "背景音乐"; + itemEntity8.iconId = Img[13]; + itemEntity8.deviceType = MUSIC_TAG; + list.add(itemEntity8); + MenuEntity itemEntity5 = new MenuEntity(); + itemEntity5.title = "灯光"; + itemEntity5.iconId = Img[4]; + itemEntity5.deviceType = LIGHT_TAG; + list.add(itemEntity5); + MenuEntity itemEntity6 = new MenuEntity(); + itemEntity6.title = "窗帘"; + itemEntity6.iconId = Img[5]; + itemEntity6.deviceType = CURTAINS_TAG; + list.add(itemEntity6); + MenuEntity itemEntity7 = new MenuEntity(); + itemEntity7.title = "插座"; + itemEntity7.iconId = Img[6]; + itemEntity7.deviceType = SWITCH_TAG; + list.add(itemEntity7); + MenuEntity itemEntity13 = new MenuEntity(); + itemEntity13.title = "晾衣机"; + itemEntity13.iconId = R.drawable.icon_airer; + itemEntity13.deviceType = CLOTHES_HANGER; + list.add(itemEntity13); + if (objEntity.getSubVersion().equals("Y")) { + MenuEntity itemEntity9 = new MenuEntity(); + itemEntity9.title = "情景面板"; + itemEntity9.iconId = Img[14]; + list.add(itemEntity9); + list.remove(itemEntity6); + list.remove(itemEntity7); + } + if (objEntity.getDevices() != null) { + for (int i = 0; i < objEntity.getDevices().size(); i++) { + switch (objEntity.getDevices().get(i).getDeviceType()) { + case TV_TAG: + list.remove(itemEntity2); + break; + case AIR_TAG: + list.remove(itemEntity1); + break; + case FAN_TAG: + list.remove(itemEntity3); + break; + case SWEEP_TAG: + list.remove(itemEntity4); + break; + case MUSIC_TAG: + list.remove(itemEntity8); + break; + case TVONE_TAG: + list.remove(itemEntity14); + break; + } + } + + } + return list; + } + + public SmartMic2 setDelegate(ViewPagerDelegate2 viewPagerDelegate) { + this.mDelegate = viewPagerDelegate; + + mDelegate.setup(mGroup); + + if (mMenuEntities != null) { + mDelegate.setMenuList(mMenuEntities, handler); + } + return this; + } + + public void show() { + mDelegate.show(); + } + + public void disMiss() { + mDelegate.disMiss(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/ViewPagerDelegate2.java b/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/ViewPagerDelegate2.java new file mode 100644 index 0000000..0a0175c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/ViewPagerDelegate2.java @@ -0,0 +1,121 @@ +package com.yonsz.z1.devicea2.childdevicea2; + +import android.animation.ObjectAnimator; +import android.os.Handler; +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPager; +import android.support.v4.view.ViewPropertyAnimatorListener; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.DecelerateInterpolator; +import android.widget.ImageView; + +import com.yonsz.z1.R; +import com.yonsz.z1.device.childdevice.MenuEntity; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2016/9/21. + */ +public class ViewPagerDelegate2 implements View.OnClickListener { + private ViewGroup mContext; + private View rootView; + private ViewPager mViewPager; + private List mMenuEntities; + private ArrayList menuRVHandlerses; + private int mNumColumns = 4; + private ImageView mButton; + + + public void setMenuList(List menuEntities, Handler handler) { + + mMenuEntities = menuEntities; + menuRVHandlerses = new ArrayList<>(); + // int fragmentCount = menuEntities.size() / (mNumColumns * 2); + int fragmentCount = 2; + /*if (menuEntities.size() % (mNumColumns * 2) != 0) { + fragmentCount = 2; + }*/ + for (int i = 0; i < fragmentCount; i++) { + MenuRVHandlersa2 menuRVHandlers = null; + if (i == 0) { + menuRVHandlers = new MenuRVHandlersa2(4, menuEntities, handler, mContext, rootView); + menuRVHandlerses.add(menuRVHandlers); + } else { + menuRVHandlers = new MenuRVHandlersa2(3, menuEntities, handler, mContext, rootView); + menuRVHandlerses.add(menuRVHandlers); + } + } + mViewPager.setAdapter(new ViewpagerAdaptera2(menuRVHandlerses)); + mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + } + + public void setup(ViewGroup mContext) { + this.mContext = mContext; + rootView = creatView(); + } + + private View creatView() { + View rootView = LayoutInflater.from(mContext.getContext()).inflate(R.layout.layout_viewpager2, null, false); + mViewPager = (ViewPager) rootView.findViewById(R.id.vp); + mButton = (ImageView) rootView.findViewById(R.id.btn); + mButton.setOnClickListener(this); + return rootView; + } + + public void show() { + ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + ObjectAnimator rotation = ObjectAnimator.ofFloat(mButton, "rotation", new float[]{0, 180}); + rotation.setDuration(500); + rotation.start(); + mContext.addView(rootView, lp); + } + + public void disMiss() { + mContext.removeView(rootView); + } + + + @Override + public void onClick(View v) { + + ViewCompat.animate(rootView) + .alpha(0) + .translationY(rootView.getHeight()) + .setInterpolator(new DecelerateInterpolator()) + .setListener(new ViewPropertyAnimatorListener() { + @Override + public void onAnimationStart(View view) { + + } + + @Override + public void onAnimationEnd(View view) { + mContext.removeView(rootView); + } + + @Override + public void onAnimationCancel(View view) { + + } + }).setDuration(300).start(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/ViewpagerAdaptera2.java b/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/ViewpagerAdaptera2.java new file mode 100644 index 0000000..aa7e570 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/childdevicea2/ViewpagerAdaptera2.java @@ -0,0 +1,58 @@ +package com.yonsz.z1.devicea2.childdevicea2; + +import android.support.v4.view.PagerAdapter; +import android.view.View; +import android.view.ViewGroup; + +import java.util.ArrayList; + +/** + * Created by Administrator on 2016/9/22. + */ +public class ViewpagerAdaptera2 extends PagerAdapter { + + private ArrayList menuRVHandlerses; + + public ViewpagerAdaptera2(ArrayList menuRVHandlerses) { + this.menuRVHandlerses = menuRVHandlerses; + } + + @Override + public int getCount() { + return menuRVHandlerses.size(); + } + + // @Override + // public void destroyItem(ViewGroup container, int position, Object object) { + // super.destroyItem(container, position, object); + // } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(View container, int position) { + return null; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView(menuRVHandlerses.get(position).onLoadView(container)); + } + + + @Override + public Object instantiateItem(ViewGroup container, int position) { + View view; + if (position == 0) { + view = menuRVHandlerses.get(position).onLoadView(container); + container.addView(view); + } else { + view = menuRVHandlerses.get(position).onLoadView(container); + container.addView(view); + } + return view; + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/fana2/AirChooseListAdapter.java b/app/src/main/java/com/yonsz/z1/devicea2/fana2/AirChooseListAdapter.java new file mode 100644 index 0000000..ccf6308 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/fana2/AirChooseListAdapter.java @@ -0,0 +1,165 @@ +package com.yonsz.z1.devicea2.fana2; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.AirAllEntity; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; + +import java.util.HashMap; +import java.util.List; + +/** + * Created by Administrator on 2018/1/22. + */ + +public class AirChooseListAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mRsBeanList; + private OnRecyclerItemClickListener mOnItemClickListener; + private HashMap states = new HashMap<>();//用于记录每个RadioButton的状态,并保证只可选一个 + private boolean isFirst = true; + + public AirChooseListAdapter(Context mContext, List mDatas) { + super(); + this.mContext = mContext; + this.mRsBeanList = mDatas; + } + + + @Override + public AirChooseListAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_air_choose_try, + parent, false); + return new AirChooseListAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(AirChooseListAdapter.MessageViewHolder holder, int position) { + holder.setIsRecyclable(false); + if (mRsBeanList != null) { + holder.setViews(position); + } + } + + @Override + public int getItemCount() { + return mRsBeanList != null ? mRsBeanList.size() : 0; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView modelName; + private TextView openAir; + private TextView closeAir; + private TextView sanWindAir; + private TextView windSpeedAir; + private CheckBox mCheckBoxOpen; + + public MessageViewHolder(View view) { + super(view); + mCheckBoxOpen = (CheckBox) itemView.findViewById(R.id.cb_air_choose); + modelName = (TextView) itemView.findViewById(R.id.air_brand_name); + openAir = (TextView) itemView.findViewById(R.id.tv_open_air); + closeAir = (TextView) itemView.findViewById(R.id.tv_close_air); + sanWindAir = (TextView) itemView.findViewById(R.id.tv_sao_wind); + windSpeedAir = (TextView) itemView.findViewById(R.id.tv_wind_speed); + } + + public void setViews(final int position) { + modelName.setText(mRsBeanList.get(position).getBe_rmodel()); + if (null != mRsBeanList.get(position).getRc_command()) { + if (null != mRsBeanList.get(position).getRc_command().getOn()) { + openAir.setVisibility(View.VISIBLE); + } + if (null != mRsBeanList.get(position).getRc_command().getOff()) { + closeAir.setVisibility(View.VISIBLE); + } + if (isFirst) { + if (null != mRsBeanList.get(position).getRc_command().getA_s1__u1_l1_p0()) { + sanWindAir.setVisibility(View.VISIBLE); + } + if (null != mRsBeanList.get(position).getRc_command().getA_s2__u0_l0_p0()) { + windSpeedAir.setVisibility(View.VISIBLE); + } + } + } + + openAir.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + List photos = null; + mOnItemClickListener.onClick(v, position, photos, 0); + } + } + }); + closeAir.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + List photos = null; + mOnItemClickListener.onClick(v, position, photos, 1); + } + } + }); + sanWindAir.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + List photos = null; + mOnItemClickListener.onClick(v, position, photos, 2); + } + } + }); + windSpeedAir.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + List photos = null; + mOnItemClickListener.onClick(v, position, photos, 3); + } + } + }); + mCheckBoxOpen.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + List photos = null; + // isFirst = false; + //重置,确保最多只有一项被选中 + for (String key : states.keySet()) { + states.put(key, false); + } + states.put(String.valueOf(position), mCheckBoxOpen.isChecked()); + AirChooseListAdapter.this.notifyDataSetChanged(); + if (mCheckBoxOpen.isChecked()) { + mOnItemClickListener.onClick(v, position, photos, 4); + } else { + mOnItemClickListener.onClick(v, position, photos, 5); + } + } + } + }); + + boolean res = false; + if (states.get(String.valueOf(position)) == null || states.get(String.valueOf(position)) == false) { + res = false; + states.put(String.valueOf(position), false); + } else { + res = true; + } + + mCheckBoxOpen.setChecked(res); + } + } + + public void setmOnItemClickListener(OnRecyclerItemClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/fana2/AirChoseListActivity.java b/app/src/main/java/com/yonsz/z1/devicea2/fana2/AirChoseListActivity.java new file mode 100644 index 0000000..bbdcce5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/fana2/AirChoseListActivity.java @@ -0,0 +1,335 @@ +package com.yonsz.z1.devicea2.fana2; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.View; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entitya2.AirAllEntity; +import com.yonsz.z1.database.entity.entitya2.NormalEntity; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_FAIL; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDKEY_INFRARED_2MAC_FAIL; +import static com.yonsz.z1.net.Constans.SENDKEY_INFRARED_2MAC_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.SEARCH_ROUND; +import static com.yonsz.z1.net.NetWorkUrl.YKY_DOWNLOAD; + +/** + * Created by Administrator on 2018/1/22. + */ + +public class AirChoseListActivity extends BaseActivity { + private TitleView mTitleView; + private SimpleEntty mSimpleEntty; + private AirAllEntity airAllEntity; + private List mRsBeanList = new ArrayList<>(); + private SwipeMenuRecyclerView mRecyclerView; + private AirChooseListAdapter mAirChooseListAdapter; + private String ziId; + private String id; + private int currrentPosition; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_air_choose_list); + NettyHandlerUtil.getInstance(); + initView(); + initListener(); + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_child_device_list); + mTitleView = (TitleView) findViewById(R.id.title_air_list); + mTitleView.setHead("遥控器选择列表"); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionTxtColor(false); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (currrentPosition == -1) { + ToastUtil.show(AirChoseListActivity.this, "选择一个型号"); + } else { + addChildDevice(ziId, AIR_TAG, getIntent().getExtras().get("brandName").toString()); + } + } + + @Override + public void onFunctionText() { + + } + }); + + if (getIntent().getExtras() != null && getIntent().getExtras().get("deviceDetail") != null) { + mSimpleEntty = (SimpleEntty) getIntent().getExtras().get("deviceDetail"); + String respone = mSimpleEntty.getObj(); + airAllEntity = JSON.parseObject(respone, AirAllEntity.class); + mRsBeanList = airAllEntity.getRs(); + if (airAllEntity.getSm() != 0) { + /*for (int i = 0; i < mRsBeanList.size(); i++) { + if (mRsBeanList.get(i).getV() != 3) { + mRsBeanList.remove(i); + } + }*/ + mAirChooseListAdapter = new AirChooseListAdapter(this, mRsBeanList); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setAdapter(mAirChooseListAdapter); + + mAirChooseListAdapter.setmOnItemClickListener(new OnRecyclerItemClickListener() { + @Override + public void onClick(View view, int position, List photos, int i) { + switch (i) { + case 0: + searchRound(mRsBeanList.get(position).getZip() + mRsBeanList.get(position).getRc_command().getOn().getSrc()); + break; + case 1: + searchRound(mRsBeanList.get(position).getZip() + mRsBeanList.get(position).getRc_command().getOff().getSrc()); + break; + case 2: + searchRound(mRsBeanList.get(position).getZip() + mRsBeanList.get(position).getRc_command().getA_s1__u1_l1_p0().getSrc()); + break; + case 3: + searchRound(mRsBeanList.get(position).getZip() + mRsBeanList.get(position).getRc_command().getA_s2__u0_l0_p0().getSrc()); + break; + case 4: + currrentPosition = position; + mTitleView.setHeadFuntionTxtColor(true); + break; + case 5: + currrentPosition = -1; + mTitleView.setHeadFuntionTxtColor(false); + break; + } + } + + @Override + public void onLongClick(View view, int position) { + + } + }); + } else { + mRecyclerView.setVisibility(View.GONE); + } + } + } + + private void initListener() { + + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + id = entity1.getObj().getId(); + downloadInfraredByRid(entity1); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DOWNLOAD_INFRARED_BYRID_SUCCESS: +// sendKeyInfrared2Mac(); + NettyHandlerUtil.getInstance(); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(AirChoseListActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(AirChoseListActivity.this, DeviceControlActivity.class); + } + intent.putExtra("airStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", id); + intent.putExtra("airName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break; + case DOWNLOAD_INFRARED_BYRID_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case SENDKEY_INFRARED_2MAC_SUCCESS: + /*NettyHandlerUtil.getInstance(); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(AirChoseListActivity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(AirChoseListActivity.this, DeviceControlActivity.class); + } + intent.putExtra("airStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", id); + intent.putExtra("airName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish();*/ + break; + case SENDKEY_INFRARED_2MAC_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case SEARCH_ROUND_FAIL: + SimpleEntty simpleEntty = (SimpleEntty) msg.obj; + ToastUtil.show(this, simpleEntty.getMsg().toString()); + break; + } + } + + private void downloadInfraredByRid(AddChildDeviceEntity entity1) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("deviceType", AIR_TAG); + map.put("rid", mRsBeanList.get(currrentPosition).getRid()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadInfraredByRid", "ShareDeviceActivity onSuccess()" + respone); + /*Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + mHandler.sendMessage(msg);*/ + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void searchRound(String sendMsg) { + setShake(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); +// map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); + map.put("code", sendMsg); + netWorkUtil.requestPostByAsynewApi(SEARCH_ROUND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("searchRound", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else if (1004 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceId", deviceType); + map.put("deviceType", deviceType); + map.put("deviceBrand", deviceBrand); + map.put("rid", mRsBeanList.get(currrentPosition).getRid()); + util.requestPostByAsynew(NetWorkUrl.ADD_CHILD_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + AddChildDeviceEntity entity = JSON.parseObject(respone, AddChildDeviceEntity.class); + Log.i("addChildDevice", "onSuccess: " + respone); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanA2Activity.java new file mode 100644 index 0000000..424f782 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanA2Activity.java @@ -0,0 +1,891 @@ +package com.yonsz.z1.devicea2.fana2; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.DeviceStateEntity; +import com.yonsz.z1.database.entity.entity4.LocalControlEvent; +import com.yonsz.z1.database.entity.entitya2.EventCloseEntity; +import com.yonsz.z1.database.entity.entitya2.KeyEntity; +import com.yonsz.z1.database.entity.entitya2.LearnWhatEvent; +import com.yonsz.z1.database.entity.entitya2.LoadEvent; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.devicea2.LearnGuideA2Activity; +import com.yonsz.z1.devicea2.tva2.HorizontalProgressBarWithNumber; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.utils.ConnectNettyUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.id.tv_wind_speed; +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.APP_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_CLOSE; +import static com.yonsz.z1.net.Constans.FAN_LEARN_ING; +import static com.yonsz.z1.net.Constans.FAN_LEARN_WHAT; +import static com.yonsz.z1.net.Constans.FAN_OPEN; +import static com.yonsz.z1.net.Constans.FAN_SHAKE; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.FAN_TIME; +import static com.yonsz.z1.net.Constans.FAN_TYPE; +import static com.yonsz.z1.net.Constans.FAN_WIND; +import static com.yonsz.z1.net.Constans.LEARN_RESULT; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_CONNDEVICE_PUSHKEY_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_LOCAL_CONTROL; +import static com.yonsz.z1.net.Constans.isLocalControl; + +/** + * Created by Administrator on 2017/11/10. + */ + +public class FanA2Activity extends BaseActivity { + private static final int MSG_PROGRESS_UPDATE = 0x110; + private TitleView mTitleView; + private TextView windType, windTypeBg, openFan, openFanBg, closeFan, closeFanBg, timing, timingBg, windSpeed, windSpeedBg, shakeHead, shakeheadbg, learnInstruction, learnComplete; + private ImageView openFanMark, closeFanMark, timingMark, windSpeedMark, shakeHeadMark, windTypeMark; + private LinearLayout learningLl, fanContinueLearnLl, fanTopLl; + private AlphaAnimation mAlphaAnimation; + private boolean isLearn = false; + private String userId; + private String ziId; + private boolean openTag = false, closeTag = false, shakeTag = false, windTag = false, timeTag = false, windTypeTag = false; + private String fanName; + private HorizontalProgressBarWithNumber mProgressBar; + private RelativeLayout progressRl; + private TextView progressTv; + private boolean isLoading = false; + private String fanStateTag; + private TextView loadBackTv, tv_cancel_load; + private LoadingDialog mLoadingDialog; + private String cancelFlag; + private boolean isOpenLearn = false, isCloselearn = false, isShakeLearn = false, isSpeedLearn = false, isTypeLearn = false, isTimelearn = false; + private String deviceIp = ""; + private ImageView localControlIv; + private ImageView fanBladeIv; + private RotateAnimation rotateAnimation; + private RelativeLayout rl_learn_guide; + private boolean isShowLearnGuide = false; + + public void onEventMainThread(AppControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = APP_CONTROL_SUCCESS; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LocalControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = SHOW_LOCAL_CONTROL; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LoadEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_ING; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnWhatEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = FAN_LEARN_WHAT; + message.obj = msg; + mHandler.sendMessage(message); + } + + @Override + public void onBackPressed() { + if (isLoading) { + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + finish(); + } else { + finish(); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fan_a2); + initView(); + initListener(); + } + + @Override + public void onResume() { + super.onResume(); + queryDeviceLastInfo(getIntent().getExtras().get("id").toString(), FAN_TAG); + if (isLearn) { + if (isCloselearn) { + closeFanMark.setVisibility(View.VISIBLE); + } + if (isOpenLearn) { + openFanMark.setVisibility(View.VISIBLE); + } + if (isShakeLearn) { + shakeHeadMark.setVisibility(View.VISIBLE); + } + if (isTypeLearn) { + windTypeMark.setVisibility(View.VISIBLE); + } + if (isTimelearn) { + timingMark.setVisibility(View.VISIBLE); + } + if (isSpeedLearn) { + windSpeedMark.setVisibility(View.VISIBLE); + } + } + } + + private void queryDeviceLastInfo(String deviceId, String deviceType) { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceType", deviceType); + netWorkUtil.requestPostByAsynew(QUERY_DEVICE_LASTINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceLastInfo", "ShareDeviceActivity onSuccess()" + respone); + DeviceStateEntity obj = JSON.parseObject(respone, DeviceStateEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_LASTINFO_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_LASTINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_LASTINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void initView() { + fanStateTag = getIntent().getExtras().get("fanStateTag").toString(); + fanName = getIntent().getExtras().get("fanName").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + if (fanStateTag.equals("1")) { + isLoading = false; + } else { + isLoading = true; + } + + localControlIv = (ImageView) findViewById(R.id.iv_local_control); + openFanMark = (ImageView) findViewById(R.id.tv_fan_open_mark); + closeFanMark = (ImageView) findViewById(R.id.tv_fan_close_mark); + timingMark = (ImageView) findViewById(R.id.tv_timing_mark); + windSpeedMark = (ImageView) findViewById(R.id.tv_wind_speed_mark); + shakeHeadMark = (ImageView) findViewById(R.id.tv_shake_head_mark); + windTypeMark = (ImageView) findViewById(R.id.tv_wind_type_mark); + + progressRl = (RelativeLayout) findViewById(R.id.rl_progress_top); + rl_learn_guide = (RelativeLayout) findViewById(R.id.rl_learn_guide); + loadBackTv = (TextView) findViewById(R.id.tv_load_back); + tv_cancel_load = (TextView) findViewById(R.id.tv_cancel_load); + openFan = (TextView) findViewById(R.id.tv_fan_open); + openFanBg = (TextView) findViewById(R.id.tv_fan_open_bg); + closeFan = (TextView) findViewById(R.id.tv_fan_close); + closeFanBg = (TextView) findViewById(R.id.tv_fan_close_bg); + timing = (TextView) findViewById(R.id.tv_timing); + timingBg = (TextView) findViewById(R.id.tv_timing_bg); + windSpeed = (TextView) findViewById(tv_wind_speed); + windSpeedBg = (TextView) findViewById(R.id.tv_wind_speed_bg); + shakeHead = (TextView) findViewById(R.id.tv_shake_head); + shakeheadbg = (TextView) findViewById(R.id.tv_shake_head_bg); + windType = (TextView) findViewById(R.id.tv_wind_type); + windTypeBg = (TextView) findViewById(R.id.tv_wind_type_bg); + + fanTopLl = (LinearLayout) findViewById(R.id.ll_fan_top); + learningLl = (LinearLayout) findViewById(R.id.ll_learning); + fanBladeIv = (ImageView) findViewById(R.id.iv_fan_blade); + + progressTv = (TextView) findViewById(R.id.tv_progress_top); + mProgressBar = (HorizontalProgressBarWithNumber) findViewById(R.id.pg_horizontal_fan); + // mHandler.sendEmptyMessage(MSG_PROGRESS_UPDATE); + mTitleView = (TitleView) findViewById(R.id.title_fan); + mTitleView.clearBackGroud(); + if (fanName != null) { + mTitleView.setHead(fanName); + } else { + mTitleView.setHead(R.string.fan); + } + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(FanA2Activity.this, R.anim.rotate360_fan_anim); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (isLoading) { + + } else { + finish(); + } + } + + @Override + public void onFunction() { + if (isLoading) { + + } else { + if (isLearn) { + isLearn = false; + //查询学习按键 + selectConnDevicePushkey(); + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(FanA2Activity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + ConfirmDialog dialog = new ConfirmDialog(FanA2Activity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + deleteChildDevice(FAN_TAG, ziId); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + //重新命名 + break; + case 3: + //语令说明 + Intent intent = new Intent(FanA2Activity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", FAN_TAG); + startActivity(intent); + break; + case 4: + //遥控学习 + isLearn = true; + //查询学习按键 + selectConnDevicePushkey(); + break; + } + } + }); + dialog2.setContent(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + } + + @Override + public void onFunctionText() { + + } + }); + + if (isLoading) { + progressRl.setVisibility(View.VISIBLE); + } else { + progressRl.setVisibility(View.GONE); + selectConnDevicePushkey(); + } + + if (null != getIntent().getExtras().get("cancelFlag")) { + cancelFlag = getIntent().getExtras().get("cancelFlag").toString(); + if (cancelFlag.equals("1")) { + ConfirmDialog dialog = new ConfirmDialog(FanA2Activity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + finish(); + break; + case 1: + reloadInfrared(FAN_TAG); + break; + } + } + }); + dialog.setContent(R.string.Data_not_downloaded_reloaded); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else { + + } + } else { + + } + ConnectNettyUtil.connectNetty(ziId,deviceIp,this); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (isLocalControl) { + NettyManager.closeCtx(); + } + } + + private void reloadInfrared(String deviceType) { + /* NettyHandlerUtil.getInstance(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("deviceType", deviceType); + map.put("rid", getIntent().getExtras().get("rid").toString()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("reloadInfrared", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty message = JSON.parseObject(respone, SimpleEntty.class); + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + msg.obj = message; + mHandler.sendMessage(msg); + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void initListener() { + openFan.setOnClickListener(this); + closeFan.setOnClickListener(this); + timing.setOnClickListener(this); + windSpeed.setOnClickListener(this); + shakeHead.setOnClickListener(this); + windType.setOnClickListener(this); + loadBackTv.setOnClickListener(this); + tv_cancel_load.setOnClickListener(this); + progressRl.setOnClickListener(this); + rl_learn_guide.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + Intent intent; + if (isLearn) { + switch (v.getId()) { + case R.id.tv_fan_open: + intent = new Intent(FanA2Activity.this, LearnGuideA2Activity.class); + intent.putExtra("learnGuide", 1); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_fan_close: + intent = new Intent(FanA2Activity.this, LearnGuideA2Activity.class); + intent.putExtra("learnGuide", 6); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_timing: + intent = new Intent(FanA2Activity.this, LearnGuideA2Activity.class); + intent.putExtra("learnGuide", 4); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case tv_wind_speed: + intent = new Intent(FanA2Activity.this, LearnGuideA2Activity.class); + intent.putExtra("learnGuide", 3); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_shake_head: + intent = new Intent(FanA2Activity.this, LearnGuideA2Activity.class); + intent.putExtra("learnGuide", 2); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_wind_type: + intent = new Intent(FanA2Activity.this, LearnGuideA2Activity.class); + intent.putExtra("learnGuide", 5); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_load_back: + SharedpreferencesUtil.save(ziId + FAN_TAG, true); + if (isLoading) { + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + finish(); + } else { + finish(); + } + break; + case R.id.rl_progress_top: + break; + } + } else { + switch (v.getId()) { + case R.id.tv_fan_open: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_OPEN)); + } else { + controllerDevice(FAN_OPEN); + } + break; + case R.id.tv_fan_close: + fanBladeIv.clearAnimation(); + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_CLOSE)); + } else { + controllerDevice(FAN_CLOSE); + } + break; + case R.id.tv_timing: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_TIME)); + } else { + controllerDevice(FAN_TIME); + } + break; + case tv_wind_speed: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_WIND)); + } else { + controllerDevice(FAN_WIND); + } + break; + case R.id.tv_shake_head: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_SHAKE)); + } else { + controllerDevice(FAN_SHAKE); + } + break; + case R.id.tv_wind_type: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(FAN_TYPE)); + } else { + controllerDevice(FAN_TYPE); + } + break; + case R.id.tv_load_back: + SharedpreferencesUtil.save(ziId + FAN_TAG, true); + if (isLoading) { + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + finish(); + } else { + finish(); + } + break; + case R.id.rl_progress_top: + break; + case R.id.tv_cancel_load: + cancelDownload(); + break; + case R.id.rl_learn_guide: + rl_learn_guide.setVisibility(View.GONE); + isShowLearnGuide = false; + SharedpreferencesUtil.save(ziId + FAN_TAG, false); + break; + } + } + } + + private void cancelDownload() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceType", FAN_TAG); + netWorkUtil.requestPostByAsynewApi(CANCEL_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cancelDownload", "ShareDeviceActivity onSuccess()" + respone); + finish(); + } + + @Override + public void onFail(String message) { + } + });*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FAN_LEARN_ING: + NettyEntity nettyEntity = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + float countNum = Integer.parseInt(nettyEntity.getCountNum()); + float loadNum = Integer.parseInt(nettyEntity.getLoadNum()); + mProgressBar.setProgress((int) (loadNum / countNum * 100)); + if (loadNum / countNum == 1) { + isLoading = false; + progressTv.setText(R.string.load_complete); + isShowLearnGuide = true; + progressRl.setVisibility(View.GONE); + if (mLoadingDialog != null && mLoadingDialog.isShowing()) { + + } else { + initLoadDialog(); + } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + selectConnDevicePushkey(); + } + }, 2000); + } + break; + case SELECT_CONNDEVICE_PUSHKEY_SUCCESS: + KeyEntity entity1 = (KeyEntity) msg.obj; + List entity1Obj = entity1.getObj(); + if (entity1Obj != null && entity1Obj.size() != 0) { + for (int i = 0; i < entity1Obj.size(); i++) { + Log.i("getPushKey", "FanA2Activity callBackUiThread()" + entity1Obj.get(i).getPushKey()); + switch (entity1Obj.get(i).getPushKey()) { + case "01": + openTag = true; + break; + case "02": + shakeTag = true; + break; + case "03": + windTag = true; + break; + case "04": + timeTag = true; + break; + case "05": + closeTag = true; + break; + case "06": + windTypeTag = true; + break; + } + } + } + if (isLearn) { + showLearn(); + } else { + showControl(); + } + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + if (isShowLearnGuide || SharedpreferencesUtil.get(ziId + FAN_TAG)) { + rl_learn_guide.setVisibility(View.VISIBLE); + } else { + rl_learn_guide.setVisibility(View.GONE); + } + break; + case DELETE_CHILDDEVICE_SUCCESS: + + break; + case DELETE_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DOWNLOAD_INFRARED_BYRID_SUCCESS: + progressRl.setVisibility(View.VISIBLE); + break; + case FAN_LEARN_WHAT: + String obj = (String) msg.obj; + switch (obj) { + case "1": + isOpenLearn = true; + break; + case "2": + isShakeLearn = true; + break; + case "3": + isSpeedLearn = true; + break; + case "4": + isTimelearn = true; + break; + case "5": + isTypeLearn = true; + break; + case "6": + isCloselearn = true; + break; + } + break; + case SHOW_LOCAL_CONTROL: + String obj2 = (String) msg.obj; + if (obj2.equals("1")) { + localControlIv.setVisibility(View.VISIBLE); + } else { + localControlIv.setVisibility(View.GONE); + } + break; + case APP_CONTROL_SUCCESS: + NettyEntity nettyEntity1 = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + if (nettyEntity1.getDeviceType().equals(FAN_TAG)) { + if (nettyEntity1.getOpenFlag().equals("1")) { + fanBladeIv.startAnimation(rotateAnimation); + ToastUtil.show(this, "风扇已打开"); + } else { + fanBladeIv.clearAnimation(); + } + } + break; + case QUERY_DEVICE_LASTINFO_SUCCESS: + DeviceStateEntity parseObject = (DeviceStateEntity) msg.obj; + if (parseObject.getData().getOpenFlag().equals("1")) { + fanBladeIv.startAnimation(rotateAnimation); + } else { + fanBladeIv.clearAnimation(); + } + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + private void showLearn() { + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setHeadFuntionGone(); + fanTopLl.setVisibility(View.VISIBLE); + learningLl.setVisibility(View.VISIBLE); + + if (isCloselearn) { + closeFanMark.setVisibility(View.VISIBLE); + } + if (isOpenLearn) { + openFanMark.setVisibility(View.VISIBLE); + } + if (isShakeLearn) { + shakeHeadMark.setVisibility(View.VISIBLE); + } + if (isTypeLearn) { + windTypeMark.setVisibility(View.VISIBLE); + } + if (isTimelearn) { + timingMark.setVisibility(View.VISIBLE); + } + if (isSpeedLearn) { + windSpeedMark.setVisibility(View.VISIBLE); + } + + windSpeed.setAlpha(1.0f); + windSpeed.setEnabled(true); + shakeHead.setAlpha(1.0f); + shakeHead.setEnabled(true); + openFan.setAlpha(1.0f); + openFan.setEnabled(true); + windType.setAlpha(1.0f); + windType.setEnabled(true); + timing.setAlpha(1.0f); + timing.setEnabled(true); + closeFan.setAlpha(1.0f); + closeFan.setEnabled(true); + } + + private void showControl() { + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + fanTopLl.setVisibility(View.GONE); + learningLl.setVisibility(View.GONE); + + openFanMark.setVisibility(View.GONE); + closeFanMark.setVisibility(View.GONE); + windSpeedMark.setVisibility(View.GONE); + timingMark.setVisibility(View.GONE); + windTypeMark.setVisibility(View.GONE); + shakeHeadMark.setVisibility(View.GONE); + + if (!windTag) { + windSpeed.setAlpha(0.5f); + windSpeed.setEnabled(false); + } else { + windSpeed.setAlpha(1.0f); + windSpeed.setEnabled(true); + } + if (!shakeTag) { + shakeHead.setAlpha(0.5f); + shakeHead.setEnabled(false); + } else { + shakeHead.setAlpha(1.0f); + shakeHead.setEnabled(true); + } + if (!openTag) { + openFan.setAlpha(0.5f); + openFan.setEnabled(false); + } else { + openFan.setAlpha(1.0f); + openFan.setEnabled(true); + } + if (!closeTag) { + closeFan.setAlpha(0.5f); + closeFan.setEnabled(false); + } else { + closeFan.setAlpha(1.0f); + closeFan.setEnabled(true); + } + if (!timeTag) { + timing.setAlpha(0.5f); + timing.setEnabled(false); + } else { + timing.setAlpha(1.0f); + timing.setEnabled(true); + } + if (!windTypeTag) { + windType.setAlpha(0.5f); + windType.setEnabled(false); + } else { + windType.setAlpha(1.0f); + windType.setEnabled(true); + } + } + + private void selectConnDevicePushkey() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", FAN_TAG); + map.put("ziId", ziId); + netWorkUtil.requestPostByAsynew(SELECT_CONNDEVICE_PUSHKEY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectConnDevicePushkey", "ShareDeviceActivity onSuccess()" + respone); + KeyEntity obj = JSON.parseObject(respone, KeyEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + + private void controllerDevice(String sendMsg) { + /*setShake(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); + map.put("sendMsg", sendMsg); + netWorkUtil.requestPostByAsyn(ziId, CONTROLLER_DEVICE_A2, map, "a2/control/device", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("controllerDevice", "ShareDeviceActivity onSuccess()" + respone); + *//*RomoteListA2Entity obj = JSON.parseObject(respone, RomoteListA2Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*//* + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanAutoFailActivity.java b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanAutoFailActivity.java new file mode 100644 index 0000000..76027b3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanAutoFailActivity.java @@ -0,0 +1,96 @@ +package com.yonsz.z1.devicea2.fana2; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; + +/** + * Created by Administrator on 2017/7/25. + */ + +public class FanAutoFailActivity extends BaseActivity { + private TitleView mTitleView; + private Button restart; + private LinearLayout mLinearLayoutBg; + private String deviceType; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_air_auto_fail); + initView(); + } + + private void initView() { + deviceType = getIntent().getExtras().get("deviceType").toString(); + mLinearLayoutBg = (LinearLayout) findViewById(R.id.ll_fan_auto_fail); + mTitleView = (TitleView) findViewById(R.id.title_add_air_auto_fail); + mTitleView.setHead(R.string.add_fail); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (deviceType) { + case TV_TAG: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_tva2)); + break; + case TVONE_TAG: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_tva2)); + break; + case AIR_TAG: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_kta2)); + break; + case SWEEP_TAG: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_swapa2)); + break; + } + restart = (Button) findViewById(R.id.bt_restart); + restart.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(FanAutoFailActivity.this, FanStepOneActivity.class); + intent.putExtra("brandId", getIntent().getExtras().get("brandId").toString()); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + if (getIntent().getExtras().get("rid") != null) { + intent.putExtra("rid", getIntent().getExtras().get("rid").toString()); + } + startActivity(intent); + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanListA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanListA2Activity.java new file mode 100644 index 0000000..11ae429 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanListA2Activity.java @@ -0,0 +1,401 @@ +package com.yonsz.z1.devicea2.fana2; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entitya2.BrandListA2Entity; +import com.yonsz.z1.device.fan.FanLearnActivity; +import com.yonsz.z1.device.tv.Brand; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.PingYinUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_SUCCESS; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_CONN_DEVICE_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.GETBRANDID_BY_DEVICEID; + +/** + * Created by Administrator on 2017/10/10. + */ +public class FanListA2Activity extends BaseActivity { + private TitleView mTitleView; + private ListView brandsListView; + public MyAdapter adapter; + private ArrayList fan;//品牌列表 + private List list; + private List stringList; + private EditText searchEt; + Handler myhandler = new Handler(); + private String deviceType; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_brand_list); + deviceType = getIntent().getExtras().get("deviceType").toString(); + initView(); + initListener(); + queryDeviceBrand(deviceType); + } + + private void queryDeviceBrand(String deviceType) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestGetByAsy(GETBRANDID_BY_DEVICEID, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceBrand", "ShareDeviceActivity onSuccess()" + respone); + BrandListA2Entity obj = JSON.parseObject(respone, BrandListA2Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + + private void initView() { + searchEt = (EditText) findViewById(R.id.et_search); + stringList = new ArrayList<>(); + fan = new ArrayList<>(); + brandsListView = (ListView) findViewById(R.id.listview_brand_list); + mTitleView = (TitleView) findViewById(R.id.title_brand_list); + switch (deviceType) { + case FAN_TAG: + mTitleView.setHead(R.string.select_fan_brand); + break; + case TV_TAG: + mTitleView.setHead(R.string.select_tvone_brand); + break; + case TVONE_TAG: + mTitleView.setHead(R.string.select_tv_brand); + break; + case AIR_TAG: + mTitleView.setHead(R.string.select_air_brand); + break; + case SWEEP_TAG: + mTitleView.setHead(R.string.select_sweep_brand); + break; + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + adapter = new MyAdapter(this); + brandsListView.setAdapter(adapter); + } + + private void initListener() { + searchEt.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + + @Override + public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + + @Override + public void afterTextChanged(Editable s) { + /**这是文本框改变之后 会执行的动作 + * 因为我们要做的就是,在文本框改变的同时,我们的listview的数据也进行相应的变动,并且如一的显示在界面上。 + * 所以这里我们就需要加上数据的修改的动作了。 + */ + myhandler.post(eChanged); + } + }); + } + + /** + * 关于界面UI的更新,可以使用Handler,通过Post一个Runnable去更新,Runnable会去根据搜索框的文本对mData里的数据进行更新。 + */ + Runnable eChanged = new Runnable() { + @Override + public void run() { + String data = searchEt.getText().toString(); + fan.clear(); + getmDataSub(stringList, data); + adapter.notifyDataSetChanged(); + } + }; + + /** + * 可能对mData的理解会有点问题,因为数据更新完后,每一次的筛选数据都是放在mData里,那么原本的数据呢,当然就是在mListTitle和mListText里。根据获得数据的getmDataSub的代码即可知。 + */ + + private void getmDataSub(List mDataSubs, String data) { + int length = mDataSubs.size(); + for (int i = 0; i < length; ++i) { + if (mDataSubs.get(i).getBrandName().contains(data) || PingYinUtil.getPingYin(mDataSubs.get(i).getBrandName()).contains(data)) { + fan.add(mDataSubs.get(i)); + } + } + // fan.add("其他品牌"); + } + + + @Override + public void onResume() { + super.onResume(); + // queryDeviceBrand(); + searchEt.setText(""); + } + + public void load_brand() { + fan.clear(); + adapter.notifyDataSetChanged(); + //再添加其余的品牌列表 + for (int i = 0; i < stringList.size(); i++) { + fan.add(stringList.get(i)); + /*if (i == stringList.size() - 1) { + fan.add("其他品牌"); + }*/ + } + adapter.notifyDataSetChanged(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case QUERY_DEVICE_BRAND_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case QUERY_DEVICE_BRAND_SUCCESS: + BrandListA2Entity entity2 = (BrandListA2Entity) msg.obj; + stringList = entity2.getObj().getBrandList(); + load_brand(); + break; + case UPDATE_CONN_DEVICE_SUCCESS: + AddChildDeviceEntity obj = (AddChildDeviceEntity) msg.obj; + Intent intent = new Intent(FanListA2Activity.this, FanLearnActivity.class); + intent.putExtra("deviceName", obj.getObj().getDeviceBrand()); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + break; + } + } + + private class MyAdapter extends BaseAdapter { + private Context context; + private LayoutInflater inflater; + + public MyAdapter(Context context) { + super(); + this.context = context; + inflater = LayoutInflater.from(context); + + } + + @Override + public int getCount() { + return fan.size(); + } + + @Override + public Object getItem(int arg0) { + return arg0; + } + + @Override + public long getItemId(int arg0) { + return arg0; + } + + @Override + public View getView(final int position, View view, ViewGroup arg2) { + if (view == null) { + view = inflater.inflate(R.layout.brandlist_listview_item, null); + } + final TextView edit = (TextView) view.findViewById(R.id.name); + if (position == fan.size()) { + // edit.setText("其他品牌"); + } else { + edit.setText(fan.get(position).getBrandName()); + } + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // Intent intent = new Intent(FanListA2Activity.this, FanMatchA2Activity.class); + //先跳转到一键匹配的页面 + Intent intent = new Intent(FanListA2Activity.this, FanStepOneActivity.class); + intent.putExtra("brandId", fan.get(position).getBrandId()); + intent.putExtra("brandName", fan.get(position).getBrandName().toString()); + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", deviceType); + if (getIntent().getExtras().get("rid") != null) { + intent.putExtra("rid", getIntent().getExtras().get("rid").toString()); + } + startActivity(intent); + /*if (!TextUtils.isEmpty(getIntent().getExtras().get("nameTag").toString())) { + if (position == fan.size() - 1) { + showModifyPop(0, 0); + } else { + updateConnDevice(fan.get(position)); + } + } else { + if (position == fan.size() - 1) { + showModifyPop(0, 0); + } else { + // addChildDevice(getIntent().getExtras().get("ziId").toString(), FAN_TAG, fan.get(position)); + Intent intent = new Intent(FanListA2Activity.this, FanMatchA2Activity.class); + intent.putExtra("brandId", stringList.get(position).getBrandId().toString()); + intent.putExtra("brandName", stringList.get(position).getBrandName().toString()); + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", deviceType); + if (getIntent().getExtras().get("rid") != null) { + intent.putExtra("rid", getIntent().getExtras().get("rid").toString()); + } + startActivity(intent); + } + }*/ + } + }); + return view; + } + + public void showModifyPop(final int adapterPosition, final int i) { + ConfirmNameDialog dialog = new ConfirmNameDialog(FanListA2Activity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (!TextUtils.isEmpty(getIntent().getExtras().get("nameTag").toString())) { + updateConnDevice(positioName); + } else { + if (TextUtils.isEmpty(positioName)) { + ToastUtil.show(FanListA2Activity.this, "品牌不能为空"); + } else { + addChildDevice(getIntent().getExtras().get("ziId").toString(), FAN_TAG, positioName); + } + } + break; + } + } + }); + dialog.setMaxEms(10); + dialog.setHintName(R.string.Enter_brand_name); + dialog.setContent(R.string.Brand_name); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void updateConnDevice(String positioName) { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", getIntent().getExtras().get("id").toString()); + map.put("deviceBrand", positioName.trim()); + netWorkUtil.requestPostByAsynew(UPDATE_CONN_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateConnDevice", "ShareDeviceActivity onSuccess()" + respone); + AddChildDeviceEntity obj = JSON.parseObject(respone, AddChildDeviceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_CONN_DEVICE_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_CONN_DEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_CONN_DEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanMatchA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanMatchA2Activity.java new file mode 100644 index 0000000..71b555b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanMatchA2Activity.java @@ -0,0 +1,636 @@ +package com.yonsz.z1.devicea2.fana2; + +import android.content.Intent; +import android.graphics.Color; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.view.animation.RotateAnimation; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entitya2.RomoteListA2Entity; +import com.yonsz.z1.device.airconditioner.AirhandFailActivity; +import com.yonsz.z1.devicea2.aira2.AirTryA2Activity; +import com.yonsz.z1.devicea2.sweepa2.SweepTryA2Activity; +import com.yonsz.z1.devicea2.tva2.TvOneTryA2Activity; +import com.yonsz.z1.devicea2.tva2.TvTryA2Activity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ShakeUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.AIR_CLEANER; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.GETROUNDINFO_BY_BRANDID_SUCCESS; +import static com.yonsz.z1.net.Constans.GETROUNDINFO_BY_BRANDID_TAIL; +import static com.yonsz.z1.net.Constans.INDEPENDENT_CODE_AC; +import static com.yonsz.z1.net.Constans.MOVIE_CAMERA; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_FAIL; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_SUCCESS; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.NetWorkUrl.GETROUNDINFO_BY_BRANDID; +import static com.yonsz.z1.net.NetWorkUrl.SEARCH_ROUND; + +/** + * Created by Administrator on 2017/11/9. + */ + +public class FanMatchA2Activity extends BaseActivity { + private static long lastClickTime;//防止快速点击 + private static long actionUpTime;//防止快速点击 + public final int MESSAGE_SEARCH_PROGRESS = 1; + public final int MESSAGE_SEARCH_COMPLETE = 2; + private TitleView mTitleView; + private ImageView rotateIv; + private TextView longClick; + private boolean b_stop_flag; + private boolean b_first; + private RotateAnimation rotateAnimation; + private long[] pattern = new long[]{30, 400, 30, 400}; + private int currentIndex = 0, totalIndex; + private TextView currentNumber, totalNumber; + private String mGroup; + private String mBrand; + private List mGroupList; + private List mBrandList; + private List mRoundListEntities = new ArrayList<>(); + private String ziId; + private String allData; + private String deviceType; + private TextView mDeclare; + private LoadingDialog mLoadingDialog; + private boolean isActionUp = false; + private TextView lossAuto; + private MediaPlayer mediaPlayer01; + private LinearLayout ll_current_number; + private ImageView iv_fan_match_up, iv_fan_match_down; + private Button sureBt; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fan_match); + initView(); + initListener(); + getRoundInfoByBrandId(deviceType); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + private void initView() { + deviceType = getIntent().getExtras().get("deviceType").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + mDeclare = (TextView) findViewById(R.id.tv_declare); + lossAuto = (TextView) findViewById(R.id.bt_loss_auto); + currentNumber = (TextView) findViewById(R.id.tv_current_number); + totalNumber = (TextView) findViewById(R.id.tv_total_number); + ll_current_number = (LinearLayout) findViewById(R.id.ll_current_number); + iv_fan_match_up = (ImageView) findViewById(R.id.iv_fan_match_up); + iv_fan_match_down = (ImageView) findViewById(R.id.iv_fan_match_down); + currentNumber.setText(0 + ""); + rotateIv = (ImageView) findViewById(R.id.iv_rotate); + longClick = (TextView) findViewById(R.id.tv_long_click); + sureBt = (Button) findViewById(R.id.bt_sure_config); + mTitleView = (TitleView) findViewById(R.id.title_fan_match); + mTitleView.setHead(R.string.match_remote); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + switch (deviceType) { + case TV_TAG: + mDeclare.setText("观察电视音量增加,点击确定"); + break; + case TVONE_TAG: + mDeclare.setText("观察机顶盒音量增加,点击确定"); + break; + case AIR_TAG: + mDeclare.setText("等待空调被打开,点击确定"); + break; + case INDEPENDENT_CODE_AC: + mDeclare.setText("观察独立空调被打开,点击确定"); + break; + case SWEEP_TAG: + mDeclare.setText("等待扫地机被打开,点击确定"); + break; + case FAN_TAG: + break; + case MOVIE_CAMERA: + mDeclare.setText("等待投影仪被打开,点击确定"); + break; + case AIR_CLEANER: + mDeclare.setText("等待净化器被打开,点击确定"); + break; + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + private void initListener() { + sureBt.setOnClickListener(this); + iv_fan_match_up.setOnClickListener(this); + iv_fan_match_down.setOnClickListener(this); + lossAuto.setOnClickListener(this); + ll_current_number.setOnClickListener(this); + + longClick.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (currentIndex == 0) { + longClick.setText("下一个"); + iv_fan_match_down.setVisibility(View.VISIBLE); + sureBt.setVisibility(View.VISIBLE); + } + if (currentIndex < totalIndex) { + currentIndex++; + currentNumber.setText(currentIndex + ""); + searchRound(currentIndex); + } else { + ToastUtil.show(FanMatchA2Activity.this, "已到最后一个"); + } + } + }); + /*longClick.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + isActionUp = false; + Log.i("ACTION_DOWN", "FanMatchA2Activity onTouch()" + (System.currentTimeMillis() - actionUpTime)); + if (System.currentTimeMillis() - actionUpTime > 250) { + lastClickTime = System.currentTimeMillis(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + if (isActionUp) { + Log.i("ACTION_DOWN", "FanMatchA2Activity onTouch()" + "不做任何操作"); + } else { + Log.i("ACTION_DOWN", "FanMatchA2Activity onTouch()" + "转起来"); + b_stop_flag = false; + rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(FanMatchA2Activity.this, R.anim.rotate360_center_anim); + rotateIv.startAnimation(rotateAnimation); +// VibratorUtil.Vibrate(FanMatchA2Activity.this, pattern, true); + + if (!b_first) { + currentIndex++; + if (currentIndex > totalIndex + 1) { + currentIndex = 0; + } + } + b_first = false; + + ThreadSearch thread = new ThreadSearch(); + thread.start(); + } + } + }, 250); + } else { + ToastUtil.show(FanMatchA2Activity.this, "请长按按钮,不要重复点击"); + } + break; + case MotionEvent.ACTION_UP: + actionUpTime = System.currentTimeMillis(); + isActionUp = false; + if (System.currentTimeMillis() - lastClickTime > 250) { + b_stop_flag = true; + rotateAnimation.cancel(); +// VibratorUtil.cancle(); + } else { + isActionUp = true; + } + break; + case MotionEvent.ACTION_CANCEL: + actionUpTime = System.currentTimeMillis(); + isActionUp = false; + if (System.currentTimeMillis() - lastClickTime > 250) { + b_stop_flag = true; + rotateAnimation.cancel(); +// VibratorUtil.cancle(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + Intent intent; + if (currentIndex > totalIndex) { + break; + } + switch (deviceType) { + case FAN_TAG: + intent = new Intent(FanMatchA2Activity.this, FanTryA2Activity.class); + intent.putExtra("allData", allData); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + case TV_TAG: + intent = new Intent(FanMatchA2Activity.this, TvTryA2Activity.class); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("brandId", getIntent().getExtras().get("brandId").toString()); + startActivity(intent); + break; + case TVONE_TAG: + intent = new Intent(FanMatchA2Activity.this, TvOneTryA2Activity.class); + intent.putExtra("allData", allData); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + if (getIntent().getExtras().get("rid") != null) { + intent.putExtra("rid", getIntent().getExtras().get("rid").toString()); + } + startActivity(intent); + break; + case AIR_TAG: + intent = new Intent(FanMatchA2Activity.this, AirTryA2Activity.class); + intent.putExtra("allData", allData); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + case SWEEP_TAG: + intent = new Intent(FanMatchA2Activity.this, SweepTryA2Activity.class); + intent.putExtra("allData", allData); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + case MOVIE_CAMERA: + intent = new Intent(FanMatchA2Activity.this, FanTryA2Activity.class); + intent.putExtra("allData", allData); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + case AIR_CLEANER: + intent = new Intent(FanMatchA2Activity.this, FanTryA2Activity.class); + intent.putExtra("allData", allData); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + } + } else { + isActionUp = true; + } + break; + } + return true; + } + });*/ + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_fan_match_up: + if (currentIndex < totalIndex) { + currentIndex++; + currentNumber.setText(currentIndex + ""); + searchRound(currentIndex); + } else { + ToastUtil.show(this, "已到最后一个"); + } + break; + case R.id.iv_fan_match_down: + if (currentIndex > 1) { + currentIndex--; + currentNumber.setText(currentIndex + ""); + searchRound(currentIndex); + } else { + ToastUtil.show(this, "已到第一个"); + } + break; + case R.id.ll_current_number: + RenameNameDialog dialog = new RenameNameDialog(FanMatchA2Activity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (positioName.isEmpty() || !positioName.matches("[0-9]+")) { + return; + } + currentIndex = Integer.parseInt(positioName); + if (currentIndex > totalIndex) { + currentIndex = 0; + ToastUtil.show(FanMatchA2Activity.this, "请输入小于" + totalIndex + "的数字"); + return; + } + if (currentIndex >= 1) { + currentNumber.setText(currentIndex + ""); + searchRound(currentIndex); + } + longClick.setText("下一个"); + iv_fan_match_down.setVisibility(View.VISIBLE); + sureBt.setVisibility(View.VISIBLE); + break; + } + } + }); + dialog.setMaxEms(12); + dialog.setHintName("输入小于" + totalIndex + "的数字"); + dialog.setContent("输入匹配项"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.bt_loss_auto: + Intent intent1 = new Intent(FanMatchA2Activity.this, FanStepOneActivity.class); + intent1.putExtra("brandId", getIntent().getExtras().get("brandId").toString()); + intent1.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent1.putExtra("fanStateTag", "0"); + intent1.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent1.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + if (null != getIntent().getExtras().get("rid")) { + intent1.putExtra("rid", getIntent().getExtras().get("rid").toString()); + } + startActivity(intent1); + finish(); + break; + case R.id.bt_sure_config: + Intent intent; + switch (deviceType) { + case TV_TAG: + intent = new Intent(FanMatchA2Activity.this, TvTryA2Activity.class); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("brandId", getIntent().getExtras().get("brandId").toString()); + startActivity(intent); + break; + case TVONE_TAG: + intent = new Intent(FanMatchA2Activity.this, TvOneTryA2Activity.class); + intent.putExtra("allData", allData); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + if (getIntent().getExtras().get("rid") != null) { + intent.putExtra("rid", getIntent().getExtras().get("rid").toString()); + } + startActivity(intent); + break; + case AIR_TAG: + case INDEPENDENT_CODE_AC: + intent = new Intent(FanMatchA2Activity.this, AirTryA2Activity.class); + intent.putExtra("allData", allData); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + case SWEEP_TAG: + intent = new Intent(FanMatchA2Activity.this, SweepTryA2Activity.class); + intent.putExtra("allData", allData); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + case FAN_TAG: + case MOVIE_CAMERA: + case AIR_CLEANER: + intent = new Intent(FanMatchA2Activity.this, FanTryA2Activity.class); + intent.putExtra("allData", allData); + intent.putExtra("currentIndex", currentIndex); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + startActivity(intent); + break; + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case MESSAGE_SEARCH_PROGRESS: + currentNumber.setText(currentIndex + ""); + searchRound(currentIndex); + break; + case MESSAGE_SEARCH_COMPLETE: + + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case GETROUNDINFO_BY_BRANDID_SUCCESS: + RomoteListA2Entity obj = (RomoteListA2Entity) msg.obj; + mRoundListEntities = obj.getObj().getRoundList(); + totalNumber.setText(mRoundListEntities.size() + ""); + totalIndex = mRoundListEntities.size(); + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + break; + case GETROUNDINFO_BY_BRANDID_TAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, String.valueOf(msg.obj)); + break; + case SEARCH_ROUND_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + SimpleEntty simpleEntty = (SimpleEntty) msg.obj; + ToastUtil.show(this, simpleEntty.getMsg().toString()); + break; + case SEARCH_ROUND_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + break; + } + } + + private void searchRound(int currentIndex) { + ShakeUtil.setShake(this); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + // map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); + map.put("code", (int) mRoundListEntities.get(currentIndex - 1).getZip() + mRoundListEntities.get(currentIndex - 1).getKeyInfrared()); + netWorkUtil.requestPostByAsynewApi(SEARCH_ROUND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("searchRound", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else if (1004 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + /*Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg);*/ + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void getRoundInfoByBrandId(String deviceType) { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceType", deviceType); + map.put("brandId", getIntent().getExtras().get("brandId").toString()); + netWorkUtil.requestGetByAsy(GETROUNDINFO_BY_BRANDID, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + allData = respone; + Log.i("getRoundInfoByBrandId", "ShareDeviceActivity onSuccess()" + respone); + RomoteListA2Entity obj = JSON.parseObject(respone, RomoteListA2Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GETROUNDINFO_BY_BRANDID_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GETROUNDINFO_BY_BRANDID_TAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GETROUNDINFO_BY_BRANDID_TAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + class ThreadSearch extends Thread { + public void run() { + for (int i = currentIndex; i <= totalIndex + 1; i++) { + if (b_stop_flag) { + break; + } + currentIndex = i; + //从下一个开始搜索 + if (currentIndex > totalIndex) { + //跳转到失败页面 + b_stop_flag = true; + rotateAnimation.cancel(); +// VibratorUtil.cancle(); + Intent intent = new Intent(FanMatchA2Activity.this, AirhandFailActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("tmp_brand", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + } else { + Message msg = mHandler.obtainMessage(MESSAGE_SEARCH_PROGRESS); + mHandler.sendMessage(msg); + } + try { + if (deviceType.equals(TV_TAG) || deviceType.equals(TVONE_TAG)) { + Thread.sleep(4000); + } else { + Thread.sleep(2000); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + Message msg = mHandler.obtainMessage(MESSAGE_SEARCH_COMPLETE); + mHandler.sendMessage(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanStepOneActivity.java b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanStepOneActivity.java new file mode 100644 index 0000000..bb950b8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanStepOneActivity.java @@ -0,0 +1,957 @@ +package com.yonsz.z1.devicea2.fana2; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.os.Message; +import android.support.annotation.RequiresApi; +import android.util.Log; +import android.view.View; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.KeyMatchEvent; +import com.yonsz.z1.database.entity.entitya2.NextkeyEntity; +import com.yonsz.z1.database.entity.entitya2.NormalEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_CLEANER; +import static com.yonsz.z1.net.Constans.AIR_KEY_MATCH_HTTP_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.BACKTV; +import static com.yonsz.z1.net.Constans.BOOTTV; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.DOWNLOAD_TV_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_TV_SUCCESS; +import static com.yonsz.z1.net.Constans.FANSPEED; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.INDEPENDENT_CODE_AC; +import static com.yonsz.z1.net.Constans.ISADDBAOSHI; +import static com.yonsz.z1.net.Constans.KEY_MATCH_FAIL; +import static com.yonsz.z1.net.Constans.KEY_MATCH_HTTP_CONTINUE; +import static com.yonsz.z1.net.Constans.KEY_MATCH_HTTP_ERROR; +import static com.yonsz.z1.net.Constans.KEY_MATCH_HTTP_FAIL; +import static com.yonsz.z1.net.Constans.KEY_MATCH_HTTP_SUCCESS; +import static com.yonsz.z1.net.Constans.KEY_MATCH_RECEIVE; +import static com.yonsz.z1.net.Constans.KEY_MATCH_SUCCESS; +import static com.yonsz.z1.net.Constans.MODE; +import static com.yonsz.z1.net.Constans.MOVIE_CAMERA; +import static com.yonsz.z1.net.Constans.OKTV; +import static com.yonsz.z1.net.Constans.OSCILLATION; +import static com.yonsz.z1.net.Constans.POWER; +import static com.yonsz.z1.net.Constans.POWEROFF; +import static com.yonsz.z1.net.Constans.POWERTV; +import static com.yonsz.z1.net.Constans.RECALLTV; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_FAIL; +import static com.yonsz.z1.net.Constans.SENDKEY_INFRARED_2MAC_FAIL; +import static com.yonsz.z1.net.Constans.SENDKEY_INFRARED_2MAC_SUCCESS; +import static com.yonsz.z1.net.Constans.SIGNALTV; +import static com.yonsz.z1.net.Constans.SWEEP_AUTO; +import static com.yonsz.z1.net.Constans.SWEEP_CHARGE; +import static com.yonsz.z1.net.Constans.SWEEP_EDGEWISE; +import static com.yonsz.z1.net.Constans.SWEEP_FIXEDPOINT; +import static com.yonsz.z1.net.Constans.SWEEP_PAUSE; +import static com.yonsz.z1.net.Constans.SWEEP_POWER; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TIMER; +import static com.yonsz.z1.net.Constans.SWEEP_Z; +import static com.yonsz.z1.net.Constans.TIMER; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.Constans.VOLADDTV; +import static com.yonsz.z1.net.Constans.VOLREDTV; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.NetWorkUrl.AIR_KEY_MATCH; +import static com.yonsz.z1.net.NetWorkUrl.KEY_MATCH; +import static com.yonsz.z1.net.NetWorkUrl.KEY_MATCH_HTTP; +import static com.yonsz.z1.net.NetWorkUrl.YKY_DOWNLOAD; + +/** + * Created by Administrator on 2018/1/17. + */ + +public class FanStepOneActivity extends BaseActivity { + private TitleView mTitleView; + private TextView lossAuto; + private String ziId; + private NettyEntity mKeyMatchEvent; + private String brandId; + private LoadingDialog mLoadingDialog; + private NextkeyEntity nextkeyEntity; + private String nextKey = "power"; + private TextView tv_learn_guide; + private LinearLayout ll_anim_top; + private TextView mDeclare; + private String deviceType; + private AlphaAnimation alphaAnimation; + private boolean isJumpTo = false; + private StateButton mStateButton; + private int sec = 30; + private boolean isShowDioalog = false; + private LinearLayout mLinearLayoutBg; + private int keyMatchTime = 0; + private String redId; + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fan_step_one); + NettyHandlerUtil.getInstance(); + initView(); + initListener(); + keyMatch(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + public void onEventMainThread(KeyMatchEvent event) { + Log.i("keyMatch", "FanStepOneActivity onEventMainThread()" + event.getMsg()); + mKeyMatchEvent = event.getMsg(); + Message message = new Message(); + message.what = KEY_MATCH_RECEIVE; + mHandler.sendMessage(message); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + private void initView() { + mLinearLayoutBg = (LinearLayout) findViewById(R.id.ll_anim_top); + deviceType = getIntent().getExtras().get("deviceType").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + brandId = getIntent().getExtras().get("brandId").toString(); + mStateButton = (StateButton) findViewById(R.id.bt_sec); + mDeclare = (TextView) findViewById(R.id.tv_guide_device); + ll_anim_top = (LinearLayout) findViewById(R.id.ll_anim_top); + tv_learn_guide = (TextView) findViewById(R.id.tv_learn_guide); + lossAuto = (TextView) findViewById(R.id.bt_loss_auto); + mTitleView = (TitleView) findViewById(R.id.title_add_fan_auto); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (deviceType) { + case TV_TAG: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_tva2)); + mTitleView.setHead("电视一键匹配"); + mDeclare.setText("指示灯变为红色后,将电视遥控器对"); + break; + case TVONE_TAG: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_tva2)); + mTitleView.setHead("机顶盒一键匹配"); + mDeclare.setText("指示灯变为红色后,将机顶盒遥控器对"); + break; + case AIR_TAG: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_kta2)); + mTitleView.setHead("空调一键匹配"); + mDeclare.setText("指示灯变为红色后,将空调遥控器对"); + break; + case INDEPENDENT_CODE_AC: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_kta2)); + mTitleView.setHead("独立空调一键匹配"); + mDeclare.setText("指示灯变为红色后,将独立空调遥控器对"); + break; + case SWEEP_TAG: + mLinearLayoutBg.setBackground(getResources().getDrawable(R.drawable.pic_instruction_swapa2)); + mTitleView.setHead("扫地机一键匹配"); + mDeclare.setText("指示灯变为红色后,将扫地机遥控器对"); + break; + case FAN_TAG: + mTitleView.setHead("风扇一键匹配"); + break; + case MOVIE_CAMERA: + mTitleView.setHead("投影仪一键匹配"); + mDeclare.setText("指示灯变为红色后,将投影仪遥控器对"); + break; + case AIR_CLEANER: + mTitleView.setHead("净化器一键匹配"); + mDeclare.setText("指示灯变为红色后,将净化器遥控器对"); + break; + } + + if (SharedpreferencesUtil.get(ISADDBAOSHI)) { + mLinearLayoutBg.setBackgroundResource(R.drawable.pic_instruction_d1); + } + if (AddressNameUtil.getAiModel(ziId).contains("B3")) { + mLinearLayoutBg.setBackgroundResource(R.drawable.pic_instruction_b3); + } + if (AddressNameUtil.getAiModel(ziId).contains("B1")) { + mLinearLayoutBg.setBackgroundResource(R.drawable.pic_instruction_tv); + } + } + + private void initListener() { + lossAuto.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_loss_auto: + if (lossAuto.getText().toString().equals("跳过")) { + isJumpTo = true; + subsetAdd(ziId, deviceType, getIntent().getExtras().get("brandName").toString()); + } else { + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case KEY_MATCH_HTTP_ERROR: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + intent = new Intent(FanStepOneActivity.this, FanAutoFailActivity.class); + intent.putExtra("brandId", getIntent().getExtras().get("brandId").toString()); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", deviceType); + if (getIntent().getExtras().get("rid") != null) { + intent.putExtra("rid", getIntent().getExtras().get("rid").toString()); + } + startActivity(intent); + finish(); + /* ToastUtil.show(this, "请确认按键是否正确"); + keyMatch();*/ + break; + case KEY_MATCH_RECEIVE: + initLoadDialog(); + keyMatchHttp(); + break; + case KEY_MATCH_HTTP_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + nextkeyEntity = (NextkeyEntity) msg.obj; + subsetAdd(ziId, deviceType, getIntent().getExtras().get("brandName").toString()); + /*switch (deviceType) { + case FAN_TAG: + addChildDevice(ziId, deviceType, getIntent().getExtras().get("brandName").toString(), 0); + break; + case TV_TAG: + subsetAdd(ziId, TV_TAG, getIntent().getExtras().get("brandName").toString()); + break; + case TVONE_TAG: + // sendKeyInfrared2Mac(); + // addChildDevice(ziId, TV_TAG, getIntent().getExtras().get("brandName").toString(), 3); + subsetAdd(ziId, TVONE_TAG, getIntent().getExtras().get("brandName").toString()); + break; + case AIR_TAG: + + break; + case SWEEP_TAG: + addChildDevice(ziId, deviceType, getIntent().getExtras().get("brandName").toString(), 0); + break; + }*/ + break; + case KEY_MATCH_HTTP_CONTINUE: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + lossAuto.setVisibility(View.VISIBLE); + lossAuto.setText("跳过"); + nextkeyEntity = (NextkeyEntity) msg.obj; + nextKey = nextkeyEntity.getObj().getNext_cmp_key(); + switch (deviceType) { + case FAN_TAG: + switch (nextKey) { + case OSCILLATION: + tv_learn_guide.setText(R.string.shake_head); + break; + case FANSPEED: + tv_learn_guide.setText(R.string.wind_speed); + break; + case TIMER: + tv_learn_guide.setText(R.string.timing); + break; + case MODE: + tv_learn_guide.setText("模式"); + break; + case POWER: + tv_learn_guide.setText("开机"); + break; + case POWEROFF: + tv_learn_guide.setText("关机"); + break; + + } + break; + case TV_TAG: + case TVONE_TAG: + switch (nextKey) { + case VOLADDTV: + tv_learn_guide.setText("音量+"); + break; + case VOLREDTV: + tv_learn_guide.setText("音量-"); + break; + case SIGNALTV: + tv_learn_guide.setText("输入源"); + break; + case POWERTV: + tv_learn_guide.setText(R.string.Switch); + break; + case OKTV: + tv_learn_guide.setText(R.string.sure); + break; + case BOOTTV: + tv_learn_guide.setText("主页"); + break; + case BACKTV: + tv_learn_guide.setText("返回"); + break; + case RECALLTV: + tv_learn_guide.setText("回看"); + break; + } + break; + case AIR_TAG: + + break; + case SWEEP_TAG: + switch (nextKey) { + case SWEEP_POWER: + tv_learn_guide.setText("电源"); + break; + case SWEEP_AUTO: + tv_learn_guide.setText("自动"); + break; + case SWEEP_EDGEWISE: + tv_learn_guide.setText("沿边"); + break; + case SWEEP_CHARGE: + tv_learn_guide.setText("返回充电"); + break; + case SWEEP_FIXEDPOINT: + tv_learn_guide.setText("定点"); + break; + case SWEEP_TIMER: + tv_learn_guide.setText(R.string.time); + break; + case SWEEP_Z: + tv_learn_guide.setText("Z字型"); + break; + case SWEEP_PAUSE: + tv_learn_guide.setText("暂停"); + break; + } + break; + + } + sec = 30; + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + alphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(FanStepOneActivity.this, R.anim.alpha_anim); + ll_anim_top.startAnimation(alphaAnimation); + keyMatch(); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + BaseVersion5Entity entity1 = (BaseVersion5Entity) msg.obj; + redId = entity1.getData().getId().toString(); + downloadInfraredByRid(); + /*if (isJumpTo) { + switch (deviceType) { + case FAN_TAG: + downloadInfraredByRid(); + break; + case TV_TAG: + downloadOnlyTv(); + break; + case TVONE_TAG: + downloadOnlyBox(); + break; + case AIR_TAG: + break; + case SWEEP_TAG: + downloadInfraredByRid(); + break; + } + } else { + switch (deviceType) { + case FAN_TAG: + sendKeyInfrared2Mac(); + break; + case TV_TAG: + downloadOnlyTv(); + break; + case TVONE_TAG: + downloadOnlyBox(); + break; + case AIR_TAG: + + break; + case SWEEP_TAG: + sendKeyInfrared2Mac(); + break; + } + }*/ + break; + /*case ADD_CHILDDEVICE_SUCCESS: + if (isJumpTo) { + switch (deviceType) { + case FAN_TAG: + downloadInfraredByRid(); + break; + case TV_TAG: + downloadOnlyTv(); + break; + case TVONE_TAG: + downloadOnlyBox(); + // downloadTv(); + break; + case AIR_TAG: + + break; + case SWEEP_TAG: + downloadInfraredByRid(); + break; + } + } else { + switch (deviceType) { + case FAN_TAG: + sendKeyInfrared2Mac(); + break; + case TV_TAG: + downloadOnlyTv(); + break; + case TVONE_TAG: + downloadOnlyBox(); + break; + case AIR_TAG: + break; + case SWEEP_TAG: + sendKeyInfrared2Mac(); + break; + } + } + break;*/ + /* case SENDKEY_INFRARED_2MAC_SUCCESS: + switch (deviceType) { + case FAN_TAG: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanStepOneActivity.this, DeviceControlActivity.class); + } + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("fanName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + break; + case TV_TAG: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanStepOneActivity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("tvName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + break; + case TVONE_TAG: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanStepOneActivity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("tvName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break; + case AIR_TAG: + + break; + case SWEEP_TAG: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanStepOneActivity.this, DeviceControlActivity.class); + } + intent.putExtra("sweepStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("sweepName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break; + } + finish(); + break;*/ + case DOWNLOAD_INFRARED_BYRID_SUCCESS: + switch (deviceType) { + case FAN_TAG: + case MOVIE_CAMERA: + case AIR_CLEANER: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanStepOneActivity.this, DeviceControlActivity.class); + } + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("fanName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + break; + case TV_TAG: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanStepOneActivity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("tvName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + break; + case TVONE_TAG: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanStepOneActivity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("tvName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break; + case AIR_TAG: + + break; + case SWEEP_TAG: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanStepOneActivity.this, DeviceControlActivity.class); + } + intent.putExtra("sweepStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("sweepName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break; + } + finish(); + break; + case UPDATE_SEC: + if (isShowDioalog) { + + } else { + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + } + } + break; + case AIR_KEY_MATCH_HTTP_SUCCESS: + SimpleEntty airAllEntity = (SimpleEntty) msg.obj; + intent = new Intent(FanStepOneActivity.this, AirChoseListActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", airAllEntity); + intent.putExtras(bundle); + intent.putExtra("brandName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + startActivity(intent); + finish(); + break; + /*case DOWNLOAD_TV_SUCCESS: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanStepOneActivity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("tvName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break;*/ + case KEY_MATCH_HTTP_FAIL: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(FanStepOneActivity.this, (String) msg.obj); + break; + } + } + + private void downloadOnlyTv() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("rid", nextkeyEntity.getObj().getRid()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadOnlyTv", "ShareDeviceActivity onSuccess()" + respone); + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + } + }); + } + + private void downloadOnlyBox() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("rid", nextkeyEntity.getObj().getRid()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadOnlyBox", "ShareDeviceActivity onSuccess()" + respone); + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + } + }); + } + + /*//只添加电视后的下载 + private void downloadTv() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + if (deviceType.equals(TVONE_TAG)) { + map.put("boxRid", nextkeyEntity.getObj().getRid()); + map.put("rid", getIntent().getExtras().get("rid").toString()); + } else { + map.put("rid", nextkeyEntity.getObj().getRid()); + } + netWorkUtil.requestPostByAsynew(DOWNLOAD_TV, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadTv", "ShareDeviceActivity onSuccess()" + respone); + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + } + }); + }*/ + + private void keyMatchHttp() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + map.put("bid", brandId); + if (deviceType.equals(AIR_TAG) || deviceType.equals(INDEPENDENT_CODE_AC)) { + map.put("cmd", "on"); + } else { + map.put("cmd", nextKey); + } + map.put("infrared", mKeyMatchEvent.getInfrared()); + String keyMatch; + if (deviceType.equals(AIR_TAG) || deviceType.equals(TV_TAG) || deviceType.equals(TVONE_TAG) || deviceType.equals(INDEPENDENT_CODE_AC)) { + keyMatch = AIR_KEY_MATCH; + } else { + keyMatch = KEY_MATCH_HTTP; + } + netWorkUtil.requestPostByAsynewApi(keyMatch, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("keyMatchHttp", "ShareDeviceActivity onSuccess()" + respone); + if (deviceType.equals(AIR_TAG) || deviceType.equals(INDEPENDENT_CODE_AC)) { + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(AIR_KEY_MATCH_HTTP_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (7004 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(KEY_MATCH_HTTP_ERROR); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(KEY_MATCH_HTTP_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } else { + NextkeyEntity obj = JSON.parseObject(respone, NextkeyEntity.class); + if (7003 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(KEY_MATCH_HTTP_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (7002 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(KEY_MATCH_HTTP_CONTINUE); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (7004 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(KEY_MATCH_HTTP_ERROR); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(KEY_MATCH_HTTP_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(KEY_MATCH_HTTP_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void keyMatch() { + keyMatchTime++; + if (DensityUtil.isNetworkConnected(this)) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); +// map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); +// map.put("sendMsg", 1 + ""); + netWorkUtil.requestPostByAsynewApi(KEY_MATCH, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("keyMatch", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(KEY_MATCH_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + if (keyMatchTime < 10) { + keyMatch(); + } + } else if (1004 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(KEY_MATCH_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(KEY_MATCH_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } else { + ToastUtil.show(this, R.string.net_error); + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void subsetAdd(String ziId, String deviceType, String deviceBrand) { + BaseVersion5Entity.DataBean body = new BaseVersion5Entity.DataBean(); + body.setRid(nextkeyEntity.getObj().getRid()); + body.setDeviceBrand(deviceBrand); + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", "0"); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + map.put("addressId", localAddAddressId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, JSONObject.toJSONString(body), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void downloadInfraredByRid() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("deviceType", deviceType); + map.put("rid", nextkeyEntity.getObj().getRid()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadInfraredByRid", "ShareDeviceActivity onSuccess()" + respone); + /*Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + mHandler.sendMessage(msg);*/ + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanTryA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanTryA2Activity.java new file mode 100644 index 0000000..a1f7225 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/fana2/FanTryA2Activity.java @@ -0,0 +1,404 @@ +package com.yonsz.z1.devicea2.fana2; + +import android.app.Service; +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.NormalEntity; +import com.yonsz.z1.database.entity.entitya2.RomoteListA2Entity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.AIR_CLEANER; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.MOVIE_CAMERA; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_FAIL; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDKEY_INFRARED_2MAC_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.NetWorkUrl.SEARCH_ROUND; +import static com.yonsz.z1.net.NetWorkUrl.YKY_DOWNLOAD; + +/** + * Created by Administrator on 2017/11/10. + */ + +public class FanTryA2Activity extends BaseActivity { + private TitleView mTitleView; + private Button sureBt; + private String allData; + private List mRoundListEntities = new ArrayList<>(); + private TextView currentNumber, totalNumber; + private int currentIndex, totalIndex; + private TextView tryBt, beforeOne, nextOne; + private String ziId; + private String deviceType; + private String redId; + private LoadingDialog mLoadingDialog; + private MediaPlayer mediaPlayer01; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fan_try); + deviceType = getIntent().getExtras().get("deviceType").toString(); + initView(); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_53); + mediaPlayer01.start(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + allData = (String) getIntent().getExtras().get("allData"); + if (allData != null) { + RomoteListA2Entity obj = JSON.parseObject(allData, RomoteListA2Entity.class); + mRoundListEntities = obj.getObj().getRoundList(); + } + currentNumber = (TextView) findViewById(R.id.tv_current_number); + totalNumber = (TextView) findViewById(R.id.tv_total_number); + sureBt = (Button) findViewById(R.id.bt_sure_config); + tryBt = (TextView) findViewById(R.id.tv_open_light); + beforeOne = (TextView) findViewById(R.id.tv_no_use); + nextOne = (TextView) findViewById(R.id.tv_next); + mTitleView = (TitleView) findViewById(R.id.title_fan_try); + mTitleView.setHead(R.string.match_remote); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + sureBt.setOnClickListener(this); + tryBt.setOnClickListener(this); + beforeOne.setOnClickListener(this); + nextOne.setOnClickListener(this); + totalNumber.setText(mRoundListEntities.size() + ""); + totalIndex = mRoundListEntities.size(); + currentIndex = (int) getIntent().getExtras().get("currentIndex"); + currentNumber.setText(currentIndex + ""); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + /** + * 1.添加风扇 + * 2. + */ + subsetAdd(ziId, deviceType, getIntent().getExtras().get("brandName").toString()); + /*Intent intent = new Intent(this, FanA2Activity.class); + startActivity(intent);*/ + break; + case R.id.tv_open_light: + setShake(); + searchRound(currentIndex - 1); + break; + case R.id.tv_no_use: + if (currentIndex > 1) { + currentIndex -= 1; + currentNumber.setText(currentIndex + ""); + } + break; + case R.id.tv_next: + if (currentIndex < totalIndex) { + currentIndex += 1; + currentNumber.setText(currentIndex + ""); + } + break; + } + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void searchRound(int currentIndex) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + // map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); + map.put("code", (int) mRoundListEntities.get(currentIndex).getZip() + mRoundListEntities.get(currentIndex).getKeyInfrared()); + netWorkUtil.requestPostByAsynewApi(SEARCH_ROUND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("searchRound", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else if (1004 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case ADD_CHILDDEVICE_SUCCESS: + BaseVersion5Entity entity1 = (BaseVersion5Entity) msg.obj; + redId = entity1.getData().getId(); + downloadInfraredByRid(); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DOWNLOAD_INFRARED_BYRID_SUCCESS: + NettyHandlerUtil.getInstance(); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(FanTryA2Activity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanTryA2Activity.this, DeviceControlActivity.class); + } + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("fanName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("id", redId); + if (deviceType.equals(AIR_CLEANER)) { + intent.putExtra("acStateTag", "1"); + } + if (deviceType.equals(MOVIE_CAMERA)) { + intent.putExtra("mcStateTag", "1"); + } + startActivity(intent); + finish(); + break; + case DOWNLOAD_INFRARED_BYRID_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + /*case SENDKEY_INFRARED_2MAC_SUCCESS: + NettyHandlerUtil.getInstance(); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(FanTryA2Activity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(FanTryA2Activity.this, DeviceControlActivity.class); + } + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("fanName", getIntent().getExtras().get("brandName").toString()); + intent.putExtra("id", redId); + if (deviceType.equals(AIR_CLEANER)) { + intent.putExtra("acStateTag", "1"); + } + if (deviceType.equals(MOVIE_CAMERA)) { + intent.putExtra("mcStateTag", "1"); + } + startActivity(intent); + finish(); + break;*/ + case SENDKEY_INFRARED_2MAC_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case SEARCH_ROUND_FAIL: + SimpleEntty simpleEntty = (SimpleEntty) msg.obj; + ToastUtil.show(this, simpleEntty.getMsg().toString()); + break; + case SEARCH_ROUND_SUCCESS: + + break; + } + } + + private void downloadInfraredByRid() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("deviceType", deviceType); + map.put("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadInfraredByRid", "ShareDeviceActivity onSuccess()" + respone); + /*Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + mHandler.sendMessage(msg);*/ + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void subsetAdd(String ziId, String deviceType, String deviceBrand) { + BaseVersion5Entity.DataBean body = new BaseVersion5Entity.DataBean(); + body.setRid(mRoundListEntities.get(currentIndex - 1).getRid()); + body.setDeviceBrand(deviceBrand); + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (deviceType.equals(FAN_TAG)) { + map.put("deviceModel", "0"); + } else { + map.put("deviceModel", "0"); + } + map.put("deviceType", deviceType); + map.put("ziId", ziId); + map.put("addressId", localAddAddressId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, JSONObject.toJSONString(body), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + /*initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceId", deviceType); + map.put("deviceType", deviceType); + map.put("deviceBrand", deviceBrand); + map.put("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + util.requestPostByAsynew(NetWorkUrl.ADD_CHILD_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + AddChildDeviceEntity entity = JSON.parseObject(respone, AddChildDeviceEntity.class); + Log.i("addChildDevice", "onSuccess: " + respone); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/CaptureActivityHandler.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/CaptureActivityHandler.java new file mode 100644 index 0000000..b1561f9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/CaptureActivityHandler.java @@ -0,0 +1,115 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.Result; +import com.uuzuche.lib_zxing.camera.CameraManager; +import com.uuzuche.lib_zxing.view.ViewfinderResultPointCallback; +import com.uuzuche.lib_zxing.view.ViewfinderView; +import com.yonsz.z1.R; + +import java.util.Vector; + +/** + * Created by Administrator on 2019/3/11. + */ + +public class CaptureActivityHandler extends Handler { + + private static final String TAG = "CaptureActivityHandler"; + + private final CaptureFragment fragment; + private final DecodeThread decodeThread; + private State state; + + public CaptureActivityHandler(CaptureFragment fragment, Vector decodeFormats, + String characterSet, ViewfinderView viewfinderView) { + this.fragment = fragment; + decodeThread = new DecodeThread(fragment, decodeFormats, characterSet, + new ViewfinderResultPointCallback(viewfinderView)); + decodeThread.start(); + state = State.SUCCESS; + // Start ourselves capturing previews and decoding. + CameraManager.get().startPreview(); + restartPreviewAndDecode(); + } + + @Override + public void handleMessage(Message message) { + if (message.what == R.id.auto_focus) { + //Log.d(TAG, "Got auto-focus message"); + // When one auto focus pass finishes, start another. This is the closest thing to + // continuous AF. It does seem to hunt a bit, but I'm not sure what else to do. + if (state == State.PREVIEW) { + CameraManager.get().requestAutoFocus(this, R.id.auto_focus); + } + } else if (message.what == R.id.restart_preview) { + Log.d(TAG, "Got restart preview message"); + restartPreviewAndDecode(); + } else if (message.what == R.id.decode_succeeded) { + Log.d(TAG, "Got decode succeeded message"); + state = State.SUCCESS; + Bundle bundle = message.getData(); + + /***********************************************************************/ + Bitmap barcode = bundle == null ? null : + (Bitmap) bundle.getParcelable(DecodeThread.BARCODE_BITMAP);//���ñ����߳� + + fragment.handleDecode((Result) message.obj, barcode);//���ؽ�� + /***********************************************************************/ + } else if (message.what == R.id.decode_failed) { + // We're decoding as fast as possible, so when one decode fails, start another. + state = State.PREVIEW; + CameraManager.get().requestPreviewFrame(decodeThread.getHandler(), R.id.decode); + } else if (message.what == R.id.return_scan_result) { + Log.d(TAG, "Got return scan result message"); + fragment.getActivity().setResult(Activity.RESULT_OK, (Intent) message.obj); + fragment.getActivity().finish(); + } else if (message.what == R.id.launch_product_query) { + Log.d(TAG, "Got product query message"); + String url = (String) message.obj; + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); + fragment.getActivity().startActivity(intent); + } + } + + public void quitSynchronously() { + state = State.DONE; + CameraManager.get().stopPreview(); + Message quit = Message.obtain(decodeThread.getHandler(), R.id.quit); + quit.sendToTarget(); + try { + decodeThread.join(); + } catch (InterruptedException e) { + // continue + } + + // Be absolutely sure we don't send any queued up messages + removeMessages(R.id.decode_succeeded); + removeMessages(R.id.decode_failed); + } + + public void restartPreviewAndDecode() { + if (state == State.SUCCESS) { + state = State.PREVIEW; + CameraManager.get().requestPreviewFrame(decodeThread.getHandler(), R.id.decode); + CameraManager.get().requestAutoFocus(this, R.id.auto_focus); + fragment.drawViewfinder(); + } + } + + private enum State { + PREVIEW, + SUCCESS, + DONE + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/CaptureFragment.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/CaptureFragment.java new file mode 100644 index 0000000..bf69cb0 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/CaptureFragment.java @@ -0,0 +1,276 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.content.res.AssetFileDescriptor; +import android.graphics.Bitmap; +import android.hardware.Camera; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Handler; +import android.os.Vibrator; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.View; +import android.view.ViewGroup; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.Result; +import com.uuzuche.lib_zxing.camera.CameraManager; +import com.uuzuche.lib_zxing.view.ViewfinderView; +import com.yonsz.z1.R; + +import java.io.IOException; +import java.util.Vector; + +/** + * Created by Administrator on 2019/3/11. + */ + +public class CaptureFragment extends Fragment implements SurfaceHolder.Callback { + + private CaptureActivityHandler handler; + private ViewfinderView viewfinderView; + private boolean hasSurface; + private Vector decodeFormats; + private String characterSet; + private InactivityTimer inactivityTimer; + private MediaPlayer mediaPlayer; + private boolean playBeep; + private static final float BEEP_VOLUME = 0.10f; + private boolean vibrate; + private SurfaceView surfaceView; + private SurfaceHolder surfaceHolder; + private CodeUtils.AnalyzeCallback analyzeCallback; + private Camera camera; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + + CameraManager.init(getActivity().getApplication()); + + hasSurface = false; + inactivityTimer = new InactivityTimer(this.getActivity()); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + Bundle bundle = getArguments(); + View view = null; + if (bundle != null) { + int layoutId = bundle.getInt(CodeUtils.LAYOUT_ID); + if (layoutId != -1) { + view = inflater.inflate(layoutId, null); + } + } + + if (view == null) { + view = inflater.inflate(R.layout.fragment_capture, null); + } + + viewfinderView = (ViewfinderView) view.findViewById(R.id.viewfinder_view); + surfaceView = (SurfaceView) view.findViewById(R.id.preview_view); + surfaceHolder = surfaceView.getHolder(); + + return view; + } + + @Override + public void onResume() { + super.onResume(); + if (hasSurface) { + initCamera(surfaceHolder); + } else { + surfaceHolder.addCallback(this); + surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); + } + decodeFormats = null; + characterSet = null; + + playBeep = true; + AudioManager audioService = (AudioManager) getActivity().getSystemService(getActivity().AUDIO_SERVICE); + if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) { + playBeep = false; + } + initBeepSound(); + vibrate = true; + } + + @Override + public void onPause() { + super.onPause(); + if (handler != null) { + handler.quitSynchronously(); + handler = null; + } + CameraManager.get().closeDriver(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + inactivityTimer.shutdown(); + } + + + /** + * Handler scan result + * + * @param result + * @param barcode + */ + public void handleDecode(Result result, Bitmap barcode) { + inactivityTimer.onActivity(); + playBeepSoundAndVibrate(); + + if (result == null || TextUtils.isEmpty(result.getText())) { + if (analyzeCallback != null) { + analyzeCallback.onAnalyzeFailed(); + } + } else { + if (analyzeCallback != null) { + analyzeCallback.onAnalyzeSuccess(barcode, result.getText()); + } + } + } + + private void initCamera(SurfaceHolder surfaceHolder) { + try { + CameraManager.get().openDriver(surfaceHolder); + camera = CameraManager.get().getCamera(); + } catch (Exception e) { + if (callBack != null) { + callBack.callBack(e); + } + return; + } + if (callBack != null) { + callBack.callBack(null); + } + if (handler == null) { + handler = new CaptureActivityHandler(this, decodeFormats, characterSet, viewfinderView); + } + } + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int width, + int height) { + + } + + @Override + public void surfaceCreated(SurfaceHolder holder) { + if (!hasSurface) { + hasSurface = true; + initCamera(holder); + } + + } + + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + hasSurface = false; + if (camera != null) { + if (camera != null && CameraManager.get().isPreviewing()) { + if (!CameraManager.get().isUseOneShotPreviewCallback()) { + camera.setPreviewCallback(null); + } + camera.stopPreview(); + CameraManager.get().getPreviewCallback().setHandler(null, 0); + CameraManager.get().getAutoFocusCallback().setHandler(null, 0); + CameraManager.get().setPreviewing(false); + } + } + } + + public Handler getHandler() { + return handler; + } + + public void drawViewfinder() { + viewfinderView.drawViewfinder(); + + } + + private void initBeepSound() { + if (playBeep && mediaPlayer == null) { + // The volume on STREAM_SYSTEM is not adjustable, and users found it + // too loud, + // so we now play on the music stream. + getActivity().setVolumeControlStream(AudioManager.STREAM_MUSIC); + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.setOnCompletionListener(beepListener); + + AssetFileDescriptor file = getResources().openRawResourceFd( + R.raw.beep); + try { + mediaPlayer.setDataSource(file.getFileDescriptor(), + file.getStartOffset(), file.getLength()); + file.close(); + mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME); + mediaPlayer.prepare(); + } catch (IOException e) { + mediaPlayer = null; + } + } + } + + private static final long VIBRATE_DURATION = 200L; + + private void playBeepSoundAndVibrate() { + if (playBeep && mediaPlayer != null) { + mediaPlayer.start(); + } + if (vibrate) { + Vibrator vibrator = (Vibrator) getActivity().getSystemService(getActivity().VIBRATOR_SERVICE); + vibrator.vibrate(VIBRATE_DURATION); + } + } + + /** + * When the beep has finished playing, rewind to queue up another one. + */ + private final MediaPlayer.OnCompletionListener beepListener = new MediaPlayer.OnCompletionListener() { + public void onCompletion(MediaPlayer mediaPlayer) { + mediaPlayer.seekTo(0); + } + }; + + public CodeUtils.AnalyzeCallback getAnalyzeCallback() { + return analyzeCallback; + } + + public void setAnalyzeCallback(CodeUtils.AnalyzeCallback analyzeCallback) { + this.analyzeCallback = analyzeCallback; + } + + @Nullable + CaptureFragment.CameraInitCallBack callBack; + + /** + * Set callback for Camera check whether Camera init success or not. + */ + public void setCameraInitCallBack(CaptureFragment.CameraInitCallBack callBack) { + this.callBack = callBack; + } + + interface CameraInitCallBack { + /** + * Callback for Camera init result. + * @param e If is's null,means success.otherwise Camera init failed with the Exception. + */ + void callBack(Exception e); + } + + public void restartPreviewAndDecode(){ + handler.restartPreviewAndDecode(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/CodeUtils.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/CodeUtils.java new file mode 100644 index 0000000..bf57e7f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/CodeUtils.java @@ -0,0 +1,219 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.hardware.Camera; +import android.os.Bundle; +import android.text.TextUtils; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.BinaryBitmap; +import com.google.zxing.DecodeHintType; +import com.google.zxing.EncodeHintType; +import com.google.zxing.MultiFormatReader; +import com.google.zxing.Result; +import com.google.zxing.WriterException; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.common.HybridBinarizer; +import com.google.zxing.qrcode.QRCodeWriter; +import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; +import com.uuzuche.lib_zxing.camera.BitmapLuminanceSource; +import com.uuzuche.lib_zxing.camera.CameraManager; +import com.uuzuche.lib_zxing.decoding.DecodeFormatManager; + +import java.util.Hashtable; +import java.util.Vector; + +/** + * Created by Administrator on 2019/3/11. + */ + +public class CodeUtils { + public static final String RESULT_TYPE = "result_type"; + public static final String RESULT_STRING = "result_string"; + public static final int RESULT_SUCCESS = 1; + public static final int RESULT_FAILED = 2; + + public static final String LAYOUT_ID = "layout_id"; + + + + /** + * 解析二维码图片工具类 + * @param analyzeCallback + */ + public static void analyzeBitmap(String path, com.uuzuche.lib_zxing.activity.CodeUtils.AnalyzeCallback analyzeCallback) { + + /** + * 首先判断图片的大小,若图片过大,则执行图片的裁剪操作,防止OOM + */ + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; // 先获取原大小 + Bitmap mBitmap = BitmapFactory.decodeFile(path, options); + options.inJustDecodeBounds = false; // 获取新的大小 + + int sampleSize = (int) (options.outHeight / (float) 400); + + if (sampleSize <= 0) + sampleSize = 1; + options.inSampleSize = sampleSize; + mBitmap = BitmapFactory.decodeFile(path, options); + + MultiFormatReader multiFormatReader = new MultiFormatReader(); + + // 解码的参数 + Hashtable hints = new Hashtable(2); + // 可以解析的编码类型 + Vector decodeFormats = new Vector(); + if (decodeFormats == null || decodeFormats.isEmpty()) { + decodeFormats = new Vector(); + + // 这里设置可扫描的类型,我这里选择了都支持 + decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS); + decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS); + decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS); + } + hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats); + // 设置继续的字符编码格式为UTF8 + // hints.put(DecodeHintType.CHARACTER_SET, "UTF8"); + // 设置解析配置参数 + multiFormatReader.setHints(hints); + + // 开始对图像资源解码 + Result rawResult = null; + try { + rawResult = multiFormatReader.decodeWithState(new BinaryBitmap(new HybridBinarizer(new BitmapLuminanceSource(mBitmap)))); + } catch (Exception e) { + e.printStackTrace(); + } + + if (rawResult != null) { + if (analyzeCallback != null) { + analyzeCallback.onAnalyzeSuccess(mBitmap, rawResult.getText()); + } + } else { + if (analyzeCallback != null) { + analyzeCallback.onAnalyzeFailed(); + } + } + } + + /** + * 生成二维码图片 + * @param text + * @param w + * @param h + * @param logo + * @return + */ + public static Bitmap createImage(String text,int w,int h,Bitmap logo) { + if (TextUtils.isEmpty(text)) { + return null; + } + try { + Bitmap scaleLogo = getScaleLogo(logo,w,h); + + int offsetX = w / 2; + int offsetY = h / 2; + + int scaleWidth = 0; + int scaleHeight = 0; + if (scaleLogo != null) { + scaleWidth = scaleLogo.getWidth(); + scaleHeight = scaleLogo.getHeight(); + offsetX = (w - scaleWidth) / 2; + offsetY = (h - scaleHeight) / 2; + } + Hashtable hints = new Hashtable(); + hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); + //容错级别 + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); + //设置空白边距的宽度 + hints.put(EncodeHintType.MARGIN, 0); + BitMatrix bitMatrix = new QRCodeWriter().encode(text, BarcodeFormat.QR_CODE, w, h, hints); + int[] pixels = new int[w * h]; + for (int y = 0; y < h; y++) { + for (int x = 0; x < w; x++) { + if(x >= offsetX && x < offsetX + scaleWidth && y>= offsetY && y < offsetY + scaleHeight){ + int pixel = scaleLogo.getPixel(x-offsetX,y-offsetY); + if(pixel == 0){ + if(bitMatrix.get(x, y)){ + pixel = 0xff000000; + }else{ + pixel = 0xffffffff; + } + } + pixels[y * w + x] = pixel; + }else{ + if (bitMatrix.get(x, y)) { + pixels[y * w + x] = 0xff000000; + } else { + pixels[y * w + x] = 0xffffffff; + } + } + } + } + Bitmap bitmap = Bitmap.createBitmap(w, h, + Bitmap.Config.ARGB_8888); + bitmap.setPixels(pixels, 0, w, 0, 0, w, h); + return bitmap; + } catch (WriterException e) { + e.printStackTrace(); + } + return null; + } + + private static Bitmap getScaleLogo(Bitmap logo,int w,int h){ + if(logo == null)return null; + Matrix matrix = new Matrix(); + float scaleFactor = Math.min(w * 1.0f / 5 / logo.getWidth(), h * 1.0f / 5 /logo.getHeight()); + matrix.postScale(scaleFactor,scaleFactor); + Bitmap result = Bitmap.createBitmap(logo, 0, 0, logo.getWidth(), logo.getHeight(), matrix, true); + return result; + } + + /** + * 解析二维码结果 + */ + public interface AnalyzeCallback{ + + public void onAnalyzeSuccess(Bitmap mBitmap, String result); + + public void onAnalyzeFailed(); + } + + + /** + * 为CaptureFragment设置layout参数 + * @param captureFragment + * @param layoutId + */ + public static void setFragmentArgs(CaptureFragment captureFragment, int layoutId) { + if (captureFragment == null || layoutId == -1) { + return; + } + + Bundle bundle = new Bundle(); + bundle.putInt(LAYOUT_ID, layoutId); + captureFragment.setArguments(bundle); + } + + public static void isLightEnable(boolean isEnable) { + if (isEnable) { + Camera camera = CameraManager.get().getCamera(); + if (camera != null) { + Camera.Parameters parameter = camera.getParameters(); + parameter.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); + camera.setParameters(parameter); + } + } else { + Camera camera = CameraManager.get().getCamera(); + if (camera != null) { + Camera.Parameters parameter = camera.getParameters(); + parameter.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); + camera.setParameters(parameter); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/DecodeHandler.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/DecodeHandler.java new file mode 100644 index 0000000..fbb12b9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/DecodeHandler.java @@ -0,0 +1,93 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.util.Log; + +import com.google.zxing.BinaryBitmap; +import com.google.zxing.DecodeHintType; +import com.google.zxing.MultiFormatReader; +import com.google.zxing.ReaderException; +import com.google.zxing.Result; +import com.google.zxing.common.HybridBinarizer; +import com.uuzuche.lib_zxing.camera.CameraManager; +import com.uuzuche.lib_zxing.camera.PlanarYUVLuminanceSource; +import com.yonsz.z1.R; + +import java.util.Hashtable; + +/** + * Created by Administrator on 2019/3/11. + */ + +public class DecodeHandler extends Handler { + + private static final String TAG = DecodeHandler.class.getSimpleName(); + + private final CaptureFragment fragment; + private final MultiFormatReader multiFormatReader; + + DecodeHandler(CaptureFragment fragment, Hashtable hints) { + multiFormatReader = new MultiFormatReader(); + multiFormatReader.setHints(hints); + this.fragment = fragment; + } + + @Override + public void handleMessage(Message message) { + if (message.what == R.id.decode) { + decode((byte[]) message.obj, message.arg1, message.arg2); + } else if (message.what == R.id.quit) { + Looper.myLooper().quit(); + } + } + + /** + * Decode the data within the viewfinder rectangle, and time how long it took. For efficiency, + * reuse the same reader objects from one decode to the next. + * + * @param data The YUV preview frame. + * @param width The width of the preview frame. + * @param height The height of the preview frame. + */ + private void decode(byte[] data, int width, int height) { + long start = System.currentTimeMillis(); + Result rawResult = null; + + //modify here + byte[] rotatedData = new byte[data.length]; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + rotatedData[x * height + height - y - 1] = data[x + y * width]; + } + int tmp = width; // Here we are swapping, that's the difference to #11 + width = height; + height = tmp; + + PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(rotatedData, width, height); + BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); + try { + rawResult = multiFormatReader.decodeWithState(bitmap); + } catch (ReaderException re) { + // continue + } finally { + multiFormatReader.reset(); + } + + if (rawResult != null) { + long end = System.currentTimeMillis(); + Log.d(TAG, "Found barcode (" + (end - start) + " ms):\n" + rawResult.toString()); + Message message = Message.obtain(fragment.getHandler(), R.id.decode_succeeded, rawResult); + Bundle bundle = new Bundle(); + bundle.putParcelable(DecodeThread.BARCODE_BITMAP, source.renderCroppedGreyscaleBitmap()); + message.setData(bundle); + //Log.d(TAG, "Sending decode succeeded message..."); + message.sendToTarget(); + } else { + Message message = Message.obtain(fragment.getHandler(), R.id.decode_failed); + message.sendToTarget(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/DecodeThread.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/DecodeThread.java new file mode 100644 index 0000000..c42a9ec --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/DecodeThread.java @@ -0,0 +1,70 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.os.Handler; +import android.os.Looper; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.DecodeHintType; +import com.google.zxing.ResultPointCallback; +import com.uuzuche.lib_zxing.decoding.DecodeFormatManager; + +import java.util.Hashtable; +import java.util.Vector; +import java.util.concurrent.CountDownLatch; + +/** + * Created by Administrator on 2019/3/11. + */ + +public class DecodeThread extends Thread { + + public static final String BARCODE_BITMAP = "barcode_bitmap"; + private final CaptureFragment fragment; + private final Hashtable hints; + private Handler handler; + private final CountDownLatch handlerInitLatch; + + DecodeThread(CaptureFragment fragment, + Vector decodeFormats, + String characterSet, + ResultPointCallback resultPointCallback) { + + this.fragment = fragment; + handlerInitLatch = new CountDownLatch(1); + + hints = new Hashtable(3); + + if (decodeFormats == null || decodeFormats.isEmpty()) { + decodeFormats = new Vector(); + decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS); + decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS); + decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS); + } + + hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats); + + if (characterSet != null) { + hints.put(DecodeHintType.CHARACTER_SET, characterSet); + } + + hints.put(DecodeHintType.NEED_RESULT_POINT_CALLBACK, resultPointCallback); + } + + Handler getHandler() { + try { + handlerInitLatch.await(); + } catch (InterruptedException ie) { + // continue? + } + return handler; + } + + @Override + public void run() { + Looper.prepare(); + handler = new DecodeHandler(fragment, hints); + handlerInitLatch.countDown(); + Looper.loop(); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/FullDialogActivity.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/FullDialogActivity.java new file mode 100644 index 0000000..139217b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/FullDialogActivity.java @@ -0,0 +1,224 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entitya2.SafeLogEntity; +import com.yonsz.z1.fragment.message.SafeLogAdapter; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerLoadDataListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LoadMoreRecyclerView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.REFRESH_DATA; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; + +/** + * Created by Administrator on 2018/1/2. + */ + +public class FullDialogActivity extends BaseActivity { + + private int DATA_TYPE; + private boolean isRefresh; + private boolean isLoadMore; + private int page = 0; + private List mDatas; + private List> mDatasRercord = new ArrayList<>(); + private SafeLogAdapter mLogAdapter; + + private Toolbar toolbar; + private ImageView dialog_cancel_ok; + private LoadMoreRecyclerView mLogRecycler; + ImageView iv_alert_color; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main_dialog); + initView(); + DATA_TYPE = Constans.REFRESH_DATA; + initListener(); +// selectSafetyLog(page); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + private void initView() { + toolbar = (Toolbar) findViewById(R.id.toolbar); + dialog_cancel_ok = (ImageView) findViewById(R.id.dialog_cancel_ok); + mLogRecycler = (LoadMoreRecyclerView) findViewById(R.id.log_recyclerview); + iv_alert_color = (ImageView) findViewById(R.id.iv_alert_color); + + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(this); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mLogRecycler.setLayoutManager(manager); + mDatas = new ArrayList<>(); + mLogAdapter = new SafeLogAdapter(this, mDatasRercord); + mLogRecycler.setAdapter(mLogAdapter); + mLogRecycler.setOnLoadDataListener(new OnRecyclerLoadDataListener() { + @Override + public void onLoadMore() { + if (!isLoadMore) { + isLoadMore = true; + page += 20; + DATA_TYPE = Constans.MORE_DATA; +// selectSafetyLog(page); + } + } + }); + if (null != getIntent().getExtras() && getIntent().getExtras().get("addBeans") != null) { + List mDatasRercord = (List) getIntent().getSerializableExtra("addBeans"); + Message msg = mHandler.obtainMessage(GET_LOG_SUCCESS); + msg.obj = mDatasRercord; + mHandler.sendMessage(msg); + } + } + + private void initListener() { + dialog_cancel_ok.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + UniKongApp.getActivity().finish(); + } + }); + } + + public void eixt() { + finish(); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_LOG_SUCCESS: + if (msg.obj != null) { + List mObjBeans = (List) msg.obj; + for (int i = 0; i < mObjBeans.size(); i++) { + switch (mObjBeans.get(i).getDeviceType()) { + case SMOKE_TAG: + iv_alert_color.setImageResource(R.drawable.icon_popup_alert); + break; + case GAS_TAG: + iv_alert_color.setImageResource(R.drawable.icon_popup_alert); + break; + case WATER_TAG: + iv_alert_color.setImageResource(R.drawable.icon_popup_alert); + break; + } + } + onSuccess((List) msg.obj); + } else { + // Toast.makeText(FullDialogActivity.this, "没有数据", Toast.LENGTH_LONG).show(); + } + break; + case GET_LOG_FAIL: + + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + } + } + + private void onSuccess(List logEntities) { + for (int j = 0; j < mDatasRercord.size(); j++) { + for (int k = 0; k < mDatasRercord.get(j).size(); k++) { + String id = mDatasRercord.get(j).get(k).getId(); + for (int f = 0; f < logEntities.size(); f++) { + if (logEntities.get(f).getId().equals(id)) { + logEntities.remove(logEntities.get(f)); + } + } + } + } + if (logEntities.size() > 0) { + String createDate = logEntities.get(0).getCreateDate().substring(0, 10); + if (mDatasRercord.size() == 0 || (mDatasRercord.get(0) != null && logEntities != null && logEntities.size() > 0 && !logEntities.get(0).getId().equals(mDatasRercord.get(0).get(0).getId()))) { + if (DATA_TYPE == REFRESH_DATA) { + isRefresh = false; + mDatas = new ArrayList<>(); + mDatasRercord.clear(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + if (mDatas.size() == logEntities.size()) { + mDatasRercord.add(mDatas); + } else if (i == logEntities.size() - 1) { + mDatasRercord.add(mDatas); + } + } + } else { + isLoadMore = false; + if (mDatas != null && mDatas.get(mDatas.size() - 1).getCreateDate().substring(0, 10).equals(createDate)) { + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } else { + mDatas = new ArrayList<>(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } + } + mLogAdapter.notifyDataSetChanged(); + } else { + + } + isRefresh = false; + isLoadMore = false; + DATA_TYPE = -1; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/HandAddCodeActivity.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/HandAddCodeActivity.java new file mode 100644 index 0000000..266f51a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/HandAddCodeActivity.java @@ -0,0 +1,329 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.content.Intent; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.lechange.demo.business.Business; +import com.lechange.opensdk.api.bean.CheckDeviceBindOrNot; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.device.deviceadd.ConnectWifiActivity; +import com.yonsz.z1.device.deviceadd.NoWifiConnectActicity; +import com.yonsz.z1.device.deviceadd.SearchH3eDeviceActivity; +import com.yonsz.z1.gateway.AddLCSafeCompleteActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.EncodingConversionTools; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CAMERA_ISADD_FAIL; +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.AIDEVICE_ISADD; + +/** + * Created by Administrator on 2017/12/29. + */ + +public class HandAddCodeActivity extends BaseActivity { + private TitleView mTitleView; + private String ziId; + private String deviceAddress; + private EditText editText; + private TextView number;//显示还剩多少字 + private int numbers = 26;//默认30 + private String textcontent = "";//保存输入30个字符 + //输入框变化 + private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + int i = s.length(); + if (i > 26) { + ToastUtil.show(getApplicationContext(), "超出限制"); + } + + if (i <= 26) { + number.setText(numbers - i + ""); + textcontent = s.toString(); + } else { + editText.setText(textcontent); + editText.setSelection(textcontent.length()); + } + if (i != 0) { + /* if (getIntent().getStringExtra("content").toString().equals(editText.getText().toString().trim())) { + mTitle.setHeadFuntionTxtColor(false); + } else { + }*/ + mTitleView.setHeadFuntionTxtColor(true); + } else { + mTitleView.setHeadFuntionTxtColor(false); + } + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable arg0) { + + } + }; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_modify_nickname); + initView(); + initData(); + } + + private void initView() { + number = (TextView) findViewById(R.id.number); + ziId = (String) getIntent().getExtras().get("ziId"); + deviceAddress = (String) getIntent().getExtras().get("deviceAddress"); + editText = (EditText) findViewById(R.id.editText); + mTitleView = (TitleView) findViewById(R.id.title_nickname); + mTitleView.setHead("手动输入添加"); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionTxtColor(false); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (null != editText.getText().toString().trim() && editText.getText().toString().trim().length() == 26 + && editText.getText().toString().trim().substring(0, 2).equals("01")) { + String editString = editText.getText().toString().trim(); + String makeChecksum = EncodingConversionTools.makeChecksum(editString.substring(0, editString.length() - 4)); + if (makeChecksum.toUpperCase().equals(editString.substring(editString.length() - 4, editString.length()).toUpperCase())) { +// repCheck(editString.toUpperCase()); + Intent intent = new Intent(HandAddCodeActivity.this, SafeDevicePositionActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("addType", "0"); + intent.putExtra("rawCode", editText.getText().toString()); + startActivity(intent); + finish(); + } else { + ToastUtil.show(HandAddCodeActivity.this, R.string.Enter_correct_code); + } + } else if (null != editText.getText().toString().trim() && editText.getText().toString().trim().length() == 15) { + checkOnBindandremind(editText.getText().toString().trim()); + } else if (getIntent().getExtras().get("deviceType").toString().equals("000")) { + aiIscCanAdd(editText.getText().toString().trim()); + } else { + ToastUtil.show(HandAddCodeActivity.this, "请输入正确的序列号"); + } + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void aiIscCanAdd(String result) { + /*Intent intent = new Intent(HandAddCodeActivity.this, SearchH3eDeviceActivity.class); + intent.putExtra("ssid", ""); + intent.putExtra("password", ""); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("addressTypeCode", "1"); + intent.putExtra("deviceAddress", "1"); + intent.putExtra("floor", "1"); + intent.putExtra("deviceCode", "000"); + intent.putExtra("result", result); + startActivity(intent); + finish();*/ + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", homeListEntity.getData().get(deviceNumListPosition).getId()); + map.put("appBrandId", "110301"); + map.put("ziId", result); + netWorkUtil.requestPostByAsynewApi(AIDEVICE_ISADD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("aiIscCanAdd", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Intent intent = new Intent(HandAddCodeActivity.this, SearchH3eDeviceActivity.class); + intent.putExtra("ssid", ""); + intent.putExtra("password", ""); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("deviceCode", "000"); + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + intent.putExtra("result", result); + startActivity(intent); + finish(); + } else { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /** + * 无线配对校验 + */ + public void checkOnBindandremind(final String deviceSN) { + Business.getInstance().checkBindOrNot(deviceSN, + new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + Business.RetObject retObject = (Business.RetObject) msg.obj; + if (msg.what == 0) { + CheckDeviceBindOrNot.Response resp = (CheckDeviceBindOrNot.Response) retObject.resp; + if (!resp.data.isBind) { + WifiManager wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + if (getIntent().getExtras().get("from").toString().equals(GATE_WAY)) { + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(HandAddCodeActivity.this, ConnectWifiActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", GATE_WAY); + intent.putExtra("deviceSN", deviceSN); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + startActivity(intent); + } else { + Intent intent = new Intent(HandAddCodeActivity.this, NoWifiConnectActicity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("from", GATE_WAY); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + startActivity(intent); + } + } else { + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(HandAddCodeActivity.this, ConnectWifiActivity.class); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("from", "HandAddCodeActivity"); + startActivity(intent); + } else { + Intent intent = new Intent(HandAddCodeActivity.this, NoWifiConnectActicity.class); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("from", "HandAddCodeActivity"); + intent.putExtra("deviceSN", deviceSN); + startActivity(intent); + } + } + } else if (resp.data.isBind && resp.data.isMine) + Toast.makeText(HandAddCodeActivity.this, getString(R.string.toast_adddevice_already_binded_by_self), Toast.LENGTH_SHORT).show(); + else + Toast.makeText(HandAddCodeActivity.this, getString(R.string.toast_adddevice_already_binded_by_others), Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(HandAddCodeActivity.this, retObject.mMsg, Toast.LENGTH_SHORT).show(); + } + } + }); + } + + private void repCheck(String rawCode) { + + } + + private void initData() { + numbers = 26; + editText.addTextChangedListener(textWatcher); + number.setVisibility(View.VISIBLE); + number.setText(26 + ""); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SEND_ADDVOICE_CONTROL_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case CAMERA_ISADD_FAIL: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent1 = new Intent(HandAddCodeActivity.this, AddLCSafeCompleteActivity.class); + intent1.putExtra("deviceSN", (String) msg.obj); + intent1.putExtra("deviceCode", ""); + intent1.putExtra("deviceType", "000"); + intent1.putExtra("deviceModel", ""); + startActivity(intent1); + finish(); + break; + case SEND_ADDVOICE_CONTROL_SUCCESS: + Intent intent = new Intent(HandAddCodeActivity.this, SafeDevicePositionActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("addType", "0"); + intent.putExtra("rawCode", editText.getText().toString()); + startActivity(intent); + finish(); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/InactivityTimer.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/InactivityTimer.java new file mode 100644 index 0000000..e3dd9db --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/InactivityTimer.java @@ -0,0 +1,56 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.app.Activity; + +import com.uuzuche.lib_zxing.decoding.FinishListener; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; + +/** + * Created by Administrator on 2019/3/11. + */ + +public class InactivityTimer { + private static final int INACTIVITY_DELAY_SECONDS = 5 * 60; + + private final ScheduledExecutorService inactivityTimer = + Executors.newSingleThreadScheduledExecutor(new DaemonThreadFactory()); + private final Activity activity; + private ScheduledFuture inactivityFuture = null; + + public InactivityTimer(Activity activity) { + this.activity = activity; + onActivity(); + } + + public void onActivity() { + cancel(); + inactivityFuture = inactivityTimer.schedule(new FinishListener(activity), + INACTIVITY_DELAY_SECONDS, + TimeUnit.SECONDS); + } + + private void cancel() { + if (inactivityFuture != null) { + inactivityFuture.cancel(true); + inactivityFuture = null; + } + } + + public void shutdown() { + cancel(); + inactivityTimer.shutdown(); + } + + private static final class DaemonThreadFactory implements ThreadFactory { + public Thread newThread(Runnable runnable) { + Thread thread = new Thread(runnable); + thread.setDaemon(true); + return thread; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDeviceActivity.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDeviceActivity.java new file mode 100644 index 0000000..4268ca0 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDeviceActivity.java @@ -0,0 +1,190 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.uuzuche.lib_zxing.activity.CodeUtils; +import com.yanzhenjie.recyclerview.swipe.SwipeItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.database.entity.LightListEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.REQUEST_CODE; +import static com.yonsz.z1.net.Constans.SELECTBLIND_BYZI_FAIL; +import static com.yonsz.z1.net.Constans.SELECTBLIND_BYZI_SUCCESS; + +/** + * Created by Administrator on 2017/12/29. + */ + +public class SafeDeviceActivity extends BaseActivity implements SwipeItemClickListener { + private TitleView mTitleView; + private ImageView scaDevice; + private SwipeMenuRecyclerView mRecyclerView; + private SafeDeviceAdapter mSafeDeviceAdapter; + private List mdatas; + private LinearLayout noRecordLl; + private String ziId; + private String deviceAddress; + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.y76); + } + }; + + @Override + + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_safe_device); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + if (DensityUtil.isNetworkConnected(this)) { + selectInfoByZi(); + } else { + ToastUtil.show(this, R.string.net_error); + } + } + + private void initView() { + ziId = (String) getIntent().getExtras().get("ziId"); + deviceAddress = (String) getIntent().getExtras().get("deviceAddress"); + noRecordLl = (LinearLayout) findViewById(R.id.ll_no_record); + scaDevice = (ImageView) findViewById(R.id.iv_scan_device); + scaDevice.setOnClickListener(this); + mTitleView = (TitleView) findViewById(R.id.title_safe_device); + mTitleView.setHead(R.string.safe_device_list); + mTitleView.setHeadFuntion(R.drawable.icon_add_scan); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + Intent intent = new Intent(SafeDeviceActivity.this, ScanCodeActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", deviceAddress); + startActivityForResult(intent, REQUEST_CODE); + } + + @Override + public void onFunctionText() { + + } + }); + mdatas = new ArrayList<>(); + mSafeDeviceAdapter = new SafeDeviceAdapter(this, mdatas); + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_child_device_list); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setSwipeMenuCreator(swipeMenuCreator); + // mRecyclerView.setSwipeMenuItemClickListener(mMenuItemClickListener); + mRecyclerView.setAdapter(mSafeDeviceAdapter); + mRecyclerView.setSwipeItemClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_scan_device: + Intent intent = new Intent(SafeDeviceActivity.this, ScanCodeActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", deviceAddress); + startActivityForResult(intent, REQUEST_CODE); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECTBLIND_BYZI_SUCCESS: + LightListEntity obj = (LightListEntity) msg.obj; + mdatas.clear(); + if (obj.getObj() != null) { + noRecordLl.setVisibility(View.GONE); + mdatas.addAll(0, obj.getObj()); + } else { + noRecordLl.setVisibility(View.VISIBLE); + } + mSafeDeviceAdapter.notifyDataSetChanged(); + break; + case SELECTBLIND_BYZI_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == REQUEST_CODE) { + //处理扫描结果(在界面上显示) + if (null != data) { + Bundle bundle = data.getExtras(); + if (bundle == null) { + return; + } + if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) { + String result = bundle.getString(CodeUtils.RESULT_STRING); + Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show(); + } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) { + ToastUtil.show(SafeDeviceActivity.this, "扫码错误"); + } + } + } + } + + private void selectInfoByZi() { + + } + + @Override + public void onItemClick(View itemView, int position) { + Intent intent = new Intent(SafeDeviceActivity.this, SafeDeviceDetailActivity.class); + intent.putExtra("deviceType", mdatas.get(position).getDeviceType().toString()); + intent.putExtra("id", mdatas.get(position).getId()); + intent.putExtra("deviceInfrared", mdatas.get(position).getDeviceInfrared()); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", mdatas.get(position).getAddressId()); + intent.putExtra("addressName", mdatas.get(position).getAddressName()); + intent.putExtra("devicePosition", getIntent().getExtras().get("devicePosition").toString()); + intent.putExtra("deviceName", getIntent().getExtras().get("deviceName").toString()); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDeviceAdapter.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDeviceAdapter.java new file mode 100644 index 0000000..4517489 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDeviceAdapter.java @@ -0,0 +1,169 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; + +import java.util.List; + +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.SAFE_IMG; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; + +/** + * Created by Administrator on 2017/9/4. + */ +public class SafeDeviceAdapter extends RecyclerView.Adapter { + private Context mContext; + // private DeviceEntity.ObjEntity mObjEntity; + private OnRecyclerItemClickListener mOnItemClickListener; + // private List mStringList = new ArrayList<>(); + private List mObjEntity; + + public SafeDeviceAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_safe_device, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + if (mObjEntity != null) { + holder.setViews(position); + } + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + public ImageView icon; + private TextView safePosition; + private TextView safeTypeName; + private ImageView safeIcon; + + public MessageViewHolder(View view) { + super(view); + safePosition = (TextView) view.findViewById(R.id.tv_safe_position); + safeTypeName = (TextView) view.findViewById(R.id.tv_safe_type); + safeIcon = (ImageView) view.findViewById(R.id.iv_safe_device_icon); + } + + public void setViews(final int position) { + safePosition.setText(mObjEntity.get(position).getAddressName().toString()); + if (null != mObjEntity.get(position).getDeviceType()) { + switch (mObjEntity.get(position).getDeviceType().toString()) { + case DOOR_LOCK_TAG: + safeTypeName.setText(R.string.door_warn); + safeIcon.setImageResource(SAFE_IMG[3]); + break; + case INFRARED_TAG: + safeTypeName.setText(R.string.red_warn); + safeIcon.setImageResource(SAFE_IMG[4]); + break; + case SMOKE_TAG: + safeTypeName.setText(R.string.smoke_warn); + safeIcon.setImageResource(SAFE_IMG[2]); + break; + case GAS_TAG: + safeTypeName.setText(R.string.gas_warn); + safeIcon.setImageResource(SAFE_IMG[1]); + break; + case WATER_TAG: + safeTypeName.setText(R.string.water_warn); + safeIcon.setImageResource(SAFE_IMG[0]); + break; + } + } else { + safeTypeName.setText("未知设备"); + safeIcon.setImageResource(SAFE_IMG[0]); + } + } + } + + /*private List getStringList(DeviceEntity.ObjEntity objEntity) { + mStringList.clear(); + if (objEntity.getList() != null) { + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case AIR_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case TV_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case FAN_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case SWEEP_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case LIGHT_TAG: + if (!objEntity.getLightNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case CURTAINS_TAG: + if (!objEntity.getBlindNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case SWITCH_TAG: + if (!objEntity.getPlugNum().equals("0")) { + mStringList.add(objEntity.getList().get(i)); + } + break; + } + } + } + return mStringList; + }*/ + + public void setmOnItemClickListener(OnRecyclerItemClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDeviceDetailActivity.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDeviceDetailActivity.java new file mode 100644 index 0000000..6841e79 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDeviceDetailActivity.java @@ -0,0 +1,364 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEvent; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.ADD_SAFETY_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADD_SAFETY_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.DEL_SAFETY_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.DEL_SAFETY_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.SAFE_BIG_IMG; +import static com.yonsz.z1.net.Constans.SAFE_VOICE_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_DELVOICE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_UPDATEVOICE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.SEND_UPDATEVOICE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; + +/** + * Created by Administrator on 2018/1/2. + */ + +public class SafeDeviceDetailActivity extends BaseActivity { + private TitleView mTitleView; + private String deviceType; + private ImageView safeImage; + private TextView safeTypeName; + private TextView deleteTv; + private String id; + private String ziId; + private String deviceInfrared; + private String addressName; + private String addressId; + private TextView safePositionTv; + private RelativeLayout safePositionRL; + private CheckBox mCheckBox; + private TextView devicePosition, deviceName; + private RelativeLayout devicePowerRl, deviceDefenceRl; + private TextView localStageTv; + private LoadingDialog mLoadingDialog; + private boolean isDelete = false; + private TextView tv_device_power; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_safe_detail); + NettyHandlerUtil.getInstance(); + initView(); + initListener(); + } + + @Override + public void onResume() { + super.onResume(); + selectSafetyDetail(); + } + + public void onEventMainThread(SafeVoiceEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + /*Message message = mHandler.obtainMessage(SAFE_VOICE_SUCCESS); + mHandler.sendMessage(message);*/ + } + + private void initView() { + deviceType = getIntent().getExtras().get("deviceType").toString(); + id = getIntent().getExtras().get("id").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + deviceInfrared = getIntent().getExtras().get("deviceInfrared").toString(); + addressId = getIntent().getExtras().get("addressId").toString(); + addressName = getIntent().getExtras().get("addressName").toString(); + tv_device_power = (TextView) findViewById(R.id.tv_device_power); + localStageTv = (TextView) findViewById(R.id.tv_local_stage); + devicePosition = (TextView) findViewById(R.id.tv_device_position); + deviceName = (TextView) findViewById(R.id.tv_device_name); + mCheckBox = (CheckBox) findViewById(R.id.cb_device_defence); + safePositionTv = (TextView) findViewById(R.id.tv_safe_position); + safePositionRL = (RelativeLayout) findViewById(R.id.rl_safe_position); + devicePowerRl = (RelativeLayout) findViewById(R.id.rl_device_power); + deviceDefenceRl = (RelativeLayout) findViewById(R.id.rl_device_defence); + deleteTv = (TextView) findViewById(R.id.btn_exit); + safeImage = (ImageView) findViewById(R.id.iv_safe_image); + safeTypeName = (TextView) findViewById(R.id.iv_safe_name); + mTitleView = (TitleView) findViewById(R.id.title_safe_detail); + mTitleView.setHead(R.string.device_info); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + devicePosition.setText(getIntent().getExtras().get("devicePosition").toString()); + deviceName.setText(getIntent().getExtras().get("deviceName").toString()); + switch (deviceType) { + case DOOR_LOCK_TAG: + safeTypeName.setText(R.string.door_warn); + safeImage.setImageResource(SAFE_BIG_IMG[3]); + break; + case INFRARED_TAG: + safeTypeName.setText(R.string.red_warn); + safeImage.setImageResource(SAFE_BIG_IMG[4]); + break; + case SMOKE_TAG: + safeTypeName.setText(R.string.smoke_warn); + safeImage.setImageResource(SAFE_BIG_IMG[2]); + devicePowerRl.setVisibility(View.GONE); + deviceDefenceRl.setVisibility(View.GONE); + break; + case GAS_TAG: + safeTypeName.setText(R.string.gas_warn); + safeImage.setImageResource(SAFE_BIG_IMG[1]); + devicePowerRl.setVisibility(View.GONE); + deviceDefenceRl.setVisibility(View.GONE); + break; + case WATER_TAG: + safeTypeName.setText(R.string.water_warn); + safeImage.setImageResource(SAFE_BIG_IMG[0]); + deviceDefenceRl.setVisibility(View.GONE); + break; + } + safePositionTv.setText(addressName); + } + + private void setInitDate(SafeVoiceEntity voiceEntity) { + deviceInfrared = voiceEntity.getObj().getDeviceInfrared(); + addressId = voiceEntity.getObj().getAddressId().toString(); + safePositionTv.setText(voiceEntity.getObj().getAddressName().toString()); + if (null != voiceEntity.getObj().getPowerFlag() && voiceEntity.getObj().getPowerFlag().equals("1")) { + tv_device_power.setText("电量低"); + tv_device_power.setTextColor(0xffF79D28); + } else { + tv_device_power.setText("正常"); + tv_device_power.setTextColor(0xff666666); + } + if (voiceEntity.getObj().getVoiceFlag() == 1) { + mCheckBox.setChecked(true); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText(R.string.defence_stage); + } else { + mCheckBox.setChecked(false); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText(R.string.defence_back_stage); + } + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + } + + private void initListener() { + deleteTv.setOnClickListener(this); + safePositionRL.setOnClickListener(this); + mCheckBox.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_exit: + ConfirmDialog dialog = new ConfirmDialog(SafeDeviceDetailActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + isDelete = true; + sendDelVoiceControl(); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.rl_safe_position: + Intent intent = new Intent(this, UpadateSafePosActivity.class); + intent.putExtra("id", id); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", addressId); + startActivityForResult(intent, MODIFY_ADDRESS_RESULT); + break; + case R.id.cb_device_defence: + isDelete = false; + if (mCheckBox.isChecked()) { + mCheckBox.setChecked(false); + sendUpdateVoiceControl(); + } else { + mCheckBox.setChecked(true); + sendUpdateVoiceControl(); + } + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void sendDelVoiceControl() { + + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SEND_DELVOICE_CONTROL_SUCCESS: + //删除设备 + // delSafetyEntity(); + break; + case DEL_SAFETY_ENTITY_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, R.string.Delete_successful); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + break; + case SEND_UPDATEVOICE_CONTROL_SUCCESS: + //修改语音 + // updateSafetyEntity(); + break; + case ADD_SAFETY_ENTITY_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + if (!mCheckBox.isChecked()) { + mCheckBox.setChecked(true); + localStageTv.setText(R.string.defence_stage); + ToastUtil.show(this, getString(R.string.Open_up_success)); + } else { + mCheckBox.setChecked(false); + localStageTv.setText(R.string.defence_back_stage); + ToastUtil.show(this, getString(R.string.Close_off_success)); + } + break; + case SELECT_SAFETY_DETAIL_SUCCESS: + SafeVoiceEntity voiceEntity = (SafeVoiceEntity) msg.obj; + setInitDate(voiceEntity); + break; + case SAFE_VOICE_SUCCESS: + if (isDelete) { + delSafetyEntity(); + } else { + updateSafetyEntity(); + } + break; + } + } + + private void updateSafetyEntity() { + + } + + private void delSafetyEntity() { + + } + + private void sendUpdateVoiceControl() { + /*initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("id", id); + map.put("deviceInfrared", deviceInfrared); + if (mCheckBox.isChecked()) { + map.put("voiceFlag", "0"); + } else { + map.put("voiceFlag", "1"); + } + netWorkUtil.requestPostByAsynew(NetWorkUrl.SEND_UPDATEVOICE_CONTROL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sendUpdateVoiceControl", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_ADDRESS_RESULT: + if (data != null && data.getExtras().get("data") != null) { + safePositionTv.setText((String) data.getExtras().get("data")); + } + break; + } + } + + private void selectSafetyDetail() { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDevicePositionActivity.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDevicePositionActivity.java new file mode 100644 index 0000000..7c417e8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/SafeDevicePositionActivity.java @@ -0,0 +1,453 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.uuzuche.lib_zxing.activity.CodeUtils; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEvent; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.ADD_SAFETY_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADD_SAFETY_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.SAFE_BIG_IMG; +import static com.yonsz.z1.net.Constans.SAFE_VOICE_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.WATER_TAG; + +/** + * Created by Administrator on 2017/12/29. + */ + +public class SafeDevicePositionActivity extends BaseActivity { + private TitleView mTitleView; + private String ziId; + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String position; + private List condition = new ArrayList<>(); + private String deviceType; + private String rawCode; + private String producer; + private String addType; + private ImageView safeImage; + private TextView safeTypeName; + private SafeVoiceEntity safeVoiceEntity; + private LoadingDialog mLoadingDialog; + private Button bt_sure_config; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_safe_device_position); + NettyHandlerUtil.getInstance(); + initView(); + } + + public void onEventMainThread(SafeVoiceEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = mHandler.obtainMessage(SAFE_VOICE_SUCCESS); + mHandler.sendMessage(message); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void initView() { + addType = (String) getIntent().getExtras().get("addType"); + ziId = (String) getIntent().getExtras().get("ziId"); + position = (String) getIntent().getExtras().get("deviceAddress"); + bt_sure_config = (Button) findViewById(R.id.bt_sure_config); + safeImage = (ImageView) findViewById(R.id.iv_safe_image); + safeTypeName = (TextView) findViewById(R.id.iv_safe_name); + mTitleView = (TitleView) findViewById(R.id.title_safe_device_position); + mTitleView.setHead("设备添加"); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + // time = "0"; + // lastTimeCheckBox = null; + // if (id == lastTimeCheckBox.getId()) + // buttonView.setChecked(true); + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + + switch (id) { + case R.id.cb_position0: + if (isChecked) + position = "0"; + break; + case R.id.cb_position1: + if (isChecked) + position = "1"; + break; + case R.id.cb_position2: + if (isChecked) + position = "2"; + break; + case R.id.cb_position3: + if (isChecked) + position = "3"; + break; + case R.id.cb_position4: + if (isChecked) + position = "4"; + break; + case R.id.cb_position5: + if (isChecked) + position = "5"; + break; + case R.id.cb_position6: + if (isChecked) + position = "6"; + break; + case R.id.cb_position7: + if (isChecked) + position = "7"; + break; + case R.id.cb_position8: + if (isChecked) + position = "8"; + break; + case R.id.cb_position9: + if (isChecked) + position = "9"; + break; + case R.id.cb_position10: + if (isChecked) + position = "10"; + break; + case R.id.cb_position11: + if (isChecked) + position = "11"; + break; + case R.id.cb_position12: + if (isChecked) + position = "12"; + break; + case R.id.cb_position13: + if (isChecked) + position = "13"; + break; + } + } + }); + } + + switch (position) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + + + if (addType.equals("1")) { + if (null != getIntent().getExtras()) { + Bundle bundle = getIntent().getExtras(); + if (bundle == null) { + return; + } + if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) { + String result = bundle.getString(CodeUtils.RESULT_STRING); + rawCode = result.toUpperCase(); + String substring = result.substring(result.length() - 6, result.length() - 4); + producer = result.substring(0, 2); + // proDate = rawCode.substring(2, 8); + setDeviceType(substring); + } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) { + Toast.makeText(SafeDevicePositionActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show(); + } + } + } else { + rawCode = getIntent().getExtras().get("rawCode").toString().trim().toUpperCase(); + String substring = rawCode.substring(rawCode.length() - 6, rawCode.length() - 4); + producer = rawCode.substring(0, 2); + // proDate = rawCode.substring(2, 8); + setDeviceType(substring); + } + + bt_sure_config.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { +// sendAddVoiceControl(); + subsetAdd(); + } + }); + } + + private void setDeviceType(String substring) { + switch (substring) { + case "01": + deviceType = DOOR_LOCK_TAG; + safeTypeName.setText(R.string.door_warn); + safeImage.setImageResource(SAFE_BIG_IMG[3]); + break; + case "02": + deviceType = INFRARED_TAG; + safeTypeName.setText(R.string.red_warn); + safeImage.setImageResource(SAFE_BIG_IMG[4]); + break; + case "03": + deviceType = SMOKE_TAG; + safeTypeName.setText(R.string.smoke_warn); + safeImage.setImageResource(SAFE_BIG_IMG[2]); + break; + case "04": + deviceType = GAS_TAG; + safeTypeName.setText(R.string.gas_warn); + safeImage.setImageResource(SAFE_BIG_IMG[1]); + break; + case "05": + deviceType = WATER_TAG; + safeTypeName.setText(R.string.water_warn); + safeImage.setImageResource(SAFE_BIG_IMG[0]); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SEND_ADDVOICE_CONTROL_SUCCESS: + //添加设备 + safeVoiceEntity = (SafeVoiceEntity) msg.obj; + break; + case SEND_ADDVOICE_CONTROL_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + case ADD_SAFETY_ENTITY_SUCCESS: + case UPDATE_BLINDENTITY_NAME_SUCCESS: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, R.string.add_success); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + break; + case ADD_SAFETY_ENTITY_FAIL: + ToastUtil.show(this, R.string.add_fail); + break; + case SAFE_VOICE_SUCCESS: + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + if (null != safeVoiceEntity && null != safeVoiceEntity.getObj()) { + int openFlag = safeVoiceEntity.getObj().getOpenFlag(); + int voiceFlag = safeVoiceEntity.getObj().getVoiceFlag(); + String infrared = safeVoiceEntity.getObj().getDeviceInfrared(); + } else { + } + } + }, 2000); + break; + } + } + + private void subsetAdd() { + String body = "{\"code\":\"" + rawCode + "\"}"; + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", "0"); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + map.put("addressId", getIntent().getExtras().get("deviceAddress").toString()); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/ScanCodeActivity.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/ScanCodeActivity.java new file mode 100644 index 0000000..40427e8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/ScanCodeActivity.java @@ -0,0 +1,649 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.Manifest; +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.lechange.demo.business.Business; +import com.lechange.opensdk.api.bean.CheckDeviceBindOrNot; +import com.qw.soul.permission.SoulPermission; +import com.qw.soul.permission.bean.Permission; +import com.qw.soul.permission.bean.Permissions; +import com.qw.soul.permission.callbcak.CheckRequestPermissionsListener; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.CheckBindEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.device.deviceadd.ConnectWifiActivity; +import com.yonsz.z1.device.deviceadd.NoWifiConnectActicity; +import com.yonsz.z1.device.deviceadd.SearchH3eDeviceActivity; +import com.yonsz.z1.gateway.AddLCSafeActivity; +import com.yonsz.z1.gateway.AddLCSafeCompleteActivity; +import com.yonsz.z1.gateway.HandAddLcActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.EncodingConversionTools; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CAMERA_ISADD_FAIL; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.KUQI_PANEL; +import static com.yonsz.z1.net.Constans.REQUEST_CODE; +import static com.yonsz.z1.net.Constans.SAFETY_ACOUSTO_OPTIC; +import static com.yonsz.z1.net.Constans.SAFETY_DISPLACEMENT; +import static com.yonsz.z1.net.Constans.SAFETY_WIRELESS_REMOTE; +import static com.yonsz.z1.net.Constans.SAFE_DEVICE_TAG; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.AIDEVICE_ISADD; +import static com.yonsz.z1.net.NetWorkUrl.CAMERA_ISADD; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_ADD; + +/** + * Created by Administrator on 2017/12/29. + */ + +public class ScanCodeActivity extends BaseActivity { + private TitleView mTitleView; + private CaptureFragment captureFragment; + private LinearLayout addByHandIv, ll_add_by_hand; + private String ziId; + private String deviceAddress; + private String resultString; + private String deviceType = ""; + /** + * 二维码解析回调函数 + */ + CodeUtils.AnalyzeCallback analyzeCallback = new CodeUtils.AnalyzeCallback() { + @Override + public void onAnalyzeSuccess(Bitmap mBitmap, String result) { + Log.i("TAG", "ScanCodeActivity onAnalyzeSuccess()" + result); + if (result.trim().length() == 26 && result.substring(0, 2).equals("01")) { + String makeChecksum = EncodingConversionTools.makeChecksum(result.substring(0, result.length() - 4)); + if (makeChecksum.toUpperCase().equals(result.substring(result.length() - 4, result.length()).toUpperCase())) { + resultString = result; +// repCheck(result.toUpperCase()); + Intent resultIntent = new Intent(ScanCodeActivity.this, SafeDevicePositionActivity.class); + Bundle bundle = new Bundle(); + bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_SUCCESS); + bundle.putString(CodeUtils.RESULT_STRING, resultString); + resultIntent.putExtras(bundle); + resultIntent.putExtra("ziId", ziId); + resultIntent.putExtra("deviceAddress", deviceAddress); + resultIntent.putExtra("addType", "1"); + startActivity(resultIntent); + ScanCodeActivity.this.finish(); + } else { + ToastUtil.show(ScanCodeActivity.this, R.string.Enter_correct_code); + } + } else if (result.contains("SN:")) { + //{SN:5K07055AAZ88D77,DT:ARC2000E-SW-LC,SC:L25EBF9B} + String sn = result.substring(result.indexOf("SN:") + 3, result.indexOf("SN:") + 18); + String rc = "123456"; + if (result.contains("RC:")) { + rc = result.substring(result.indexOf("RC:") + 3, result.indexOf("RC:") + 9); + } + if (result.contains("SC:")) { + rc = result.substring(result.indexOf("SC:") + 3, result.indexOf("SC:") + 11); + } + // checkOnBindandremind(sn, rc); + cameraIscCanAdd(sn, rc); + } else if (getIntent().getExtras().get("deviceType").toString().equals("000")) { + aiIscCanAdd(result); + } else if (result.contains(":")) { + //其他乐橙设备 + // checkOnBindandremind(result.substring(0, result.indexOf(":")), result.substring(result.lastIndexOf(":") + 1, result.lastIndexOf(":") + 7)); + cameraIscCanAdd(result.substring(0, result.indexOf(":")), result.substring(result.lastIndexOf(":") + 1, result.lastIndexOf(":") + 7)); + } else if (deviceType.equals(KUQI_PANEL)) { + //酷奇面板 + subsetAdd(result); + } + /*else if (result.contains(":") && result.contains(",") && result.contains("RC")) { + //有安全码的摄像头和烟雾 + Log.i("TAG", "ScanCodeActivity onAnalyzeSuccess()" + result); + checkOnBindandremind(result.substring(result.indexOf(":") + 1, result.indexOf(",")), result.substring(result.lastIndexOf(":") + 1, result.lastIndexOf(":") + 7)); + } else if (result.contains(":") && result.contains(",") && result.contains("NC")) { + //无安全码的摄像头 + checkOnBindandremind(result.substring(result.indexOf(":") + 1, result.indexOf(",")), "123456"); + } else if (result.contains(":")) { + //其他乐橙设备 + checkOnBindandremind(result.substring(0, result.indexOf(":")), result.substring(result.lastIndexOf(":") + 1, result.lastIndexOf(":") + 7)); + } */ + else { + Intent resultIntent = new Intent(); + Bundle bundle = new Bundle(); + bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_FAILED); + bundle.putString(CodeUtils.RESULT_STRING, ""); + resultIntent.putExtras(bundle); + ScanCodeActivity.this.setResult(REQUEST_CODE, resultIntent); + ScanCodeActivity.this.finish(); + } + } + + @Override + public void onAnalyzeFailed() { + Intent resultIntent = new Intent(); + Bundle bundle = new Bundle(); + bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_FAILED); + bundle.putString(CodeUtils.RESULT_STRING, ""); + resultIntent.putExtras(bundle); + ScanCodeActivity.this.setResult(REQUEST_CODE, resultIntent); + ScanCodeActivity.this.finish(); + } + }; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_scan_code); + + SoulPermission.getInstance().checkAndRequestPermissions( + Permissions.build(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE), + //if you want do noting or no need all the callbacks you may use SimplePermissionsAdapter instead + new CheckRequestPermissionsListener() { + @Override + public void onAllPermissionOk(Permission[] allPermissions) { + captureFragment = new CaptureFragment(); + // 为二维码扫描界面设置定制化界面 + CodeUtils.setFragmentArgs(captureFragment, R.layout.my_camera); + captureFragment.setAnalyzeCallback(analyzeCallback); + getSupportFragmentManager().beginTransaction().replace(R.id.fl_my_container, captureFragment).commit(); + } + + @Override + public void onPermissionDenied(Permission[] refusedPermissions) { + /*Toast.makeText(ScanCodeActivity.this, refusedPermissions[0].toString() + + " \n is refused you can not do next things", Toast.LENGTH_SHORT).show();*/ + } + }); + initView(); + } + + private void initView() { + ziId = (String) getIntent().getExtras().get("ziId"); + deviceAddress = (String) getIntent().getExtras().get("deviceAddress"); + if (null != getIntent().getExtras().get("deviceType")) { + deviceType = getIntent().getExtras().get("deviceType").toString(); + } + addByHandIv = (LinearLayout) findViewById(R.id.iv_add_by_hand); + ll_add_by_hand = (LinearLayout) findViewById(R.id.ll_add_by_hand); + addByHandIv.setOnClickListener(this); + mTitleView = (TitleView) findViewById(R.id.title_scan_code); + mTitleView.setHead(R.string.scan_device_code); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (deviceType.equals(KUQI_PANEL)) { + ll_add_by_hand.setVisibility(View.GONE); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_add_by_hand: + Intent intent; + if (deviceType.equals("000")) { + intent = new Intent(ScanCodeActivity.this, HandAddCodeActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + if (null != getIntent().getExtras().get("deviceType") && getIntent().getExtras().get("deviceType").toString().equals(GATE_WAY)) { + intent.putExtra("from", GATE_WAY); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + } else { + intent.putExtra("from", "others"); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + } + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + if (null != getIntent().getExtras().get("deviceType")) { + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + } + startActivity(intent); + } else { + intent = new Intent(ScanCodeActivity.this, HandAddLcActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + if (null != getIntent().getExtras().get("deviceType") && getIntent().getExtras().get("deviceType").toString().equals(GATE_WAY)) { + intent.putExtra("from", GATE_WAY); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + } else { + intent.putExtra("from", "others"); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("parentThirdDeviceId")) { + intent.putExtra("parentThirdDeviceId", getIntent().getExtras().get("parentThirdDeviceId").toString()); + } + } + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + if (null != getIntent().getExtras().get("deviceType")) { + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + } + startActivity(intent); + } + // finish(); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CAMERA_ISADD_FAIL: + if (deviceType.equals("000")) { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(ScanCodeActivity.this, AddLCSafeCompleteActivity.class); + intent.putExtra("deviceSN", (String) msg.obj); + intent.putExtra("deviceCode", ""); + intent.putExtra("deviceType", "000"); + intent.putExtra("deviceModel", ""); + startActivity(intent); + finish(); + } else { + ToastUtil.show(this, (String) msg.obj); + captureFragment.restartPreviewAndDecode(); + } + + break; + case SEND_ADDVOICE_CONTROL_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case SEND_ADDVOICE_CONTROL_SUCCESS: + Intent resultIntent = new Intent(ScanCodeActivity.this, SafeDevicePositionActivity.class); + Bundle bundle = new Bundle(); + bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_SUCCESS); + bundle.putString(CodeUtils.RESULT_STRING, resultString); + resultIntent.putExtras(bundle); + resultIntent.putExtra("ziId", ziId); + resultIntent.putExtra("deviceAddress", deviceAddress); + resultIntent.putExtra("addType", "1"); + startActivity(resultIntent); + ScanCodeActivity.this.finish(); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(ScanCodeActivity.this, AddLCSafeCompleteActivity.class); + intent.putExtra("deviceSN", ""); + intent.putExtra("deviceCode", ""); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", ""); + startActivity(intent); + finish(); + break; + } + } + + private void repCheck(String rawCode) { + + } + + private void cameraIscCanAdd(final String deviceSN, final String deviceCode) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("deviceId", deviceSN); + if (null != getIntent().getExtras().get("deviceModel")) { + map.put("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + map.put("deviceType", deviceType); + netWorkUtil.requestGetByAsy(CAMERA_ISADD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cameraIscCanAdd", "onSuccess()" + respone); + CheckBindEntity obj = JSON.parseObject(respone, CheckBindEntity.class); + if (1 == obj.getFlag()) { + WifiManager wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + switch (deviceType) { + case SAFE_DEVICE_TAG: + case DOOR_LOCK_TAG: + case INFRARED_TAG: + case SMOKE_TAG: + case GAS_TAG: + case WATER_TAG: + case INTELLIGENT_DOOR_LOCK: + case WIRELESS_EMERGENCY_BUTTON: + case INFRARED_CURTAIN_DETECTOR: + case SAFETY_DISPLACEMENT: + case SAFETY_ACOUSTO_OPTIC: + case SAFETY_WIRELESS_REMOTE: + Intent intent1 = new Intent(ScanCodeActivity.this, AddLCSafeActivity.class); + intent1.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent1.putExtra("from", "ScanCodeActivity"); + intent1.putExtra("deviceSN", deviceSN); + intent1.putExtra("deviceCode", deviceCode); + intent1.putExtra("deviceType", deviceType); + intent1.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent1.putExtra("parentThirdDeviceId", getIntent().getExtras().get("parentThirdDeviceId").toString()); + if (null != getIntent().getExtras().get("floor")) { + intent1.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + startActivity(intent1); + break; + case GATE_WAY: + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(ScanCodeActivity.this, ConnectWifiActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", GATE_WAY); + intent.putExtra("deviceSN", deviceSN); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceCode", deviceCode); + startActivity(intent); + } else { + Intent intent = new Intent(ScanCodeActivity.this, NoWifiConnectActicity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("from", GATE_WAY); + intent.putExtra("deviceCode", deviceCode); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + startActivity(intent); + } + break; + default: + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(ScanCodeActivity.this, ConnectWifiActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "ScanCodeActivity"); + intent.putExtra("deviceCode", deviceCode); + intent.putExtra("deviceSN", deviceSN); + startActivity(intent); + } else { + Intent intent = new Intent(ScanCodeActivity.this, NoWifiConnectActicity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("deviceCode", deviceCode); + intent.putExtra("from", "ScanCodeActivity"); + startActivity(intent); + } + break; + } + } else { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void aiIscCanAdd(String result) { + /*Intent intent = new Intent(ScanCodeActivity.this, SearchH3eDeviceActivity.class); + intent.putExtra("ssid", ""); + intent.putExtra("password", ""); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("addressTypeCode", "1"); + intent.putExtra("deviceAddress", "1"); + intent.putExtra("floor", "1"); + intent.putExtra("deviceCode", "000"); + intent.putExtra("result", result); + startActivity(intent); + finish();*/ + + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("appBrandId", "110301"); + map.put("ziId", result); + netWorkUtil.requestPostByAsynewApi(AIDEVICE_ISADD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("aiIscCanAdd", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Intent intent = new Intent(ScanCodeActivity.this, SearchH3eDeviceActivity.class); + intent.putExtra("ssid", ""); + intent.putExtra("password", ""); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("deviceCode", "000"); + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("titleRemark")) { + intent.putExtra("titleRemark", getIntent().getExtras().get("titleRemark").toString()); + } + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + intent.putExtra("result", result); + startActivity(intent); + finish(); + } else { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetAdd(String rawCode) { + String body = "{\"code\":\"" + rawCode + "\"}"; + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + map.put("ziId", ziId); + map.put("deviceType", deviceType); + map.put("addressId", getIntent().getExtras().get("deviceAddress").toString()); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /** + * 无线配对校验 + */ + public void checkOnBindandremind(final String deviceSN, final String deviceCode) { + Business.getInstance().checkBindOrNot(deviceSN, + new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + Business.RetObject retObject = (Business.RetObject) msg.obj; + if (msg.what == 0) { + CheckDeviceBindOrNot.Response resp = (CheckDeviceBindOrNot.Response) retObject.resp; + if (!resp.data.isBind) { + // Toast.makeText(ScanCodeActivity.this, "开启无线配对流程", Toast.LENGTH_SHORT).show(); + /*Intent intent = new Intent(ScanCodeActivity.this, LcnDeviceAddActivity.class); + intent.putExtra("deviceSN", deviceSN); + startActivityForResult(intent, 0);*/ + WifiManager wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + switch (getIntent().getExtras().get("deviceType").toString()) { + case SAFE_DEVICE_TAG: + case DOOR_LOCK_TAG: + case INFRARED_TAG: + case SMOKE_TAG: + case GAS_TAG: + case WATER_TAG: + case INTELLIGENT_DOOR_LOCK: + case WIRELESS_EMERGENCY_BUTTON: + case INFRARED_CURTAIN_DETECTOR: + Intent intent1 = new Intent(ScanCodeActivity.this, AddLCSafeActivity.class); + intent1.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent1.putExtra("from", "ScanCodeActivity"); + intent1.putExtra("deviceSN", deviceSN); + intent1.putExtra("deviceCode", deviceCode); + intent1.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + intent1.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent1.putExtra("parentThirdDeviceId", getIntent().getExtras().get("parentThirdDeviceId").toString()); + if (null != getIntent().getExtras().get("floor")) { + intent1.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + startActivity(intent1); + break; + case GATE_WAY: + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(ScanCodeActivity.this, ConnectWifiActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", GATE_WAY); + intent.putExtra("deviceSN", deviceSN); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceCode", deviceCode); + startActivity(intent); + } else { + Intent intent = new Intent(ScanCodeActivity.this, NoWifiConnectActicity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("from", GATE_WAY); + intent.putExtra("deviceCode", deviceCode); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + startActivity(intent); + } + break; + default: + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(ScanCodeActivity.this, ConnectWifiActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "ScanCodeActivity"); + intent.putExtra("deviceCode", deviceCode); + intent.putExtra("deviceSN", deviceSN); + startActivity(intent); + } else { + Intent intent = new Intent(ScanCodeActivity.this, NoWifiConnectActicity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("deviceCode", deviceCode); + intent.putExtra("from", "ScanCodeActivity"); + startActivity(intent); + } + break; + } + } else if (resp.data.isBind && resp.data.isMine) { + Toast.makeText(ScanCodeActivity.this, getString(R.string.toast_adddevice_already_binded_by_self), Toast.LENGTH_SHORT).show(); + captureFragment.restartPreviewAndDecode(); + } else { + Toast.makeText(ScanCodeActivity.this, getString(R.string.toast_adddevice_already_binded_by_others), Toast.LENGTH_SHORT).show(); + captureFragment.restartPreviewAndDecode(); + } + // finish(); + } else { + Toast.makeText(ScanCodeActivity.this, retObject.mMsg, Toast.LENGTH_SHORT).show(); + } + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/UpadateSafePosActivity.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/UpadateSafePosActivity.java new file mode 100644 index 0000000..7d4f8ed --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/UpadateSafePosActivity.java @@ -0,0 +1,306 @@ +package com.yonsz.z1.devicea2.safedevice; + +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.widget.CheckBox; +import android.widget.CompoundButton; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.ADD_SAFETY_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADD_SAFETY_ENTITY_SUCCESS; + +/** + * Created by Administrator on 2018/1/9. + */ + +public class UpadateSafePosActivity extends BaseActivity { + private TitleView mTitleView; + private String ziId; + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String position; + private List condition = new ArrayList<>(); + private String id; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_update_position); + initView(); + } + + private void initView() { + position = (String) getIntent().getExtras().get("addressId"); + ziId = (String) getIntent().getExtras().get("ziId"); + id = getIntent().getExtras().get("id").toString(); + mTitleView = (TitleView) findViewById(R.id.title_update_position); + mTitleView.setHead(R.string.update_position); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionTxtColor(false); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + updateSafetyEntity(); + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + mTitleView.setHeadFuntionTxtColor(true); + } + lastTimeCheckBox = buttonView; + } else { + // time = "0"; + // lastTimeCheckBox = null; + // if (id == lastTimeCheckBox.getId()) + // buttonView.setChecked(true); + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + + switch (id) { + case R.id.cb_position0: + if (isChecked) + position = "0"; + break; + case R.id.cb_position1: + if (isChecked) + position = "1"; + break; + case R.id.cb_position2: + if (isChecked) + position = "2"; + break; + case R.id.cb_position3: + if (isChecked) + position = "3"; + break; + case R.id.cb_position4: + if (isChecked) + position = "4"; + break; + case R.id.cb_position5: + if (isChecked) + position = "5"; + break; + case R.id.cb_position6: + if (isChecked) + position = "6"; + break; + case R.id.cb_position7: + if (isChecked) + position = "7"; + break; + case R.id.cb_position8: + if (isChecked) + position = "8"; + break; + case R.id.cb_position9: + if (isChecked) + position = "9"; + break; + case R.id.cb_position10: + if (isChecked) + position = "10"; + break; + case R.id.cb_position11: + if (isChecked) + position = "11"; + break; + case R.id.cb_position12: + if (isChecked) + position = "12"; + break; + case R.id.cb_position13: + if (isChecked) + position = "13"; + break; + } + } + }); + } + + switch (position) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_SAFETY_ENTITY_SUCCESS: + // final SafeVoiceEntity safeVoiceEntity = (SafeVoiceEntity) msg.obj; + ToastUtil.show(this, "修改成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + /*Intent intent = new Intent(UpadateSafePosActivity.this, SafeDeviceDetailActivity.class); + intent.putExtra("data", safeVoiceEntity.getObj().getAddressName()); + setResult(MODIFY_ADDRESS_RESULT, intent);*/ + finish(); + } + }, 1000); + break; + } + } + + private void updateSafetyEntity() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", id); + map.put("ziId", ziId); + if (position.equals("13")) { + map.put("addressId", "0"); + } else { + map.put("addressId", String.valueOf(Integer.valueOf(position) + 1)); + } + netWorkUtil.requestPostByAsynew(NetWorkUrl.UPDATE_SAFETY_ENTITY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateSafetyEntity", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_SAFETY_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_SAFETY_ENTITY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_SAFETY_ENTITY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/dialog/BaseDialogFragment.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/dialog/BaseDialogFragment.java new file mode 100644 index 0000000..721eb30 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/dialog/BaseDialogFragment.java @@ -0,0 +1,155 @@ +package com.yonsz.z1.devicea2.safedevice.dialog; + +import android.app.Activity; +import android.app.Dialog; +import android.content.Context; +import android.os.Build; +import android.os.Bundle; +import android.support.annotation.IdRes; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.util.DisplayMetrics; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; + +import com.gyf.barlibrary.ImmersionBar; +import com.yonsz.z1.R; + +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * DialogFragment 实现沉浸式的基类 + * Created by geyifeng on 2017/8/26. + */ + +public abstract class BaseDialogFragment extends DialogFragment { + + protected Activity mActivity; + protected View mRootView; + + protected ImmersionBar mImmersionBar; + protected Window mWindow; + protected int mWidth; //屏幕宽度 + protected int mHeight; //屏幕高度 + private Unbinder unbinder; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mActivity = (Activity) context; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //全屏 + setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialog); + } + + @Override + public void onStart() { + super.onStart(); + Dialog dialog = getDialog(); + dialog.setCanceledOnTouchOutside(true); //点击外部消失 + mWindow = dialog.getWindow(); + //测量宽高 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + DisplayMetrics dm = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getRealMetrics(dm); + mWidth = dm.widthPixels; + mHeight = dm.heightPixels; + } else { + DisplayMetrics metrics = getResources().getDisplayMetrics(); + mWidth = metrics.widthPixels; + mHeight = metrics.heightPixels; + } + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mRootView = inflater.inflate(setLayoutId(), container, false); + return mRootView; + } + + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + unbinder = ButterKnife.bind(this, view); + if (isImmersionBarEnabled()) + initImmersionBar(); + initData(); + initView(); + setListener(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + unbinder.unbind(); + if (mImmersionBar != null) + mImmersionBar.destroy(); + } + + /** + * Sets layout id. + * + * @return the layout id + */ + protected abstract int setLayoutId(); + + /** + * 是否在Fragment使用沉浸式 + * + * @return the boolean + */ + protected boolean isImmersionBarEnabled() { + return true; + } + + /** + * 初始化沉浸式 + */ + protected void initImmersionBar() { + mImmersionBar = ImmersionBar.with(this, getDialog()); + mImmersionBar.init(); + } + + + /** + * 初始化数据 + */ + protected void initData() { + + } + + /** + * view与数据绑定 + */ + protected void initView() { + + } + + /** + * 设置监听 + */ + protected void setListener() { + + } + + /** + * 找到activity的控件 + * + * @param the type parameter + * @param id the id + * @return the t + */ + @SuppressWarnings("unchecked") + protected T findActivityViewById(@IdRes int id) { + return (T) mActivity.findViewById(id); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/safedevice/dialog/FullDialogFragment.java b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/dialog/FullDialogFragment.java new file mode 100644 index 0000000..551f23b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/safedevice/dialog/FullDialogFragment.java @@ -0,0 +1,194 @@ +package com.yonsz.z1.devicea2.safedevice.dialog; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.Toolbar; +import android.view.View; +import android.widget.ImageView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.SafeLogEntity; +import com.yonsz.z1.fragment.message.SafeLogAdapter; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LoadMoreRecyclerView; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.REFRESH_DATA; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; + +/** + * Created by Administrator on 2018/1/2. + */ + +public class FullDialogFragment extends BaseDialogFragment { + + private int DATA_TYPE = REFRESH_DATA; + private boolean isRefresh; + private boolean isLoadMore; + private List mObjBeans; + private List mDatas; + private List> mDatasRercord = new ArrayList<>(); + private SafeLogAdapter mLogAdapter; + private Context context; + + @BindView(R.id.toolbar) + Toolbar toolbar; + @BindView(R.id.dialog_cancel_ok) + ImageView dialog_cancel_ok; + @BindView(R.id.log_recyclerview) + LoadMoreRecyclerView mLogRecycler; + @BindView(R.id.iv_alert_color) + ImageView iv_alert_color; + + public FullDialogFragment() { + } + + @SuppressLint({"NewApi", "ValidFragment"}) + public FullDialogFragment(Context context, List obj) { + this.mObjBeans = obj; + this.context = context; + } + + @Override + public void onStart() { + super.onStart(); + mWindow.setWindowAnimations(R.style.CustomDialog); + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(context); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mLogRecycler.setLayoutManager(manager); + mDatas = new ArrayList<>(); + mLogAdapter = new SafeLogAdapter(context, mDatasRercord); + mLogRecycler.setAdapter(mLogAdapter); + onSuccess(mObjBeans); + + for (int i = 0; i < mObjBeans.size(); i++) { + switch (mObjBeans.get(i).getDeviceType()) { + case SMOKE_TAG: + iv_alert_color.setImageResource(R.drawable.icon_popup_alert); + break; + case GAS_TAG: + iv_alert_color.setImageResource(R.drawable.icon_popup_alert); + break; + case WATER_TAG: + iv_alert_color.setImageResource(R.drawable.icon_popup_alert); + break; + } + } + } + + @Override + protected int setLayoutId() { + return R.layout.main_dialog; + } + + @Override + protected void initImmersionBar() { + super.initImmersionBar(); + mImmersionBar + .titleBar(toolbar) + .statusBarDarkFont(true) + .navigationBarColor(R.color.colorPrimary) + .keyboardEnable(true) + .init(); + } + + @Override + protected void setListener() { + dialog_cancel_ok.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + getDialog().dismiss(); + } + }); + } + + public void eixtDioalog() { + if (null != getDialog() && getDialog().isShowing()) { + getDialog().dismiss(); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + } + + private void onSuccess(List logEntities) { + for (int j = 0; j < mDatasRercord.size(); j++) { + for (int k = 0; k < mDatasRercord.get(j).size(); k++) { + String id = mDatasRercord.get(j).get(k).getId(); + for (int f = 0; f < logEntities.size(); f++) { + if (logEntities.get(f).getId().equals(id)) { + logEntities.remove(logEntities.get(f)); + } + } + } + } + if (null != logEntities && logEntities.size() > 0) { + String createDate = logEntities.get(0).getCreateDate().substring(0, 10); + if (mDatasRercord.size() == 0 || (mDatasRercord.get(0) != null && logEntities != null && logEntities.size() > 0 && !logEntities.get(0).getId().equals(mDatasRercord.get(0).get(0).getId()))) { + if (DATA_TYPE == REFRESH_DATA) { + isRefresh = false; + mDatas = new ArrayList<>(); + mDatasRercord.clear(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + if (mDatas.size() == logEntities.size()) { + mDatasRercord.add(mDatas); + } else if (i == logEntities.size() - 1) { + mDatasRercord.add(mDatas); + } + } + } else { + isLoadMore = false; + if (mDatas != null && mDatas.get(mDatas.size() - 1).getCreateDate().substring(0, 10).equals(createDate)) { + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } else { + mDatas = new ArrayList<>(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } + + } + mLogAdapter.notifyDataSetChanged(); + } else { + + } + isRefresh = false; + isLoadMore = false; + DATA_TYPE = -1; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/sweepa2/SweepA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/sweepa2/SweepA2Activity.java new file mode 100644 index 0000000..b011465 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/sweepa2/SweepA2Activity.java @@ -0,0 +1,1072 @@ +package com.yonsz.z1.devicea2.sweepa2; + +import android.app.Service; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.DeviceStateEntity; +import com.yonsz.z1.database.entity.entity4.LocalControlEvent; +import com.yonsz.z1.database.entity.entitya2.EventCloseEntity; +import com.yonsz.z1.database.entity.entitya2.KeyEntity; +import com.yonsz.z1.database.entity.entitya2.LearnWhatEvent; +import com.yonsz.z1.database.entity.entitya2.LoadEvent; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.device.tv.FanItem; +import com.yonsz.z1.device.tv.OnFanItemClickListener; +import com.yonsz.z1.device.tv.PieChartView; +import com.yonsz.z1.devicea2.tva2.HorizontalProgressBarWithNumber; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.utils.ConnectNettyUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.device.tv.PieChartView.isLongClickModule1; +import static com.yonsz.z1.net.Constans.APP_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_LEARN_ING; +import static com.yonsz.z1.net.Constans.FAN_LEARN_WHAT; +import static com.yonsz.z1.net.Constans.LEARN_RESULT; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_CONNDEVICE_PUSHKEY_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_CONNDEVICE_PUSHKEY_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_LOCAL_CONTROL; +import static com.yonsz.z1.net.Constans.SWEEP_ALONG; +import static com.yonsz.z1.net.Constans.SWEEP_DOWN; +import static com.yonsz.z1.net.Constans.SWEEP_LEFT; +import static com.yonsz.z1.net.Constans.SWEEP_OK; +import static com.yonsz.z1.net.Constans.SWEEP_OPEN; +import static com.yonsz.z1.net.Constans.SWEEP_RIGHT; +import static com.yonsz.z1.net.Constans.SWEEP_STRONG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_UP; +import static com.yonsz.z1.net.Constans.isLocalControl; + +/** + * Created by Administrator on 2017/11/10. + */ + +public class SweepA2Activity extends BaseActivity { + private static final int MSG_PROGRESS_UPDATE = 0x110; + public int mId; + private TitleView mTitleView; + private PieChartView chartView; + private TextView mOpenClose, mAlong, mOk, mStrong; + private TextView mDown, mLeft, mUp, mRight; + private LinearLayout learningLl, fanContinueLearnLl, fanTopLl; + private AlphaAnimation mAlphaAnimation; + private String userId; + private String ziId; + private boolean mOpenCloseTag, mOkTag, mDownTag, mLeftTag, mUpTag, mRightTag, mStrongTag, mAlongTag; + private ImageView mOpenCloseMark, mAlongMark, mOkMark, mStrongMark, mDownMark, mLeftMark, mUpMark, mRightMark; + private String sweepName; + private boolean isLearn = false; + private HorizontalProgressBarWithNumber mProgressBar; + private RelativeLayout progressRl; + private TextView progressTv; + private boolean isLoading = false; + private String sweepStateTag; + private TextView loadBackTv, tv_cancel_load; + private LoadingDialog mLoadingDialog; + private String cancelFlag; + private String deviceIp = ""; + private ImageView localControlIv, greenCircle; + private TextView tv_tv_ok; + + private boolean isOpenLearn = false, isAlongLearn = false, isOkLearn = false, isUpLearn = false, isDownlearn = false, isLeftLearn = false, isRightLearn = false, isStrongLearn = false; + private RelativeLayout rl_learn_guide; + private boolean isShowLearnGuide = false; + + + public void onEventMainThread(AppControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = APP_CONTROL_SUCCESS; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LocalControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = SHOW_LOCAL_CONTROL; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LoadEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_ING; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnWhatEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = FAN_LEARN_WHAT; + message.obj = msg; + mHandler.sendMessage(message); + } + + @Override + public void onBackPressed() { + if (isLoading) { + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + finish(); + } else { + finish(); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sweep_a2); + initView(); + initListener(); + } + + @Override + public void onResume() { + super.onResume(); + queryDeviceLastInfo(getIntent().getExtras().get("id").toString(), SWEEP_TAG); + if (isLearn) { + if (isOpenLearn) { + mOpenCloseMark.setVisibility(View.VISIBLE); + } + if (isUpLearn) { + mUpMark.setVisibility(View.VISIBLE); + } + if (isDownlearn) { + mDownMark.setVisibility(View.VISIBLE); + } + if (isLeftLearn) { + mLeftMark.setVisibility(View.VISIBLE); + } + if (isRightLearn) { + mRightMark.setVisibility(View.VISIBLE); + } + if (isOkLearn) { + mOkMark.setVisibility(View.VISIBLE); + } + if (isAlongLearn) { + mAlongMark.setVisibility(View.VISIBLE); + } + if (isStrongLearn) { + mStrongMark.setVisibility(View.VISIBLE); + } + } + } + + private void queryDeviceLastInfo(String deviceId, String deviceType) { + + } + + private void initView() { + sweepStateTag = getIntent().getExtras().get("sweepStateTag").toString(); + sweepName = getIntent().getExtras().get("sweepName").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + if (sweepStateTag.equals("1")) { + isLoading = false; + } else { + isLoading = true; + } + + rl_learn_guide = (RelativeLayout) findViewById(R.id.rl_learn_guide); + tv_tv_ok = (TextView) findViewById(R.id.tv_tv_ok); + localControlIv = (ImageView) findViewById(R.id.iv_local_control); + greenCircle = (ImageView) findViewById(R.id.iv_online_green_circle); + learningLl = (LinearLayout) findViewById(R.id.ll_learning); + loadBackTv = (TextView) findViewById(R.id.tv_load_back); + tv_cancel_load = (TextView) findViewById(R.id.tv_cancel_load); + mDown = (TextView) findViewById(R.id.iv_down); + mLeft = (TextView) findViewById(R.id.iv_left); + mUp = (TextView) findViewById(R.id.iv_up); + mRight = (TextView) findViewById(R.id.iv_right); + mOpenClose = (TextView) findViewById(R.id.tv_sweep_open); + mOk = (TextView) findViewById(R.id.tv_sweep_ok); + mAlong = (TextView) findViewById(R.id.tv_along); + mStrong = (TextView) findViewById(R.id.tv_strong); + + mDownMark = (ImageView) findViewById(R.id.iv_down_bg); + mLeftMark = (ImageView) findViewById(R.id.iv_left_bg); + mUpMark = (ImageView) findViewById(R.id.iv_up_bg); + mRightMark = (ImageView) findViewById(R.id.iv_right_bg); + mOpenCloseMark = (ImageView) findViewById(R.id.tv_sweep_open_mark); + mOkMark = (ImageView) findViewById(R.id.tv_sweep_ok_mark); + mAlongMark = (ImageView) findViewById(R.id.tv_along_mark); + mStrongMark = (ImageView) findViewById(R.id.tv_strong_mark); + + chartView = (PieChartView) findViewById(R.id.pieChartView); + chartView.setFanClickAbleData( + new double[]{90, 90, 90, 90}, + new int[]{Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT}, 0, mHandler); + + setPanClick(); + + progressRl = (RelativeLayout) findViewById(R.id.rl_progress_top); + progressTv = (TextView) findViewById(R.id.tv_progress_top); + mProgressBar = (HorizontalProgressBarWithNumber) findViewById(R.id.pg_horizontal_fan); + // mHandler.sendEmptyMessage(MSG_PROGRESS_UPDATE); + mTitleView = (TitleView) findViewById(R.id.title_sweep_a2); + mTitleView.clearBackGroud(); + if (sweepName != null) { + mTitleView.setHead(sweepName); + } else { + mTitleView.setHead("扫地机"); + } + mAlphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(SweepA2Activity.this, R.anim.alpha_anim_device); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (isLoading) { + + } else { + finish(); + } + } + + @Override + public void onFunction() { + if (isLoading) { + + } else { + if (isLearn) { + isLearn = false; + //查询学习按键 + selectConnDevicePushkey(); + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(SweepA2Activity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + ConfirmDialog dialog = new ConfirmDialog(SweepA2Activity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + deleteChildDevice(SWEEP_TAG, ziId); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + //重新命名 + break; + case 3: + //语令说明 + Intent intent = new Intent(SweepA2Activity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", SWEEP_TAG); + startActivity(intent); + break; + case 4: + //遥控学习 + isLearn = true; + //查询学习按键 + selectConnDevicePushkey(); + break; + } + } + }); + dialog2.setContent(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + } + + @Override + public void onFunctionText() { + + } + }); + + if (isLoading) { + progressRl.setVisibility(View.VISIBLE); + } else { + progressRl.setVisibility(View.GONE); + selectConnDevicePushkey(); + } + + if (null != getIntent().getExtras().get("cancelFlag")) { + cancelFlag = getIntent().getExtras().get("cancelFlag").toString(); + if (cancelFlag.equals("1")) { + ConfirmDialog dialog = new ConfirmDialog(SweepA2Activity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + finish(); + break; + case 1: + reloadInfrared(SWEEP_TAG); + break; + } + } + }); + dialog.setContent(R.string.Data_not_downloaded_reloaded); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else { + + } + } else { + + } + ConnectNettyUtil.connectNetty(ziId, deviceIp, this); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (isLocalControl) { + NettyManager.closeCtx(); + } + } + + private void reloadInfrared(String deviceType) { + /*NettyHandlerUtil.getInstance(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("deviceType", deviceType); + map.put("rid", getIntent().getExtras().get("rid").toString()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("reloadInfrared", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty message = JSON.parseObject(respone, SimpleEntty.class); + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + msg.obj = message; + mHandler.sendMessage(msg); + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void initListener() { + mOpenClose.setOnClickListener(this); + mOk.setOnClickListener(this); + mStrong.setOnClickListener(this); + mAlong.setOnClickListener(this); + progressRl.setOnClickListener(this); + loadBackTv.setOnClickListener(this); + tv_cancel_load.setOnClickListener(this); + tv_tv_ok.setOnClickListener(this); + rl_learn_guide.setOnClickListener(this); + } + + private void setPanClick() { + chartView.setOnFanClick(new OnFanItemClickListener() { + @Override + public void onFanClick(FanItem fanItem) { + mId = fanItem.getId(); + Intent intent; + if (isLearn) { + switch (mId) { + case 0: + mDown.setVisibility(View.VISIBLE); + intent = new Intent(SweepA2Activity.this, SweepLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 3); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case 1: + mLeft.setVisibility(View.VISIBLE); + intent = new Intent(SweepA2Activity.this, SweepLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 4); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case 2: + mUp.setVisibility(View.VISIBLE); + intent = new Intent(SweepA2Activity.this, SweepLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 2); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case 3: + mRight.setVisibility(View.VISIBLE); + intent = new Intent(SweepA2Activity.this, SweepLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 5); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + } + } else { + if (isLongClickModule1) { + + } else { + Log.i("OnTouchListener", "点击---处理" + mId); + switch (mId) { + case 0: + if (!mDownTag) { + mDown.setClickable(false); + mDown.setEnabled(false); + } else { + mDown.setEnabled(true); + mDown.setVisibility(View.VISIBLE); + } + break; + case 1: + if (!mLeftTag) { + mLeft.setEnabled(false); + } else { + mLeft.setEnabled(true); + mLeft.setVisibility(View.VISIBLE); + } + break; + case 2: + if (!mUpTag) { + mUp.setEnabled(false); + } else { + mUp.setEnabled(true); + mUp.setVisibility(View.VISIBLE); + } + break; + case 3: + if (!mRightTag) { + mRight.setEnabled(false); + } else { + mRight.setEnabled(true); + mRight.setVisibility(View.VISIBLE); + } + break; + } + } + } + } + + @Override + public void onFanLongClick(FanItem fanItem) { + mId = fanItem.getId(); + if (isLearn) { + + } else { + if (isLongClickModule1) { + Log.i("OnTouchListener", "处理长按---处理" + mId); + switch (mId) { + case 0: + if (!mDownTag) { + mDown.setClickable(false); + mDown.setEnabled(false); + } else { + mDown.setEnabled(true); + mDown.setVisibility(View.VISIBLE); + } + break; + case 1: + if (!mLeftTag) { + mLeft.setEnabled(false); + } else { + mLeft.setEnabled(true); + mLeft.setVisibility(View.VISIBLE); + } + break; + case 2: + if (!mUpTag) { + mUp.setEnabled(false); + } else { + mUp.setEnabled(true); + mUp.setVisibility(View.VISIBLE); + } + break; + case 3: + if (!mRightTag) { + mRight.setEnabled(false); + } else { + mRight.setEnabled(true); + mRight.setVisibility(View.VISIBLE); + } + break; + } + } + } + } + + @Override + public void onUp(FanItem fanItem) { + mId = fanItem.getId(); + if (isLearn) { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + switch (mId) { + case 0: + mDown.setVisibility(View.INVISIBLE); + break; + case 1: + mLeft.setVisibility(View.INVISIBLE); + break; + case 2: + mUp.setVisibility(View.INVISIBLE); + break; + case 3: + mRight.setVisibility(View.INVISIBLE); + break; + } + } + }, 200); + } else { + if (isLongClickModule1) { + Log.i("OnTouchListener", "处理长按---处理抬起" + mId); + switch (mId) { + case 0: + mDown.setVisibility(View.INVISIBLE); + break; + case 1: + mLeft.setVisibility(View.INVISIBLE); + break; + case 2: + mUp.setVisibility(View.INVISIBLE); + break; + case 3: + mRight.setVisibility(View.INVISIBLE); + break; + } + } else { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Log.i("OnTouchListener", "点击---处理抬起" + mId); + switch (mId) { + case 0: + if (mDownTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_DOWN)); + } else + controllerDevice(SWEEP_DOWN); + } + mDown.setVisibility(View.INVISIBLE); + break; + case 1: + if (mLeftTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_LEFT)); + } else + controllerDevice(SWEEP_LEFT); + } + mLeft.setVisibility(View.INVISIBLE); + break; + case 2: + if (mUpTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_UP)); + } else + controllerDevice(SWEEP_UP); + } + mUp.setVisibility(View.INVISIBLE); + break; + case 3: + if (mRightTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_RIGHT)); + } else + controllerDevice(SWEEP_RIGHT); + } + mRight.setVisibility(View.INVISIBLE); + break; + } + } + }, 200); + } + } + } + }); + } + + @Override + public void onClick(View v) { + Intent intent; + if (isLearn) { + switch (v.getId()) { + case R.id.tv_sweep_open: + intent = new Intent(SweepA2Activity.this, SweepLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 1); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_sweep_ok: + intent = new Intent(SweepA2Activity.this, SweepLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 6); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_along: + intent = new Intent(SweepA2Activity.this, SweepLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 7); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_strong: + intent = new Intent(SweepA2Activity.this, SweepLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 8); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_load_back: + SharedpreferencesUtil.save(ziId + SWEEP_TAG, true); + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + finish(); + break; + case R.id.rl_progress_top: + break; + case R.id.tv_tv_ok: + break; + } + } else { + switch (v.getId()) { + case R.id.tv_sweep_open: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_OPEN)); + } else + controllerDevice(SWEEP_OPEN); + break; + case R.id.tv_sweep_ok: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_OK)); + } else + controllerDevice(SWEEP_OK); + break; + case R.id.tv_strong: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_STRONG)); + } else + controllerDevice(SWEEP_STRONG); + break; + case R.id.tv_along: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(SWEEP_ALONG)); + } else + controllerDevice(SWEEP_ALONG); + break; + case R.id.tv_load_back: + SharedpreferencesUtil.save(ziId + SWEEP_TAG, true); + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + finish(); + break; + case R.id.rl_progress_top: + break; + case R.id.tv_cancel_load: + cancelDownload(); + break; + case R.id.tv_tv_ok: + break; + case R.id.rl_learn_guide: + rl_learn_guide.setVisibility(View.GONE); + isShowLearnGuide = false; + SharedpreferencesUtil.save(ziId + SWEEP_TAG, false); + break; + } + } + } + + private void cancelDownload() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceType", SWEEP_TAG); + netWorkUtil.requestPostByAsynewApi(CANCEL_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cancelDownload", "ShareDeviceActivity onSuccess()" + respone); + finish(); + } + + @Override + public void onFail(String message) { + } + });*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FAN_LEARN_ING: + NettyEntity nettyEntity = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + float countNum = Integer.parseInt(nettyEntity.getCountNum()); + float loadNum = Integer.parseInt(nettyEntity.getLoadNum()); + mProgressBar.setProgress((int) (loadNum / countNum * 100)); + if (loadNum / countNum == 1) { + isLoading = false; + progressTv.setText(R.string.load_complete); + isShowLearnGuide = true; + progressRl.setVisibility(View.GONE); + if (mLoadingDialog != null && mLoadingDialog.isShowing()) { + + } else { + initLoadDialog(); + } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + selectConnDevicePushkey(); + } + }, 2000); + } + break; + case SELECT_CONNDEVICE_PUSHKEY_SUCCESS: + KeyEntity entity1 = (KeyEntity) msg.obj; + List entity1Obj = entity1.getObj(); + if (entity1Obj != null && entity1Obj.size() != 0) { + for (int i = 0; i < entity1Obj.size(); i++) { + Log.i("getPushKey", "FanA2Activity callBackUiThread()" + entity1Obj.get(i).getPushKey()); + switch (entity1Obj.get(i).getPushKey()) { + case "01": + mOkTag = true; + break; + case "02": + mUpTag = true; + break; + case "03": + mDownTag = true; + break; + case "04": + mLeftTag = true; + break; + case "05": + mRightTag = true; + break; + case "06": + mOpenCloseTag = true; + break; + case "07": + mAlongTag = true; + break; + case "08": + mStrongTag = true; + break; + } + } + } + if (isLearn) { + showLearn(); + } else { + showControl(); + } + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + if (isShowLearnGuide || SharedpreferencesUtil.get(ziId + SWEEP_TAG)) { + rl_learn_guide.setVisibility(View.VISIBLE); + } else { + rl_learn_guide.setVisibility(View.GONE); + } + break; + case DELETE_CHILDDEVICE_SUCCESS: + + break; + case DELETE_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DOWNLOAD_INFRARED_BYRID_SUCCESS: + progressRl.setVisibility(View.VISIBLE); + break; + case FAN_LEARN_WHAT: + String obj = (String) msg.obj; + switch (obj) { + case "1": + isOpenLearn = true; + break; + case "2": + isUpLearn = true; + break; + case "3": + isDownlearn = true; + break; + case "4": + isLeftLearn = true; + break; + case "5": + isRightLearn = true; + break; + case "6": + isOkLearn = true; + break; + case "7": + isAlongLearn = true; + break; + case "8": + isStrongLearn = true; + break; + } + break; + case SHOW_LOCAL_CONTROL: + String obj2 = (String) msg.obj; + if (obj2.equals("1")) { + localControlIv.setVisibility(View.VISIBLE); + } else { + localControlIv.setVisibility(View.GONE); + } + break; + case APP_CONTROL_SUCCESS: + NettyEntity nettyEntity1 = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + if (nettyEntity1.getDeviceType().equals(SWEEP_TAG)) { + if (nettyEntity1.getOpenFlag().equals("1")) { + greenCircle.setVisibility(View.VISIBLE); + greenCircle.startAnimation(mAlphaAnimation); + ToastUtil.show(this, "扫地机已打开"); + } else { + greenCircle.setVisibility(View.GONE); + greenCircle.clearAnimation(); + } + } + break; + case QUERY_DEVICE_LASTINFO_SUCCESS: + DeviceStateEntity parseObject = (DeviceStateEntity) msg.obj; + if (parseObject.getData().getOpenFlag().equals("1")) { + greenCircle.setVisibility(View.VISIBLE); + greenCircle.startAnimation(mAlphaAnimation); + ToastUtil.show(this, "扫地机已打开"); + } else { + greenCircle.setVisibility(View.GONE); + greenCircle.clearAnimation(); + } + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + private void showLearn() { + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setHeadFuntionGone(); + learningLl.setVisibility(View.VISIBLE); + + if (isOpenLearn) { + mOpenCloseMark.setVisibility(View.VISIBLE); + } + if (isUpLearn) { + mUpMark.setVisibility(View.VISIBLE); + } + if (isDownlearn) { + mDownMark.setVisibility(View.VISIBLE); + } + if (isLeftLearn) { + mLeftMark.setVisibility(View.VISIBLE); + } + if (isRightLearn) { + mRightMark.setVisibility(View.VISIBLE); + } + if (isOkLearn) { + mOkMark.setVisibility(View.VISIBLE); + } + if (isAlongLearn) { + mAlongMark.setVisibility(View.VISIBLE); + } + if (isStrongLearn) { + mStrongMark.setVisibility(View.VISIBLE); + } + + mOpenClose.setAlpha(1.0f); + mOpenClose.setEnabled(true); + mAlong.setAlpha(1.0f); + mAlong.setEnabled(true); + mOk.setAlpha(1.0f); + mOk.setEnabled(true); + mStrong.setAlpha(1.0f); + mStrong.setEnabled(true); + } + + private void showControl() { + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + learningLl.setVisibility(View.GONE); + + mOpenCloseMark.setVisibility(View.GONE); + mUpMark.setVisibility(View.GONE); + mDownMark.setVisibility(View.GONE); + mLeftMark.setVisibility(View.GONE); + mRightMark.setVisibility(View.GONE); + mOkMark.setVisibility(View.GONE); + mStrongMark.setVisibility(View.GONE); + mAlongMark.setVisibility(View.GONE); + + if (!mOpenCloseTag) { + mOpenClose.setAlpha(0.5f); + mOpenClose.setEnabled(false); + } else { + mOpenClose.setAlpha(1.0f); + mOpenClose.setEnabled(true); + } + if (!mOkTag) { + mOk.setAlpha(0.5f); + mOk.setEnabled(false); + } else { + mOk.setAlpha(1.0f); + mOk.setEnabled(true); + } + if (!mAlongTag) { + mAlong.setAlpha(0.5f); + mAlong.setEnabled(false); + } else { + mAlong.setAlpha(1.0f); + mAlong.setEnabled(true); + } + if (!mStrongTag) { + mStrong.setAlpha(0.5f); + mStrong.setEnabled(false); + } else { + mStrong.setAlpha(1.0f); + mStrong.setEnabled(true); + } + } + + private void selectConnDevicePushkey() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", SWEEP_TAG); + map.put("ziId", ziId); + netWorkUtil.requestPostByAsynew(SELECT_CONNDEVICE_PUSHKEY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectConnDevicePushkey", "ShareDeviceActivity onSuccess()" + respone); + KeyEntity obj = JSON.parseObject(respone, KeyEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void controllerDevice(String sendMsg) { + /*setShake(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); + map.put("sendMsg", sendMsg); + netWorkUtil.requestPostByAsyn(ziId, CONTROLLER_DEVICE_A2, map, "a2/control/device", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("controllerDevice", "ShareDeviceActivity onSuccess()" + respone); + *//*RomoteListA2Entity obj = JSON.parseObject(respone, RomoteListA2Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*//* + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/sweepa2/SweepLearnGuideA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/sweepa2/SweepLearnGuideA2Activity.java new file mode 100644 index 0000000..01ec9d4 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/sweepa2/SweepLearnGuideA2Activity.java @@ -0,0 +1,355 @@ +package com.yonsz.z1.devicea2.sweepa2; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.LearnEvent; +import com.yonsz.z1.database.entity.LearnFailEvent; +import com.yonsz.z1.database.entity.SecondEvent; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.device.airconditioner.AirAutoFailActivity; +import com.yonsz.z1.devicea2.SureLearnA2Activity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.FAN_LEARN_FAIL; +import static com.yonsz.z1.net.Constans.FAN_LEARN_ING; +import static com.yonsz.z1.net.Constans.FAN_LEARN_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_SUCCESS; +import static com.yonsz.z1.net.Constans.SWEEP_ALONG; +import static com.yonsz.z1.net.Constans.SWEEP_DOWN; +import static com.yonsz.z1.net.Constans.SWEEP_LEFT; +import static com.yonsz.z1.net.Constans.SWEEP_OK; +import static com.yonsz.z1.net.Constans.SWEEP_OPEN; +import static com.yonsz.z1.net.Constans.SWEEP_RIGHT; +import static com.yonsz.z1.net.Constans.SWEEP_STRONG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_UP; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * Created by Administrator on 2017/9/7. + */ +public class SweepLearnGuideA2Activity extends BaseActivity { + private TitleView mTitleView; + private TextView mLearnGuide; + private String userId; + private String ziId; + private int learnGuide; + private StateButton mStateButton; + private int sec = 30; + private LinearLayout ll_learn_bg; + private TextView getLearnGuide; + private MediaPlayer mediaPlayer01; + private LoadingDialog mLoadingDialog; + private boolean learningFlag = false; + private TextView tv_2_second; + private TextView tv_press; + private String deviceType = SWEEP_TAG; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_learn_guide_new); + //注册eventBus + // EventBus.getDefault().register(this); + NettyHandlerUtil.getInstance(); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initView() { + mStateButton = (StateButton) findViewById(R.id.bt_sec); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + mLearnGuide = (TextView) findViewById(R.id.tv_learn_guide); + mTitleView = (TitleView) findViewById(R.id.title_learn_guide); + ll_learn_bg = (LinearLayout) findViewById(R.id.ll_learn_bg); + if (null != getIntent().getExtras().get("subVersion") && getIntent().getExtras().get("subVersion").toString().equals("D")) { + ll_learn_bg.setBackgroundResource(R.drawable.pic_instruction_d1); + } + if (AddressNameUtil.getAiModel(ziId).contains("B3")) { + ll_learn_bg.setBackgroundResource(R.drawable.pic_instruction_b3); + } + getLearnGuide = (TextView) findViewById(R.id.tv_guide_device); + tv_2_second = (TextView) findViewById(R.id.tv_2_second); + tv_press = (TextView) findViewById(R.id.tv_press); + getLearnGuide.setText("提示灯变为红色后,将扫地机遥控器对"); + mTitleView.setHead(R.string.sweep_learn_guide); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (getIntent().getExtras().get("learnGuide") != null) { + learnGuide = Integer.parseInt(getIntent().getExtras().get("learnGuide").toString()); + switch (learnGuide) { + case 1: + mLearnGuide.setText(R.string.Switch); + enterLearnState("power"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_22); + mediaPlayer01.start(); + } + break; + case 2: + mLearnGuide.setText("向上"); + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + enterLearnState("up"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_24); + mediaPlayer01.start(); + } + break; + case 3: + mLearnGuide.setText("向下"); + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + enterLearnState("down"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_25); + mediaPlayer01.start(); + } + break; + case 4: + mLearnGuide.setText("向左"); + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + enterLearnState("left"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_26); + mediaPlayer01.start(); + } + break; + case 5: + mLearnGuide.setText("向右"); + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + enterLearnState("right"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_27); + mediaPlayer01.start(); + } + break; + case 6: + mLearnGuide.setText("回充"); + enterLearnState("charge"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_23); + mediaPlayer01.start(); + } + break; + case 7: + mLearnGuide.setText(R.string.Edgeways_mode); + enterLearnState("edgewise"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_28); + mediaPlayer01.start(); + } + break; + case 8: + mLearnGuide.setText(R.string.Strong_mode); + enterLearnState("strong"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_29); + mediaPlayer01.start(); + } + break; + } + } + } + + private void enterLearnState(final String sendMsg) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("appId", DifferConstans.APPID_S); + map.put("macId", ziId); + map.put("ziId", ziId); + map.put("sendMsg", sendMsg); + map.put("oper", sendMsg); + map.put("pushKey", sendMsg); + map.put("deviceType", deviceType); + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + util.requestPostByAsynewApi(NetWorkUrl.INFRARED_KEYSTUDY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("enterLearnState", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(SecondEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnFailEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_FAIL; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_ING; + mHandler.sendMessage(message); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FAN_LEARN_SUCCESS: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(SweepLearnGuideA2Activity.this, "学习成功"); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(SweepLearnGuideA2Activity.this, SureLearnA2Activity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("type", SWEEP_TAG); + intent.putExtra("ziId", ziId); + if (null != getIntent().getExtras().get("subVersion")) { + intent.putExtra("subVersion", getIntent().getExtras().get("subVersion").toString()); + } + startActivity(intent); + finish(); + } + }, 1000); + break; + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + /*if (mLoadingDialog != null) { + mLoadingDialog.setMessage(sec + ""); + }*/ + } else { + if (learningFlag) { + Intent intent = new Intent(SweepLearnGuideA2Activity.this, SureLearnA2Activity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("type", SWEEP_TAG); + intent.putExtra("ziId", ziId); + if (null != getIntent().getExtras().get("subVersion")) { + intent.putExtra("subVersion", getIntent().getExtras().get("subVersion").toString()); + } + startActivity(intent); + finish(); + } else { + finish(); + } + } + break; + case FAN_LEARN_ING: + initLoadDialog(); + learningFlag = true; + sec = 10; + break; + case FAN_LEARN_FAIL: + Intent intent1 = new Intent(SweepLearnGuideA2Activity.this, AirAutoFailActivity.class); + intent1.putExtra("ziId", ziId); + intent1.putExtra("tag", SWEEP_TAG); + intent1.putExtra("learnGuide", learnGuide); + if (null != getIntent().getExtras().get("subVersion")) { + intent1.putExtra("subVersion", getIntent().getExtras().get("subVersion").toString()); + } + startActivity(intent1); + finish(); + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.setMessage(R.string.saving); + mLoadingDialog.show(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + //取消eventBus注册 + // EventBus.getDefault().unregister(this); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/sweepa2/SweepTryA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/sweepa2/SweepTryA2Activity.java new file mode 100644 index 0000000..9a90aec --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/sweepa2/SweepTryA2Activity.java @@ -0,0 +1,390 @@ +package com.yonsz.z1.devicea2.sweepa2; + +import android.app.Service; +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.NormalEntity; +import com.yonsz.z1.database.entity.entitya2.RomoteListA2Entity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_FAIL; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDKEY_INFRARED_2MAC_FAIL; +import static com.yonsz.z1.net.Constans.SENDKEY_INFRARED_2MAC_SUCCESS; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.NetWorkUrl.SEARCH_ROUND; +import static com.yonsz.z1.net.NetWorkUrl.YKY_DOWNLOAD; + +/** + * Created by Administrator on 2017/11/10. + */ + +public class SweepTryA2Activity extends BaseActivity { + private TitleView mTitleView; + private Button sureBt; + private String allData; + private List mRoundListEntities = new ArrayList<>(); + private TextView currentNumber, totalNumber; + private int currentIndex, totalIndex; + private TextView tryBt, beforeOne, nextOne; + private String ziId; + private String deviceType; + private String redId; + private LoadingDialog mLoadingDialog; + private MediaPlayer mediaPlayer01; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fan_try); + deviceType = getIntent().getExtras().get("deviceType").toString(); + initView(); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_53); + mediaPlayer01.start(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + allData = (String) getIntent().getExtras().get("allData"); + if (allData != null) { + RomoteListA2Entity obj = JSON.parseObject(allData, RomoteListA2Entity.class); + mRoundListEntities = obj.getObj().getRoundList(); + } + currentNumber = (TextView) findViewById(R.id.tv_current_number); + totalNumber = (TextView) findViewById(R.id.tv_total_number); + sureBt = (Button) findViewById(R.id.bt_sure_config); + tryBt = (TextView) findViewById(R.id.tv_open_light); + beforeOne = (TextView) findViewById(R.id.tv_no_use); + nextOne = (TextView) findViewById(R.id.tv_next); + mTitleView = (TitleView) findViewById(R.id.title_fan_try); + mTitleView.setHead(R.string.match_remote); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + sureBt.setOnClickListener(this); + tryBt.setOnClickListener(this); + beforeOne.setOnClickListener(this); + nextOne.setOnClickListener(this); + totalNumber.setText(mRoundListEntities.size() + ""); + totalIndex = mRoundListEntities.size(); + currentIndex = (int) getIntent().getExtras().get("currentIndex"); + currentNumber.setText(currentIndex + ""); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + subsetAdd(ziId, deviceType, getIntent().getExtras().get("brandName").toString()); + break; + case R.id.tv_open_light: + setShake(); + searchRound(currentIndex - 1); + break; + case R.id.tv_no_use: + if (currentIndex > 1) { + currentIndex -= 1; + currentNumber.setText(currentIndex + ""); + } + break; + case R.id.tv_next: + if (currentIndex < totalIndex) { + currentIndex += 1; + currentNumber.setText(currentIndex + ""); + } + break; + } + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void searchRound(int currentIndex) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + // map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); + map.put("code", (int) mRoundListEntities.get(currentIndex).getZip() + mRoundListEntities.get(currentIndex).getKeyInfrared()); + netWorkUtil.requestPostByAsynewApi(SEARCH_ROUND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("searchRound", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else if (1004 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + redId = entity1.getObj().getId().toString(); + /*String deviceId = entity1.getObj().getDeviceId(); + switch (deviceId) { + case FAN_TAG: + Intent intent = new Intent(FanTryA2Activity.this, FanA2Activity.class); + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("fanName", entity1.getObj().getDeviceBrand().toString()); + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + finish(); + break; + }*/ + downloadInfraredByRid(entity1); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DOWNLOAD_INFRARED_BYRID_SUCCESS: + NettyHandlerUtil.getInstance(); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(SweepTryA2Activity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(SweepTryA2Activity.this, DeviceControlActivity.class); + } + intent.putExtra("sweepStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("sweepName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break; + case DOWNLOAD_INFRARED_BYRID_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + /*case SENDKEY_INFRARED_2MAC_SUCCESS: + NettyHandlerUtil.getInstance(); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(SweepTryA2Activity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(SweepTryA2Activity.this, DeviceControlActivity.class); + } + intent.putExtra("sweepStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("sweepName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break;*/ + case SENDKEY_INFRARED_2MAC_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case SEARCH_ROUND_FAIL: + SimpleEntty simpleEntty = (SimpleEntty) msg.obj; + ToastUtil.show(this, simpleEntty.getMsg().toString()); + break; + case SEARCH_ROUND_SUCCESS: + + break; + } + } + + private void downloadInfraredByRid(AddChildDeviceEntity entity1) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("deviceType", deviceType); + map.put("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadInfraredByRid", "ShareDeviceActivity onSuccess()" + respone); + /*Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + mHandler.sendMessage(msg);*/ + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void subsetAdd(String ziId, String deviceType, String deviceBrand) { + BaseVersion5Entity.DataBean body = new BaseVersion5Entity.DataBean(); + body.setRid(mRoundListEntities.get(currentIndex - 1).getRid()); + body.setDeviceBrand(deviceBrand); + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", "1"); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + map.put("addressId", localAddAddressId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, JSONObject.toJSONString(body), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /* private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceId", deviceType); + map.put("deviceType", deviceType); + map.put("deviceBrand", deviceBrand); + map.put("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + util.requestPostByAsynew(NetWorkUrl.ADD_CHILD_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + AddChildDeviceEntity entity = JSON.parseObject(respone, AddChildDeviceEntity.class); + Log.i("addChildDevice", "onSuccess: " + respone); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + }*/ +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/tva2/HorizontalProgressBarWithNumber.java b/app/src/main/java/com/yonsz/z1/devicea2/tva2/HorizontalProgressBarWithNumber.java new file mode 100644 index 0000000..a4f0333 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/tva2/HorizontalProgressBarWithNumber.java @@ -0,0 +1,223 @@ +package com.yonsz.z1.devicea2.tva2; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.widget.ProgressBar; + +import com.yonsz.z1.R; + +public class HorizontalProgressBarWithNumber extends ProgressBar { + + private static final int DEFAULT_TEXT_SIZE = 14; + private static final int DEFAULT_TEXT_COLOR = 0XFFF5A623; + private static final int DEFAULT_COLOR_UNREACHED_COLOR = 0xFFD8D8D8; + private static final int DEFAULT_HEIGHT_REACHED_PROGRESS_BAR = 2; + private static final int DEFAULT_HEIGHT_UNREACHED_PROGRESS_BAR = 2; + private static final int DEFAULT_SIZE_TEXT_OFFSET = 14; + + /** + * painter of all drawing things + */ + protected Paint mPaint = new Paint(); + /** + * color of progress number + */ + protected int mTextColor = DEFAULT_TEXT_COLOR; + /** + * size of text (sp) + */ + protected int mTextSize = sp2px(DEFAULT_TEXT_SIZE); + + /** + * offset of draw progress + */ + protected int mTextOffset = dp2px(DEFAULT_SIZE_TEXT_OFFSET); + + /** + * height of reached progress bar + */ + protected int mReachedProgressBarHeight = dp2px(DEFAULT_HEIGHT_REACHED_PROGRESS_BAR); + + /** + * color of reached bar + */ + protected int mReachedBarColor = DEFAULT_TEXT_COLOR; + /** + * color of unreached bar + */ + protected int mUnReachedBarColor = DEFAULT_COLOR_UNREACHED_COLOR; + /** + * height of unreached progress bar + */ + protected int mUnReachedProgressBarHeight = dp2px(DEFAULT_HEIGHT_UNREACHED_PROGRESS_BAR); + /** + * view width except padding + */ + protected int mRealWidth; + + protected boolean mIfDrawText = true; + + protected static final int VISIBLE = 0; + + public HorizontalProgressBarWithNumber(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public HorizontalProgressBarWithNumber(Context context, AttributeSet attrs, + int defStyle) { + super(context, attrs, defStyle); + obtainStyledAttributes(attrs); + mPaint.setTextSize(mTextSize); + mPaint.setColor(mTextColor); + } + + @Override + protected synchronized void onMeasure(int widthMeasureSpec, + int heightMeasureSpec) { + + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = measureHeight(heightMeasureSpec); + setMeasuredDimension(width, height); + + mRealWidth = getMeasuredWidth() - getPaddingRight() - getPaddingLeft(); + } + + private int measureHeight(int measureSpec) { + int result = 0; + int specMode = MeasureSpec.getMode(measureSpec); + int specSize = MeasureSpec.getSize(measureSpec); + if (specMode == MeasureSpec.EXACTLY) { + result = specSize; + } else { + float textHeight = (mPaint.descent() - mPaint.ascent()); + result = (int) (getPaddingTop() + getPaddingBottom() + Math.max( + Math.max(mReachedProgressBarHeight, + mUnReachedProgressBarHeight), Math.abs(textHeight))); + if (specMode == MeasureSpec.AT_MOST) { + result = Math.min(result, specSize); + } + } + return result; + } + + /** + * get the styled attributes + * + * @param attrs + */ + private void obtainStyledAttributes(AttributeSet attrs) { + // init values from custom attributes + final TypedArray attributes = getContext().obtainStyledAttributes( + attrs, R.styleable.HorizontalProgressBarWithNumber); + + mTextColor = attributes + .getColor( + R.styleable.HorizontalProgressBarWithNumber_progress_text_color, + DEFAULT_TEXT_COLOR); + mTextSize = (int) attributes.getDimension( + R.styleable.HorizontalProgressBarWithNumber_progress_text_size, + mTextSize); + + mReachedBarColor = attributes + .getColor( + R.styleable.HorizontalProgressBarWithNumber_progress_reached_color, + mTextColor); + mUnReachedBarColor = attributes + .getColor( + R.styleable.HorizontalProgressBarWithNumber_progress_unreached_color, + DEFAULT_COLOR_UNREACHED_COLOR); + mReachedProgressBarHeight = (int) attributes + .getDimension( + R.styleable.HorizontalProgressBarWithNumber_progress_reached_bar_height, + mReachedProgressBarHeight); + mUnReachedProgressBarHeight = (int) attributes + .getDimension( + R.styleable.HorizontalProgressBarWithNumber_progress_unreached_bar_height, + mUnReachedProgressBarHeight); + mTextOffset = (int) attributes + .getDimension( + R.styleable.HorizontalProgressBarWithNumber_progress_text_offset, + mTextOffset); + + int textVisible = attributes + .getInt(R.styleable.HorizontalProgressBarWithNumber_progress_text_visibility, + VISIBLE); + if (textVisible != VISIBLE) { + mIfDrawText = false; + } + attributes.recycle(); + } + + @Override + protected synchronized void onDraw(Canvas canvas) { + + canvas.save(); + canvas.translate(getPaddingLeft(), getHeight() / 2); + + boolean noNeedBg = false; + float radio = getProgress() * 1.0f / getMax(); + float progressPosX = (int) (mRealWidth * radio); + String text = getProgress() + "%"; + // mPaint.getTextBounds(text, 0, text.length(), mTextBound); + + float textWidth = mPaint.measureText(text); + float textHeight = (mPaint.descent() + mPaint.ascent()) / 2; + + if (progressPosX + textWidth > mRealWidth) { + progressPosX = mRealWidth - textWidth; + noNeedBg = true; + } + + // draw reached bar + float endX = progressPosX - mTextOffset / 2; + if (endX > 0) { + mPaint.setColor(mReachedBarColor); + mPaint.setStrokeWidth(mReachedProgressBarHeight); + canvas.drawLine(0, 0, endX, 0, mPaint); + } + // draw progress bar + // measure text bound + if (mIfDrawText) { + mPaint.setColor(mTextColor); + canvas.drawText(text, progressPosX, -textHeight, mPaint); + } + + // draw unreached bar + if (!noNeedBg) { + float start = progressPosX + mTextOffset / 2 + textWidth; + mPaint.setColor(mUnReachedBarColor); + mPaint.setStrokeWidth(mUnReachedProgressBarHeight); + canvas.drawLine(start, 0, mRealWidth, 0, mPaint); + } + + canvas.restore(); + + } + + /** + * dp 2 px + * + * @param dpVal + */ + protected int dp2px(int dpVal) { + return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, + dpVal, getResources().getDisplayMetrics()); + } + + /** + * sp 2 px + * + * @param spVal + * @return + */ + protected int sp2px(int spVal) { + return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, + spVal, getResources().getDisplayMetrics()); + + } + +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvA2Activity.java new file mode 100644 index 0000000..5337374 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvA2Activity.java @@ -0,0 +1,1297 @@ +package com.yonsz.z1.devicea2.tva2; + +import android.app.Service; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.DeviceStateEntity; +import com.yonsz.z1.database.entity.entity4.LocalControlEvent; +import com.yonsz.z1.database.entity.entitya2.EventCloseEntity; +import com.yonsz.z1.database.entity.entitya2.KeyEntity; +import com.yonsz.z1.database.entity.entitya2.LearnWhatEvent; +import com.yonsz.z1.database.entity.entitya2.LoadEvent; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.device.tv.FanItem; +import com.yonsz.z1.device.tv.OnFanItemClickListener; +import com.yonsz.z1.device.tv.PieChartView; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.utils.ConnectNettyUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.id.tv_tv_voice; +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.device.tv.PieChartView.isLongClickModule1; +import static com.yonsz.z1.net.Constans.APP_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_LEARN_ING; +import static com.yonsz.z1.net.Constans.FAN_LEARN_WHAT; +import static com.yonsz.z1.net.Constans.LEARN_RESULT; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_FAIL; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_CONNDEVICE_PUSHKEY_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_CONNDEVICE_PUSHKEY_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_LOCAL_CONTROL; +import static com.yonsz.z1.net.Constans.TV_BACK; +import static com.yonsz.z1.net.Constans.TV_DOWN; +import static com.yonsz.z1.net.Constans.TV_HOME; +import static com.yonsz.z1.net.Constans.TV_JIDINGHE; +import static com.yonsz.z1.net.Constans.TV_LEFT; +import static com.yonsz.z1.net.Constans.TV_MENU; +import static com.yonsz.z1.net.Constans.TV_OK; +import static com.yonsz.z1.net.Constans.TV_OPEN; +import static com.yonsz.z1.net.Constans.TV_RIGHT; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.TV_UP; +import static com.yonsz.z1.net.Constans.TV_VOLADD; +import static com.yonsz.z1.net.Constans.TV_VOLREDUCE; +import static com.yonsz.z1.net.Constans.isLocalControl; +import static com.yonsz.z1.net.NetWorkUrl.CANCEL_DOWNLOAD; +import static com.yonsz.z1.net.NetWorkUrl.QUERY_DEVICE_LASTINFO; +import static com.yonsz.z1.net.NetWorkUrl.YKY_DOWNLOAD; + +/** + * Created by Administrator on 2017/11/10. + */ + +public class TvA2Activity extends BaseActivity { + private static final int MSG_PROGRESS_UPDATE = 0x110; + public int mId; + private TitleView mTitleView; + private PieChartView chartView; + private String userId; + private String ziId; + private TextView mOpenClose, mVoice, mOk, mHome, mBack, mMenu, mVolAdd, mVolReduce, mDown, mLeft, mUp, mRight; + private boolean mOpenCloseTag, mVoiceTag, mOkTag, mHomeTag, mBackTag, mMenuTag, mVolAddTag, mVolReduceTag, mDownTag, mLeftTag, mUpTag, mRightTag; + private ImageView mOpenCloseMark, mVoiceMark, mOkMark, mHomeMark, mBackMark, mMenuMark, mVolAddMark, mVolReduceMark, mDownMark, mLeftMark, mUpMark, mRightMark; + private ImageView mVoicePic, mHomePic, mBackPic, mMenuPic, mVolAddPic, mVolRedPic; + private HorizontalProgressBarWithNumber mProgressBar; + private RelativeLayout progressRl; + private TextView progressTv; + private boolean isLoading = false; + private String tvStateTag; + private TextView loadBackTv, tv_cancel_load; + private String tvName; + private LoadingDialog mLoadingDialog; + private String cancelFlag; + private boolean isLearn = false; + private LinearLayout learningLl; + private boolean isTv = true; + private String deviceIp = ""; + private ImageView localControlIv, greenCircle; + private boolean isOpenCloseLearn = false, isJidingheLearn = false, isOkLearn = false, isHomeLearn = false, isBackLearn = false, isMenuLearn = false, isVolAddLearn = false, isVolReduceLearn = false, isDownLearn = false, isLeftLearn = false, isUpLearn = false, isRightLearn = false; + private AlphaAnimation mAlphaAnimation; + private RelativeLayout rl_learn_guide; + private boolean isShowLearnGuide = false; + + public void onEventMainThread(AppControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = APP_CONTROL_SUCCESS; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LocalControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = SHOW_LOCAL_CONTROL; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LoadEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_ING; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnWhatEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = FAN_LEARN_WHAT; + message.obj = msg; + mHandler.sendMessage(message); + } + + @Override + public void onBackPressed() { + if (isLoading) { + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + finish(); + } else { + finish(); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tv_a2); + initView(); + initListener(); + } + + @Override + public void onResume() { + super.onResume(); + queryDeviceLastInfo(getIntent().getExtras().get("id").toString(), TV_TAG); + if (isLearn) { + if (isOpenCloseLearn) { + mOpenCloseMark.setVisibility(View.VISIBLE); + } + if (isJidingheLearn) { + mVoiceMark.setVisibility(View.VISIBLE); + } + if (isUpLearn) { + mUpMark.setVisibility(View.VISIBLE); + } + if (isDownLearn) { + mDownMark.setVisibility(View.VISIBLE); + } + if (isLeftLearn) { + mLeftMark.setVisibility(View.VISIBLE); + } + if (isRightLearn) { + mRightMark.setVisibility(View.VISIBLE); + } + if (isOkLearn) { + mOkMark.setVisibility(View.VISIBLE); + } + if (isHomeLearn) { + mHomeMark.setVisibility(View.VISIBLE); + } + if (isMenuLearn) { + mMenuMark.setVisibility(View.VISIBLE); + } + if (isBackLearn) { + mBackMark.setVisibility(View.VISIBLE); + } + if (isVolAddLearn) { + mVolAddMark.setVisibility(View.VISIBLE); + } + if (isVolReduceLearn) { + mVolReduceMark.setVisibility(View.VISIBLE); + } + } + } + + private void queryDeviceLastInfo(String deviceId, String deviceType) { + + } + + private void initView() { + tvStateTag = getIntent().getExtras().get("tvStateTag").toString(); + tvName = getIntent().getExtras().get("tvName").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + if (tvStateTag.equals("1")) { + isLoading = false; + } else { + isLoading = true; + } + rl_learn_guide = (RelativeLayout) findViewById(R.id.rl_learn_guide); + localControlIv = (ImageView) findViewById(R.id.iv_local_control); + greenCircle = (ImageView) findViewById(R.id.iv_online_green_circle); + learningLl = (LinearLayout) findViewById(R.id.ll_learning); + loadBackTv = (TextView) findViewById(R.id.tv_load_back); + tv_cancel_load = (TextView) findViewById(R.id.tv_cancel_load); + mDown = (TextView) findViewById(R.id.iv_down); + mLeft = (TextView) findViewById(R.id.iv_left); + mUp = (TextView) findViewById(R.id.iv_up); + mRight = (TextView) findViewById(R.id.iv_right); + mOpenClose = (TextView) findViewById(R.id.tv_tv_open); + mVoice = (TextView) findViewById(tv_tv_voice); + mOk = (TextView) findViewById(R.id.tv_tv_ok); + mHome = (TextView) findViewById(R.id.tv_tv_home); + mMenu = (TextView) findViewById(R.id.tv_tv_menu); + mBack = (TextView) findViewById(R.id.tv_tv_back); + mVolAdd = (TextView) findViewById(R.id.tv_tv_voladd); + mVolReduce = (TextView) findViewById(R.id.tv_tv_volreduce); + + mDownMark = (ImageView) findViewById(R.id.iv_down_bg); + mLeftMark = (ImageView) findViewById(R.id.iv_left_bg); + mUpMark = (ImageView) findViewById(R.id.iv_up_bg); + mRightMark = (ImageView) findViewById(R.id.iv_right_bg); + mOpenCloseMark = (ImageView) findViewById(R.id.tv_tv_open_mark); + mVoiceMark = (ImageView) findViewById(R.id.tv_tv_voice_mark); + mOkMark = (ImageView) findViewById(R.id.tv_tv_ok_mark); + mHomeMark = (ImageView) findViewById(R.id.tv_tv_home_mark); + mMenuMark = (ImageView) findViewById(R.id.tv_tv_menu_mark); + mBackMark = (ImageView) findViewById(R.id.tv_tv_back_mark); + mVolAddMark = (ImageView) findViewById(R.id.tv_tv_voladd_mark); + mVolReduceMark = (ImageView) findViewById(R.id.tv_tv_volreduce_mark); + + mVoicePic = (ImageView) findViewById(R.id.iv_tv_voice); + mHomePic = (ImageView) findViewById(R.id.iv_tv_home); + mMenuPic = (ImageView) findViewById(R.id.iv_tv_menu); + mBackPic = (ImageView) findViewById(R.id.iv_tv_back); + mVolAddPic = (ImageView) findViewById(R.id.iv_tv_add); + mVolRedPic = (ImageView) findViewById(R.id.iv_tv_reduce); + + progressRl = (RelativeLayout) findViewById(R.id.rl_progress_top); + progressTv = (TextView) findViewById(R.id.tv_progress_top); + mProgressBar = (HorizontalProgressBarWithNumber) findViewById(R.id.pg_horizontal_fan); + // mHandler.sendEmptyMessage(MSG_PROGRESS_UPDATE); + mTitleView = (TitleView) findViewById(R.id.title_tv); + mTitleView.clearBackGroud(); + if (!tvName.isEmpty()) { + mTitleView.setHead(tvName); + } else { + mTitleView.setHead("电视"); + } + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mAlphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(TvA2Activity.this, R.anim.alpha_anim_device); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (isLoading) { + + } else { + finish(); + } + } + + @Override + public void onFunction() { + clearMark(); + if (isLoading) { + + } else { + if (isLearn) { + isLearn = false; + //查询学习按键 + selectConnDevicePushkey(); + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(TvA2Activity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + ConfirmDialog dialog = new ConfirmDialog(TvA2Activity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + deleteChildDevice(TV_TAG, ziId); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + //重新命名 + break; + case 3: + //语令说明 + Intent intent = new Intent(TvA2Activity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", TV_TAG); + startActivity(intent); + break; + case 4: + //遥控学习 + isLearn = true; + //查询学习按键 + selectConnDevicePushkey(); + break; + } + } + }); + dialog2.setContent(); + dialog2.setContent(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + } + + @Override + public void onFunctionText() { + + } + }); + + chartView = (PieChartView) findViewById(R.id.pieChartView); + chartView.setFanClickAbleData( + new double[]{90, 90, 90, 90}, + new int[]{Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT}, 0, mHandler); + setPanClick(); + + if (isLoading) { + progressRl.setVisibility(View.VISIBLE); + } else { + progressRl.setVisibility(View.GONE); + selectConnDevicePushkey(); + } + + if (null != getIntent().getExtras().get("cancelFlag")) { + cancelFlag = getIntent().getExtras().get("cancelFlag").toString(); + if (cancelFlag.equals("1")) { + ConfirmDialog dialog = new ConfirmDialog(TvA2Activity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + finish(); + break; + case 1: + reloadInfrared(TV_TAG); + break; + } + } + }); + dialog.setContent(R.string.Data_not_downloaded_reloaded); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else { + + } + } else { + + } + ConnectNettyUtil.connectNetty(ziId, deviceIp, this); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (isLocalControl) { + NettyManager.closeCtx(); + } + } + + private void clearMark() { + mOpenCloseMark.setVisibility(View.GONE); + mUpMark.setVisibility(View.GONE); + mDownMark.setVisibility(View.GONE); + mLeftMark.setVisibility(View.GONE); + mRightMark.setVisibility(View.GONE); + mOkMark.setVisibility(View.GONE); + mHomeMark.setVisibility(View.GONE); + mBackMark.setVisibility(View.GONE); + mMenuMark.setVisibility(View.GONE); + mVoiceMark.setVisibility(View.GONE); + mVolAddMark.setVisibility(View.GONE); + mVolReduceMark.setVisibility(View.GONE); + } + + private void reloadInfrared(String deviceType) { + /* NettyHandlerUtil.getInstance(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("deviceType", deviceType); + map.put("rid", getIntent().getExtras().get("rid").toString()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("reloadInfrared", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty message = JSON.parseObject(respone, SimpleEntty.class); + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_SUCCESS); + msg.obj = message; + mHandler.sendMessage(msg); + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DOWNLOAD_INFRARED_BYRID_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void setPanClick() { + chartView.setOnFanClick(new OnFanItemClickListener() { + @Override + public void onFanClick(FanItem fanItem) { + mId = fanItem.getId(); + Intent intent; + if (isLearn) { + switch (mId) { + case 0: + mDown.setVisibility(View.VISIBLE); + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 3); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case 1: + mLeft.setVisibility(View.VISIBLE); + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 4); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case 2: + mUp.setVisibility(View.VISIBLE); + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 2); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case 3: + mRight.setVisibility(View.VISIBLE); + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 5); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + } + } else { + switch (mId) { + case 0: + if (!mDownTag) { + mDown.setClickable(false); + mDown.setEnabled(false); + } else { + mDown.setEnabled(true); + mDown.setVisibility(View.VISIBLE); + } + break; + case 1: + if (!mLeftTag) { + mLeft.setEnabled(false); + } else { + mLeft.setEnabled(true); + mLeft.setVisibility(View.VISIBLE); + } + break; + case 2: + if (!mUpTag) { + mUp.setEnabled(false); + } else { + mUp.setEnabled(true); + mUp.setVisibility(View.VISIBLE); + } + break; + case 3: + if (!mRightTag) { + mRight.setEnabled(false); + } else { + mRight.setEnabled(true); + mRight.setVisibility(View.VISIBLE); + } + break; + } + } + } + + @Override + public void onFanLongClick(FanItem fanItem) { + mId = fanItem.getId(); + if (isLearn) { + + } else { + if (isLongClickModule1) { + Log.i("OnTouchListener", "处理长按---处理" + mId); + switch (mId) { + case 0: + if (!mDownTag) { + mDown.setClickable(false); + mDown.setEnabled(false); + } else { + mDown.setEnabled(true); + mDown.setVisibility(View.VISIBLE); + // longPressTv(TV_DOWN); + } + break; + case 1: + if (!mLeftTag) { + mLeft.setEnabled(false); + } else { + mLeft.setEnabled(true); + mLeft.setVisibility(View.VISIBLE); + // longPressTv(TV_LEFT); + } + break; + case 2: + if (!mUpTag) { + mUp.setEnabled(false); + } else { + mUp.setEnabled(true); + mUp.setVisibility(View.VISIBLE); + // longPressTv(TV_UP); + } + break; + case 3: + if (!mRightTag) { + mRight.setEnabled(false); + } else { + mRight.setEnabled(true); + mRight.setVisibility(View.VISIBLE); + // longPressTv(TV_RIGHT); + } + break; + } + + } + } + } + + @Override + public void onUp(FanItem fanItem) { + if (fanItem != null) { + mId = fanItem.getId(); + } + if (isLearn) { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + switch (mId) { + case 0: + mDown.setVisibility(View.INVISIBLE); + break; + case 1: + mLeft.setVisibility(View.INVISIBLE); + break; + case 2: + mUp.setVisibility(View.INVISIBLE); + break; + case 3: + mRight.setVisibility(View.INVISIBLE); + break; + } + } + }, 200); + } else { + if (isLongClickModule1) { + Log.i("OnTouchListener", "处理长按---处理抬起" + mId); + switch (mId) { + case 0: + mDown.setVisibility(View.INVISIBLE); + // cancleLongPress(TV_DOWN); + break; + case 1: + mLeft.setVisibility(View.INVISIBLE); + // cancleLongPress(TV_LEFT); + break; + case 2: + mUp.setVisibility(View.INVISIBLE); + // cancleLongPress(TV_UP); + break; + case 3: + mRight.setVisibility(View.INVISIBLE); + // cancleLongPress(TV_RIGHT); + break; + } + } else { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Log.i("OnTouchListener", "点击---处理抬起" + mId); + switch (mId) { + case 0: + if (mDownTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_DOWN)); + } else + controllerDevice(TV_DOWN); + } + mDown.setVisibility(View.INVISIBLE); + break; + case 1: + if (mLeftTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_LEFT)); + } else + controllerDevice(TV_LEFT); + } + mLeft.setVisibility(View.INVISIBLE); + break; + case 2: + if (mUpTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_UP)); + } else + controllerDevice(TV_UP); + } + mUp.setVisibility(View.INVISIBLE); + break; + case 3: + if (mRightTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_RIGHT)); + } else + controllerDevice(TV_RIGHT); + } + mRight.setVisibility(View.INVISIBLE); + break; + } + } + }, 200); + } + } + } + }); + } + + private void initListener() { + mOpenClose.setOnClickListener(this); + mVoice.setOnClickListener(this); + mOk.setOnClickListener(this); + mHome.setOnClickListener(this); + mMenu.setOnClickListener(this); + mBack.setOnClickListener(this); + mVolAdd.setOnClickListener(this); + mVolReduce.setOnClickListener(this); + loadBackTv.setOnClickListener(this); + tv_cancel_load.setOnClickListener(this); + progressRl.setOnClickListener(this); + rl_learn_guide.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + Intent intent; + if (isLearn) { + switch (v.getId()) { + case R.id.tv_tv_open: + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 10); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case tv_tv_voice: + if (mVoiceTag) { + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 1); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + } else { + ToastUtil.show(TvA2Activity.this, "请先添加机顶盒"); + } + break; + case R.id.tv_tv_ok: + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 6); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_tv_home: + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 7); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_tv_menu: + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 9); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_tv_back: + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 8); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_tv_voladd: + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 11); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_tv_volreduce: + intent = new Intent(TvA2Activity.this, TvLearnGuideA2Activity.class); + intent.putExtra("learnGuide", 12); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + startActivityForResult(intent, LEARN_RESULT); + break; + case R.id.tv_load_back: + SharedpreferencesUtil.save(ziId + TV_TAG, true); + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + finish(); + break; + case R.id.rl_progress_top: + break; + } + } else { + switch (v.getId()) { + case R.id.tv_tv_open: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_OPEN)); + } else { + controllerDevice(TV_OPEN); + } + break; + case tv_tv_voice: + if (mVoiceTag) { + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_JIDINGHE)); + } else { + controllerDevice(TV_JIDINGHE); + } + } else { + ToastUtil.show(TvA2Activity.this, "请先添加机顶盒"); + } + break; + case R.id.tv_tv_ok: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_OK)); + } else + controllerDevice(TV_OK); + break; + case R.id.tv_tv_home: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_HOME)); + } else + controllerDevice(TV_HOME); + break; + case R.id.tv_tv_menu: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_MENU)); + } else + controllerDevice(TV_MENU); + break; + case R.id.tv_tv_back: + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_BACK)); + } else + controllerDevice(TV_BACK); + break; + case R.id.tv_tv_voladd: + Log.i("onLongClick", "TvControlActivity onLongClick()" + "点击音量加"); + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_VOLADD)); + } else + controllerDevice(TV_VOLADD); + break; + case R.id.tv_tv_volreduce: + Log.i("onLongClick", "TvControlActivity onLongClick()" + "点击音量减"); + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(TV_VOLREDUCE)); + } else + controllerDevice(TV_VOLREDUCE); + break; + case R.id.tv_load_back: + SharedpreferencesUtil.save(ziId + TV_TAG, true); + EventBus.getDefault().post( + new EventCloseEntity("关闭")); + finish(); + break; + case R.id.rl_progress_top: + break; + case R.id.tv_cancel_load: + cancelDownload(); + break; + case R.id.rl_learn_guide: + rl_learn_guide.setVisibility(View.GONE); + isShowLearnGuide = false; + SharedpreferencesUtil.save(ziId + TV_TAG, false); + break; + } + } + } + + private void cancelDownload() { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceType", TV_TAG); + netWorkUtil.requestPostByAsynewApi(CANCEL_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cancelDownload", "ShareDeviceActivity onSuccess()" + respone); + finish(); + } + + @Override + public void onFail(String message) { + } + });*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FAN_LEARN_ING: + NettyEntity nettyEntity = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + float countNum = Integer.parseInt(nettyEntity.getCountNum()); + float loadNum = Integer.parseInt(nettyEntity.getLoadNum()); + mProgressBar.setProgress((int) (loadNum / countNum * 100)); + if (loadNum / countNum == 1) { + isLoading = false; + progressTv.setText(R.string.load_complete); + isShowLearnGuide = true; + progressRl.setVisibility(View.GONE); + if (mLoadingDialog != null && mLoadingDialog.isShowing()) { + + } else { + initLoadDialog(); + } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + selectConnDevicePushkey(); + } + }, 2000); + } + break; + case SELECT_CONNDEVICE_PUSHKEY_SUCCESS: + KeyEntity entity1 = (KeyEntity) msg.obj; + List entity1Obj = entity1.getObj(); + if (entity1Obj != null && entity1Obj.size() != 0) { + for (int i = 0; i < entity1Obj.size(); i++) { + Log.i("getPushKey", "FanA2Activity callBackUiThread()" + entity1Obj.get(i).getPushKey()); + switch (entity1Obj.get(i).getPushKey()) { + case "01": + mOpenCloseTag = true; + break; + case "02": + mUpTag = true; + break; + case "03": + mDownTag = true; + break; + case "04": + mLeftTag = true; + break; + case "05": + mRightTag = true; + break; + case "06": + mOkTag = true; + break; + case "07": + mHomeTag = true; + break; + case "08": + mBackTag = true; + break; + case "09": + mMenuTag = true; + break; + case "0b": + mVolReduceTag = true; + break; + case "0a": + mVolAddTag = true; + break; + case "0d": + isTv = false; + mVoiceTag = true; + break; + } + } + } + if (isLearn) { + showLearn(); + } else { + showControl(); + } + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + if (isShowLearnGuide || SharedpreferencesUtil.get(ziId + TV_TAG)) { + rl_learn_guide.setVisibility(View.VISIBLE); + } else { + rl_learn_guide.setVisibility(View.GONE); + } + break; + case DELETE_CHILDDEVICE_SUCCESS: + + break; + case DELETE_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case DOWNLOAD_INFRARED_BYRID_SUCCESS: + progressRl.setVisibility(View.VISIBLE); + break; + case FAN_LEARN_WHAT: + String obj = (String) msg.obj; + switch (obj) { + case "1": + isJidingheLearn = true; + break; + case "2": + isUpLearn = true; + break; + case "3": + isDownLearn = true; + break; + case "4": + isLeftLearn = true; + break; + case "5": + isRightLearn = true; + break; + case "6": + isOkLearn = true; + break; + case "7": + isHomeLearn = true; + break; + case "8": + isBackLearn = true; + break; + case "9": + isMenuLearn = true; + break; + case "10": + isOpenCloseLearn = true; + break; + case "11": + isVolAddLearn = true; + break; + case "12": + isVolReduceLearn = true; + break; + } + break; + case SHOW_LOCAL_CONTROL: + String obj2 = (String) msg.obj; + if (obj2.equals("1")) { + localControlIv.setVisibility(View.VISIBLE); + } else { + localControlIv.setVisibility(View.GONE); + } + break; + case APP_CONTROL_SUCCESS: + NettyEntity nettyEntity1 = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + if (nettyEntity1.getDeviceType().equals(TV_TAG)) { + if (nettyEntity1.getOpenFlag().equals("1")) { + greenCircle.setVisibility(View.VISIBLE); + greenCircle.startAnimation(mAlphaAnimation); + ToastUtil.show(this, "电视已打开"); + } else { + greenCircle.setVisibility(View.GONE); + greenCircle.clearAnimation(); + } + } + break; + case QUERY_DEVICE_LASTINFO_SUCCESS: + DeviceStateEntity parseObject = (DeviceStateEntity) msg.obj; + if (parseObject.getData().getOpenFlag().equals("1")) { + greenCircle.setVisibility(View.VISIBLE); + greenCircle.startAnimation(mAlphaAnimation); + ToastUtil.show(this, "电视已打开"); + } else { + greenCircle.setVisibility(View.GONE); + greenCircle.clearAnimation(); + } + break; + } + } + + private void deleteChildDevice(String deviceType, String ziId) { + + } + + private void showLearn() { + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setHeadFuntionGone(); + learningLl.setVisibility(View.VISIBLE); + + if (isOpenCloseLearn) { + mOpenCloseMark.setVisibility(View.VISIBLE); + } + if (isJidingheLearn) { + mVoiceMark.setVisibility(View.VISIBLE); + } + if (isUpLearn) { + mUpMark.setVisibility(View.VISIBLE); + } + if (isDownLearn) { + mDownMark.setVisibility(View.VISIBLE); + } + if (isLeftLearn) { + mLeftMark.setVisibility(View.VISIBLE); + } + if (isRightLearn) { + mRightMark.setVisibility(View.VISIBLE); + } + if (isOkLearn) { + mOkMark.setVisibility(View.VISIBLE); + } + if (isHomeLearn) { + mHomeMark.setVisibility(View.VISIBLE); + } + if (isMenuLearn) { + mMenuMark.setVisibility(View.VISIBLE); + } + if (isBackLearn) { + mBackMark.setVisibility(View.VISIBLE); + } + if (isVolAddLearn) { + mVolAddMark.setVisibility(View.VISIBLE); + } + if (isVolReduceLearn) { + mVolReduceMark.setVisibility(View.VISIBLE); + } + + mOpenClose.setAlpha(1.0f); + mOpenClose.setEnabled(true); + mVoice.setAlpha(1.0f); + mVoice.setEnabled(true); + mOk.setAlpha(1.0f); + mOk.setEnabled(true); + mHome.setAlpha(1.0f); + mHome.setEnabled(true); + mBack.setAlpha(1.0f); + mBack.setEnabled(true); + mMenu.setAlpha(1.0f); + mMenu.setEnabled(true); + mVolAdd.setAlpha(1.0f); + mVolAdd.setEnabled(true); + mVolReduce.setAlpha(1.0f); + mVolReduce.setEnabled(true); + mVoicePic.setAlpha(1.0f); + mHomePic.setAlpha(1.0f); + mMenuPic.setAlpha(1.0f); + mBackPic.setAlpha(1.0f); + mVolAddPic.setAlpha(1.0f); + mVolRedPic.setAlpha(1.0f); + } + + + private void showControl() { + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + learningLl.setVisibility(View.GONE); + + mOpenCloseMark.setVisibility(View.GONE); + mUpMark.setVisibility(View.GONE); + mDownMark.setVisibility(View.GONE); + mLeftMark.setVisibility(View.GONE); + mRightMark.setVisibility(View.GONE); + mOkMark.setVisibility(View.GONE); + mHomeMark.setVisibility(View.GONE); + mBackMark.setVisibility(View.GONE); + mMenuMark.setVisibility(View.GONE); + mVoiceMark.setVisibility(View.GONE); + mVolAddMark.setVisibility(View.GONE); + mVolReduceMark.setVisibility(View.GONE); + + if (!mOpenCloseTag) { + mOpenClose.setAlpha(0.5f); + mOpenClose.setEnabled(false); + } else { + mOpenClose.setAlpha(1.0f); + mOpenClose.setEnabled(true); + } + if (!mVoiceTag) { + mVoice.setAlpha(0.5f); + mVoicePic.setAlpha(0.5f); + } else { + mVoice.setAlpha(1.0f); + mVoicePic.setAlpha(1.0f); + } + if (!mOkTag) { + mOk.setAlpha(0.5f); + mOk.setEnabled(false); + } else { + mOk.setAlpha(1.0f); + mOk.setEnabled(true); + } + if (!mHomeTag) { + mHome.setAlpha(0.5f); + mHomePic.setAlpha(0.5f); + mHome.setEnabled(false); + } else { + mHome.setAlpha(1.0f); + mHomePic.setAlpha(1.0f); + mHome.setEnabled(true); + } + if (!mBackTag) { + mBack.setAlpha(0.5f); + mBackPic.setAlpha(0.5f); + mBack.setEnabled(false); + } else { + mBack.setAlpha(1.0f); + mBackPic.setAlpha(1.0f); + mBack.setEnabled(true); + } + if (!mMenuTag) { + mMenu.setAlpha(0.5f); + mMenuPic.setAlpha(0.5f); + mMenu.setEnabled(false); + } else { + mMenu.setAlpha(1.0f); + mMenuPic.setAlpha(1.0f); + mMenu.setEnabled(true); + } + if (!mVolAddTag) { + mVolAdd.setAlpha(0.5f); + mVolAddPic.setAlpha(0.5f); + mVolAdd.setEnabled(false); + } else { + mVolAdd.setAlpha(1.0f); + mVolAddPic.setAlpha(1.0f); + mVolAdd.setEnabled(true); + } + if (!mVolReduceTag) { + mVolReduce.setAlpha(0.5f); + mVolRedPic.setAlpha(0.5f); + mVolReduce.setEnabled(false); + } else { + mVolReduce.setAlpha(1.0f); + mVolRedPic.setAlpha(1.0f); + mVolReduce.setEnabled(true); + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void selectConnDevicePushkey() { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", TV_TAG); + map.put("ziId", ziId); + netWorkUtil.requestPostByAsynew(SELECT_CONNDEVICE_PUSHKEY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectConnDevicePushkey", "ShareDeviceActivity onSuccess()" + respone); + KeyEntity obj = JSON.parseObject(respone, KeyEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_CONNDEVICE_PUSHKEY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void controllerDevice(String sendMsg) { + /*setShake(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); + map.put("sendMsg", sendMsg); + netWorkUtil.requestPostByAsyn(ziId, CONTROLLER_DEVICE_A2, map, "a2/control/device", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("controllerDevice", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else if (1004 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvLearnGuideA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvLearnGuideA2Activity.java new file mode 100644 index 0000000..42228dd --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvLearnGuideA2Activity.java @@ -0,0 +1,415 @@ +package com.yonsz.z1.devicea2.tva2; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.LearnEvent; +import com.yonsz.z1.database.entity.LearnFailEvent; +import com.yonsz.z1.database.entity.SecondEvent; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.device.airconditioner.AirAutoFailActivity; +import com.yonsz.z1.devicea2.SureLearnA2Activity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.FAN_LEARN_FAIL; +import static com.yonsz.z1.net.Constans.FAN_LEARN_ING; +import static com.yonsz.z1.net.Constans.FAN_LEARN_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_FAIL; +import static com.yonsz.z1.net.Constans.SEND_CONTROL_ORDER_SUCCESS; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * Created by Administrator on 2017/6/26. + */ + +public class TvLearnGuideA2Activity extends BaseActivity { + private TitleView mTitleView; + private TextView mLearnGuide; + private TextView tv_guide_device; + private String userId; + private String ziId; + private int learnGuide; + private StateButton mStateButton; + private int sec = 30; + private MediaPlayer mediaPlayer01; + private LoadingDialog mLoadingDialog; + private boolean learningFlag = false; + private boolean isTv; + private TextView tv_2_second; + private TextView tv_press; + private LinearLayout ll_learn_bg; + private String deviceType = ""; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_learn_guide_new); + //注册eventBus + // EventBus.getDefault().register(this); + NettyHandlerUtil.getInstance(); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initView() { + isTv = (boolean) getIntent().getExtras().get("isTv"); + mStateButton = (StateButton) findViewById(R.id.bt_sec); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + mLearnGuide = (TextView) findViewById(R.id.tv_learn_guide); + tv_2_second = (TextView) findViewById(R.id.tv_2_second); + tv_press = (TextView) findViewById(R.id.tv_press); + tv_guide_device = (TextView) findViewById(R.id.tv_guide_device); + mTitleView = (TitleView) findViewById(R.id.title_learn_guide); + ll_learn_bg = (LinearLayout) findViewById(R.id.ll_learn_bg); + if (null != getIntent().getExtras().get("subVersion")) { + if (getIntent().getExtras().get("subVersion").toString().equals("D")) { + ll_learn_bg.setBackgroundResource(R.drawable.pic_instruction_d1); + } + } + if (AddressNameUtil.getAiModel(ziId).contains("B3")) { + ll_learn_bg.setBackgroundResource(R.drawable.pic_instruction_b3); + } + mTitleView.setHead(R.string.tv_learn_guide); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (isTv) { + deviceType = TV_TAG; + tv_guide_device.setText("提示灯变为红色后,将电视遥控器对"); + } else { + deviceType = TVONE_TAG; + mTitleView.setHead("机顶盒遥控学习"); + } + if (getIntent().getExtras().get("learnGuide") != null) { + learnGuide = Integer.parseInt(getIntent().getExtras().get("learnGuide").toString()); + switch (learnGuide) { + case 1: + setViewAndVoiceDate(getString(R.string.Switch), "power", R.raw.recording_77, R.raw.recording_77); + break; + case 2: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("向上", "up", R.raw.recording_8, R.raw.recording_82); + break; + case 3: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("向下", "down", R.raw.recording_9, R.raw.recording_83); + break; + case 4: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("向左", "left", R.raw.recording_10, R.raw.recording_84); + break; + case 5: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("向右", "right", R.raw.recording_11, R.raw.recording_85); + break; + case 6: + setViewAndVoiceDate(getString(R.string.sure), "ok", R.raw.recording_12, R.raw.recording_81); + break; + case 7: + setViewAndVoiceDate(getString(R.string.main_page), "boot", R.raw.recording_13, R.raw.recording_79); + break; + case 8: + setViewAndVoiceDate("返回", "back", R.raw.recording_15, R.raw.recording_80); + break; + case 9: + setViewAndVoiceDate("菜单", "menu", R.raw.recording_14, R.raw.recording_78); + break; + case 10: + tv_guide_device.setText("提示灯变为红色后,将电视遥控器对"); + if (isTv) { + setViewAndVoiceDate("开关", "power", R.raw.recording_6, R.raw.recording_6); + } else { + setViewAndVoiceDate("开关", "powertv", R.raw.recording_6, R.raw.recording_6); + } + break; + case 11: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("音量+", "volplus", R.raw.recording_16, R.raw.recording_86); + break; + case 12: + tv_press.setText(R.string.long_click); + tv_2_second.setVisibility(View.VISIBLE); + setViewAndVoiceDate("音量-", "volminus", R.raw.recording_17, R.raw.recording_87); + break; + case 13: + tv_guide_device.setText("提示灯变为红色后,将电视遥控器对"); + mLearnGuide.setText("静音"); + enterLearnState("mute"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_7); + mediaPlayer01.start(); + } + break; + case 21: + setViewAndVoiceDate("1", "1", R.raw.recording_67, R.raw.recording_88); + break; + case 22: + setViewAndVoiceDate("2", "2", R.raw.recording_68, R.raw.recording_89); + break; + case 23: + setViewAndVoiceDate("3", "3", R.raw.recording_69, R.raw.recording_90); + break; + case 24: + setViewAndVoiceDate("4", "4", R.raw.recording_70, R.raw.recording_91); + break; + case 25: + setViewAndVoiceDate("5", "5", R.raw.recording_71, R.raw.recording_92); + break; + case 26: + setViewAndVoiceDate("6", "6", R.raw.recording_72, R.raw.recording_93); + break; + case 27: + setViewAndVoiceDate("7", "7", R.raw.recording_73, R.raw.recording_94); + break; + case 28: + setViewAndVoiceDate("8", "8", R.raw.recording_74, R.raw.recording_95); + break; + case 29: + setViewAndVoiceDate("9", "9", R.raw.recording_75, R.raw.recording_96); + break; + case 30: + setViewAndVoiceDate("0", "0", R.raw.recording_76, R.raw.recording_97); + break; + case 31: + setViewAndVoiceDate("信号源", "signal", R.raw.recording_98, R.raw.recording_99); + break; + case 32: + mLearnGuide.setText("频道+"); + enterLearnState("chplus"); + break; + case 33: + mLearnGuide.setText("频道-"); + enterLearnState("chminus"); + break; + } + } + } + + private void setViewAndVoiceDate(String name, String key, int recording1, int recording2) { + mLearnGuide.setText(name); + enterLearnState(key); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + if (isTv) { + mediaPlayer01 = MediaPlayer.create(this, recording1); + } else { + mediaPlayer01 = MediaPlayer.create(this, recording2); + } + mediaPlayer01.start(); + } + } + + private void enterLearnState(final String sendMsg) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", userId); + map.put("macId", ziId); + map.put("sendMsg", sendMsg); + map.put("oper", sendMsg); + map.put("pushKey", sendMsg); + if (isTv) { + map.put("deviceType", TV_TAG); + } else { + map.put("deviceType", TVONE_TAG); + } + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + util.requestPostByAsynewApi(NetWorkUrl.INFRARED_KEYSTUDY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("enterLearnState", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_CONTROL_ORDER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(SecondEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnFailEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_FAIL; + mHandler.sendMessage(message); + } + + public void onEventMainThread(LearnEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = FAN_LEARN_ING; + mHandler.sendMessage(message); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FAN_LEARN_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + Toast.makeText(TvLearnGuideA2Activity.this, "学习成功", Toast.LENGTH_SHORT); + // ToastUtil.show(TvLearnGuideA2Activity.this, "学习成功"); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(TvLearnGuideA2Activity.this, SureLearnA2Activity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("type", deviceType); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + if (null != getIntent().getExtras().get("subVersion")) { + intent.putExtra("subVersion", getIntent().getExtras().get("subVersion").toString()); + } + startActivity(intent); + finish(); + } + }, 1000); + + break; + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else { + if (learningFlag) { + Intent intent = new Intent(TvLearnGuideA2Activity.this, SureLearnA2Activity.class); + intent.putExtra("learnGuide", learnGuide); + intent.putExtra("type", deviceType); + intent.putExtra("ziId", ziId); + intent.putExtra("isTv", isTv); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + if (null != getIntent().getExtras().get("subVersion")) { + intent.putExtra("subVersion", getIntent().getExtras().get("subVersion").toString()); + } + startActivity(intent); + finish(); + } else { + finish(); + } + } + break; + case FAN_LEARN_ING: + initLoadDialog(); + learningFlag = true; + sec = 10; + break; + case FAN_LEARN_FAIL: + Intent intent1 = new Intent(TvLearnGuideA2Activity.this, AirAutoFailActivity.class); + intent1.putExtra("ziId", ziId); + intent1.putExtra("tag", TV_TAG); + intent1.putExtra("learnGuide", learnGuide); + intent1.putExtra("isTv", isTv); + intent1.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent1.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + if (null != getIntent().getExtras().get("subVersion")) { + intent1.putExtra("subVersion", getIntent().getExtras().get("subVersion").toString()); + } + startActivity(intent1); + finish(); + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.setMessage(R.string.saving); + mLoadingDialog.show(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + //取消eventBus注册 + // EventBus.getDefault().unregister(this); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvListA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvListA2Activity.java new file mode 100644 index 0000000..ac40898 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvListA2Activity.java @@ -0,0 +1,351 @@ +package com.yonsz.z1.devicea2.tva2; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entitya2.BrandListA2Entity; +import com.yonsz.z1.device.fan.FanLearnActivity; +import com.yonsz.z1.device.tv.Brand; +import com.yonsz.z1.devicea2.fana2.FanMatchA2Activity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.PingYinUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_SUCCESS; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_CONN_DEVICE_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.GETBRANDID_BY_DEVICEID; + +/** + * Created by Administrator on 2017/10/10. + */ +public class TvListA2Activity extends BaseActivity { + private TitleView mTitleView; + private ListView brandsListView; + public MyAdapter adapter; + private ArrayList fan;//品牌列表 + private List list; + private List stringList; + private EditText searchEt; + Handler myhandler = new Handler(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_brand_list); + initView(); + initListener(); + queryDeviceBrand(); + } + + private void queryDeviceBrand() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", TV_TAG); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestGetByAsy(GETBRANDID_BY_DEVICEID, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceBrand", "ShareDeviceActivity onSuccess()" + respone); + BrandListA2Entity obj = JSON.parseObject(respone, BrandListA2Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + + private void initView() { + searchEt = (EditText) findViewById(R.id.et_search); + stringList = new ArrayList<>(); + fan = new ArrayList(); + brandsListView = (ListView) findViewById(R.id.listview_brand_list); + mTitleView = (TitleView) findViewById(R.id.title_brand_list); + mTitleView.setHead(R.string.select_fan_brand); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + adapter = new MyAdapter(this); + brandsListView.setAdapter(adapter); + } + + private void initListener() { + searchEt.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + + @Override + public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + + @Override + public void afterTextChanged(Editable s) { + /**这是文本框改变之后 会执行的动作 + * 因为我们要做的就是,在文本框改变的同时,我们的listview的数据也进行相应的变动,并且如一的显示在界面上。 + * 所以这里我们就需要加上数据的修改的动作了。 + */ + myhandler.post(eChanged); + } + }); + } + + /** + * 关于界面UI的更新,可以使用Handler,通过Post一个Runnable去更新,Runnable会去根据搜索框的文本对mData里的数据进行更新。 + */ + Runnable eChanged = new Runnable() { + + @Override + public void run() { + String data = searchEt.getText().toString(); + fan.clear(); + getmDataSub(stringList, data); + adapter.notifyDataSetChanged(); + } + }; + + /** + * 可能对mData的理解会有点问题,因为数据更新完后,每一次的筛选数据都是放在mData里,那么原本的数据呢,当然就是在mListTitle和mListText里。根据获得数据的getmDataSub的代码即可知。 + */ + + private void getmDataSub(List mDataSubs, String data) { + int length = mDataSubs.size(); + for (int i = 0; i < length; ++i) { + if (mDataSubs.get(i).getBrandName().contains(data) || PingYinUtil.getPingYin(mDataSubs.get(i).getBrandName()).contains(data)) { + fan.add(mDataSubs.get(i).getBrandName()); + } + } + fan.add("其他品牌"); + } + + + @Override + public void onResume() { + super.onResume(); + // queryDeviceBrand(); + searchEt.setText(""); + } + + public void load_brand() { + fan.clear(); + adapter.notifyDataSetChanged(); + //再添加其余的品牌列表 + for (int i = 0; i < stringList.size(); i++) { + fan.add(stringList.get(i).getBrandName()); + if (i == stringList.size() - 1) { + fan.add("其他品牌"); + } + } + adapter.notifyDataSetChanged(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + String deviceId = entity1.getObj().getDeviceId(); + switch (deviceId) { + case FAN_TAG: + Intent intent = new Intent(TvListA2Activity.this, FanMatchA2Activity.class); + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("fanName", entity1.getObj().getDeviceBrand().toString()); + intent.putExtra("id", entity1.getObj().getId().toString()); + startActivity(intent); + finish(); + break; + } + break; + case QUERY_DEVICE_BRAND_FAIL: + + break; + case QUERY_DEVICE_BRAND_SUCCESS: + BrandListA2Entity entity2 = (BrandListA2Entity) msg.obj; + stringList = entity2.getObj().getBrandList(); + load_brand(); + break; + case UPDATE_CONN_DEVICE_SUCCESS: + AddChildDeviceEntity obj = (AddChildDeviceEntity) msg.obj; + Intent intent = new Intent(TvListA2Activity.this, FanLearnActivity.class); + intent.putExtra("deviceName", obj.getObj().getDeviceBrand()); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + break; + } + } + + private class MyAdapter extends BaseAdapter { + private Context context; + private LayoutInflater inflater; + + public MyAdapter(Context context) { + super(); + this.context = context; + inflater = LayoutInflater.from(context); + + } + + @Override + public int getCount() { + return fan.size(); + } + + @Override + public Object getItem(int arg0) { + return arg0; + } + + @Override + public long getItemId(int arg0) { + return arg0; + } + + @Override + public View getView(final int position, View view, ViewGroup arg2) { + if (view == null) { + view = inflater.inflate(R.layout.brandlist_listview_item, null); + } + final TextView edit = (TextView) view.findViewById(R.id.name); + if (position == fan.size()) { + // edit.setText("其他品牌"); + } else { + edit.setText(fan.get(position)); + } + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!TextUtils.isEmpty(getIntent().getExtras().get("nameTag").toString())) { + if (position == fan.size() - 1) { + showModifyPop(0, 0); + } else { + updateConnDevice(fan.get(position)); + } + } else { + if (position == fan.size() - 1) { + showModifyPop(0, 0); + } else { + // addChildDevice(getIntent().getExtras().get("ziId").toString(), FAN_TAG, fan.get(position)); + Intent intent = new Intent(TvListA2Activity.this, FanMatchA2Activity.class); + intent.putExtra("brandId", stringList.get(position).getBrandId().toString()); + startActivity(intent); + } + } + } + }); + return view; + } + + public void showModifyPop(final int adapterPosition, final int i) { + ConfirmNameDialog dialog = new ConfirmNameDialog(TvListA2Activity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (!TextUtils.isEmpty(getIntent().getExtras().get("nameTag").toString())) { + updateConnDevice(positioName); + } else { + if (TextUtils.isEmpty(positioName)) { + ToastUtil.show(TvListA2Activity.this, "品牌不能为空"); + } else { + addChildDevice(getIntent().getExtras().get("ziId").toString(), FAN_TAG, positioName); + } + } + break; + } + } + }); + dialog.setMaxEms(10); + dialog.setHintName(R.string.Enter_brand_name); + dialog.setContent(R.string.Brand_name); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void updateConnDevice(String positioName) { + + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvOneTryA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvOneTryA2Activity.java new file mode 100644 index 0000000..5f82bbf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvOneTryA2Activity.java @@ -0,0 +1,455 @@ +package com.yonsz.z1.devicea2.tva2; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.NormalEntity; +import com.yonsz.z1.database.entity.entitya2.RomoteListA2Entity; +import com.yonsz.z1.database.entity.entitya2.TvTryEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.DOWNLOAD_TV_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_TV_SUCCESS; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_FAIL; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_CONFRIMKEY_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_CONFRIMKEY_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDKEY_INFRARED_2MAC_FAIL; +import static com.yonsz.z1.net.Constans.SENDKEY_INFRARED_2MAC_SUCCESS; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.NetWorkUrl.SEARCH_ROUND; +import static com.yonsz.z1.net.NetWorkUrl.SELECT_CONFRIMKEY_BYRID; +import static com.yonsz.z1.net.NetWorkUrl.YKY_DOWNLOAD; + +/** + * Created by Administrator on 2017/11/10. + */ + +public class TvOneTryA2Activity extends BaseActivity { + private TitleView mTitleView; + private Button sureBt; + private String allData; + private List mRoundListEntities = new ArrayList<>(); + private List tvTryEntityObj = new ArrayList<>(); + private TextView currentNumber, totalNumber; + private int currentIndex, totalIndex; + private TextView tryBt, beforeOne, nextOne, volAdd, viewAdd, viewBack, viewJidinghe, okTv; + private String ziId; + private LinearLayout firstLl, secondLl, thirdLl, forthLl, fiveLl; + private LoadingDialog mLoadingDialog; + private String redId; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tv_try); + initView(); + selectConfrimKeyByRid(); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + allData = (String) getIntent().getExtras().get("allData"); + if (allData != null) { + RomoteListA2Entity obj = JSON.parseObject(allData, RomoteListA2Entity.class); + mRoundListEntities = obj.getObj().getRoundList(); + } + firstLl = (LinearLayout) findViewById(R.id.ll_first_position); + secondLl = (LinearLayout) findViewById(R.id.ll_second_position); + thirdLl = (LinearLayout) findViewById(R.id.ll_third_position); + forthLl = (LinearLayout) findViewById(R.id.ll_forth_position); + fiveLl = (LinearLayout) findViewById(R.id.ll_five_position); + currentNumber = (TextView) findViewById(R.id.tv_current_number); + totalNumber = (TextView) findViewById(R.id.tv_total_number); + sureBt = (Button) findViewById(R.id.bt_sure_config); + tryBt = (TextView) findViewById(R.id.tv_open_light); + volAdd = (TextView) findViewById(R.id.tv_vol_add); + viewAdd = (TextView) findViewById(R.id.tv_view_add); + okTv = (TextView) findViewById(R.id.tv_ok); + viewBack = (TextView) findViewById(R.id.tv_back); + viewJidinghe = (TextView) findViewById(R.id.tv_jidinghe); + beforeOne = (TextView) findViewById(R.id.tv_no_use); + nextOne = (TextView) findViewById(R.id.tv_next); + mTitleView = (TitleView) findViewById(R.id.title_fan_try); + mTitleView.setHead(R.string.match_remote); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + /*viewAdd.setBackground(getResources().getDrawable(R.drawable.icon_goback_nor80)); + viewJidinghe.setText("返回");*/ + + sureBt.setOnClickListener(this); + tryBt.setOnClickListener(this); + volAdd.setOnClickListener(this); + viewAdd.setOnClickListener(this); + viewBack.setOnClickListener(this); + beforeOne.setOnClickListener(this); + nextOne.setOnClickListener(this); + okTv.setOnClickListener(this); + totalNumber.setText(mRoundListEntities.size() + ""); + totalIndex = mRoundListEntities.size(); + currentIndex = (int) getIntent().getExtras().get("currentIndex"); + currentNumber.setText(currentIndex + ""); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + /** + * 直接下载了,先注释 + */ + // downloadInfraredByRid(); + /** + * 1.测试,直接调接口添加,然后跳转到电视界面 + */ + // addChildDevice(ziId, TV_TAG, getIntent().getExtras().get("brandName").toString()); + subsetAdd(ziId, TVONE_TAG, getIntent().getExtras().get("brandName").toString()); + // addChildDevice(ziId, TVONE_TAG, getIntent().getExtras().get("brandName").toString()); + /*Intent intent = new Intent(this, FanA2Activity.class); + startActivity(intent);*/ + break; + case R.id.tv_open_light: + searchRound("power"); + break; + case R.id.tv_vol_add: + searchRound("vol+"); + break; + case R.id.tv_ok: + searchRound("ok"); + break; + case R.id.tv_view_add: + searchRound("ch+"); + break; + case R.id.tv_back: + searchRound("back"); + break; + case R.id.tv_no_use: + if (currentIndex > 1) { + currentIndex -= 1; + currentNumber.setText(currentIndex + ""); + } + selectConfrimKeyByRid(); + break; + case R.id.tv_next: + if (currentIndex < totalIndex) { + currentIndex += 1; + currentNumber.setText(currentIndex + ""); + } + selectConfrimKeyByRid(); + break; + } + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void selectConfrimKeyByRid() { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", TVONE_TAG); + map.put("brandId", String.valueOf(mRoundListEntities.get(currentIndex - 1).getBrandId())); + map.put("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + netWorkUtil.requestGetByAsy(SELECT_CONFRIMKEY_BYRID, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectConfrimKeyByRid", "ShareDeviceActivity onSuccess()" + respone); + TvTryEntity obj = JSON.parseObject(respone, TvTryEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_CONFRIMKEY_BYRID_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_CONFRIMKEY_BYRID_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_CONFRIMKEY_BYRID_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void searchRound(String currentBt) { + setShake(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + // map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); + for (int i = 0; i < tvTryEntityObj.size(); i++) { + if (tvTryEntityObj.get(i).getKeyId().equals(currentBt)) { + map.put("code", (int) tvTryEntityObj.get(i).getZip() + tvTryEntityObj.get(i).getKeyInfrared()); + } + } + netWorkUtil.requestPostByAsynewApi(SEARCH_ROUND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("searchRound", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else if (1004 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case ADD_CHILDDEVICE_SUCCESS: + case UPDATE_BLINDENTITY_NAME_SUCCESS: + BaseVersion5Entity entity1 = (BaseVersion5Entity) msg.obj; + redId = entity1.getData().getId().toString(); + /** + * 直接调最后的接口 + */ + downloadOnlyBox(); + break; + case SELECT_CONFRIMKEY_BYRID_SUCCESS: + TvTryEntity tvTryEntity = (TvTryEntity) msg.obj; + tvTryEntityObj = tvTryEntity.getObj(); + Log.i("selectConfrimKeyByRid", "TvOneTryA2Activity callBackUiThread()" + tvTryEntityObj.size()); + for (int i = 0; i < tvTryEntityObj.size(); i++) { + if (i < 3) { + switch (tvTryEntityObj.get(i).getKeyId()) { + case "power": + firstLl.setVisibility(View.VISIBLE); + break; + case "volplus": + secondLl.setVisibility(View.VISIBLE); + break; + case "ch+": + thirdLl.setVisibility(View.VISIBLE); + break; + case "back": + forthLl.setVisibility(View.VISIBLE); + break; + case "vol+": + secondLl.setVisibility(View.VISIBLE); + break; + case "ok": + fiveLl.setVisibility(View.VISIBLE); + break; + } + } + } + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + break; + case SEARCH_ROUND_FAIL: + SimpleEntty simpleEntty = (SimpleEntty) msg.obj; + ToastUtil.show(this, simpleEntty.getMsg().toString()); + break; + case SEARCH_ROUND_SUCCESS: + + break; + case DOWNLOAD_TV_SUCCESS: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(TvOneTryA2Activity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(TvOneTryA2Activity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("tvName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break; + } + } + + /*//只添加电视后的下载 + private void downloadTv() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("deviceType", TVONE_TAG); + map.put("rid", getIntent().getExtras().get("rid").toString()); + map.put("boxRid", mRoundListEntities.get(currentIndex - 1).getRid()); + netWorkUtil.requestPostByAsynew(DOWNLOAD_TV, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadTv", "ShareDeviceActivity onSuccess()" + respone); + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + } + }); + }*/ + + private void downloadOnlyBox() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", TVONE_TAG); + map.put("macId", ziId); + map.put("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadOnlyBox", "ShareDeviceActivity onSuccess()" + respone); + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + } + }); + } + + private void subsetAdd(String ziId, String deviceType, String deviceBrand) { + BaseVersion5Entity.DataBean body = new BaseVersion5Entity.DataBean(); + body.setRid(mRoundListEntities.get(currentIndex - 1).getRid()); + body.setDeviceBrand(deviceBrand); + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", "0"); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + map.put("addressId", localAddAddressId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, JSONObject.toJSONString(body), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvTryA2Activity.java b/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvTryA2Activity.java new file mode 100644 index 0000000..0639d0d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicea2/tva2/TvTryA2Activity.java @@ -0,0 +1,556 @@ +package com.yonsz.z1.devicea2.tva2; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.NormalEntity; +import com.yonsz.z1.database.entity.entitya2.RomoteListA2Entity; +import com.yonsz.z1.database.entity.entitya2.TvTryEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_INFRARED_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.DOWNLOAD_TV_FAIL; +import static com.yonsz.z1.net.Constans.DOWNLOAD_TV_SUCCESS; +import static com.yonsz.z1.net.Constans.GETROUNDINFO_BY_BRANDID_SUCCESS; +import static com.yonsz.z1.net.Constans.GETROUNDINFO_BY_BRANDID_TAIL; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_FAIL; +import static com.yonsz.z1.net.Constans.SEARCH_ROUND_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_CONFRIMKEY_BYRID_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_CONFRIMKEY_BYRID_SUCCESS; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.NetWorkUrl.GETROUNDINFO_BY_BRANDID; +import static com.yonsz.z1.net.NetWorkUrl.SEARCH_ROUND; +import static com.yonsz.z1.net.NetWorkUrl.SELECT_CONFRIMKEY_BYRID; +import static com.yonsz.z1.net.NetWorkUrl.YKY_DOWNLOAD; + +/** + * Created by Administrator on 2017/11/10. + */ + +public class TvTryA2Activity extends BaseActivity { + private TitleView mTitleView; + private Button sureBt; + private List mRoundListEntities = new ArrayList<>(); + private List tvTryEntityObj = new ArrayList<>(); + private TextView currentNumber, totalNumber; + private int currentIndex, totalIndex; + private TextView tryBt, beforeOne, nextOne, volAdd, viewAdd, okTv; + private String ziId; + private LinearLayout firstLl, secondLl, thirdLl, forthLl, fiveLl; + private LoadingDialog mLoadingDialog; + private String redId; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tv_try); + initView(); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + getRoundInfoByBrandId(TV_TAG); + firstLl = (LinearLayout) findViewById(R.id.ll_first_position); + secondLl = (LinearLayout) findViewById(R.id.ll_second_position); + thirdLl = (LinearLayout) findViewById(R.id.ll_third_position); + forthLl = (LinearLayout) findViewById(R.id.ll_forth_position); + fiveLl = (LinearLayout) findViewById(R.id.ll_five_position); + currentNumber = (TextView) findViewById(R.id.tv_current_number); + totalNumber = (TextView) findViewById(R.id.tv_total_number); + sureBt = (Button) findViewById(R.id.bt_sure_config); + tryBt = (TextView) findViewById(R.id.tv_open_light); + volAdd = (TextView) findViewById(R.id.tv_vol_add); + viewAdd = (TextView) findViewById(R.id.tv_view_add); + okTv = (TextView) findViewById(R.id.tv_ok); + beforeOne = (TextView) findViewById(R.id.tv_no_use); + nextOne = (TextView) findViewById(R.id.tv_next); + mTitleView = (TitleView) findViewById(R.id.title_fan_try); + mTitleView.setHead(R.string.match_remote); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + sureBt.setOnClickListener(this); + tryBt.setOnClickListener(this); + volAdd.setOnClickListener(this); + viewAdd.setOnClickListener(this); + okTv.setOnClickListener(this); + beforeOne.setOnClickListener(this); + nextOne.setOnClickListener(this); + currentIndex = (int) getIntent().getExtras().get("currentIndex"); + currentNumber.setText(currentIndex + ""); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + // addChildDevice(ziId, TV_TAG, getIntent().getExtras().get("brandName").toString(), 1); + subsetAdd(ziId, TV_TAG, getIntent().getExtras().get("brandName").toString()); + /** + * 1.不添加电视 + * 2.测试,只是传递给下一个页面,不做任何操作 + *//* + // downloadInfraredByRid(); + ConfirmNextDialog dialog = new ConfirmNextDialog(TvTryA2Activity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + *//** + * 1.测试,直接调接口添加,然后跳转到电视界面 + *//* + addChildDevice(ziId, TV_TAG, getIntent().getExtras().get("brandName").toString(), 1); + break; + case 1: + *//** + * 1.测试,直接跳转到机顶盒的界面而不添加电视 + *//* + // addChildDevice(ziId, TV_TAG, getIntent().getExtras().get("brandName").toString(), 0); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(TvTryA2Activity.this, DeviceList4Activity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + intent.putExtra("deviceType", TVONE_TAG); + intent.putExtra("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + startActivity(intent); + finish(); + break; + } + } + }); + dialog.setContent("续续添加网络机顶盒?"); + dialog.setCancleBtn("没有机顶盒"); + dialog.setSureBtn("继续添加"); + dialog.setCancelable(false); + dialog.show();*/ + break; + case R.id.tv_open_light: + searchRound("power"); + break; + case R.id.tv_vol_add: + searchRound("vol+"); + break; + case R.id.tv_view_add: + searchRound("ch+"); + break; + case R.id.tv_ok: + searchRound("ok"); + break; + case R.id.tv_no_use: + if (currentIndex > 1) { + currentIndex -= 1; + currentNumber.setText(currentIndex + ""); + } + selectConfrimKeyByRid(); + break; + case R.id.tv_next: + if (currentIndex < totalIndex) { + currentIndex += 1; + currentNumber.setText(currentIndex + ""); + } + selectConfrimKeyByRid(); + break; + } + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void selectConfrimKeyByRid() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", TV_TAG); + map.put("brandId", String.valueOf(mRoundListEntities.get(currentIndex - 1).getBrandId())); + map.put("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + netWorkUtil.requestGetByAsy(SELECT_CONFRIMKEY_BYRID, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectConfrimKeyByRid", "ShareDeviceActivity onSuccess()" + respone); + TvTryEntity obj = JSON.parseObject(respone, TvTryEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_CONFRIMKEY_BYRID_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_CONFRIMKEY_BYRID_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_CONFRIMKEY_BYRID_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void searchRound(String currentBt) { + setShake(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + // map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + map.put("macId", ziId); + for (int i = 0; i < tvTryEntityObj.size(); i++) { + if (tvTryEntityObj.get(i).getKeyId().equals(currentBt)) { + map.put("code", (int) tvTryEntityObj.get(i).getZip() + tvTryEntityObj.get(i).getKeyInfrared()); + } + } + netWorkUtil.requestPostByAsynewApi(SEARCH_ROUND, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("searchRound", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else if (1004 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = obj; + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEARCH_ROUND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case ADD_CHILDDEVICE_SUCCESS: + case UPDATE_BLINDENTITY_NAME_SUCCESS: + BaseVersion5Entity entity1 = (BaseVersion5Entity) msg.obj; + redId = entity1.getData().getId().toString(); + downloadOnlyTv(); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + /*case DOWNLOAD_INFRARED_BYRID_SUCCESS: + //先不下载,先去机顶盒 + ConfirmNextDialog dialog = new ConfirmNextDialog(TvTryA2Activity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + *//** + * 1.测试,直接调接口添加,然后跳转到电视界面 + *//* + addChildDevice(ziId, TV_TAG, getIntent().getExtras().get("brandName").toString(), 1); + break; + case 1: + *//** + * 1.测试,直接跳转到机顶盒的界面而不添加电视 + *//* + addChildDevice(ziId, TV_TAG, getIntent().getExtras().get("brandName").toString(), 0); + *//*EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(TvTryA2Activity.this, FanListA2Activity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("nameTag", ""); + intent.putExtra("deviceType", TVONE_TAG); + intent.putExtra("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + startActivity(intent); + finish();*//* + break; + } + } + }); + dialog.setContent("续续添加网络机顶盒?"); + dialog.setCancleBtn("没有机顶盒"); + dialog.setSureBtn("继续添加"); + dialog.setCancelable(false); + dialog.show(); + break;*/ + /*case SENDKEY_INFRARED_2MAC_SUCCESS: + NettyHandlerUtil.getInstance(); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(TvTryA2Activity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(TvTryA2Activity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("tvName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break;*/ + case SELECT_CONFRIMKEY_BYRID_SUCCESS: + TvTryEntity tvTryEntity = (TvTryEntity) msg.obj; + tvTryEntityObj = tvTryEntity.getObj(); + for (int i = 0; i < tvTryEntityObj.size(); i++) { + switch (tvTryEntityObj.get(i).getKeyId()) { + case "power": + firstLl.setVisibility(View.VISIBLE); + break; + case "volplus": + secondLl.setVisibility(View.VISIBLE); + break; + case "ch+": + thirdLl.setVisibility(View.VISIBLE); + break; + case "back": + forthLl.setVisibility(View.VISIBLE); + break; + case "vol+": + secondLl.setVisibility(View.VISIBLE); + break; + case "ok": + fiveLl.setVisibility(View.VISIBLE); + break; + } + } + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + break; + case SEARCH_ROUND_FAIL: + SimpleEntty simpleEntty = (SimpleEntty) msg.obj; + ToastUtil.show(this, simpleEntty.getMsg().toString()); + break; + case SEARCH_ROUND_SUCCESS: + + break; + case DOWNLOAD_TV_SUCCESS: + NettyHandlerUtil.getInstance(); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(TvTryA2Activity.this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(TvTryA2Activity.this, DeviceControlActivity.class); + } + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + intent.putExtra("id", redId); + intent.putExtra("tvName", getIntent().getExtras().get("brandName").toString()); + startActivity(intent); + finish(); + break; + case GETROUNDINFO_BY_BRANDID_SUCCESS: + RomoteListA2Entity obj = (RomoteListA2Entity) msg.obj; + mRoundListEntities = obj.getObj().getRoundList(); + totalNumber.setText(mRoundListEntities.size() + ""); + totalIndex = mRoundListEntities.size(); + selectConfrimKeyByRid(); + break; + } + } + + private void downloadOnlyTv() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("deviceType", TV_TAG); + map.put("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + netWorkUtil.requestPostByAsynewApi(YKY_DOWNLOAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadOnlyTv", "ShareDeviceActivity onSuccess()" + respone); + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + } + }); + } + + /*//只添加电视后的下载 + private void downloadTv() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("macId", ziId); + map.put("rid", mRoundListEntities.get(currentIndex - 1).getRid()); + netWorkUtil.requestPostByAsynew(DOWNLOAD_TV, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("downloadTv", "ShareDeviceActivity onSuccess()" + respone); + NormalEntity obj = JSON.parseObject(respone, NormalEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DOWNLOAD_TV_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + } + }); + }*/ + + private void getRoundInfoByBrandId(String deviceType) { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("deviceType", deviceType); + map.put("brandId", getIntent().getExtras().get("brandId").toString()); + netWorkUtil.requestGetByAsy(GETROUNDINFO_BY_BRANDID, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getRoundInfoByBrandId", "ShareDeviceActivity onSuccess()" + respone); + RomoteListA2Entity obj = JSON.parseObject(respone, RomoteListA2Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GETROUNDINFO_BY_BRANDID_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GETROUNDINFO_BY_BRANDID_TAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GETROUNDINFO_BY_BRANDID_TAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetAdd(String ziId, String deviceType, String deviceBrand) { + BaseVersion5Entity.DataBean body = new BaseVersion5Entity.DataBean(); + body.setRid(mRoundListEntities.get(currentIndex - 1).getRid()); + body.setDeviceBrand(deviceBrand); + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", "0"); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + map.put("addressId", localAddAddressId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, JSONObject.toJSONString(body), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/AllControlFragment.java b/app/src/main/java/com/yonsz/z1/devicelog/AllControlFragment.java new file mode 100644 index 0000000..2396cbf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/AllControlFragment.java @@ -0,0 +1,215 @@ +package com.yonsz.z1.devicelog; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.listener.OnRecyclerLoadDataListener; +import com.yonsz.z1.mine.mydevice.DeviceLogEntity; +import com.yonsz.z1.mine.mydevice.LogAdapter; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LoadMoreRecyclerView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_FAIL; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_SUCCESS; + +/** + * Created by Administrator on 2018/6/27. + */ + +public class AllControlFragment extends android.support.v4.app.Fragment { + private UIHandle mHandler; + private View view; + private RelativeLayout mNoRecord; + private int DATA_TYPE; + private boolean isRefresh; + private boolean isLoadMore; + private int page = 1; + private List mDatas; + private List> mDatasRercord = new ArrayList<>(); + private LoadMoreRecyclerView mLogRecycler; + private LogAdapter mLogAdapter; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(R.layout.fragment_state_log, container, false); + initView(view); + initListener(); + DATA_TYPE = Constans.REFRESH_DATA; + loadListViewData(page); + return view; + } + + private void loadListViewData(int page) { + //当有网络的时候 + if (DensityUtil.isNetworkConnected(getContext())) { + } + } + + private void initView(View view) { + mLogRecycler = (LoadMoreRecyclerView) view.findViewById(R.id.log_recyclerview); + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(getContext()); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mLogRecycler.setLayoutManager(manager); + mDatas = new ArrayList<>(); + mLogAdapter = new LogAdapter(getContext(), mDatasRercord); + mNoRecord = (RelativeLayout) view.findViewById(R.id.ll_no_record); + mLogRecycler.setAdapter(mLogAdapter); + mLogRecycler.setOnLoadDataListener(new OnRecyclerLoadDataListener() { + @Override + public void onLoadMore() { + if (!isLoadMore) { + isLoadMore = true; + page++; + DATA_TYPE = Constans.MORE_DATA; + } + } + }); + } + + private void initListener() { + + + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_LOG_SUCCESS: + int arg1 = msg.arg1; + if (msg.obj != null && page <= arg1) { + onSuccess((List) msg.obj); + } else { + Toast.makeText(getContext(), "我是有底线的", Toast.LENGTH_LONG).show(); + } + break; + case GET_LOG_FAIL: + + break; + case TRUNCATE_LISTINFO_SUCCESS: + mDatasRercord.clear(); + mLogAdapter.notifyDataSetChanged(); + break; + case TRUNCATE_LISTINFO_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } + + private void onSuccess(List logEntities) { + for (int j = 0; j < mDatasRercord.size(); j++) { + for (int k = 0; k < mDatasRercord.get(j).size(); k++) { + String id = mDatasRercord.get(j).get(k).getId(); + for (int f = 0; f < logEntities.size(); f++) { + if (logEntities.get(f).getId().equals(id)) { + logEntities.remove(logEntities.get(f)); + } + } + } + } + if (logEntities.size() > 0) { + String createDate = logEntities.get(0).getCreateDate().substring(0, 10); + if (mDatasRercord.size() == 0 || (mDatasRercord.get(0) != null && logEntities != null && logEntities.size() > 0 && !logEntities.get(0).getId().equals(mDatasRercord.get(0).get(0).getId()))) { + if (DATA_TYPE == Constans.REFRESH_DATA) { + isRefresh = false; + mDatas = new ArrayList<>(); + mDatasRercord.clear(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + if (mDatas.size() == logEntities.size()) { + mDatasRercord.add(mDatas); + } else if (i == logEntities.size() - 1) { + mDatasRercord.add(mDatas); + } + } + } else { + isLoadMore = false; + if (mDatas != null && mDatas.get(mDatas.size() - 1).getCreateDate().substring(0, 10).equals(createDate)) { + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } else { + mDatas = new ArrayList<>(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } + if (mDatasRercord.size() >= 2) { + if (mDatasRercord.get(0) == mDatasRercord.get(1)) { + mDatasRercord.remove(1); + } + } + } + mLogAdapter.notifyDataSetChanged(); + } else { + + } + isRefresh = false; + isLoadMore = false; + DATA_TYPE = -1; + } + } + + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(AllControlFragment activity) { + weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + AllControlFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/BarChart/BarChart.java b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/BarChart.java new file mode 100644 index 0000000..8c6a627 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/BarChart.java @@ -0,0 +1,425 @@ +package com.yonsz.z1.devicelog.BarChart; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.util.AttributeSet; +import android.util.Log; +import android.view.GestureDetector; +import android.view.MotionEvent; + +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MUSIC_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; + +/** + * barChart + * + * @author lxs + */ +public class BarChart extends LBaseView { + protected List mDatas = new ArrayList<>(); + protected List mDescription; + protected Paint mDataLinePaint; + protected int defaultLineColor = Color.argb(255, 108, 195, 11); + protected int descriptionColor; + protected int dataColor; + protected int defaultBorderColor = Color.argb(255, 217, 217, 217); + protected Paint mBorderLinePaint; + protected Paint mTextPaint; + protected Paint mPaint; + protected int descriptionTextSize; + protected int dataTextSize; + private GestureDetector detector; + private int mWidth; + private int mHeight; + private int mShowNumber; + private float perBarW; + private Double maxData = 100d; + private int mMaxScrollx; + private int mBottomPadding; + private int mLeftPadding; + private int mTopPadding; + + private DragInerfaces dragInerfaces; + private int startX = 0; + private int position1, position2, position3; + private OnBarChartClickListener onBarChartClick; + + + public BarChart(Context context) { + super(context); + init(context, null); + } + + public BarChart(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + public BarChart(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs); + } + + private void init(Context context, AttributeSet attrs) { + + TypedArray t = context.obtainStyledAttributes(attrs, R.styleable.barCharts); + defaultBorderColor = t.getColor(R.styleable.barCharts_borderColor, defaultBorderColor); + descriptionTextSize = (int) t.getDimension(R.styleable.barCharts_labelTextSize, 20); + dataTextSize = (int) t.getDimension(R.styleable.barCharts_dataTextSize, 20); + descriptionColor = t.getColor(R.styleable.barCharts_descriptionTextColor, Color.GRAY); + dataColor = t.getColor(R.styleable.barCharts_dataTextColor, Color.GRAY); + mShowNumber = t.getInteger(R.styleable.barCharts_barShowNumber, 6); + canClickAnimation = t.getBoolean(R.styleable.barCharts_isClickAnimation, false); + t.recycle(); + + detector = new GestureDetector(context, new BarGesture()); + mDescription = new ArrayList<>(); + + mDataLinePaint = new Paint(); + mDataLinePaint.setAntiAlias(true); + mDataLinePaint.setColor(defaultLineColor); + mDataLinePaint.setStyle(Paint.Style.STROKE); + + mBorderLinePaint = new Paint(); + mBorderLinePaint.setColor(defaultBorderColor); + mBorderLinePaint.setStyle(Paint.Style.STROKE); + mBorderLinePaint.setStrokeWidth(dp2px(1)); + mBorderLinePaint.setAntiAlias(true); + + mTextPaint = new Paint(); + mTextPaint.setAntiAlias(true); + mTextPaint.setColor(Color.GRAY); + mTextPaint.setStyle(Paint.Style.STROKE); + mTextPaint.setTextSize(descriptionTextSize); + + mPaint = new Paint(); + mPaint.setAntiAlias(true); + mPaint.setColor(Color.RED); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + mWidth = getMeasuredWidth(); + mHeight = getMeasuredHeight(); + setDataLineWidth(); + } + + private void setDataLineWidth() { + if (mDatas.size() > 0) { + mDataLinePaint.setStrokeWidth(mWidth / (mShowNumber * 2)); + mMaxScrollx = (mWidth / mShowNumber) * mDatas.size() - mWidth; + } + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + perBarW = mWidth / mShowNumber; + canvas.translate(0, mHeight - mBottomPadding); + setMaxData(); + getCupPosition(); + + canvas.drawLine(0, 0, mMaxScrollx + mWidth, 0, mBorderLinePaint); + Bitmap bitmap; + Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_first); + Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_second); + Bitmap bitmap3 = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_third); + int bitHeight = bitmap1.getHeight(); + int bitWidth = bitmap1.getWidth(); + for (int i = 0; i < mDatas.size(); i++) { + String perData = String.valueOf(Math.round(scale < 1 ? Math.round(mDatas.get(i) * scale) : mDatas.get(i))); + switch (i) { + case 0: + mDataLinePaint.setColor(0xff6CC30B); + bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_chazuo); + break; + case 1: + mDataLinePaint.setColor(0xff06C6BA); + bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_fs); + break; + case 2: + mDataLinePaint.setColor(0xff4A90E2); + bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_tv); + break; + case 3: + mDataLinePaint.setColor(0xff6CC30B); + bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_kt); + break; + case 4: + mDataLinePaint.setColor(0xffE995B9); + bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_light); + break; + case 5: + mDataLinePaint.setColor(0xff06C6BA); + bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_clean); + break; + case 6: + mDataLinePaint.setColor(0xffF5A623); + bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_curtains); + break; + case 7: + mDataLinePaint.setColor(0xffD026D7); + bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_music); + break; + default: + bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_log_light); + break; + } + float x = (i + 0.5f) * perBarW; + float y = (float) ((mHeight - mTopPadding - mBottomPadding) / maxData * mDatas.get(i)); + canvas.drawLine(x, 0, x, -y * scale, mDataLinePaint); + + mTextPaint.setTextSize(dataTextSize); + mTextPaint.setColor(dataColor); + canvas.drawText(perData, + x - mTextPaint.measureText(perData) / 2, + -y * scale - 2, + mTextPaint); + if (i == position1 && mDatas.get(i) != 0) { + canvas.drawBitmap(bitmap1, + x - bitWidth / 2, + -y * scale - dataTextSize - bitHeight, + mTextPaint); + } + if (i == position2 && mDatas.get(i) != 0) { + canvas.drawBitmap(bitmap2, + x - bitWidth / 2, + -y * scale - dataTextSize - bitHeight, + mTextPaint); + } + if (i == position3 && mDatas.get(i) != 0) { + canvas.drawBitmap(bitmap3, + x - bitWidth / 2, + -y * scale - dataTextSize - bitHeight, + mTextPaint); + } + + mTextPaint.setTextSize(descriptionTextSize); + mTextPaint.setColor(descriptionColor); + canvas.drawText(mDescription.get(i), + x - mTextPaint.measureText(mDescription.get(i)) / 2, + descriptionTextSize, + mTextPaint); + int width = bitmap.getWidth(); + canvas.drawBitmap(bitmap, x - width / 2, 0, mPaint); + } + } + + public void startCliclkAnimation() { + if (canClickAnimation) { + animator.start(); + } + } + + public void setDragInerfaces(DragInerfaces dragInerfaces) { + this.dragInerfaces = dragInerfaces; + } + + public void setBootomDrawPadding(int bottomy) { + mBottomPadding = bottomy; + } + + public void setLeftDrawPadding(int left) { + mLeftPadding = left; + } + + public void setTopDrawPadding(int left) { + mTopPadding = left; + } + + private void setMaxData() { + if (null != mDatas) { + this.maxData = Collections.max(mDatas); + } + } + + private void getCupPosition() { + double max1 = mDatas.get(0); + double max2 = mDatas.get(0); + double max3 = mDatas.get(0); + position1 = 0; + for (int i = 1; i < mDatas.size(); i++) { + if (mDatas.get(i) > max1) { + max1 = mDatas.get(i); + position1 = i; + } + } + if (position1 == 0) { + position2 = 1; + } else { + position2 = 0; + } + for (int i = 1; i < mDatas.size(); i++) { + if (mDatas.get(i) > max2 && i != position1) { + max2 = mDatas.get(i); + position2 = i; + } + } + if (position1 == 0 || position2 == 0) { + if (position1 == 1 || position2 == 1) { + position3 = 2; + } else { + position3 = 1; + } + } else { + position3 = 0; + } + for (int i = 1; i < mDatas.size(); i++) { + if (mDatas.get(i) > max3 && i != position1 && i != position2) { + max3 = mDatas.get(i); + position3 = i; + } + } + } + + @Override + public boolean onTouchEvent(MotionEvent motionEvent) { + if (detector.onTouchEvent(motionEvent)) { + return detector.onTouchEvent(motionEvent); + } + switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_UP: + endGesture(motionEvent); + break; + default: + break; + } + + return false; + } + + private void endGesture(MotionEvent motionEvent) { + + } + + public void setDatas(List mDatas, List mDesciption, boolean isAnimation) { + this.mDatas.clear(); + this.mDatas.addAll(mDatas); + this.mDescription = mDesciption; + setDataLineWidth(); + if (isAnimation) { + animator.start(); + } else { + scale = 1; + postInvalidate(); + } + } + + public void addEndMoreData(List mDatas, List mDesciption) { + this.mDatas.addAll(mDatas); + this.mDescription.addAll(mDesciption); + setDataLineWidth(); + + scale = 1; + postInvalidate(); + } + + public void addStartMoreData(List mDatas, List mDesciption) { + mDatas.addAll(this.mDatas); + mDesciption.addAll(this.mDescription); + this.mDatas.clear(); + this.mDatas.addAll(mDatas); + this.mDescription.clear(); + this.mDescription.addAll(mDesciption); + // (mWidth / mShowNumber) * + startX = (mWidth / mShowNumber) * mDatas.size(); + setDataLineWidth(); + postInvalidate(); + } + + /*private void bubbleSort(List datas) { + Double t = 0d; + for (int i = 0; i < datas.size(); i++) { + for (int j = 0; j < datas.size() - i; j++) + if (datas.get(j) > datas.get(j + 1)) { + t = datas.get(j); + datas.get(j) = datas.get(j + 1); + datas.get(j + 1) = t; + } + } + }*/ + + public void setOnBarChartClick(OnBarChartClickListener onBarChartClick) { + this.onBarChartClick = onBarChartClick; + } + + private class BarGesture extends GestureDetector.SimpleOnGestureListener { + private int preScrollX = 0; + + @Override + public boolean onDown(MotionEvent e) { + return true; + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + int scrollX = getScrollX(); + int minScrollX = -scrollX; + if (scrollX > mMaxScrollx && distanceX > 0) { + distanceX = 0; + if (dragInerfaces != null && (scrollX - preScrollX) > 0) { + dragInerfaces.onEnd(); + } + scrollBy((int) distanceX, 0); + } else { + if (distanceX < minScrollX) { + if (dragInerfaces != null && minScrollX != 0) { + dragInerfaces.onStart(); + } + distanceX = minScrollX; + } + scrollBy((int) distanceX, 0); + } + preScrollX = scrollX; + return true; + } + + @Override + public boolean onSingleTapUp(MotionEvent e) { + // startCliclkAnimation(); + float yUp, xUp; + xUp = e.getX(); + yUp = e.getY(); + Log.i("onSingleTapUp", "BarGesture onSingleTapUp()" + xUp + "===" + yUp + "===" + mWidth); + + float nowScrollX = xUp + preScrollX; + int i = mWidth / 7; + if (nowScrollX < i) { + onBarChartClick.onBarChartClick(SWITCH_TAG); + } else if (i < nowScrollX && nowScrollX < 2 * i) { + onBarChartClick.onBarChartClick(FAN_TAG); + } else if (2 * i < nowScrollX && nowScrollX < 3 * i) { + onBarChartClick.onBarChartClick(TV_TAG); + } else if (3 * i < nowScrollX && nowScrollX < 4 * i) { + onBarChartClick.onBarChartClick(AIR_TAG); + } else if (4 * i < nowScrollX && nowScrollX < 5 * i) { + onBarChartClick.onBarChartClick(LIGHT_TAG); + } else if (5 * i < nowScrollX && nowScrollX < 6 * i) { + onBarChartClick.onBarChartClick(SWEEP_TAG); + } else if (6 * i < nowScrollX && nowScrollX < 7 * i) { + onBarChartClick.onBarChartClick(CURTAINS_TAG); + } else if (7 * i < nowScrollX && nowScrollX < 8 * i) { + onBarChartClick.onBarChartClick(MUSIC_TAG); + } + return super.onSingleTapUp(e); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/devicelog/BarChart/DragInerfaces.java b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/DragInerfaces.java new file mode 100644 index 0000000..9245dc7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/DragInerfaces.java @@ -0,0 +1,10 @@ +package com.yonsz.z1.devicelog.BarChart; + +/** + * @author XinSheng + */ +public interface DragInerfaces { + void onEnd(); + + void onStart(); +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/BarChart/LBarChartView.java b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/LBarChartView.java new file mode 100644 index 0000000..6f0042f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/LBarChartView.java @@ -0,0 +1,184 @@ +package com.yonsz.z1.devicelog.BarChart; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Build; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.AttributeSet; +import android.widget.FrameLayout; + +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * @author XinSheng + */ +public class LBarChartView extends FrameLayout { + protected int defaultBorderColor = Color.argb(255, 217, 217, 217); + protected int titleTextColor = Color.argb(255, 217, 217, 217); + protected int labelTextColor; + protected int mTitleTextSize = 20; + protected int mLabelTextSize = 20; + protected String mTitle; + protected Paint mBorderLinePaint; + private int mWidth; + private int mHeight; + private int mLeftTextSpace; + private int mBottomTextSpace; + private int mTopTextSpace; + private Double maxData; + + private List mDatas; + + /** + * 备注文本画笔 + */ + private Paint mTextPaint; + /** + * 标题文本画笔 + */ + private Paint mTitleTextPaint; + + private BarChart barChartView; + private OnBarChartClickListener onBarChartClick; + + public LBarChartView(@NonNull Context context) { + super(context); + init(context, null); + } + + public LBarChartView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + public LBarChartView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public LBarChartView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(context, attrs); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + mWidth = getMeasuredWidth(); + mHeight = getMeasuredHeight(); + } + + private void init(Context context, AttributeSet attrs) { + mDatas = new ArrayList<>(); + + TypedArray t = context.obtainStyledAttributes(attrs, R.styleable.barCharts); + defaultBorderColor = t.getColor(R.styleable.barCharts_borderColor, defaultBorderColor); + titleTextColor = t.getColor(R.styleable.barCharts_titleTextColor, Color.GRAY); + mTitleTextSize = (int) t.getDimension(R.styleable.barCharts_titleTextSize, mTitleTextSize); + mLabelTextSize = (int) t.getDimension(R.styleable.barCharts_labelTextSize, mLabelTextSize); + labelTextColor = t.getColor(R.styleable.barCharts_labelTextColor, Color.GRAY); + + mLeftTextSpace = (int) t.getDimension(R.styleable.barCharts_leftTextSpace, 30); + mBottomTextSpace = (int) t.getDimension(R.styleable.barCharts_bottomTextSpace, 20); + mTopTextSpace = (int) t.getDimension(R.styleable.barCharts_topTextSpace, 20); + mTitle = t.getString(R.styleable.barCharts_title); + t.recycle(); + + mBorderLinePaint = generatePaint(); + mBorderLinePaint.setColor(defaultBorderColor); + mBorderLinePaint.setStrokeWidth(Utils.dp2px(context, 1)); + + mTextPaint = generatePaint(); + mTextPaint.setColor(labelTextColor); + mTextPaint.setTextSize(mLabelTextSize); + + mTitleTextPaint = generatePaint(); + mTitleTextPaint.setColor(titleTextColor); + mTitleTextPaint.setTextSize(mTitleTextSize); + + barChartView = new BarChart(context, attrs); + LayoutParams parames = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + parames.setMargins(mLeftTextSpace, mTopTextSpace, mLeftTextSpace, 0); + barChartView.setLayoutParams(parames); + barChartView.setBootomDrawPadding(mBottomTextSpace); + barChartView.setLeftDrawPadding(mLeftTextSpace); + barChartView.setTopDrawPadding(mTopTextSpace); + addView(barChartView); + barChartView.setOnBarChartClick(new OnBarChartClickListener() { + @Override + public void onBarChartClick(String deviceType) { + onBarChartClick.onBarChartClick(deviceType); + } + }); + } + + private Paint generatePaint() { + Paint m = new Paint(); + m.setAntiAlias(true); + m.setStyle(Paint.Style.STROKE); + return m; + } + + private void setMaxData() { + this.maxData = Collections.max(mDatas); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + + if (mTitle != null) { + canvas.drawText(mTitle, mWidth / 2 - mTitleTextPaint.measureText(mTitle) / 2, + mTopTextSpace - mTitleTextSize, mTitleTextPaint); + } + + canvas.translate(mLeftTextSpace, mHeight - mBottomTextSpace); + + canvas.drawLine(0, 0, 0, -mHeight + 50 + mBottomTextSpace, mBorderLinePaint); + + canvas.drawText("0", -mTextPaint.measureText("0") - Utils.dp2px(getContext(), 2), 0, mTextPaint); + + canvas.drawText(String.valueOf((int) (maxData / 2)), + -mLeftTextSpace / 2 - mTextPaint.measureText(String.valueOf(Math.round(maxData * 1.05))) / 2, + (-mHeight + mBottomTextSpace + mTopTextSpace) / 2, + mTextPaint); + + canvas.drawText(String.valueOf(Math.round(maxData * 1.05)), + -mLeftTextSpace / 2 - mTextPaint.measureText(String.valueOf(Math.round(maxData * 1.05))) / 2, + -mHeight + mBottomTextSpace + mTopTextSpace, + mTextPaint); + } + + + public void setDatas(List mDatas, List mDesciption, boolean isAnimation) { + this.mDatas = mDatas; + setMaxData(); + barChartView.setDatas(mDatas, mDesciption, isAnimation); + } + + public void setDragInerfaces(DragInerfaces dragInerfaces) { + barChartView.setDragInerfaces(dragInerfaces); + } + + + public void addEndMoreData(List mDatas, List mDesciption) { + barChartView.addEndMoreData(mDatas, mDesciption); + } + + // public void addStartMoreData(List mDatas, List mDesciption) { + // barChartView.addStartMoreData(mDatas,mDesciption); + // } + public void setOnBarChartClick(OnBarChartClickListener onBarChartClick) { + this.onBarChartClick = onBarChartClick; + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/BarChart/LBaseView.java b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/LBaseView.java new file mode 100644 index 0000000..5aa1602 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/LBaseView.java @@ -0,0 +1,56 @@ +package com.yonsz.z1.devicelog.BarChart; + +import android.animation.ValueAnimator; +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; + +public class LBaseView extends View { + protected float mWidth = 0f; + protected float mHeight = 0f; + + protected float scale = 0.5f; + + protected boolean canClickAnimation = false; + + protected ValueAnimator animator; + + public LBaseView(Context context) { + super(context); + initAnimation(); + } + + public LBaseView(Context context, AttributeSet attrs) { + super(context, attrs); + initAnimation(); + } + + public LBaseView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initAnimation(); + } + + private void initAnimation() { + animator = ValueAnimator.ofFloat(0.2f, 1); + animator.setInterpolator(new AccelerateDecelerateInterpolator()); + animator.setDuration(600); + animator.setRepeatCount(0); + animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + scale = (float) animation.getAnimatedValue(); + postInvalidate(); + } + }); + } + + protected int dp2px(int dpValue) { + return (int) getContext().getResources().getDisplayMetrics().density * dpValue; + } + + public void setCanClickAnimation(boolean canClickAnimation) { + this.canClickAnimation = canClickAnimation; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/BarChart/OnBarChartClickListener.java b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/OnBarChartClickListener.java new file mode 100644 index 0000000..b34f2ad --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/OnBarChartClickListener.java @@ -0,0 +1,9 @@ +package com.yonsz.z1.devicelog.BarChart; + +/** + * Created by Administrator on 2018/6/27. + */ + +public interface OnBarChartClickListener { + void onBarChartClick(String deviceType); +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/BarChart/Utils.java b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/Utils.java new file mode 100644 index 0000000..52e1e63 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/BarChart/Utils.java @@ -0,0 +1,14 @@ +package com.yonsz.z1.devicelog.BarChart; + +import android.content.Context; + +/** + * @author XinSheng + * @description + * @date 2018/4/28 + */ +public class Utils { + public static int dp2px(Context context, int dpValue) { + return (int) context.getResources().getDisplayMetrics().density * dpValue; + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/ChildControlFragment.java b/app/src/main/java/com/yonsz/z1/devicelog/ChildControlFragment.java new file mode 100644 index 0000000..2da2bbc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/ChildControlFragment.java @@ -0,0 +1,229 @@ +package com.yonsz.z1.devicelog; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnRecyclerLoadDataListener; +import com.yonsz.z1.mine.mydevice.DeviceLogEntity; +import com.yonsz.z1.mine.mydevice.LogAdapter; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LoadMoreRecyclerView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_FAIL; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_SUCCESS; + +/** + * Created by Administrator on 2018/6/27. + */ + +public class ChildControlFragment extends BaseFragment { + private UIHandle mHandler; + private View view; + private RelativeLayout mNoRecord; + private int DATA_TYPE; + private LoadingDialog mLoadingDialog; + private boolean isRefresh; + private boolean isLoadMore; + private int page = 1; + private List mDatas; + private List> mDatasRercord = new ArrayList<>(); + private LoadMoreRecyclerView mLogRecycler; + private LogAdapter mLogAdapter; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(R.layout.fragment_state_log, container, false); + initView(view); + initListener(); + DATA_TYPE = Constans.REFRESH_DATA; + initLoadDialog(); + loadListViewData(page); + return view; + } + + private void loadListViewData(int page) { + //当有网络的时候 + if (DensityUtil.isNetworkConnected(getContext())) { + } + } + + private void initView(View view) { + mLogRecycler = (LoadMoreRecyclerView) view.findViewById(R.id.log_recyclerview); + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(getContext()); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mLogRecycler.setLayoutManager(manager); + mDatas = new ArrayList<>(); + mLogAdapter = new LogAdapter(getContext(), mDatasRercord); + mNoRecord = (RelativeLayout) view.findViewById(R.id.ll_no_record); + mLogRecycler.setAdapter(mLogAdapter); + mLogRecycler.setOnLoadDataListener(new OnRecyclerLoadDataListener() { + @Override + public void onLoadMore() { + if (!isLoadMore) { + isLoadMore = true; + page++; + DATA_TYPE = Constans.MORE_DATA; + } + } + }); + } + + private void initListener() { + + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_LOG_SUCCESS: + mLoadingDialog.dismiss(); + int arg1 = msg.arg1; + if (msg.obj != null && page <= arg1) { + onSuccess((List) msg.obj); + } else { + Toast.makeText(getContext(), "我是有底线的", Toast.LENGTH_LONG).show(); + } + break; + case GET_LOG_FAIL: + + break; + case TRUNCATE_LISTINFO_SUCCESS: + mDatasRercord.clear(); + mLogAdapter.notifyDataSetChanged(); + break; + case TRUNCATE_LISTINFO_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(getContext()); + mLoadingDialog.show(); + } + + private void onSuccess(List logEntities) { + for (int j = 0; j < mDatasRercord.size(); j++) { + for (int k = 0; k < mDatasRercord.get(j).size(); k++) { + String id = mDatasRercord.get(j).get(k).getId(); + for (int f = 0; f < logEntities.size(); f++) { + if (logEntities.get(f).getId().equals(id)) { + logEntities.remove(logEntities.get(f)); + } + } + } + } + if (logEntities.size() > 0) { + String createDate = logEntities.get(0).getCreateDate().substring(0, 10); + if (mDatasRercord.size() == 0 || (mDatasRercord.get(0) != null && logEntities != null && logEntities.size() > 0 && !logEntities.get(0).getId().equals(mDatasRercord.get(0).get(0).getId()))) { + if (DATA_TYPE == Constans.REFRESH_DATA) { + isRefresh = false; + mDatas = new ArrayList<>(); + mDatasRercord.clear(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + if (mDatas.size() == logEntities.size()) { + mDatasRercord.add(mDatas); + } else if (i == logEntities.size() - 1) { + mDatasRercord.add(mDatas); + } + } + } else { + isLoadMore = false; + if (mDatas != null && mDatas.get(mDatas.size() - 1).getCreateDate().substring(0, 10).equals(createDate)) { + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } else { + mDatas = new ArrayList<>(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } + if (mDatasRercord.size() >= 2) { + if (mDatasRercord.get(0) == mDatasRercord.get(1)) { + mDatasRercord.remove(1); + } + } + } + mLogAdapter.notifyDataSetChanged(); + } else { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + isRefresh = false; + isLoadMore = false; + DATA_TYPE = -1; + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + } + + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(ChildControlFragment activity) { + weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + ChildControlFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/DeviceLog4Activity.java b/app/src/main/java/com/yonsz/z1/devicelog/DeviceLog4Activity.java new file mode 100644 index 0000000..66d115d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/DeviceLog4Activity.java @@ -0,0 +1,95 @@ +package com.yonsz.z1.devicelog; + +import android.os.Bundle; +import android.os.Message; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.view.View; +import android.widget.RadioButton; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.activity.MainActivityAdapter; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.MainViewPager; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2018/6/4. + */ + +public class DeviceLog4Activity extends BaseActivity { + private TitleView mTitleView; + private RadioButton deviceAddLogRb, deviceStateLogRb, deviceControlLogRb; + private MainViewPager logViewPager; + + @Override + + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_log4); + initView(); + } + + private void initView() { + deviceAddLogRb = (RadioButton) findViewById(R.id.rb_log_device_add); + deviceStateLogRb = (RadioButton) findViewById(R.id.rb_log_device_state); + deviceControlLogRb = (RadioButton) findViewById(R.id.rb_log_device_control); + logViewPager = (MainViewPager) findViewById(R.id.mvp_device_log); + mTitleView = (TitleView) findViewById(R.id.title_device_log4); + mTitleView.setHead(R.string.device_log); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + deviceAddLogRb.setOnClickListener(this); + deviceStateLogRb.setOnClickListener(this); + deviceControlLogRb.setOnClickListener(this); + + + List fragmentList = new ArrayList<>(); + fragmentList.add(LogStateFragment.getInstance("")); + fragmentList.add(LogStateFragment.getInstance("ai")); + fragmentList.add(LogStateFragment.getInstance("su")); +// fragmentList.add(new LogAddFragment()); +// fragmentList.add(new LogControlFragment()); + FragmentManager manager = getSupportFragmentManager(); + logViewPager.setAdapter(new MainActivityAdapter(manager, fragmentList)); + logViewPager.setOffscreenPageLimit(2); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rb_log_device_add: + logViewPager.setCurrentItem(1, false); + break; + case R.id.rb_log_device_state: + logViewPager.setCurrentItem(0, false); + break; + case R.id.rb_log_device_control: + logViewPager.setCurrentItem(2, false); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/LogAddFragment.java b/app/src/main/java/com/yonsz/z1/devicelog/LogAddFragment.java new file mode 100644 index 0000000..1fade8e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/LogAddFragment.java @@ -0,0 +1,223 @@ +package com.yonsz.z1.devicelog; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnRecyclerLoadDataListener; +import com.yonsz.z1.mine.mydevice.DeviceLogEntity; +import com.yonsz.z1.mine.mydevice.LogAdapter; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LoadMoreRecyclerView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_FAIL; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_SUCCESS; + +/** + * Created by Administrator on 2018/6/4. + */ + +public class LogAddFragment extends BaseFragment { + private UIHandle mHandler; + private View view; + private RelativeLayout mNoRecord; + private int DATA_TYPE; + private boolean isRefresh; + private boolean isLoadMore; + private int page = 1; + private List mDatas; + private List> mDatasRercord = new ArrayList<>(); + private LoadMoreRecyclerView mLogRecycler; + private LogAdapter mLogAdapter; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(R.layout.fragment_state_log, container, false); + initView(view); + initListener(); + DATA_TYPE = Constans.REFRESH_DATA; + loadListViewData(page); + return view; + } + + private void loadListViewData(int page) { + //当有网络的时候 + if (DensityUtil.isNetworkConnected(getContext())) { + getListMessage(page); + } + } + + + private void initView(View view) { + mLogRecycler = (LoadMoreRecyclerView) view.findViewById(R.id.log_recyclerview); + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(getContext()); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mLogRecycler.setLayoutManager(manager); + mDatas = new ArrayList<>(); + mLogAdapter = new LogAdapter(getContext(), mDatasRercord); + mNoRecord = (RelativeLayout) view.findViewById(R.id.ll_no_record); + mLogRecycler.setAdapter(mLogAdapter); + mLogRecycler.setOnLoadDataListener(new OnRecyclerLoadDataListener() { + @Override + public void onLoadMore() { + if (!isLoadMore) { + isLoadMore = true; + page++; + DATA_TYPE = Constans.MORE_DATA; + getListMessage(page); + } + } + }); + } + + private void initListener() { + + + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_LOG_SUCCESS: + int arg1 = msg.arg1; + if (msg.obj != null && page <= arg1) { + onSuccess((List) msg.obj); + } else { + Toast.makeText(getContext(), "我是有底线的", Toast.LENGTH_LONG).show(); + } + break; + case GET_LOG_FAIL: + + break; + case TRUNCATE_LISTINFO_SUCCESS: + mDatasRercord.clear(); + mLogAdapter.notifyDataSetChanged(); + break; + case TRUNCATE_LISTINFO_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } + + private void getListMessage(final int page) { + + } + + private void onSuccess(List logEntities) { + for (int j = 0; j < mDatasRercord.size(); j++) { + for (int k = 0; k < mDatasRercord.get(j).size(); k++) { + String id = mDatasRercord.get(j).get(k).getId(); + for (int f = 0; f < logEntities.size(); f++) { + if (logEntities.get(f).getId().equals(id)) { + logEntities.remove(logEntities.get(f)); + } + } + } + } + if (logEntities.size() > 0) { + String createDate = logEntities.get(0).getCreateDate().substring(0, 10); + if (mDatasRercord.size() == 0 || (mDatasRercord.get(0) != null && logEntities != null && logEntities.size() > 0 && !logEntities.get(0).getId().equals(mDatasRercord.get(0).get(0).getId()))) { + if (DATA_TYPE == Constans.REFRESH_DATA) { + isRefresh = false; + mDatas = new ArrayList<>(); + mDatasRercord.clear(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + if (mDatas.size() == logEntities.size()) { + mDatasRercord.add(mDatas); + } else if (i == logEntities.size() - 1) { + mDatasRercord.add(mDatas); + } + } + } else { + isLoadMore = false; + if (mDatas != null && mDatas.get(mDatas.size() - 1).getCreateDate().substring(0, 10).equals(createDate)) { + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } else { + mDatas = new ArrayList<>(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } + if (mDatasRercord.size() >= 2) { + if (mDatasRercord.get(0) == mDatasRercord.get(1)) { + mDatasRercord.remove(1); + } + } + } + mLogAdapter.notifyDataSetChanged(); + } else { + + } + isRefresh = false; + isLoadMore = false; + DATA_TYPE = -1; + } + } + + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(LogAddFragment activity) { + weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + LogAddFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/LogControlFragment.java b/app/src/main/java/com/yonsz/z1/devicelog/LogControlFragment.java new file mode 100644 index 0000000..c0aa27b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/LogControlFragment.java @@ -0,0 +1,248 @@ +package com.yonsz.z1.devicelog; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity4.NewLogNumEntity; +import com.yonsz.z1.devicelog.BarChart.LBarChartView; +import com.yonsz.z1.devicelog.BarChart.OnBarChartClickListener; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.GET_APP_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_VOICE_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MUSIC_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; + +/** + * Created by Administrator on 2018/6/4. + */ + +public class LogControlFragment extends BaseFragment { + private UIHandle mHandler; + private View view; + private LBarChartView appControl, voiceControl; + private String ziId; + private LoadingDialog mLoadingDialog; + private List datas,datas1; + private List description,description1; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(R.layout.fragment_control_log, container, false); + initView(view); + initListener(); + return view; + } + + + private void initView(View view) { + ziId = getActivity().getIntent().getExtras().get("ziId").toString(); +// initLoadDialog(); + appControl = (LBarChartView) view.findViewById(R.id.lb_app_control); + voiceControl = (LBarChartView) view.findViewById(R.id.lb_voice_control); + datas = new ArrayList<>(); + datas.clear(); + datas.add(0d); + datas.add(0d); + datas.add(0d); + datas.add(0d); + datas.add(0d); + datas.add(0d); + datas.add(0d); + datas.add(0d); + description = new ArrayList<>(); + description.clear(); + description.add(""); + description.add(""); + description.add(""); + description.add(""); + description.add(""); + description.add(""); + description.add(""); + description.add(""); + datas1 = new ArrayList<>(); + datas1.clear(); + datas1.add(0d); + datas1.add(0d); + datas1.add(0d); + datas1.add(0d); + datas1.add(0d); + datas1.add(0d); + datas1.add(0d); + datas1.add(0d); + description1 = new ArrayList<>(); + description1.clear(); + description1.add(""); + description1.add(""); + description1.add(""); + description1.add(""); + description1.add(""); + description1.add(""); + description1.add(""); + description1.add(""); + + } + + private void initListener() { + + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(getContext()); + mLoadingDialog.show(); + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_LOG_FAIL: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(getContext(), (String) msg.obj); + break; + case GET_APP_LOG_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + NewLogNumEntity appLogNumEntity = (NewLogNumEntity) msg.obj; + if (null != appLogNumEntity.getObj() && appLogNumEntity.getObj().size() > 0) { + for (int i = 0; i < appLogNumEntity.getObj().size(); i++) { + double count = Double.parseDouble(appLogNumEntity.getObj().get(i).getCount()); + switch (appLogNumEntity.getObj().get(i).getDeviceType()) { + case SWITCH_TAG: + datas.set(0, count); + break; + case FAN_TAG: + datas.set(1, count); + break; + case TV_TAG: + datas.set(2, count); + break; + case AIR_TAG: + datas.set(3, count); + break; + case LIGHT_TAG: + datas.set(4, count); + break; + case SWEEP_TAG: + datas.set(5, count); + break; + case CURTAINS_TAG: + datas.set(6, count); + break; + case MUSIC_TAG: + datas.set(7, count); + break; + } + } + } + appControl.setDatas(datas, description, false); + appControl.setOnBarChartClick(new OnBarChartClickListener() { + @Override + public void onBarChartClick(String deviceType) { + Intent intent = new Intent(getActivity(), LogControldetailActivity.class); + intent.putExtra("deviceType", deviceType); + intent.putExtra("ziId", ziId); + intent.putExtra("controlType", "2"); + startActivity(intent); + } + }); + break; + case GET_VOICE_LOG_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + NewLogNumEntity voiceLogNumEntity = (NewLogNumEntity) msg.obj; + if (null != voiceLogNumEntity.getObj() && voiceLogNumEntity.getObj().size() > 0) { + for (int i = 0; i < voiceLogNumEntity.getObj().size(); i++) { + double count = Double.parseDouble(voiceLogNumEntity.getObj().get(i).getCount()); + switch (voiceLogNumEntity.getObj().get(i).getDeviceType()) { + case SWITCH_TAG: + datas1.set(0, count); + break; + case FAN_TAG: + datas1.set(1, count); + break; + case TV_TAG: + datas1.set(2, count); + break; + case AIR_TAG: + datas1.set(3, count); + break; + case LIGHT_TAG: + datas1.set(4, count); + break; + case SWEEP_TAG: + datas1.set(5, count); + break; + case CURTAINS_TAG: + datas1.set(6, count); + break; + case MUSIC_TAG: + datas1.set(7, count); + break; + } + } + } + voiceControl.setDatas(datas1, description1, false); + voiceControl.setOnBarChartClick(new OnBarChartClickListener() { + @Override + public void onBarChartClick(String deviceType) { + Intent intent = new Intent(getActivity(), LogControldetailActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("controlType", "1"); + startActivity(intent); + } + }); + break; + } + } + + static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(LogControlFragment activity) { + weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + LogControlFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/LogControldetailActivity.java b/app/src/main/java/com/yonsz/z1/devicelog/LogControldetailActivity.java new file mode 100644 index 0000000..ab5c71a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/LogControldetailActivity.java @@ -0,0 +1,124 @@ +package com.yonsz.z1.devicelog; + +import android.os.Bundle; +import android.os.Message; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.view.View; +import android.widget.RadioButton; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.activity.MainActivityAdapter; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.MainViewPager; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MUSIC_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; + +/** + * Created by Administrator on 2018/6/27. + */ + +public class LogControldetailActivity extends BaseActivity { + private TitleView mTitleView; + private RadioButton childControlRb, allControlRb; + private MainViewPager logViewPager; + private String deviceType; + private String ziId; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_control_detail_log); + initView(); + } + + private void initView() { + deviceType = getIntent().getExtras().get("deviceType").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + childControlRb = (RadioButton) findViewById(R.id.rb_log_child_control); + allControlRb = (RadioButton) findViewById(R.id.rb_log_all_control); + logViewPager = (MainViewPager) findViewById(R.id.mvp_device_log); + mTitleView = (TitleView) findViewById(R.id.title_control_log4); + mTitleView.setHead(R.string.device_log); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (deviceType) { + case AIR_TAG: + childControlRb.setText(R.string.Number_commands); + break; + case TV_TAG: + childControlRb.setText(R.string.Number_commands); + break; + case FAN_TAG: + childControlRb.setText(R.string.Number_commands); + break; + case SWITCH_TAG: + childControlRb.setText(R.string.Number_commands); + break; + case LIGHT_TAG: + childControlRb.setText(R.string.Number_commands); + break; + case SWEEP_TAG: + childControlRb.setText(R.string.Number_commands); + break; + case CURTAINS_TAG: + childControlRb.setText(R.string.Number_commands); + break; + case MUSIC_TAG: + childControlRb.setText(R.string.Number_commands); + break; + } + childControlRb.setOnClickListener(this); + allControlRb.setOnClickListener(this); + + List fragmentList = new ArrayList<>(); + /*fragmentList.add(new ChildControlFragment()); + fragmentList.add(new AllControlFragment());*/ + FragmentManager manager = this.getSupportFragmentManager(); + logViewPager.setAdapter(new MainActivityAdapter(manager, fragmentList)); + logViewPager.setOffscreenPageLimit(2); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rb_log_child_control: + logViewPager.setCurrentItem(0, false); + break; + case R.id.rb_log_all_control: + logViewPager.setCurrentItem(1, false); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/devicelog/LogStateFragment.java b/app/src/main/java/com/yonsz/z1/devicelog/LogStateFragment.java new file mode 100644 index 0000000..1af6db6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/devicelog/LogStateFragment.java @@ -0,0 +1,336 @@ +package com.yonsz.z1.devicelog; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnRecyclerLoadDataListener; +import com.yonsz.z1.mine.mydevice.DeviceLogEntity; +import com.yonsz.z1.mine.mydevice.LogAdapter; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DateUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.time.TimeManagerFragment; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LoadMoreRecyclerView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_FAIL; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_SUCCESS; + +/** + * Created by Administrator on 2018/6/4. + */ + +public class LogStateFragment extends BaseFragment { + private UIHandle mHandler; + private View view; + private RelativeLayout mNoRecord; + private int DATA_TYPE; + private boolean isLoadMore; + private int page = 1; + private List mDatas; + private List> mDatasRercord = new ArrayList<>(); + private LoadMoreRecyclerView mLogRecycler; + private LogAdapter mLogAdapter; + private LoadingDialog mLoadingDialog; + private String logType = ""; + private String createDate; + + public static LogStateFragment getInstance(String logType) { + LogStateFragment fragment = new LogStateFragment(); + fragment.logType = logType; + return fragment; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(R.layout.fragment_state_log, container, false); + initView(view); + initListener(); + DATA_TYPE = Constans.REFRESH_DATA; + if (logType.isEmpty()) { + initLoadDialog(); + } + loadListViewData(page); + return view; + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(getContext()); + mLoadingDialog.show(); + } + + private void loadListViewData(int page) { + //当有网络的时候 + if (DensityUtil.isNetworkConnected(getContext())) { + getListMessage(page); + } + } + + + private void initView(View view) { + mLogRecycler = (LoadMoreRecyclerView) view.findViewById(R.id.log_recyclerview); + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(getContext()); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mLogRecycler.setLayoutManager(manager); + mDatas = new ArrayList<>(); + mLogAdapter = new LogAdapter(getContext(), mDatasRercord); + mNoRecord = (RelativeLayout) view.findViewById(R.id.ll_no_record); + mLogRecycler.setAdapter(mLogAdapter); + mLogRecycler.setOnLoadDataListener(new OnRecyclerLoadDataListener() { + @Override + public void onLoadMore() { + if (!isLoadMore) { + isLoadMore = true; + page++; + DATA_TYPE = Constans.MORE_DATA; + getListMessage(page); + } + } + }); + } + + private void initListener() { + + + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_LOG_SUCCESS: + int arg1 = msg.arg1; + List obj = (List) msg.obj; + if (obj.size() != 0 && page <= (arg1 / 10 + 1)) { + onSuccess((List) msg.obj); + } else { + Toast.makeText(getContext(), "我是有底线的", Toast.LENGTH_LONG).show(); + } + break; + case GET_LOG_FAIL: + + break; + case TRUNCATE_LISTINFO_SUCCESS: + mDatasRercord.clear(); + mLogAdapter.notifyDataSetChanged(); + break; + case TRUNCATE_LISTINFO_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } + + private void getListMessage(final int page) { + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("page", "" + page); + map.put("ziId", getActivity().getIntent().getExtras().get("ziId").toString()); + map.put("logType", logType); + map.put("limit", "20"); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.GET_DEVICE_LOG_LIST, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("getListState", "onSuccess: " + page + respone); + DeviceLogEntity obj = JSON.parseObject(respone, DeviceLogEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_LOG_SUCCESS); + msg.obj = obj.getData().getRecords(); + msg.arg1 = obj.getData().getTotal(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private void onSuccess(List logEntities) { + for (int j = 0; j < mDatasRercord.size(); j++) { + for (int k = 0; k < mDatasRercord.get(j).size(); k++) { + String id = mDatasRercord.get(j).get(k).getId(); + for (int f = 0; f < logEntities.size(); f++) { + if (logEntities.get(f).getId().equals(id)) { + logEntities.remove(logEntities.get(f)); + } + } + } + } + + if (logEntities.size() > 0) { + String createDate = DateUtil.timeStamp2Date(String.valueOf(logEntities.get(0).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10); + if (DATA_TYPE == Constans.REFRESH_DATA) { + mDatas = new ArrayList<>(); + mDatasRercord.clear(); + for (int i = 0; i < logEntities.size(); i++) { + if (DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10).equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + if (mDatas.size() == logEntities.size()) { + mDatasRercord.add(mDatas); + } else if (i == logEntities.size() - 1) { + mDatasRercord.add(mDatas); + } + } + } else { + isLoadMore = false; + if (mDatas != null && DateUtil.timeStamp2Date(String.valueOf(mDatas.get(mDatas.size() - 1).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10).equals(createDate)) { + for (int i = 0; i < logEntities.size(); i++) { + if (DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10).equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + if (mDatas.size() > 0) { + mDatasRercord.add(mDatas); + } + } else { + mDatas = new ArrayList<>(); + for (int i = 0; i < logEntities.size(); i++) { + if (DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10).equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + if (mDatas.size()>0){ + mDatasRercord.add(mDatas); + } + } + if (mDatasRercord.size() >= 2) { + if (mDatasRercord.get(0) == mDatasRercord.get(1)) { + mDatasRercord.remove(1); + } + } + } + mLogAdapter.notifyDataSetChanged(); + isLoadMore = false; + DATA_TYPE = -1; + + /*if (logEntities.size() > 0) { + createDate = DateUtil.timeStamp2Date(String.valueOf(logEntities.get(0).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10); + if (DATA_TYPE == Constans.REFRESH_DATA) { + mDatas.clear(); + mDatasRercord.clear(); + for (int i = 0; i < logEntities.size(); i++) { + if (DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10).equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10); + mDatasRercord.add(mDatas); + mDatas.clear(); + mDatas.add(logEntities.get(i)); + } + } + if (mDatas.size() != 0) { + String t1 = DateUtil.timeStamp2Date(String.valueOf(mDatas.get(0).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10); + + } + } else { + isLoadMore = false; + if (mDatas.size() != 0 && DateUtil.timeStamp2Date(String.valueOf(mDatas.get(0).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10).equals(createDate)) { + for (int i = 0; i < logEntities.size(); i++) { + if (DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10).equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10); + mDatasRercord.add(mDatas); + mDatas.clear(); + mDatas.add(logEntities.get(i)); + } + } + } else { + mDatas.clear(); + for (int i = 0; i < logEntities.size(); i++) { + if (DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10).equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = DateUtil.timeStamp2Date(String.valueOf(logEntities.get(i).getCreateDate()), "yyyy-MM-dd HH:mm").substring(0, 10); + mDatasRercord.add(mDatas); + mDatas.clear(); + mDatas.add(logEntities.get(i)); + } + } + } + if (mDatasRercord.size() >= 2) { + if (mDatasRercord.get(0) == mDatasRercord.get(1)) { + mDatasRercord.remove(1); + } + } + } + mLogAdapter.notifyDataSetChanged(); + isLoadMore = false; + DATA_TYPE = -1;*/ + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + } + + static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(LogStateFragment activity) { + weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + LogStateFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/Base1Frafment.java b/app/src/main/java/com/yonsz/z1/fragment/Base1Frafment.java new file mode 100644 index 0000000..18bd933 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/Base1Frafment.java @@ -0,0 +1,144 @@ +package com.yonsz.z1.fragment; + +import android.app.Activity; +import android.app.Fragment; +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +/** + * Created by Administrator on 2018/8/14. + */ + +public abstract class Base1Frafment extends Fragment { + + /** + * 贴附的activity + */ + protected Activity mActivity; + + /** + * 根view + */ + protected View mRootView; + + /** + * 是否对用户可见 + */ + protected boolean mIsVisible; + /** + * 是否加载完成 + * 当执行完oncreatview,View的初始化方法后方法后即为true + */ + protected boolean mIsPrepare; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mActivity = getActivity(); + } + + @Override + @Nullable + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + mRootView = inflater.inflate(setLayoutResouceId(), container, false); + + initData(getArguments()); + + initView(); + + mIsPrepare = true; + + onLazyLoad(); + + setListener(); + + return mRootView; + } + + /** + * 初始化数据 + * + * @param arguments 接收到的从其他地方传递过来的参数 + * @author 漆可 + * @date 2016-5-26 下午3:57:48 + */ + protected void initData(Bundle arguments) { + + } + + /** + * 初始化View + * + * @author 漆可 + * @date 2016-5-26 下午3:58:49 + */ + protected void initView() { + + } + + /** + * 设置监听事件 + * + * @author 漆可 + * @date 2016-5-26 下午3:59:36 + */ + protected void setListener() { + + } + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + + this.mIsVisible = isVisibleToUser; + + if (isVisibleToUser) { + onVisibleToUser(); + } + } + + /** + * 用户可见时执行的操作 + * + * @author 漆可 + * @date 2016-5-26 下午4:09:39 + */ + protected void onVisibleToUser() { + if (mIsPrepare && mIsVisible) { + onLazyLoad(); + } + } + + /** + * 懒加载,仅当用户可见切view初始化结束后才会执行 + * + * @author 漆可 + * @date 2016-5-26 下午4:10:20 + */ + protected void onLazyLoad() { + + } + + @SuppressWarnings("unchecked") + protected T findViewById(int id) { + if (mRootView == null) { + return null; + } + + return (T) mRootView.findViewById(id); + } + + /** + * 设置根布局资源id + * + * @return + * @author 漆可 + * @date 2016-5-26 下午3:57:09 + */ + protected abstract int setLayoutResouceId(); +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/BaseFragment.java b/app/src/main/java/com/yonsz/z1/fragment/BaseFragment.java new file mode 100644 index 0000000..5187ab7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/BaseFragment.java @@ -0,0 +1,28 @@ +package com.yonsz.z1.fragment; + +import android.app.Activity; +import android.content.Context; +import android.support.v4.app.Fragment; + +import com.yonsz.z1.UniKongApp; + +/** + * Created by Administrator on 2018/9/18. + */ + +public class BaseFragment extends Fragment { + private Activity activity; + + public Context getContext() { + if (activity == null) { + return UniKongApp.getInstance(); + } + return activity; + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + activity = getActivity(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/BaseFragment2.java b/app/src/main/java/com/yonsz/z1/fragment/BaseFragment2.java new file mode 100644 index 0000000..61cf508 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/BaseFragment2.java @@ -0,0 +1,139 @@ +package com.yonsz.z1.fragment; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import de.greenrobot.event.EventBus; + +/** + * Fragment预加载问题的解决方案: + * 1.可以懒加载的Fragment + * 2.切换到其他页面时停止加载数据(可选) + * Created by yuandl on 2016-11-17. + * blog :http://blog.csdn.net/linglongxin24/article/details/53205878 + */ + +public abstract class BaseFragment2 extends BaseFragment implements View.OnClickListener{ + protected final String TAG = "LazyLoadFragment"; + /** + * 视图是否已经初初始化 + */ + protected boolean isInit = false; + protected boolean isLoad = false; + private View view; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// EventBus.getDefault().register(this); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(setContentView(), container, false); + isInit = true; + /**初始化的时候去加载数据**/ + isCanLoadData(); + return view; + } + + /** + * 视图是否已经对用户可见,系统的方法 + */ + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + isCanLoadData(); + } + + /** + * 是否可以加载数据 + * 可以加载数据的条件: + * 1.视图已经初始化 + * 2.视图对用户可见 + */ + private void isCanLoadData() { + if (!isInit) { + return; + } + + if (getUserVisibleHint()) { + lazyLoad(); + isLoad = true; + } else { + if (isLoad) { + stopLoad(); + } + } + } + + /** + * 视图销毁的时候讲Fragment是否初始化的状态变为false + */ + @Override + public void onDestroyView() { + super.onDestroyView(); + isInit = false; + isLoad = false; + + } + + @Override + public void onDestroy() { + super.onDestroy(); +// EventBus.getDefault().unregister(this); + } + + protected void showToast(String message) { + if (!TextUtils.isEmpty(message)) { + Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show(); + } + + } + + /** + * 设置Fragment要显示的布局 + * + * @return 布局的layoutId + */ + protected abstract int setContentView(); + + /** + * 获取设置的布局 + * + * @return + */ + protected View getContentView() { + return view; + } + + /** + * 找出对应的控件 + * + * @param id + * @param + * @return + */ + protected T findViewById(int id) { + + return (T) getContentView().findViewById(id); + } + + /** + * 当视图初始化并且对用户可见的时候去真正的加载数据 + */ + protected abstract void lazyLoad(); + + /** + * 当视图已经对用户不可见并且加载过数据,如果需要在切换到其他页面时停止加载数据,可以调用此方法 + */ + protected void stopLoad() { + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/BaseTestFragment.java b/app/src/main/java/com/yonsz/z1/fragment/BaseTestFragment.java new file mode 100644 index 0000000..a1f1217 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/BaseTestFragment.java @@ -0,0 +1,97 @@ +package com.yonsz.z1.fragment; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +/** + * Fragment预加载问题的解决方案: + * 1.可以懒加载的Fragment + * 2.切换到其他页面时停止加载数据(可选) + * Created by yuandl on 2016-11-17. + * blog :http://blog.csdn.net/linglongxin24/article/details/53205878 + */ + +public abstract class BaseTestFragment extends Fragment implements View.OnClickListener { + protected final String TAG = "LazyLoadFragment"; + /** + * 视图是否已经初初始化 + */ + protected boolean isInit = false; + protected boolean isLoad = false; + private View view; + + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + isInit = true; + /**初始化的时候去加载数据**/ + // isCanLoadData(); + return view; + } + + /** + * 视图是否已经对用户可见,系统的方法 + */ + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + isCanLoadData(); + } + + /** + * 是否可以加载数据 + * 可以加载数据的条件: + * 1.视图已经初始化 + * 2.视图对用户可见 + */ + private void isCanLoadData() { + if (isInit) { + return; + } + if (getUserVisibleHint()) { + lazyLoad(); + isLoad = true; + } else { + if (isLoad) { + stopLoad(); + } + } + } + + /** + * 视图销毁的时候讲Fragment是否初始化的状态变为false + */ + @Override + public void onDestroyView() { + super.onDestroyView(); + isInit = false; + isLoad = false; + + } + + protected void showToast(String message) { + if (!TextUtils.isEmpty(message)) { + Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show(); + } + + } + + + /** + * 当视图初始化并且对用户可见的时候去真正的加载数据 + */ + protected abstract void lazyLoad(); + + /** + * 当视图已经对用户不可见并且加载过数据,如果需要在切换到其他页面时停止加载数据,可以调用此方法 + */ + protected void stopLoad() { + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/main/GradationScrollView.java b/app/src/main/java/com/yonsz/z1/fragment/main/GradationScrollView.java new file mode 100644 index 0000000..89851ac --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/main/GradationScrollView.java @@ -0,0 +1,47 @@ +package com.yonsz.z1.fragment.main; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.ScrollView; + +/** + * 带滚动监听的scrollview + * + */ +public class GradationScrollView extends ScrollView { + + public interface ScrollViewListener { + + void onScrollChanged(GradationScrollView scrollView, int x, int y, + int oldx, int oldy); + + } + + private ScrollViewListener scrollViewListener = null; + + public GradationScrollView(Context context) { + super(context); + } + + public GradationScrollView(Context context, AttributeSet attrs, + int defStyle) { + super(context, attrs, defStyle); + } + + public GradationScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public void setScrollViewListener(ScrollViewListener scrollViewListener) { + this.scrollViewListener = scrollViewListener; + } + + @Override + protected void onScrollChanged(int x, int y, int oldx, int oldy) { + super.onScrollChanged(x, y, oldx, oldy); + if (scrollViewListener != null) { + scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/fragment/main/HeaderScrollHelper.java b/app/src/main/java/com/yonsz/z1/fragment/main/HeaderScrollHelper.java new file mode 100644 index 0000000..25b24bf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/main/HeaderScrollHelper.java @@ -0,0 +1,143 @@ +package com.yonsz.z1.fragment.main; + +import android.annotation.SuppressLint; +import android.os.Build; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.webkit.WebView; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.ScrollView; + +/** + * ================================================ + * 作 者:jeasonlzy(廖子尧)Github地址:https://github.com/jeasonlzy0216 + * 版 本:1.0 + * 创建日期:2016/5/8 + * 描 述: + * 修订历史: + * ================================================ + */ +public class HeaderScrollHelper { + + private int sysVersion; //当前sdk版本,用于判断api版本 + private ScrollableContainer mCurrentScrollableContainer; + + public HeaderScrollHelper() { + sysVersion = Build.VERSION.SDK_INT; + } + + /** + * 包含有 ScrollView ListView RecyclerView 的组件 + */ + public interface ScrollableContainer { + + /** + * @return ScrollView ListView RecyclerView 或者其他的布局的实例 + */ + View getScrollableView(); + } + + public void setCurrentScrollableContainer(ScrollableContainer scrollableContainer) { + this.mCurrentScrollableContainer = scrollableContainer; + } + + private View getScrollableView() { + if (mCurrentScrollableContainer == null) + return null; + return mCurrentScrollableContainer.getScrollableView(); + } + + /** + * 判断是否滑动到顶部方法,ScrollAbleLayout根据此方法来做一些逻辑判断 + * 目前只实现了AdapterView,ScrollView,RecyclerView + * 需要支持其他view可以自行补充实现 + */ + public boolean isTop() { + View scrollableView = getScrollableView(); + if (scrollableView == null) { + throw new NullPointerException("You should call ScrollableHelper.setCurrentScrollableContainer() to set ScrollableContainer."); + } + if (scrollableView instanceof AdapterView) { + return isAdapterViewTop((AdapterView) scrollableView); + } + if (scrollableView instanceof ScrollView) { + return isScrollViewTop((ScrollView) scrollableView); + } + if (scrollableView instanceof RecyclerView) { + return isRecyclerViewTop((RecyclerView) scrollableView); + } + if (scrollableView instanceof WebView) { + return isWebViewTop((WebView) scrollableView); + } + throw new IllegalStateException("scrollableView must be a instance of AdapterView|ScrollView|RecyclerView"); + } + + private boolean isRecyclerViewTop(RecyclerView recyclerView) { + if (recyclerView != null) { + RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); + if (layoutManager instanceof LinearLayoutManager) { + int firstVisibleItemPosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); + View childAt = recyclerView.getChildAt(0); + if (childAt == null || (firstVisibleItemPosition == 0 && childAt.getTop() == 0)) { + return true; + } + } + } + return false; + } + + private boolean isAdapterViewTop(AdapterView adapterView) { + if (adapterView != null) { + int firstVisiblePosition = adapterView.getFirstVisiblePosition(); + View childAt = adapterView.getChildAt(0); + if (childAt == null || (firstVisiblePosition == 0 && childAt.getTop() == 0)) { + return true; + } + } + return false; + } + + private boolean isScrollViewTop(ScrollView scrollView) { + if (scrollView != null) { + int scrollViewY = scrollView.getScrollY(); + return scrollViewY <= 0; + } + return false; + } + + private boolean isWebViewTop(WebView scrollView) { + if (scrollView != null) { + int scrollViewY = scrollView.getScrollY(); + return scrollViewY <= 0; + } + return false; + } + + /** + * 将特定的view按照初始条件滚动 + * + * @param velocityY 初始滚动速度 + * @param distance 需要滚动的距离 + * @param duration 允许滚动的时间 + */ + @SuppressLint("NewApi") + public void smoothScrollBy(int velocityY, int distance, int duration) { + View scrollableView = getScrollableView(); + if (scrollableView instanceof AbsListView) { + AbsListView absListView = (AbsListView) scrollableView; + if (sysVersion >= 21) { + absListView.fling(velocityY); + } else { + absListView.smoothScrollBy(distance, duration); + } + } else if (scrollableView instanceof ScrollView) { + ((ScrollView) scrollableView).fling(velocityY); + } else if (scrollableView instanceof RecyclerView) { + ((RecyclerView) scrollableView).fling(0, velocityY); + } else if (scrollableView instanceof WebView) { + ((WebView) scrollableView).flingScroll(0, velocityY); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/main/HeaderViewPager.java b/app/src/main/java/com/yonsz/z1/fragment/main/HeaderViewPager.java new file mode 100644 index 0000000..103e349 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/main/HeaderViewPager.java @@ -0,0 +1,315 @@ +package com.yonsz.z1.fragment.main; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Build; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.VelocityTracker; +import android.view.View; +import android.view.ViewConfiguration; +import android.widget.LinearLayout; +import android.widget.Scroller; + +import com.yonsz.z1.R; + +public class HeaderViewPager extends LinearLayout { + + private static final int DIRECTION_UP = 1; + private static final int DIRECTION_DOWN = 2; + + private int topOffset = 0; //滚动的最大偏移量 + + private Scroller mScroller; + private int mTouchSlop; //表示滑动的时候,手的移动要大于这个距离才开始移动控件。 + private int mMinimumVelocity; //允许执行一个fling手势动作的最小速度值 + private int mMaximumVelocity; //允许执行一个fling手势动作的最大速度值 + private int sysVersion; //当前sdk版本,用于判断api版本 + private View mHeadView; //需要被滑出的头部 + private int mHeadHeight; //滑出头部的高度 + private int maxY = 0; //最大滑出的距离,等于 mHeadHeight + private int minY = 0; //最小的距离, 头部在最顶部 + private int mCurY; //当前已经滚动的距离 + private VelocityTracker mVelocityTracker; + private int mDirection; + private int mLastScrollerY; + private boolean mDisallowIntercept; //是否允许拦截事件 + private boolean isClickHead; //当前点击区域是否在头部 + private OnScrollListener onScrollListener; //滚动的监听 + private HeaderScrollHelper mScrollable; + + public interface OnScrollListener { + void onScroll(int currentY, int maxY); + } + + public void setOnScrollListener(OnScrollListener onScrollListener) { + this.onScrollListener = onScrollListener; + } + + public HeaderViewPager(Context context) { + this(context, null); + } + + public HeaderViewPager(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public HeaderViewPager(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HeaderViewPager); + topOffset = a.getDimensionPixelSize(a.getIndex(R.styleable.HeaderViewPager_hvp_topOffset), topOffset); + a.recycle(); + + mScroller = new Scroller(context); + mScrollable = new HeaderScrollHelper(); + ViewConfiguration configuration = ViewConfiguration.get(context); + mTouchSlop = configuration.getScaledTouchSlop(); //表示滑动的时候,手的移动要大于这个距离才开始移动控件。 + mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); //允许执行一个fling手势动作的最小速度值 + mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); //允许执行一个fling手势动作的最大速度值 + sysVersion = Build.VERSION.SDK_INT; + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + if (mHeadView != null && !mHeadView.isClickable()) { + mHeadView.setClickable(true); + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + mHeadView = getChildAt(0); + measureChildWithMargins(mHeadView, widthMeasureSpec, 0, MeasureSpec.UNSPECIFIED, 0); + mHeadHeight = mHeadView.getMeasuredHeight(); + maxY = mHeadHeight - topOffset; + //让测量高度加上头部的高度 + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(heightMeasureSpec) + maxY, MeasureSpec.EXACTLY)); + } + + /** @param disallowIntercept 作用同 requestDisallowInterceptTouchEvent */ + public void requestHeaderViewPagerDisallowInterceptTouchEvent(boolean disallowIntercept) { + super.requestDisallowInterceptTouchEvent(disallowIntercept); + mDisallowIntercept = disallowIntercept; + } + + private float mDownX; //第一次按下的x坐标 + private float mDownY; //第一次按下的y坐标 + private float mLastY; //最后一次移动的Y坐标 + private boolean verticalScrollFlag = false; //是否允许垂直滚动 + + /** + * 说明:一旦dispatTouchEvent返回true,即表示当前View就是事件传递需要的 targetView,事件不会再传递给 + * 其他View,如果需要将事件继续传递给子View,可以手动传递 + * 由于dispatchTouchEvent处理事件的优先级高于子View,也高于onTouchEvent,所以在这里进行处理 + * 好处一:当有子View,并且子View可以获取焦点的时候,子View的onTouchEvent会优先处理,如果当前逻辑 + * 在onTouchEnent中,则事件无法到达,逻辑失效 + * 好处二:当子View是拥有滑动事件时,例如ListView,ScrollView等,不需要对子View的事件进行拦截,可以 + * 全部让该父控件处理,在需要的地方手动将事件传递给子View,保证滑动的流畅性,结尾两行代码就是证明: + * super.dispatchTouchEvent(ev); + * return true; + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + float currentX = ev.getX(); //当前手指相对于当前view的X坐标 + float currentY = ev.getY(); //当前手指相对于当前view的Y坐标 + float shiftX = Math.abs(currentX - mDownX); //当前触摸位置与第一次按下位置的X偏移量 + float shiftY = Math.abs(currentY - mDownY); //当前触摸位置与第一次按下位置的Y偏移量 + float deltaY; //滑动的偏移量,即连续两次进入Move的偏移量 + obtainVelocityTracker(ev); //初始化速度追踪器 + switch (ev.getAction()) { + //Down事件主要初始化变量 + case MotionEvent.ACTION_DOWN: + mDisallowIntercept = false; + verticalScrollFlag = false; + mDownX = currentX; + mDownY = currentY; + mLastY = currentY; + checkIsClickHead((int) currentY, mHeadHeight, getScrollY()); + mScroller.abortAnimation(); + break; + case MotionEvent.ACTION_MOVE: + if (mDisallowIntercept) break; + deltaY = mLastY - currentY; //连续两次进入move的偏移量 + mLastY = currentY; + if (shiftX > mTouchSlop && shiftX > shiftY) { + //水平滑动 + verticalScrollFlag = false; + } else if (shiftY > mTouchSlop && shiftY > shiftX) { + //垂直滑动 + verticalScrollFlag = true; + } + /** + * 这里要注意,对于垂直滑动来说,给出以下三个条件 + * 头部没有固定,允许滑动的View处于第一条可见,当前按下的点在头部区域 + * 三个条件满足一个即表示需要滚动当前布局,否者不处理,将事件交给子View去处理 + */ + if (verticalScrollFlag && (!isStickied() || mScrollable.isTop() || isClickHead)) { + //如果是向下滑,则deltaY小于0,对于scrollBy来说 + //正值为向上和向左滑,负值为向下和向右滑,这里要注意 + scrollBy(0, (int) (deltaY + 0.5)); + invalidate(); + } + break; + case MotionEvent.ACTION_UP: + if (verticalScrollFlag) { + mVelocityTracker.computeCurrentVelocity(1000, mMaximumVelocity); //1000表示单位,每1000毫秒允许滑过的最大距离是mMaximumVelocity + float yVelocity = mVelocityTracker.getYVelocity(); //获取当前的滑动速度 + mDirection = yVelocity > 0 ? DIRECTION_DOWN : DIRECTION_UP; //下滑速度大于0,上滑速度小于0 + //根据当前的速度和初始化参数,将滑动的惯性初始化到当前View,至于是否滑动当前View,取决于computeScroll中计算的值 + //这里不判断最小速度,确保computeScroll一定至少执行一次 + mScroller.fling(0, getScrollY(), 0, -(int) yVelocity, 0, 0, -Integer.MAX_VALUE, Integer.MAX_VALUE); + mLastScrollerY = getScrollY(); + invalidate(); //更新界面,该行代码会导致computeScroll中的代码执行 + //阻止快读滑动的时候点击事件的发生,滑动的时候,将Up事件改为Cancel就不会发生点击了 + if ((shiftX > mTouchSlop || shiftY > mTouchSlop)) { + if (isClickHead || !isStickied()) { + int action = ev.getAction(); + ev.setAction(MotionEvent.ACTION_CANCEL); + boolean dd = super.dispatchTouchEvent(ev); + ev.setAction(action); + return dd; + } + } + } + recycleVelocityTracker(); + break; + case MotionEvent.ACTION_CANCEL: + recycleVelocityTracker(); + break; + default: + break; + } + //手动将事件传递给子View,让子View自己去处理事件 + super.dispatchTouchEvent(ev); + //消费事件,返回True表示当前View需要消费事件,就是事件的TargetView + return true; + } + + private void checkIsClickHead(int downY, int headHeight, int scrollY) { + isClickHead = ((downY + scrollY) <= headHeight); + } + + private void obtainVelocityTracker(MotionEvent event) { + if (mVelocityTracker == null) { + mVelocityTracker = VelocityTracker.obtain(); + } + mVelocityTracker.addMovement(event); + } + + private void recycleVelocityTracker() { + if (mVelocityTracker != null) { + mVelocityTracker.recycle(); + mVelocityTracker = null; + } + } + + @Override + public void computeScroll() { + if (mScroller.computeScrollOffset()) { + final int currY = mScroller.getCurrY(); + if (mDirection == DIRECTION_UP) { + // 手势向上划 + if (isStickied()) { + //这里主要是将快速滚动时的速度对接起来,让布局看起来滚动连贯 + int distance = mScroller.getFinalY() - currY; //除去布局滚动消耗的时间后,剩余的时间 + int duration = calcDuration(mScroller.getDuration(), mScroller.timePassed()); //除去布局滚动的距离后,剩余的距离 + mScrollable.smoothScrollBy(getScrollerVelocity(distance, duration), distance, duration); + //外层布局已经滚动到指定位置,不需要继续滚动了 + mScroller.abortAnimation(); + return; + } else { + scrollTo(0, currY); //将外层布局滚动到指定位置 + invalidate(); //移动完后刷新界面 + } + } else { + // 手势向下划,内部View已经滚动到顶了,需要滚动外层的View + if (mScrollable.isTop() || isClickHead) { + int deltaY = (currY - mLastScrollerY); + int toY = getScrollY() + deltaY; + scrollTo(0, toY); + if (mCurY <= minY) { + mScroller.abortAnimation(); + return; + } + } + //向下滑动时,初始状态可能不在顶部,所以要一直重绘,让computeScroll一直调用 + //确保代码能进入上面的if判断 + invalidate(); + } + mLastScrollerY = currY; + } + } + + @SuppressLint("NewApi") + private int getScrollerVelocity(int distance, int duration) { + if (mScroller == null) { + return 0; + } else if (sysVersion >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + return (int) mScroller.getCurrVelocity(); + } else { + return distance / duration; + } + } + + /** 对滑动范围做限制 */ + @Override + public void scrollBy(int x, int y) { + int scrollY = getScrollY(); + int toY = scrollY + y; + if (toY >= maxY) { + toY = maxY; + } else if (toY <= minY) { + toY = minY; + } + y = toY - scrollY; + super.scrollBy(x, y); + } + + /** 对滑动范围做限制 */ + @Override + public void scrollTo(int x, int y) { + if (y >= maxY) { + y = maxY; + } else if (y <= minY) { + y = minY; + } + mCurY = y; + if (onScrollListener != null) { + onScrollListener.onScroll(y, maxY); + } + super.scrollTo(x, y); + } + + /** 头部是否已经固定 */ + public boolean isStickied() { + return mCurY == maxY; + } + + private int calcDuration(int duration, int timepass) { + return duration - timepass; + } + + public int getMaxY() { + return maxY; + } + + public boolean isHeadTop() { + return mCurY == minY; + } + + /** 是否允许下拉,与PTR结合使用 */ + public boolean canPtr() { + return verticalScrollFlag && mCurY == minY && mScrollable.isTop(); + } + + public void setTopOffset(int topOffset) { + this.topOffset = topOffset; + } + + public void setCurrentScrollableContainer(HeaderScrollHelper.ScrollableContainer scrollableContainer) { + mScrollable.setCurrentScrollableContainer(scrollableContainer); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/fragment/main/MainFragment.java b/app/src/main/java/com/yonsz/z1/fragment/main/MainFragment.java new file mode 100644 index 0000000..6928b1a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/main/MainFragment.java @@ -0,0 +1,1195 @@ +package com.yonsz.z1.fragment.main; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Color; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.LinearLayoutManager; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.bigkoo.convenientbanner.ConvenientBanner; +import com.bigkoo.convenientbanner.holder.CBViewHolderCreator; +import com.bigkoo.convenientbanner.listener.OnItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuBridge; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItem; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.AdInfo; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.DeviceEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entitya2.EventShowEntity; +import com.yonsz.z1.database.entity.entitya2.ModelOpenEntity; +import com.yonsz.z1.database.entity.entitya2.SafeLogEntity; +import com.yonsz.z1.device.ParentSlideAdapter; +import com.yonsz.z1.device.SlideAdapter; +import com.yonsz.z1.device.childdevice.ChildDeviceListActivity; +import com.yonsz.z1.device.deviceadd.ConnectWifiActivity; +import com.yonsz.z1.device.deviceadd.NoWifiConnectActicity; +import com.yonsz.z1.device.fan.FanLearnActivity; +import com.yonsz.z1.device.tv.TvControlActivity; +import com.yonsz.z1.devicea2.ChildDeviceListA2Activity; +import com.yonsz.z1.devicea2.safedevice.dialog.FullDialogFragment; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNextDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.mydevice.DeviceA2FirstPosActivity; +import com.yonsz.z1.mine.mydevice.DeviceDetailActivity; +import com.yonsz.z1.mine.mydevice.ShareDeviceActivity; +import com.yonsz.z1.mine.mydevice.SolidVersionActivity; +import com.yonsz.z1.model.ModelSettingActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.model.Module; +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.NetworkImageHolderView; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.transform.AccordionTransformer; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static android.content.Context.MODE_PRIVATE; +import static android.content.Context.WIFI_SERVICE; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_FAIL; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_SUCCESS; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_TO_OPEN; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_TO_SET; +import static com.yonsz.z1.net.Constans.CHECK_MODEL_STATUS_SET; +import static com.yonsz.z1.net.Constans.CHECK_MODEL_STATUS_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.GETZIINFO_FAIL; +import static com.yonsz.z1.net.Constans.GETZIINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.AVTIVE_MODEL_NEW; +import static com.yonsz.z1.net.NetWorkUrl.CHECK_MODEL_STATUS; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_BASIC; + +/** + * Created by Administrator on 2017/11/3. + */ + +public class MainFragment extends BaseFragment implements SwipeItemClickListener, View.OnClickListener { + private View fragView; + private UIHandle mHandler; + private ImageView addDeviceIv; + private SwipeMenuRecyclerView mRecyclerView; + private SwipeRefreshLayout mRefreshLayout; + private List mObjEntity = new ArrayList<>(); + private List mAllObjEntity = new ArrayList<>(); + private SlideAdapter mSlideAdapter; + private ParentSlideAdapter mParentSlideAdapter; + private String ziId; + private LinearLayout mNoDeviceLl; + private GradationScrollView scrollView; + private int imageHeight; + private ViewPager viewPager; + private TitleView mTitleView; + private boolean isShowAll = true; + private TextView inHomeTv, outHomeTv, inBedTv, outBedTv; + private LinearLayout noShareDeviceLl; + private ConvenientBanner bannerMainTop; + private List adInfoList; + private LinearLayout shareNameLl; + private TextView shareNameTv; + private int nowChoosePosition = 0; + + private List mModules; + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.y76); + + // 1. MATCH_PARENT 自适应高度,保持和Item一样高; + // 2. 指定具体的高,比如80; + // 3. WRAP_CONTENT,自身高度,不推荐; + int height = getResources().getDimensionPixelSize(R.dimen.y76); + // int height = ViewGroup.LayoutParams.MATCH_PARENT; + // 添加右侧的,如果不添加,则右侧不会出现菜单。 + { + SwipeMenuItem deleteItem = new SwipeMenuItem(getActivity()) + .setBackground(R.color.z1_cccccc) + .setText(R.string.device) + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + swipeRightMenu.addMenuItem(deleteItem);// 添加菜单到右侧。 + + SwipeMenuItem addItem = new SwipeMenuItem(getActivity()) + .setBackground(R.color.z1_f7ac00) + .setText(R.string.share) + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + swipeRightMenu.addMenuItem(addItem); // 添加菜单到右侧。 + } + } + }; + /** + * RecyclerView的Item的Menu点击监听。 + */ + private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() { + @Override + public void onItemClick(SwipeMenuBridge menuBridge) { + menuBridge.closeMenu(); + + int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。 + final int adapterPosition = menuBridge.getAdapterPosition(); // RecyclerView的Item的position。 + int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。 + + if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) { + Intent intent; + switch (menuPosition) { + case 0: + //设备详情 + if (isShowAll) { + intent = new Intent(getActivity(), DeviceDetailActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity.get(adapterPosition)); + intent.putExtras(bundle); + if (mObjEntity.get(adapterPosition).getIsOwner() != null) { + intent.putExtra("isOwner", 1); + } else { + intent.putExtra("isOwner", 0); + } + intent.putExtra("isShowAll", isShowAll); + startActivity(intent); + } else { + if (mObjEntity != null && mObjEntity.size() != 0) { + for (int i = 0; i < mObjEntity.size(); i++) { + if (mObjEntity.get(i).getIsOwner() != null && mObjEntity.get(i).getIsOwner().equals("1")) { + mObjEntity.remove(i); + i -= 1; + } else { + + } + } + } + intent = new Intent(getActivity(), DeviceDetailActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity.get(adapterPosition)); + intent.putExtras(bundle); + intent.putExtra("isOwner", 0); + intent.putExtra("isShowAll", isShowAll); + startActivity(intent); + } + break; + case 1: + //分享 + if (isShowAll) { + if (mObjEntity.get(adapterPosition).getIsOwner() != null) { + intent = new Intent(getActivity(), ShareDeviceActivity.class); + intent.putExtra("ziId", mObjEntity.get(adapterPosition).getZiId()); + startActivity(intent); + } else { + ToastUtil.show(getActivity(), "您没有分享的权限"); + } + } else { + ToastUtil.show(getActivity(), "您没有分享的权限"); + } + break; + } + } + } + }; + /** + * 刷新。 + */ + private SwipeRefreshLayout.OnRefreshListener mRefreshListener = new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + initData(); + } + }; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mHandler = new UIHandle(this); + } + + /** + * 获取顶部图片高度后,设置滚动监听 + *//* + private void initListeners() { + + ViewTreeObserver vto = viewPager.getViewTreeObserver(); + vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + viewPager.getViewTreeObserver().removeGlobalOnLayoutListener( + this); + imageHeight = viewPager.getHeight(); + scrollView.setScrollViewListener(MainFragment.this); + } + }); + }*/ + + /*@Override + public void onScrollChanged(GradationScrollView scrollView, int x, int y, int oldx, int oldy) { + if (y <= 0) { //设置标题的背景颜色 + textView.setBackgroundColor(Color.argb((int) 0, 144, 151, 166)); + } else if (y > 0 && y <= imageHeight) { //滑动距离小于banner图的高度时,设置背景和字体颜色颜色透明度渐变 + float scale = (float) y / imageHeight; + float alpha = (255 * scale); + textView.setTextColor(Color.argb((int) alpha, 255, 255, 255)); + textView.setBackgroundColor(Color.argb((int) alpha, 144, 151, 166)); + } else { //滑动到banner下面设置普通颜色 + textView.setBackgroundColor(Color.argb((int) 255, 144, 151, 166)); + } + }*/ + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_main, null); + initData(); + initView(); + selectSafetyLog(); + return fragView; + } + + private void initView() { + bannerMainTop = (ConvenientBanner) fragView.findViewById(R.id.banner_main_top); + shareNameLl = (LinearLayout) fragView.findViewById(R.id.ll_share_name); + shareNameTv = (TextView) fragView.findViewById(R.id.tv_share_name); + inHomeTv = (TextView) fragView.findViewById(R.id.tv_model_in_home); + outHomeTv = (TextView) fragView.findViewById(R.id.tv_model_out_home); + inBedTv = (TextView) fragView.findViewById(R.id.tv_model_in_bed); + outBedTv = (TextView) fragView.findViewById(R.id.tv_model_out_bed); + inHomeTv.setOnClickListener(this); + outHomeTv.setOnClickListener(this); + inBedTv.setOnClickListener(this); + outBedTv.setOnClickListener(this); + mTitleView = (TitleView) fragView.findViewById(R.id.title_main_fragment); + mTitleView.clearBackGroud(); + mTitleView.setHead("情景模式"); + mTitleView.setHeadFuntion(R.drawable.icon_nav_add_white); + mTitleView.setBackFuntion(R.drawable.icon_index_sidenav_white); + scrollView = (GradationScrollView) fragView.findViewById(R.id.scrollview); + viewPager = (ViewPager) fragView.findViewById(R.id.viewPager); + mRefreshLayout = (SwipeRefreshLayout) fragView.findViewById(R.id.refresh_layout); + mRefreshLayout.setOnRefreshListener(mRefreshListener); // 刷新监听。 + // pullLayout = (PullToRefreshLayout) findViewById(R.id.pull_refresh_layout); + addDeviceIv = (ImageView) fragView.findViewById(R.id.iv_add_device); + addDeviceIv.setOnClickListener(this); + mNoDeviceLl = (LinearLayout) fragView.findViewById(R.id.ll_no_record); + noShareDeviceLl = (LinearLayout) fragView.findViewById(R.id.ll_no_share_device); + if (getActivity().getIntent().getExtras() != null) { + if (getActivity().getIntent().getExtras().get("fromTag") != null) { + mNoDeviceLl.setVisibility(View.GONE); + } + } + mRecyclerView = (SwipeMenuRecyclerView) fragView.findViewById(R.id.smr_parent_device_list); + + viewPager.setFocusable(true); + viewPager.setFocusableInTouchMode(true); + viewPager.requestFocus(); + + MaterialIndicator indicator = (MaterialIndicator) fragView.findViewById(R.id.indicator); + ViewPager viewPager = (ViewPager) fragView.findViewById(R.id.viewPager); + viewPager.setAdapter(new MyPagerAdapter()); + viewPager.addOnPageChangeListener(indicator); + indicator.setAdapter(viewPager.getAdapter()); + // initListeners(); + + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + EventBus.getDefault().post( + new EventShowEntity("1")); + // selectSafetyLog(); + } + + @Override + public void onFunction() { + WifiManager wifimanager; + wifimanager = (WifiManager) getActivity().getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(getActivity(), ConnectWifiActivity.class); + startActivity(intent); + } else { + Intent intent = new Intent(getActivity(), NoWifiConnectActicity.class); + startActivity(intent); + } + } + + @Override + public void onFunctionText() { + + } + }); + + adInfoList = new ArrayList<>(); + + bannerMainTop.getViewPager().setPageTransformer(true, new AccordionTransformer()); + bannerMainTop.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + nowChoosePosition = position; + Log.i("bannerMainTop", "MainFragment onPageScrolled()" + position); + if (position == 0) { + if (null != adInfoList.get(position).getShareName() && !adInfoList.get(0).getShareNumber().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + shareNameTv.setText(adInfoList.get(position).getShareName().toString()); + } else { + shareNameLl.setVisibility(View.GONE); + } + } else { + shareNameTv.setText(adInfoList.get(position).getShareName().toString()); + shareNameLl.setVisibility(View.VISIBLE); + } + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + } + + private void selectSafetyLog() { + + } + + private void setZ1DataView(List objEntityNow) { + if (objEntityNow != null) { + mNoDeviceLl.setVisibility(View.GONE); + mRecyclerView.setVisibility(View.VISIBLE); + // saveOldVersion(); + mParentSlideAdapter = new ParentSlideAdapter(getActivity(), objEntityNow); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(getActivity()); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setSwipeMenuCreator(swipeMenuCreator); + mRecyclerView.setSwipeMenuItemClickListener(mMenuItemClickListener); + mRecyclerView.setAdapter(mParentSlideAdapter); + mRecyclerView.setSwipeItemClickListener(this); + } else { + mNoDeviceLl.setVisibility(View.VISIBLE); + mRecyclerView.setVisibility(View.GONE); + } + if (isShowAll) { + + } else { + showShareRecord(); + } + + /** + * 设置头部的轮播 + */ + + } + + @Override + public void onResume() { + super.onResume(); + if (DensityUtil.isNetworkConnected(getActivity())) { + getZ1Info(); + } else { + ToastUtil.show(getActivity(), R.string.net_error); + } + } + + private void initData() { + if (DensityUtil.isNetworkConnected(getActivity())) { + getZ1Info(); + } else { + ToastUtil.show(getActivity(), R.string.net_error); + String mObjEntitySave = SharedpreferencesUtil.getStringData(getActivity(), "mObjEntity", null); + DeviceEntity entity = JSON.parseObject(mObjEntitySave, DeviceEntity.class); + if (-401 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USER_SESSION_NULL); + msg.obj = entity; + mHandler.sendMessage(msg); + } else if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GETZIINFO_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GETZIINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + } + + //获取Z1列表 + private void getZ1Info() { + + } + + private void updateModelBasic(int model) { + + } + + private void setIshaveDevice(Intent intent) { + boolean haveDevice = isHaveDevice(); + if (haveDevice) { + intent.putExtra("isHaveDevice", "1"); + } else { + intent.putExtra("isHaveDevice", "0"); + } + } + + private List convetAdList(List objEntity) { + List newList = new ArrayList<>(); + adInfoList.clear(); + if (objEntity != null && objEntity.size() != 0) { + for (int i = 0; i < objEntity.size(); i++) { + AdInfo adInfo = new AdInfo(); + adInfo.setAdUrl(R.drawable.pic_index_scene); + adInfo.setShareName(objEntity.get(i).getPartnerName().toString()); + adInfo.setShareNumber(objEntity.get(i).getPartner().toString()); + if (null != objEntity.get(i).getDeviceVersion()) { + if (!objEntity.get(i).getPartner().toString().equals(SharedpreferencesUtil.get(Constans.USERPHONE, "")) && objEntity.get(i).getDeviceVersion().equals("2")) { + newList.add(adInfo); + } else if (objEntity.get(i).getPartner().toString().equals(SharedpreferencesUtil.get(Constans.USERPHONE, "")) && objEntity.get(i).getDeviceVersion().equals("2")) { + newList.add(0, adInfo); + } + } + } + } else { + + } + + AdInfo adInfo = new AdInfo(); + adInfo.setAdUrl(R.drawable.pic_index_scene); + adInfo.setShareNumber(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + if (newList.size() == 0) { + newList.add(0, adInfo); + } + + for (AdInfo cd : newList) { + if (!adInfoList.contains(cd)) { + adInfoList.add(cd); + } + } + + if (adInfoList.size() == 1) { + bannerMainTop.setPages(new CBViewHolderCreator() { + @Override + public NetworkImageHolderView createHolder() { + return new NetworkImageHolderView(); + } + }, adInfoList).setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(int position) { + Intent intent; + } + }); + if (null != adInfoList.get(0).getShareName() && !adInfoList.get(0).getShareNumber().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + shareNameLl.setVisibility(View.VISIBLE); + shareNameTv.setText(adInfoList.get(0).getShareName().toString()); + } + } else { + bannerMainTop.setPages(new CBViewHolderCreator() { + @Override + public NetworkImageHolderView createHolder() { + return new NetworkImageHolderView(); + } + }, adInfoList).setPageIndicator(new int[]{R.drawable.kuang_corners_white_five, R.drawable.kuang_corners_red_dian_five}) + .setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.CENTER_HORIZONTAL) + .setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(int position) { + Intent intent; + } + }); + if (adInfoList.get(0).getShareName() != null && !adInfoList.get(0).getShareNumber().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + shareNameLl.setVisibility(View.VISIBLE); + shareNameTv.setText(adInfoList.get(0).getShareName().toString()); + } + } + return adInfoList; + } + + public void showAllRecord() { + isShowAll = true; + noShareDeviceLl.setVisibility(View.GONE); + if (DensityUtil.isNetworkConnected(getActivity())) { + getZ1Info(); + } else { + ToastUtil.show(getActivity(), R.string.net_error); + } + } + + public void showShareRecord() { + isShowAll = false; + if (mObjEntity != null && mObjEntity.size() != 0) { + for (int i = 0; i < mObjEntity.size(); i++) { + if (mObjEntity.get(i).getIsOwner() != null && mObjEntity.get(i).getIsOwner().equals("1")) { + mObjEntity.remove(i); + i -= 1; + } else { + + } + } + mParentSlideAdapter.notifyDataSetChanged(); + if (mObjEntity.size() == 0) { + noShareDeviceLl.setVisibility(View.VISIBLE); + } else { + noShareDeviceLl.setVisibility(View.GONE); + } + } else { + mNoDeviceLl.setVisibility(View.GONE); + noShareDeviceLl.setVisibility(View.VISIBLE); + } + } + + + public boolean isHaveDevice() { + boolean isHaveDevice = false; + if (mAllObjEntity != null && mAllObjEntity.size() != 0) { + for (int i = 0; i < mAllObjEntity.size(); i++) { + if (mAllObjEntity.get(i).getIsOwner() != null && mAllObjEntity.get(i).getIsOwner().equals("1") && + null != mAllObjEntity.get(i).getDeviceVersion() && mAllObjEntity.get(i).getDeviceVersion().equals("2")) { + isHaveDevice = true; + } + } + return isHaveDevice; + } else { + return isHaveDevice; + } + } + + @Override + public void onItemClick(View itemView, int position) { + /*String deviceIp = null; + mModules = loadDevices(); + for (int i = 0; i < mModules.size(); i++) { + if (mModules.get(i).getMac().equals(mObjEntity.get(position).getZiId())) { + deviceIp = mModules.get(i).getIp(); + } + }*/ + //首先跳转到位置页 + if (isShowAll) { + if (!TextUtils.isEmpty(mObjEntity.get(position).getDeviceAddress())) { + //从这里分开是A1还是A2 + if (mObjEntity.get(position).getOnlineFlag().equals("3") || mObjEntity.get(position).getOnlineFlag().equals("5")) { + if (mObjEntity.get(position).getIsOwner() != null || mObjEntity.get(position).getPartner().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + toUpadateOta(position, mObjEntity.get(position).getDeviceVersion()); + } else { + // Toast.makeText(getActivity(), "您没有升级权限", Toast.LENGTH_SHORT).show(); + if (null != mObjEntity.get(position).getDeviceVersion() && mObjEntity.get(position).getDeviceVersion().equals("2")) { + Intent intent = new Intent(getActivity(), ChildDeviceListA2Activity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity.get(position)); + intent.putExtras(bundle); + intent.putExtra("position", position); + intent.putExtra("name", mObjEntity.get(position).getZiName()); + intent.putExtra("ziId", mObjEntity.get(position).getZiId()); + intent.putExtra("isShowAll", isShowAll); + /*if (null != deviceIp) { + intent.putExtra("deviceIp", deviceIp); + } else { + intent.putExtra("deviceIp", ""); + }*/ + startActivity(intent); + } else { + Intent intent = new Intent(getActivity(), ChildDeviceListActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity.get(position)); + intent.putExtras(bundle); + intent.putExtra("position", position); + intent.putExtra("name", mObjEntity.get(position).getZiName()); + intent.putExtra("ziId", mObjEntity.get(position).getZiId()); + intent.putExtra("isShowAll", isShowAll); + /*if (null != deviceIp) { + intent.putExtra("deviceIp", deviceIp); + } else { + intent.putExtra("deviceIp", ""); + }*/ + startActivity(intent); + } + } + } else if (null != mObjEntity.get(position).getDeviceVersion() && mObjEntity.get(position).getDeviceVersion().equals("2")) { + Intent intent = new Intent(getActivity(), ChildDeviceListA2Activity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity.get(position)); + intent.putExtras(bundle); + intent.putExtra("position", position); + intent.putExtra("name", mObjEntity.get(position).getZiName()); + intent.putExtra("ziId", mObjEntity.get(position).getZiId()); + intent.putExtra("isShowAll", isShowAll); + /*if (null != deviceIp) { + intent.putExtra("deviceIp", deviceIp); + } else { + intent.putExtra("deviceIp", ""); + }*/ + startActivity(intent); + } else { + Intent intent = new Intent(getActivity(), ChildDeviceListActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity.get(position)); + intent.putExtras(bundle); + intent.putExtra("position", position); + intent.putExtra("name", mObjEntity.get(position).getZiName()); + intent.putExtra("ziId", mObjEntity.get(position).getZiId()); + intent.putExtra("isShowAll", isShowAll); + /*if (null != deviceIp) { + intent.putExtra("deviceIp", deviceIp); + } else { + intent.putExtra("deviceIp", ""); + }*/ + startActivity(intent); + } + } else { + Intent intent = new Intent(getActivity(), DeviceA2FirstPosActivity.class); + intent.putExtra("ziId", mObjEntity.get(position).getZiId()); + intent.putExtra("isShowAll", isShowAll); + if (null != mObjEntity.get(position).getDeviceVersion() && mObjEntity.get(position).getDeviceVersion().equals("2")) { + intent.putExtra("tag", "a2"); + } else { + intent.putExtra("tag", "a1"); + } + /*if (null != deviceIp) { + intent.putExtra("deviceIp", deviceIp); + } else { + intent.putExtra("deviceIp", ""); + }*/ + startActivity(intent); + } + } else { + if (mObjEntity != null && mObjEntity.size() != 0) { + for (int i = 0; i < mObjEntity.size(); i++) { + if (mObjEntity.get(i).getIsOwner() != null && mObjEntity.get(i).getIsOwner().equals("1")) { + mObjEntity.remove(i); + i -= 1; + } else { + + } + } + } + + if (!TextUtils.isEmpty(mObjEntity.get(position).getDeviceAddress())) { + //从这里分开是A1还是A2 + if (mObjEntity.get(position).getOnlineFlag().equals("3") || mObjEntity.get(position).getOnlineFlag().equals("5")) { + if (mObjEntity.get(position).getIsOwner() != null || mObjEntity.get(position).getPartner().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + toUpadateOta(position, mObjEntity.get(position).getDeviceVersion()); + } else { + // Toast.makeText(getActivity(), "您没有升级权限", Toast.LENGTH_SHORT).show(); + if (null != mObjEntity.get(position).getDeviceVersion() && mObjEntity.get(position).getDeviceVersion().equals("2")) { + Intent intent = new Intent(getActivity(), ChildDeviceListA2Activity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity.get(position)); + intent.putExtras(bundle); + intent.putExtra("position", position); + intent.putExtra("name", mObjEntity.get(position).getZiName()); + intent.putExtra("ziId", mObjEntity.get(position).getZiId()); + intent.putExtra("isShowAll", isShowAll); + /*if (null != deviceIp) { + intent.putExtra("deviceIp", deviceIp); + } else { + intent.putExtra("deviceIp", ""); + }*/ + startActivity(intent); + } else { + Intent intent = new Intent(getActivity(), ChildDeviceListActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity.get(position)); + intent.putExtras(bundle); + intent.putExtra("position", position); + intent.putExtra("name", mObjEntity.get(position).getZiName()); + intent.putExtra("ziId", mObjEntity.get(position).getZiId()); + intent.putExtra("isShowAll", isShowAll); + /*if (null != deviceIp) { + intent.putExtra("deviceIp", deviceIp); + } else { + intent.putExtra("deviceIp", ""); + }*/ + startActivity(intent); + } + } + } else { + if (null != mObjEntity.get(position).getDeviceVersion() && mObjEntity.get(position).getDeviceVersion().equals("2")) { + Intent intent = new Intent(getActivity(), ChildDeviceListA2Activity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity.get(position)); + intent.putExtras(bundle); + intent.putExtra("position", position); + intent.putExtra("name", mObjEntity.get(position).getZiName()); + intent.putExtra("ziId", mObjEntity.get(position).getZiId()); + intent.putExtra("isShowAll", isShowAll); + /*if (null != deviceIp) { + intent.putExtra("deviceIp", deviceIp); + } else { + intent.putExtra("deviceIp", ""); + }*/ + startActivity(intent); + } else { + Intent intent = new Intent(getActivity(), ChildDeviceListActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity.get(position)); + intent.putExtras(bundle); + intent.putExtra("position", position); + intent.putExtra("name", mObjEntity.get(position).getZiName()); + intent.putExtra("ziId", mObjEntity.get(position).getZiId()); + intent.putExtra("isShowAll", isShowAll); + /*if (null != deviceIp) { + intent.putExtra("deviceIp", deviceIp); + } else { + intent.putExtra("deviceIp", ""); + }*/ + startActivity(intent); + } + } + } else { + Intent intent = new Intent(getActivity(), DeviceA2FirstPosActivity.class); + intent.putExtra("ziId", mObjEntity.get(position).getZiId()); + intent.putExtra("isShowAll", isShowAll); + if (null != mObjEntity.get(position).getDeviceVersion() && mObjEntity.get(position).getDeviceVersion().equals("2")) { + intent.putExtra("tag", "a2"); + } else { + intent.putExtra("tag", "a1"); + } + /*if (null != deviceIp) { + intent.putExtra("deviceIp", deviceIp); + } else { + intent.putExtra("deviceIp", ""); + }*/ + startActivity(intent); + } + + } + } + + private void toUpadateOta(final int positionA, final String deviceVersion) { + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + //跳转到OTA界面 + Intent intent = new Intent(getActivity(), SolidVersionActivity.class); + intent.putExtra("deviceVersion", deviceVersion); + intent.putExtra("nowVersion", "main"); + intent.putExtra("ziId", mObjEntity.get(positionA).getZiId()); + intent.putExtra("isNewOtaFlag", "1"); + startActivity(intent); + break; + } + } + }); + dialog.setContent("尊敬的用户,由于您在升级固件时中断或失败将不支持继续使用了,请重新升级版本。"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn("重新升级"); + dialog.setCancelable(false); + dialog.show(); + } + + @Override + public void onClick(View v) { + boolean haveDevice; + if (adInfoList.size() != 1 || null != adInfoList.get(0).getShareName()) { + haveDevice = true; + } else { + haveDevice = isHaveDevice(); + } + switch (v.getId()) { + case R.id.iv_add_device: + WifiManager wifimanager; + wifimanager = (WifiManager) getActivity().getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(getActivity(), ConnectWifiActivity.class); + startActivity(intent); + } else { + Intent intent = new Intent(getActivity(), NoWifiConnectActicity.class); + startActivity(intent); + } + break; + case R.id.tv_model_in_home: + if (haveDevice) { + checkModelStatus(1); + } else { + ToastUtil.show(getActivity(), R.string.add_device_first); + } + break; + case R.id.tv_model_out_home: + if (haveDevice) { + checkModelStatus(2); + } else { + ToastUtil.show(getActivity(), R.string.add_device_first); + } + break; + case R.id.tv_model_in_bed: + if (haveDevice) { + checkModelStatus(3); + } else { + ToastUtil.show(getActivity(), R.string.add_device_first); + } + break; + case R.id.tv_model_out_bed: + if (haveDevice) { + checkModelStatus(4); + } else { + ToastUtil.show(getActivity(), R.string.add_device_first); + } + break; + case R.id.tv_test: + FullDialogFragment fullDialogFragment = new FullDialogFragment(); + fullDialogFragment.show(getActivity().getSupportFragmentManager(), "FullDialogFragment"); + break; + } + } + + private void checkModelStatus(final int modelType) { + } + + private void avtiveModel(final int modelType) { + + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case GETZIINFO_SUCCESS: + mRefreshLayout.setRefreshing(false); + DeviceEntity entity = (DeviceEntity) msg.obj; + mAllObjEntity.clear(); + if (null != entity.getObj()) { + mAllObjEntity.addAll(entity.getObj()); + } + mObjEntity = entity.getObj(); + convetAdList(mObjEntity); + setZ1DataView(mObjEntity); + break; + case GETZIINFO_FAIL: + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case ADD_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity1 = (AddChildDeviceEntity) msg.obj; + String deviceId = entity1.getObj().getDeviceId(); + if (deviceId.equals(FAN_TAG)) { + Intent intent = new Intent(getActivity(), FanLearnActivity.class); + intent.putExtra("fanStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } else { + Intent intent = new Intent(getActivity(), TvControlActivity.class); + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", ziId); + startActivity(intent); + } + /*ToastUtil.show(this, entity1.getMsg()); + getZ1Info(); + mSlideAdapter.notifyDataSetChanged();*/ + + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case DELETE_CHILDDEVICE_SUCCESS: + AddChildDeviceEntity entity2 = (AddChildDeviceEntity) msg.obj; + ToastUtil.show(getActivity(), entity2.getMsg()); + getZ1Info(); + mSlideAdapter.notifyDataSetChanged(); + break; + case DELETE_CHILDDEVICE_FAIL: + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case GET_USER_SESSION_NULL: + /*Toast.makeText(getActivity(), "用户在其他手机登陆", Toast.LENGTH_SHORT).show(); + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(getActivity(), LoginActivity.class); + startActivity(intent); + getActivity().finish(); + } + }, 1000);*/ + break; + case AVTIVE_MODEL_TO_SET: + final int obj = (int) msg.obj; + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + + break; + case 1: + Intent intent = new Intent(getActivity(), ModelSettingActivity.class); + intent.putExtra("model", obj); + setIshaveDevice(intent); + startActivity(intent); + break; + } + } + }); + dialog.setContent("您还未设置情景模式,请先设置"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn("去设置"); + dialog.setCancelable(false); + dialog.show(); + break; + case AVTIVE_MODEL_TO_OPEN: + final int model = (int) msg.obj; + ConfirmNextDialog dialog1 = new ConfirmNextDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + + break; + case 1: + updateModelBasic(model); + break; + } + } + }); + switch (model) { + case 1: + dialog1.setTopTxt("开启回家模式"); + dialog1.setContent("开启回家模式下的设备预设动作"); + break; + case 2: + dialog1.setTopTxt("开启离家模式"); + dialog1.setContent("开启离家模式下的设备预设动作"); + break; + case 3: + dialog1.setTopTxt("开启睡眠模式"); + dialog1.setContent("开启睡眠模式下的设备预设动作"); + break; + case 4: + dialog1.setTopTxt("开启起床模式"); + dialog1.setContent("开启起床模式下的设备预设动作"); + break; + } + dialog1.setCancelable(false); + dialog1.show(); + break; + case AVTIVE_MODEL_FAIL: + final int modelI = (int) msg.obj; + if (nowChoosePosition == 0) { + ToastUtil.show(getActivity(), (String) msg.obj); + } else { + switch (modelI) { + case 1: + ToastUtil.show(getActivity(), "未设置回家模式"); + break; + case 2: + ToastUtil.show(getActivity(), "未设置离家模式"); + break; + case 3: + ToastUtil.show(getActivity(), "未设置睡眠模式"); + break; + case 4: + ToastUtil.show(getActivity(), "未设置起床模式"); + break; + } + } + break; + case AVTIVE_MODEL_SUCCESS: + ToastUtil.show(getActivity(), "开启成功"); + break; + case UPDATE_MODEL_BASIC_SUCCESS: + ToastUtil.show(getActivity(), "开启成功"); + break; + case UPDATE_MODEL_BASIC_FAIL: + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case CHECK_MODEL_STATUS_SUCCESS: + final int model2 = (int) msg.obj; + ConfirmNextDialog dialog2 = new ConfirmNextDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + + break; + case 1: + // updateModelBasic(model2); + avtiveModel(model2); + break; + } + } + }); + switch (model2) { + case 1: + dialog2.setTopTxt("开启回家模式"); + dialog2.setContent("开启回家模式下的设备预设动作"); + break; + case 2: + dialog2.setTopTxt("开启离家模式"); + dialog2.setContent("开启离家模式下的设备预设动作"); + break; + case 3: + dialog2.setTopTxt("开启睡眠模式"); + dialog2.setContent("开启睡眠模式下的设备预设动作"); + break; + case 4: + dialog2.setTopTxt("开启起床模式"); + dialog2.setContent("开启起床模式下的设备预设动作"); + break; + } + dialog2.setCancelable(false); + dialog2.show(); + break; + case CHECK_MODEL_STATUS_SET: + final int obj1 = (int) msg.obj; + if (adInfoList.get(nowChoosePosition).getShareNumber().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + ConfirmDialog dialog3 = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + + break; + case 1: + Intent intent = new Intent(getActivity(), ModelSettingActivity.class); + intent.putExtra("model", obj1); + setIshaveDevice(intent); + startActivity(intent); + break; + } + } + }); + dialog3.setContent("您还未设置情景模式,请先设置"); + dialog3.setCancleBtn(R.string.cancel); + dialog3.setSureBtn("去设置"); + dialog3.setCancelable(false); + dialog3.show(); + } else { + switch (obj1) { + case 1: + ToastUtil.show(getActivity(), "未设置回家模式"); + break; + case 2: + ToastUtil.show(getActivity(), "未设置离家模式"); + break; + case 3: + ToastUtil.show(getActivity(), "未设置睡眠模式"); + break; + case 4: + ToastUtil.show(getActivity(), "未设置起床模式"); + break; + } + } + break; + case GET_LOG_SUCCESS: + if (msg.obj != null) { + FullDialogFragment fullDialogFragment = new FullDialogFragment(this.getActivity(), (List) msg.obj); + fullDialogFragment.show(getActivity().getSupportFragmentManager(), "FullDialogFragment"); + } + break; + } + } + + /** + * Load modules' data from local + * + * @return + */ + public List loadDevices() { + List modules = new ArrayList(); + SharedPreferences preferences = getContext().getSharedPreferences("module_list", MODE_PRIVATE); + int count = preferences.getInt(Constants.KEY_MODULE_COUNT, 0); + Module module; + + for (int i = 0; i < count; i++) { + module = new Module(); + module.setId(preferences.getInt(Constants.KEY_PRE_ID + i, -1)); + module.setIp(preferences.getString(Constants.KEY_PRE_IP + i, null)); + module.setMac(preferences.getString(Constants.KEY_PRE_MAC + i, null)); + module.setModuleID(preferences.getString(Constants.KEY_PRE_MODULEID + i, null)); + modules.add(module); + } + return modules; + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(MainFragment activity) { + weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + MainFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } + + /** + * viewpager适配器 + */ + private class MyPagerAdapter extends PagerAdapter { + public int[] drawables = {R.drawable.pic_index_scene, R.drawable.pic_index_scene}; + + @Override + public int getCount() { + return 2; + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return object == view; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + ImageView view = new ImageView(container.getContext()); + view.setImageResource(drawables[position]); + view.setScaleType(ImageView.ScaleType.FIT_XY); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView(((View) object)); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/main/MaterialIndicator.java b/app/src/main/java/com/yonsz/z1/fragment/main/MaterialIndicator.java new file mode 100644 index 0000000..74dbe50 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/main/MaterialIndicator.java @@ -0,0 +1,149 @@ +package com.yonsz.z1.fragment.main; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPager; +import android.support.v4.view.animation.FastOutSlowInInterpolator; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.Interpolator; + +import com.yonsz.z1.R; + +public class MaterialIndicator extends View implements ViewPager.OnPageChangeListener { + + private static final String TAG = MaterialIndicator.class.getSimpleName(); + private static final int UNDEFINED_PADDING = -1; + private final Interpolator interpolator = new FastOutSlowInInterpolator(); + private final Paint indicatorPaint; + private final Paint selectedIndicatorPaint; + private final float indicatorRadius; + private final float indicatorPadding; + + private final RectF selectorRect; + private int count; + private int selectedPage = 0; + private float deselectedAlpha = 0.7f; + private float offset; + + public MaterialIndicator(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public MaterialIndicator(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + selectedIndicatorPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + indicatorPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + indicatorPaint.setColor(Color.WHITE); + indicatorPaint.setAlpha((int) (deselectedAlpha * 255)); + selectorRect = new RectF(); + if (isInEditMode()) { + count = 3; + } + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MaterialIndicator, 0, R.style.MaterialIndicator); + try { + indicatorRadius = typedArray.getDimension(R.styleable.MaterialIndicator_mi_indicatorRadius, 0); + indicatorPadding = typedArray.getDimension(R.styleable.MaterialIndicator_mi_indicatorPadding, UNDEFINED_PADDING); + selectedIndicatorPaint.setColor(typedArray.getColor(R.styleable.MaterialIndicator_mi_indicatorColor, 0)); + } finally { + typedArray.recycle(); + } + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + selectedPage = position; + offset = positionOffset; + invalidate(); + } + + @Override + public void onPageSelected(int position) { + selectedPage = position; + offset = 0; + invalidate(); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + + public void setAdapter(PagerAdapter adapter) { + this.count = adapter.getCount(); + requestLayout(); + invalidate(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int width = getMeasuredWidth(); + if (getLayoutParams().width == ViewPager.LayoutParams.WRAP_CONTENT) { + width = getSuggestedMinimumWidth(); + } + setMeasuredDimension(width, getSuggestedMinimumHeight()); + } + + @Override + protected int getSuggestedMinimumWidth() { + return (int) (indicatorDiameter() * count + getInternalPadding()); + } + + private float getInternalPadding() { + if (indicatorPadding == UNDEFINED_PADDING || indicatorPadding == 0 || count == 0) { + return 0; + } + return indicatorPadding * (count - 1); + } + + @Override + protected int getSuggestedMinimumHeight() { + return getPaddingTop() + getPaddingBottom() + (int) indicatorDiameter(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + float gap = getGapBetweenIndicators(); + for (int i = 0; i < count; i++) { + float position = indicatorStartX(gap, i); + canvas.drawCircle(position + indicatorRadius, midY(), indicatorRadius, indicatorPaint); + } + float extenderStart = indicatorStartX(gap, selectedPage) + Math.max(gap * (interpolatedOffset() - 0.5f) * 2, 0); + float extenderEnd = indicatorStartX(gap, selectedPage) + indicatorDiameter() + Math.min(gap * interpolatedOffset() * 2, gap); + selectorRect.set(extenderStart, midY() - indicatorRadius, extenderEnd, midY() + indicatorRadius); + canvas.drawRoundRect(selectorRect, indicatorRadius, indicatorRadius, selectedIndicatorPaint); + } + + private float getGapBetweenIndicators() { + if (indicatorPadding == UNDEFINED_PADDING) { + return (getWidth() - indicatorDiameter()) / (count + 1); + } else { + return indicatorPadding; + } + } + + private float indicatorStartX(float gap, int page) { + return ViewCompat.getPaddingStart(this) + gap * page + indicatorRadius; + } + + private float interpolatedOffset() { + return interpolator.getInterpolation(offset); + } + + private float indicatorDiameter() { + return indicatorRadius * 2; + } + + private float midY() { + return getHeight() / 2f; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/main/SpringBackScrollView.java b/app/src/main/java/com/yonsz/z1/fragment/main/SpringBackScrollView.java new file mode 100644 index 0000000..3701408 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/main/SpringBackScrollView.java @@ -0,0 +1,118 @@ +package com.yonsz.z1.fragment.main; + +import android.content.Context; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.TranslateAnimation; +import android.widget.ScrollView; + +/** + * Created by Administrator on 2017/4/25. + */ + +public class SpringBackScrollView extends ScrollView { + + // 拖动的距离 size = 4 的意思 只允许拖动屏幕的1/4 + private static final int size = 4; + private View inner; + private float y; + private Rect normal = new Rect(); + + public SpringBackScrollView(Context context) { + super(context); + } + + public SpringBackScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onFinishInflate() { + if (getChildCount() > 0) { + inner = getChildAt(0); + } + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (inner == null) { + return super.onTouchEvent(ev); + } else { + commOnTouchEvent(ev); + } + return super.onTouchEvent(ev); + } + + public void commOnTouchEvent(MotionEvent ev) { + int action = ev.getAction(); + switch (action) { + case MotionEvent.ACTION_DOWN: + y = ev.getY(); + break; + case MotionEvent.ACTION_UP: + if (isNeedAnimation()) { + // Log.v("mlguitar", "will up and animation"); + animation(); + } + break; + case MotionEvent.ACTION_MOVE: + final float preY = y; + float nowY = ev.getY(); + /** + * size=4 表示 拖动的距离为屏幕的高度的1/4 + */ + int deltaY = (int) (preY - nowY) / size; + // 滚动 + // scrollBy(0, deltaY); + + y = nowY; + // 当滚动到最上或者最下时就不会再滚动,这时移动布局 + if (isNeedMove()) { + if (normal.isEmpty()) { + // 保存正常的布局位置 + normal.set(inner.getLeft(), inner.getTop(), + inner.getRight(), inner.getBottom()); + return; + } + int yy = inner.getTop() - deltaY; + + // 移动布局 + inner.layout(inner.getLeft(), yy, inner.getRight(), + inner.getBottom() - deltaY); + } + break; + default: + break; + } + } + + // 开启动画移动 + + public void animation() { + // 开启移动动画 + TranslateAnimation ta = new TranslateAnimation(0, 0, inner.getTop(), + normal.top); + ta.setDuration(200); + inner.startAnimation(ta); + // 设置回到正常的布局位置 + inner.layout(normal.left, normal.top, normal.right, normal.bottom); + normal.setEmpty(); + } + + // 是否需要开启动画 + public boolean isNeedAnimation() { + return !normal.isEmpty(); + } + + // 是否需要移动布局 + public boolean isNeedMove() { + int offset = inner.getMeasuredHeight() - getHeight(); + int scrollY = getScrollY(); + if (scrollY == 0 || scrollY == offset) { + return true; + } + return false; + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/main/StatusBarUtil.java b/app/src/main/java/com/yonsz/z1/fragment/main/StatusBarUtil.java new file mode 100644 index 0000000..4424e8c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/main/StatusBarUtil.java @@ -0,0 +1,466 @@ +package com.yonsz.z1.fragment.main; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Context; +import android.graphics.Color; +import android.os.Build; +import android.support.v4.widget.DrawerLayout; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.LinearLayout; + +/** + * Created by Jaeger on 16/2/14. + *

+ * Email: chjie.jaeger@gamil.com + * GitHub: https://github.com/laobie + */ +public class StatusBarUtil { + + public static final int DEFAULT_STATUS_BAR_ALPHA = 112; + + + public static void setAndroidNativeLightStatusBar(Activity activity, boolean dark) { + View decor = activity.getWindow().getDecorView(); + if (dark) { + decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } else { + decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + } + } + + public static void changStatusIconCollor(Activity activity, boolean setDark) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + View decorView = activity.getWindow().getDecorView(); + if (decorView != null) { + int vis = decorView.getSystemUiVisibility(); + if (setDark) { + vis |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + } else { + vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + } + decorView.setSystemUiVisibility(vis); + } + } + } + + /** + * 设置状态栏颜色 + * + * @param activity 需要设置的 activity + * @param color 状态栏颜色值 + */ + public static void setColor(Activity activity, int color) { + setColor(activity, color, DEFAULT_STATUS_BAR_ALPHA); + } + + /** + * 设置状态栏颜色 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @param statusBarAlpha 状态栏透明度 + */ + public static void setColor(Activity activity, int color, int statusBarAlpha) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha)); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // 生成一个状态栏大小的矩形 + View statusView = createStatusBarView(activity, color, statusBarAlpha); + // 添加 statusView 到布局中 + ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); + decorView.addView(statusView); + setRootView(activity); + } + } + + /** + * 设置状态栏纯色 不加半透明效果 + * + * @param activity 需要设置的 activity + * @param color 状态栏颜色值 + */ + public static void setColorNoTranslucent(Activity activity, int color) { + setColor(activity, color, 0); + } + + /** + * 设置状态栏颜色(5.0以下无半透明效果,不建议使用) + * + * @param activity 需要设置的 activity + * @param color 状态栏颜色值 + */ + public static void setColorDiff(Activity activity, int color) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // 生成一个状态栏大小的矩形 + View statusView = createStatusBarView(activity, color); + // 添加 statusView 到布局中 + ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); + decorView.addView(statusView); + setRootView(activity); + } + + /** + * 使状态栏半透明 + *

+ * 适用于图片作为背景的界面,此时需要图片填充到状态栏 + * + * @param activity 需要设置的activity + */ + public static void setTranslucent(Activity activity) { + setTranslucent(activity, DEFAULT_STATUS_BAR_ALPHA); + } + + /** + * 使状态栏半透明 + *

+ * 适用于图片作为背景的界面,此时需要图片填充到状态栏 + * + * @param activity 需要设置的activity + * @param statusBarAlpha 状态栏透明度 + */ + public static void setTranslucent(Activity activity, int statusBarAlpha) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + setTransparent(activity); + addTranslucentView(activity, statusBarAlpha); + } + + /** + * 设置状态栏全透明 + * + * @param activity 需要设置的activity + */ + public static void setTransparent(Activity activity) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + transparentStatusBar(activity); + setRootView(activity); + } + + /** + * 使状态栏透明(5.0以上半透明效果,不建议使用) + *

+ * 适用于图片作为背景的界面,此时需要图片填充到状态栏 + * + * @param activity 需要设置的activity + */ + public static void setTranslucentDiff(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + // 设置状态栏透明 + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + setRootView(activity); + } + } + + /** + * 为DrawerLayout 布局设置状态栏变色 + * + * @param activity 需要设置的activity + * @param drawerLayout DrawerLayout + * @param color 状态栏颜色值 + */ + public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, int color) { + setColorForDrawerLayout(activity, drawerLayout, color, DEFAULT_STATUS_BAR_ALPHA); + } + + /** + * 为DrawerLayout 布局设置状态栏颜色,纯色 + * + * @param activity 需要设置的activity + * @param drawerLayout DrawerLayout + * @param color 状态栏颜色值 + */ + public static void setColorNoTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, int color) { + setColorForDrawerLayout(activity, drawerLayout, color, 0); + } + + /** + * 为DrawerLayout 布局设置状态栏变色 + * + * @param activity 需要设置的activity + * @param drawerLayout DrawerLayout + * @param color 状态栏颜色值 + * @param statusBarAlpha 状态栏透明度 + */ + public static void setColorForDrawerLayout(Activity activity, DrawerLayout drawerLayout, int color, int statusBarAlpha) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + activity.getWindow().setStatusBarColor(Color.TRANSPARENT); + } else { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + // 生成一个状态栏大小的矩形 + View statusBarView = createStatusBarView(activity, color); + // 添加 statusBarView 到布局中 + ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0); + contentLayout.addView(statusBarView, 0); + // 内容布局不是 LinearLayout 时,设置padding top + if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) { + contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0); + } + // 设置属性 + ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1); + drawerLayout.setFitsSystemWindows(false); + contentLayout.setFitsSystemWindows(false); + contentLayout.setClipToPadding(true); + drawer.setFitsSystemWindows(false); + + addTranslucentView(activity, statusBarAlpha); + } + + /** + * 为DrawerLayout 布局设置状态栏变色(5.0以下无半透明效果,不建议使用) + * + * @param activity 需要设置的activity + * @param drawerLayout DrawerLayout + * @param color 状态栏颜色值 + */ + public static void setColorForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout, int color) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // 生成一个状态栏大小的矩形 + View statusBarView = createStatusBarView(activity, color); + // 添加 statusBarView 到布局中 + ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0); + contentLayout.addView(statusBarView, 0); + // 内容布局不是 LinearLayout 时,设置padding top + if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) { + contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0); + } + // 设置属性 + ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1); + drawerLayout.setFitsSystemWindows(false); + contentLayout.setFitsSystemWindows(false); + contentLayout.setClipToPadding(true); + drawer.setFitsSystemWindows(false); + } + } + + /** + * 为 DrawerLayout 布局设置状态栏透明 + * + * @param activity 需要设置的activity + * @param drawerLayout DrawerLayout + */ + public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) { + setTranslucentForDrawerLayout(activity, drawerLayout, DEFAULT_STATUS_BAR_ALPHA); + } + + /** + * 为 DrawerLayout 布局设置状态栏透明 + * + * @param activity 需要设置的activity + * @param drawerLayout DrawerLayout + */ + public static void setTranslucentForDrawerLayout(Activity activity, DrawerLayout drawerLayout, int statusBarAlpha) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + setTransparentForDrawerLayout(activity, drawerLayout); + addTranslucentView(activity, statusBarAlpha); + } + + /** + * 为 DrawerLayout 布局设置状态栏透明 + * + * @param activity 需要设置的activity + * @param drawerLayout DrawerLayout + */ + public static void setTransparentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + activity.getWindow().setStatusBarColor(Color.TRANSPARENT); + } else { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + + ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0); + // 内容布局不是 LinearLayout 时,设置padding top + if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) { + contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0); + } + + // 设置属性 + ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1); + drawerLayout.setFitsSystemWindows(false); + contentLayout.setFitsSystemWindows(false); + contentLayout.setClipToPadding(true); + drawer.setFitsSystemWindows(false); + } + + /** + * 为 DrawerLayout 布局设置状态栏透明(5.0以上半透明效果,不建议使用) + * + * @param activity 需要设置的activity + * @param drawerLayout DrawerLayout + */ + public static void setTranslucentForDrawerLayoutDiff(Activity activity, DrawerLayout drawerLayout) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + // 设置状态栏透明 + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + // 设置内容布局属性 + ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0); + contentLayout.setFitsSystemWindows(true); + contentLayout.setClipToPadding(true); + // 设置抽屉布局属性 + ViewGroup vg = (ViewGroup) drawerLayout.getChildAt(1); + vg.setFitsSystemWindows(false); + // 设置 DrawerLayout 属性 + drawerLayout.setFitsSystemWindows(false); + } + } + + /** + * 添加半透明矩形条 + * + * @param activity 需要设置的 activity + * @param statusBarAlpha 透明值 + */ + private static void addTranslucentView(Activity activity, int statusBarAlpha) { + ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content); + // 移除半透明矩形,以免叠加 + if (contentView.getChildCount() > 1) { + contentView.removeViewAt(1); + } + contentView.addView(createTranslucentStatusBarView(activity, statusBarAlpha)); + } + + /** + * 生成一个和状态栏大小相同的彩色矩形条 + * + * @param activity 需要设置的 activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private static View createStatusBarView(Activity activity, int color) { + // 绘制一个和状态栏一样高的矩形 + View statusBarView = new View(activity); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + getStatusBarHeight(activity)); + statusBarView.setLayoutParams(params); + statusBarView.setBackgroundColor(color); + return statusBarView; + } + + /** + * 生成一个和状态栏大小相同的半透明矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @param alpha 透明值 + * @return 状态栏矩形条 + */ + private static View createStatusBarView(Activity activity, int color, int alpha) { + // 绘制一个和状态栏一样高的矩形 + View statusBarView = new View(activity); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + getStatusBarHeight(activity)); + statusBarView.setLayoutParams(params); + statusBarView.setBackgroundColor(calculateStatusColor(color, alpha)); + return statusBarView; + } + + /** + * 设置根布局参数 + */ + private static void setRootView(Activity activity) { + ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0); + rootView.setFitsSystemWindows(true); + rootView.setClipToPadding(true); + } + + /** + * 使状态栏透明 + */ + @TargetApi(Build.VERSION_CODES.KITKAT) + private static void transparentStatusBar(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); + activity.getWindow().setStatusBarColor(Color.TRANSPARENT); + } else { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + } + + /** + * 创建半透明矩形 View + * + * @param alpha 透明值 + * @return 半透明 View + */ + private static View createTranslucentStatusBarView(Activity activity, int alpha) { + // 绘制一个和状态栏一样高的矩形 + View statusBarView = new View(activity); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + getStatusBarHeight(activity)); + statusBarView.setLayoutParams(params); + statusBarView.setBackgroundColor(Color.argb(alpha, 0, 0, 0)); + return statusBarView; + } + + /** + * 获取状态栏高度 + * + * @param context context + * @return 状态栏高度 + */ + private static int getStatusBarHeight(Context context) { + // 获得状态栏高度 + int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); + return context.getResources().getDimensionPixelSize(resourceId); + } + + /** + * 计算状态栏颜色 + * + * @param color color值 + * @param alpha alpha值 + * @return 最终的状态栏颜色 + */ + private static int calculateStatusColor(int color, int alpha) { + float a = 1 - alpha / 255f; + int red = color >> 16 & 0xff; + int green = color >> 8 & 0xff; + int blue = color & 0xff; + red = (int) (red * a + 0.5); + green = (int) (green * a + 0.5); + blue = (int) (blue * a + 0.5); + return 0xff << 24 | red << 16 | green << 8 | blue; + } + + public static void setImgTransparent(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = activity.getWindow(); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS + | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(Color.TRANSPARENT); + window.setNavigationBarColor(Color.TRANSPARENT); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/main4/MainFragment4.java b/app/src/main/java/com/yonsz/z1/fragment/main4/MainFragment4.java new file mode 100644 index 0000000..5b5968f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/main4/MainFragment4.java @@ -0,0 +1,1885 @@ +package com.yonsz.z1.fragment.main4; + +import android.content.Intent; +import android.graphics.Rect; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.support.design.widget.CoordinatorLayout; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.lechange.demo.business.Business; +import com.lechange.demo.business.entity.ChannelInfo; +import com.lechange.demo.yonsz.CustomSnapHelper; +import com.lechange.demo.yonsz.LcListEntity; +import com.lechange.demo.yonsz.LechengChannelAdapter; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.AsxAddDeviceListActivity; +import com.yonsz.z1.activity.GatewagAddListActivity; +import com.yonsz.z1.activity.HotelAddDeviceListActivity; +import com.yonsz.z1.activity.MainActivityAdapter; +import com.yonsz.z1.database.entity.AdInfo; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.CheckBindEntity; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity4.GetZ1Event; +import com.yonsz.z1.database.entity.entity4.HomeDetailEntity; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.database.entity.entitya2.DevieFirstBean; +import com.yonsz.z1.database.entity.entitya2.ModelOpenEntity; +import com.yonsz.z1.device.childdevice.SmartMic1; +import com.yonsz.z1.device.childdevice.ViewPagerDelegate; +import com.yonsz.z1.device.tv.AirListActivity; +import com.yonsz.z1.device.tv.FanListActivity; +import com.yonsz.z1.devicea2.aira2.AirA2Activity; +import com.yonsz.z1.devicea2.childdevicea2.SmartMic2; +import com.yonsz.z1.devicea2.childdevicea2.ViewPagerDelegate2; +import com.yonsz.z1.devicea2.fana2.FanA2Activity; +import com.yonsz.z1.devicea2.safedevice.SafeDeviceActivity; +import com.yonsz.z1.devicea2.safedevice.ScanCodeActivity; +import com.yonsz.z1.devicea2.sweepa2.SweepA2Activity; +import com.yonsz.z1.devicea2.tva2.TvA2Activity; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.fragment.scene.ProvinceItemParent; +import com.yonsz.z1.fragment.scene.treerecyclerview.adpater.TreeRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.adpater.TreeRecyclerType; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; +import com.yonsz.z1.fragment.scene.treerecyclerview.factory.ItemHelperFactory; +import com.yonsz.z1.fragment.scene.treerecyclerview.helper.ItemTouchHelperCallback; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItem; +import com.yonsz.z1.homemanage.HomeManageActivity; +import com.yonsz.z1.homemanage.ModelDetailActivity; +import com.yonsz.z1.listener.OnRecyclerScrollListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNextDialog; +import com.yonsz.z1.mine.aboutversion.customview.ForceUpdateDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.mine.mydevice.DeviceA2FirstPosActivity; +import com.yonsz.z1.mine.mydevice.DeviceDetailActivity; +import com.yonsz.z1.mine.mydevice.SolidVersionActivity; +import com.yonsz.z1.model.ModelSettingActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.new433.curtain.CurtainsStepOneActivity; +import com.yonsz.z1.new433.switcher.SwitcherStepOneActivity; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ImageLoaderUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ShakeUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version4.WeatherFragment; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.MainViewPager; +import com.yonsz.z1.view.MySwipeRefreshLayout; +import com.yonsz.z1.view.PositionPopupWindow; +import com.yonsz.z1.view.SwitchView; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.listpopupwindow.RankingPopupWindow; +import com.yonsz.z1.view.loading.LoadingDialog; +import com.yonsz.z1.zigbee.ZigBeeDetailActivity; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_TYPE; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_FAIL; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_SUCCESS; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_TO_OPEN; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_TO_SET; +import static com.yonsz.z1.net.Constans.CHANGE_SAHRENAME; +import static com.yonsz.z1.net.Constans.CHECK_MODEL_STATUS_SET; +import static com.yonsz.z1.net.Constans.CHECK_MODEL_STATUS_SUCCESS; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_SUCCESS; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.GETZIINFO_FAIL; +import static com.yonsz.z1.net.Constans.GETZIINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.GET_Z1_INFO; +import static com.yonsz.z1.net.Constans.HOUSEID; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.ISADDBAOSHI; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.ONE_KEY_SWITCH_FAIL; +import static com.yonsz.z1.net.Constans.ONE_KEY_SWITCH_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_SUCCESS; +import static com.yonsz.z1.net.Constans.SAFE_DEVICE_TAG; +import static com.yonsz.z1.net.Constans.SCENCE_CONTROL_ORDER; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_SUCCESS; +import static com.yonsz.z1.net.Constans.ZIGBEE_PLUG; +import static com.yonsz.z1.net.Constans.deviceNumList; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.Constans.isUseDefFlag; +import static com.yonsz.z1.net.NetWorkUrl.AVTIVE_MODEL_NEW; +import static com.yonsz.z1.net.NetWorkUrl.CHECK_MODEL_STATUS; +import static com.yonsz.z1.net.NetWorkUrl.FIND_DEVICES; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_BASIC; +import static com.yonsz.z1.net.NetWorkUrl.USER_TOKEN; + +/** + * Created by Administrator on 2018/4/23. + */ + +public class MainFragment4 extends BaseFragment implements View.OnClickListener { + //4.5需求 + private RelativeLayout safeDeviceDetailRl; + private ImageView safeDeviceStageIv; + private TextView safeDetailTv; + private SwitchView safeSwitch; + private LoadingDialog mLoadingDialog; + private RecyclerView horizontalRecyclerView; + private LinearLayout ll_lecheng; + private int lechengPosition = 0; + private TextView channelName; + + private ImageView floatVoiceIv; + private RankingPopupWindow mWindow; + private RankingPopupWindow.Listener listener; + private TitleView mTitleView; + private RecyclerView recyclerView; + private MainViewPager mViewPager; + private View fragView; + private UIHandle mHandler; + private List mDevieFirstBeans = new ArrayList<>(); + private TreeRecyclerAdapter treeRecyclerAdapter; + private List treeItemList = new ArrayList<>(); + private TextView addDeviceIv; + private List fragmentList; + private MainActivityAdapter mAdAdapter; + private List adInfoList; + private MySwipeRefreshLayout swipeRefreshLayout; + private ScrollView scrollView; + private RelativeLayout rl_add_device; + private FragmentManager manager; + private WeatherFragment weatherFragment; + private ImageView mvpBg; + private ItemTouchHelper itemTouchHelper; + private String addZiId; + private String addAddressId; + private boolean isVirtual = false; + private List mAllObjEntity = new ArrayList<>(); + private LechengChannelAdapter mHorizontalAdapter; + private ArrayList mChannelInfoList = new ArrayList<>(); + + private static void setDefaultHouse() { + SharedpreferencesUtil.save(Constans.HOUSEID, homeListEntity.getData().get(deviceNumListPosition).getId()); + HashMap map = new HashMap<>(); + map.put("houseId", homeListEntity.getData().get(deviceNumListPosition).getId()); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynewApi(NetWorkUrl.SET_DEFAULT_HOUSE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("setDefaultHouse", "UpdatePwActivity onSuccess()" + respone); + } + + @Override + public void onFail(String message) { + } + }); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @RequiresApi(api = Build.VERSION_CODES.M) + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_main4, null); + // Business.getInstance().init("lcc58705630dd248d1", "91ac51eb533b4253ae2b917470ad27", "openapi.lechange.cn:443"); + initView(); + return fragView; + } + + public void onEventMainThread(GetZ1Event event) { + String msg = event.getMsg(); + Log.e("nettyUtil111111111111", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = GET_Z1_INFO; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(ChooseHomeEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("2") || msg.equals("3")) { + queryHouses(); + } + } + + @Override + public void onResume() { + super.onResume(); + if (DensityUtil.isNetworkConnected(getActivity())) { + queryHouses(); + } else { + ToastUtil.show(getActivity(), R.string.net_error); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + @RequiresApi(api = Build.VERSION_CODES.M) + private void initView() { + channelName = (TextView) fragView.findViewById(R.id.list_channel_name); + horizontalRecyclerView = (RecyclerView) fragView.findViewById(R.id.horizontal_RecyclerView); + ll_lecheng = (LinearLayout) fragView.findViewById(R.id.ll_lecheng); + safeDeviceDetailRl = (RelativeLayout) fragView.findViewById(R.id.rl_safe_device_detail); + safeDeviceStageIv = (ImageView) fragView.findViewById(R.id.iv_safe_device_stage); + safeDetailTv = (TextView) fragView.findViewById(R.id.tv_safe_detail); + safeSwitch = (SwitchView) fragView.findViewById(R.id.stv_safe_switch); + floatVoiceIv = (ImageView) fragView.findViewById(R.id.iv_float_voice); + swipeRefreshLayout = (MySwipeRefreshLayout) fragView.findViewById(R.id.swipe_refresh); + mvpBg = (ImageView) fragView.findViewById(R.id.iv_mvp_bg); + rl_add_device = (RelativeLayout) fragView.findViewById(R.id.rl_add_device); + scrollView = (ScrollView) fragView.findViewById(R.id.scrollView); + addDeviceIv = (TextView) fragView.findViewById(R.id.tv_big_add); + addDeviceIv.setOnClickListener(this); + mTitleView = (TitleView) fragView.findViewById(R.id.title_version4); + mTitleView.clearBackGroud(); + // mTitleView.setHead("首页"); + mTitleView.setHeadHomeVisible(R.drawable.icon_home_house1); + mTitleView.setHeadFuntion(R.drawable.icon_nav_add_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + // TODO: 2018/9/11 选择家庭 + initListItem(deviceNumList, 0, mTitleView.getHomeNameTxt()); + } + + @Override + public void onFunction() { + if (AppIdUtil.isBaseZhiKong()) { + Intent intent = new Intent(getActivity(), AsxAddDeviceListActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + getActivity().startActivity(intent); + } else { + startAddDevice(); + } + } + + @Override + public void onFunctionText() { + + } + }); + recyclerView = (RecyclerView) fragView.findViewById(R.id.rv_content); + mViewPager = (MainViewPager) fragView.findViewById(R.id.mvp_main_top); + recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 4)); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() { + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + // outRect.top = 10; + if (view.getLayoutParams() instanceof GridLayoutManager.LayoutParams) { + GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams(); + int spanIndex = layoutParams.getSpanIndex();//在一行中所在的角标,第几列 + if (spanIndex != ((GridLayoutManager) parent.getLayoutManager()).getSpanCount() - 1) { + // outRect.right = 10; + } + } + } + }); + // List cityBeen = JSON.parseArray(getResources().getString(R.string.location), CityBean.class); + + adInfoList = new ArrayList<>(); + fragmentList = new ArrayList<>(); + // fragmentList.add(new WeatherFragment(0)); + manager = getActivity().getSupportFragmentManager(); + + if (scrollView != null) { + scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { + @Override + public void onScrollChanged() { + Log.i("onScrollChanged", scrollView.getScrollY() + ""); + if (swipeRefreshLayout != null) { + swipeRefreshLayout.setEnabled(scrollView.getScrollY() == 0); + } + if (scrollView.getScrollY() < 400 && scrollView.getScrollY() > 20) { + // mTitleView.setHead("情景模式"); + mTitleView.showBackGroud6(); + } else if (scrollView.getScrollY() > 400) { + // mTitleView.setHead("设备"); + mTitleView.showBackGroud5(); + } else { + // mTitleView.setHead("首页"); + mTitleView.clearBackGroud(); + } + } + }); + } + swipeRefreshLayout.setTouchSlop(200); + swipeRefreshLayout.setProgressViewEndTarget(true, 200); + swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + queryHouses(); + } + }); + floatVoiceIv.setOnClickListener(this); + safeSwitch.setOnClickListener(this); + + + mHorizontalAdapter = new LechengChannelAdapter(getContext(), mChannelInfoList); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(getContext()); + manage.setOrientation(LinearLayoutManager.HORIZONTAL); + horizontalRecyclerView.setHasFixedSize(true); + horizontalRecyclerView.setLayoutManager(manage); + horizontalRecyclerView.setAdapter(mHorizontalAdapter); + + CustomSnapHelper mMySnapHelper = new CustomSnapHelper(); + mMySnapHelper.attachToRecyclerView(horizontalRecyclerView); + mMySnapHelper.setmOnItemScrollListener(new OnRecyclerScrollListener() { + @Override + public void onScroll(int position) { + channelName.setText(mChannelInfoList.get(lechengPosition).getDeviceName()); + lechengPosition = position; + } + }); + } + + private void userToken() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + netWorkUtil.requestPostByAsynewApi(USER_TOKEN, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("userToken", "onSuccess()" + respone); + CheckBindEntity obj = JSON.parseObject(respone, CheckBindEntity.class); + if (1 == obj.getFlag()) { + Business.getInstance().setToken(obj.getData().getUserToken()); + getLcDeviceList(); + } else { + android.os.Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private synchronized void getLcDeviceList() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + netWorkUtil.requestPostByAsynewApi(FIND_DEVICES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("findDevices", "onSuccess()" + respone); + LcListEntity obj = JSON.parseObject(respone, LcListEntity.class); + if (1 == obj.getFlag()) { + android.os.Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + android.os.Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initListItem(final List list, final int flag, final String selectName) { + //生成Listener和清空 + setPopupWindowListener(); + mWindow = null; + //显示popupwindow + mWindow = new RankingPopupWindow(getActivity(), list, selectName, listener, mTitleView, flag); + } + + private void setPopupWindowListener() { + listener = null; + listener = new RankingPopupWindow.Listener() { + @Override + public void onPopupWindowDismissListener() { + //消失时的操作 + } + + @Override + public void onItemClickListener(int position) { + //点击Item时的操作 + //跳转到家庭管理的页面 + if (position == deviceNumList.size() - 1) { + Intent intent = new Intent(getContext(), HomeManageActivity.class); + startActivity(intent); + } else { + isUseDefFlag = false; + deviceNumListPosition = position; + /*if (deviceNumList.get(position).length() > 9) { + mTitleView.setHomeNameTxt(deviceNumList.get(position).substring(0, 6) + "…"); + } else { + mTitleView.setHomeNameTxt(deviceNumList.get(position)); + }*/ + mTitleView.setHomeNameTxt(deviceNumList.get(position)); + setDefaultHouse(); + safeDeviceDetailRl.setVisibility(View.GONE); + queryHouses(); + } + } + }; + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + private void callBackUiThread(Message msg) { + switch (msg.what) { + case GETZIINFO_SUCCESS: + swipeRefreshLayout.setRefreshing(false); + mDevieFirstBeans.clear(); + mAllObjEntity.clear(); + DeviceEntityV4 entity = (DeviceEntityV4) msg.obj; + AddressNameUtil.setInstance(entity); + //头部banner + mAllObjEntity = entity.getData(); + convetAdList(entity.getData()); + //设备三级列表 + convertTreeList(entity); + + treeItemList = ItemHelperFactory.createTreeItemList(mDevieFirstBeans, ProvinceItemParent.class, null, 1); + treeRecyclerAdapter = new TreeRecyclerAdapter(); + treeRecyclerAdapter.setType(TreeRecyclerType.SHOW_ALL); + treeRecyclerAdapter.setDatas(treeItemList); + recyclerView.setAdapter(treeRecyclerAdapter); + + ItemTouchHelper.Callback callback = new ItemTouchHelperCallback(treeRecyclerAdapter); + itemTouchHelper = new ItemTouchHelper(callback); + itemTouchHelper.attachToRecyclerView(recyclerView); + + setTreelistener(); + break; + case GETZIINFO_FAIL: + swipeRefreshLayout.setRefreshing(false); + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case GET_USER_SESSION_NULL: + NettyHandlerUtil.closeCtx(); + ToastUtil.show(getContext(), "用户在其他手机登陆"); + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + SharedpreferencesUtil.save(Constans.TOKENID, ""); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(getContext(), LoginActivity.class); + startActivity(intent); + getActivity().finish(); + } + }, 1000); + break; + case SCENCE_CONTROL_ORDER: + int obj1 = (int) msg.obj; + int modelType = msg.arg1; + boolean haveDevice; + checkModelStatus(obj1, modelType); + /*if (adInfoList.size() != 1 || null != adInfoList.get(0).getShareName()) { + } else { + ToastUtil.show(getActivity(), "请先添加设备"); + }*/ + break; + + case CHECK_MODEL_STATUS_SET: + final int model = (int) msg.obj; + int nowChoosePosition = msg.arg1; + // if (adInfoList.get(nowChoosePosition - 1).getShareNumber().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + if (1 == 1) { + ConfirmDialog dialog3 = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + + break; + case 1: + Intent intent = new Intent(getActivity(), ModelDetailActivity.class); + intent.putExtra("model", model); + intent.putExtra("isAdd", false); + intent.putExtra("isCheckBoxOpen", false); + intent.putExtra("modelId", ""); + intent.putExtra("modelId1", ""); + setIshaveDevice(intent); + startActivity(intent); + break; + } + } + }); + dialog3.setContent("您还未设置情景模式,请先设置"); + dialog3.setCancleBtn(R.string.cancel); + dialog3.setSureBtn("去设置"); + dialog3.setCancelable(false); + dialog3.show(); + } else { + switch (model) { + case 1: + ToastUtil.show(getActivity(), "未设置回家模式"); + break; + case 2: + ToastUtil.show(getActivity(), "未设置离家模式"); + break; + case 3: + ToastUtil.show(getActivity(), "未设置睡眠模式"); + break; + case 4: + ToastUtil.show(getActivity(), "未设置起床模式"); + break; + } + } + break; + + case CHECK_MODEL_STATUS_SUCCESS: + final int model2 = (int) msg.obj; + final int nowPosition = msg.arg1; + ConfirmNextDialog dialog2 = new ConfirmNextDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + + break; + case 1: + // updateModelBasic(model2); + avtiveModel(nowPosition - 1, model2); + break; + } + } + }); + switch (model2) { + case 1: + dialog2.setTopTxt("开启回家模式"); + dialog2.setContent("开启回家模式下的设备预设动作"); + break; + case 2: + dialog2.setTopTxt("开启离家模式"); + dialog2.setContent("开启离家模式下的设备预设动作"); + break; + case 3: + dialog2.setTopTxt("开启睡眠模式"); + dialog2.setContent("开启睡眠模式下的设备预设动作"); + break; + case 4: + dialog2.setTopTxt("开启起床模式"); + dialog2.setContent("开启起床模式下的设备预设动作"); + break; + } + dialog2.setCancelable(false); + dialog2.show(); + break; + case AVTIVE_MODEL_FAIL: + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case AVTIVE_MODEL_SUCCESS: + ToastUtil.show(getActivity(), "开启成功"); + break; + case AVTIVE_MODEL_TO_SET: + final int obj4 = (int) msg.obj; + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + + break; + case 1: + Intent intent = new Intent(getActivity(), ModelSettingActivity.class); + intent.putExtra("model", obj4); + setIshaveDevice(intent); + startActivity(intent); + break; + } + } + }); + dialog.setContent("您还未设置情景模式,请先设置"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn("去设置"); + dialog.setCancelable(false); + dialog.show(); + break; + case AVTIVE_MODEL_TO_OPEN: + final int model5 = (int) msg.obj; + ConfirmNextDialog dialog1 = new ConfirmNextDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + + break; + case 1: + updateModelBasic(model5); + break; + } + } + }); + switch (model5) { + case 1: + dialog1.setTopTxt("开启回家模式"); + dialog1.setContent("开启回家模式下的设备预设动作"); + break; + case 2: + dialog1.setTopTxt("开启离家模式"); + dialog1.setContent("开启离家模式下的设备预设动作"); + break; + case 3: + dialog1.setTopTxt("开启睡眠模式"); + dialog1.setContent("开启睡眠模式下的设备预设动作"); + break; + case 4: + dialog1.setTopTxt("开启起床模式"); + dialog1.setContent("开启起床模式下的设备预设动作"); + break; + } + dialog1.setCancelable(false); + dialog1.show(); + break; + case UPDATE_MODEL_BASIC_SUCCESS: + ToastUtil.show(getActivity(), "开启成功"); + break; + case UPDATE_MODEL_BASIC_FAIL: + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case GET_Z1_INFO: + queryHouses(); + break; + case CHANGE_SAHRENAME: + String obj2 = (String) msg.obj; + + break; + case QUERY_HOUSES_SUCCESS: + homeListEntity = (HomeListEntity) msg.obj; + deviceNumList.clear(); + if (null != homeListEntity.getData()) { + if (deviceNumListPosition > homeListEntity.getData().size() - 1) { + deviceNumListPosition = 0; + } + deviceNumList.clear(); + for (int i = 0; i < homeListEntity.getData().size(); i++) { + if (homeListEntity.getData().get(i).getDefFlag() == 1) { + if (isUseDefFlag) { + deviceNumListPosition = i; + } + } + /*if (homeListEntity.getData().get(i).getName().length() > 9) { + deviceNumList.add(homeListEntity.getData().get(i).getName().substring(0, 6) + "…"); + } else { + deviceNumList.add(homeListEntity.getData().get(i).getName()); + }*/ + deviceNumList.add(homeListEntity.getData().get(i).getName()); + } + /*if (homeListEntity.getData().get(deviceNumListPosition).getName().length() > 9) { + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName().substring(0, 6) + "…"); + } else { + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + }*/ + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + if (!TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getPicUrl())) { + ImageLoaderUtil util = new ImageLoaderUtil(); + util.setImageUrl(homeListEntity.getData().get(deviceNumListPosition).getPicUrl(), mvpBg); + } else { + mvpBg.setImageDrawable(getResources().getDrawable(R.drawable.pic_index_scene_4)); + } + if (!TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getSafeSwitch())) { + switch (homeListEntity.getData().get(deviceNumListPosition).getSafeSwitch()) { + case "0": + safeDeviceStageIv.setImageResource(R.drawable.icon_security_withdrawal); + safeDetailTv.setText("全部撤防中"); + safeSwitch.setOpened(false); + break; + case "1": + safeDeviceStageIv.setImageResource(R.drawable.icon_safety_cloth); + safeDetailTv.setText("全部布防中"); + safeSwitch.setOpened(true); + break; + case "2": + safeDeviceStageIv.setImageResource(R.drawable.icon_security_withdrawal); + safeDetailTv.setText("局部布防中"); + safeSwitch.setOpened(false); + break; + default: + safeDeviceStageIv.setImageResource(R.drawable.icon_security_withdrawal); + safeDetailTv.setText("全部撤防中"); + safeSwitch.setOpened(false); + break; + } + } + isVirtual = homeListEntity.getData().get(deviceNumListPosition).isIsVirtual(); + } + SharedpreferencesUtil.save(HOUSEID, homeListEntity.getData().get(deviceNumListPosition).getId()); +// deviceNumList.add(getString(R.string.home_manage)); + EventBus.getDefault().post( + new ChooseHomeEvent("1")); + getZ1Info(); + // getApplicanceList(); + // userToken();//语音遥控器是没有乐橙的 + // userToken();//语音遥控器是没有乐橙的 + break; + case ONE_KEY_SWITCH_SUCCESS: + boolean openFlag = (boolean) msg.obj; + safeSwitch.setOpened(openFlag); + if (openFlag) { + safeDeviceStageIv.setImageResource(R.drawable.icon_safety_cloth); + safeDetailTv.setText("布防状态中"); + } else { + safeDeviceStageIv.setImageResource(R.drawable.icon_security_withdrawal); + safeDetailTv.setText("撤防状态中"); + } + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + break; + case ONE_KEY_SWITCH_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(getActivity(), (String) msg.obj); + queryHouses(); + break; + case FIND_DEVICES_SUCCESS: + LcListEntity lcListEntity = (LcListEntity) msg.obj; + if (lcListEntity.getData().size() > 0) { + // loadChannelList(lcListEntity); + // rl_add_device.setVisibility(View.GONE); + } else { + horizontalRecyclerView.setVisibility(View.GONE); + ll_lecheng.setVisibility(View.GONE); + if (mDevieFirstBeans.size() == 0) { + rl_add_device.setVisibility(View.VISIBLE); + } + } + break; + case FIND_DEVICES_FAIL: + ToastUtil.show(getActivity(), (String) msg.obj); + horizontalRecyclerView.setVisibility(View.GONE); + ll_lecheng.setVisibility(View.GONE); + break; + case CREATE_ORUPDATE_HOUSE_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + isUseDefFlag = false; + deviceNumListPosition = homeListEntity.getData().size(); + queryHouses(); + break; + case CREATE_ORUPDATE_HOUSE_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } + + private void updateSortNum(String ziId, StringBuilder stringBuilder) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("sortInfos", stringBuilder.substring(0, stringBuilder.length() - 1).toString()); + map.put("ziId", ziId); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.UPDATE_SORT_NUM, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateSortNum", "SolidVersionActivity onSuccess()" + respone); + queryHouses(); + } + + @Override + public void onFail(String message) { + } + }); + } + + private void setTreelistener() { + treeRecyclerAdapter.setOnItemLongClickListener(new BaseRecyclerAdapter.OnItemLongClickListener() { + @Override + public boolean onItemLongClick(ViewHolder viewHolder, int position, String ziId, int isOwner, String version, String deviceName, String addressId, String devicePosition, String id, String rid, String deviceType, DeviceEntityV4.DataBean parentBean, DeviceEntityV4.DataBean.DevicesBean childBean) { + Log.i("onItemLongClick", "MainFragment4 onItemLongClick()" + parentBean.getChildren().size() + "---" + viewHolder.getLayoutPosition()); + if (viewHolder.getLayoutPosition() != 0 && viewHolder.getLayoutPosition() != 1 && viewHolder.getLayoutPosition() != parentBean.getChildren().size() + 2) { + swipeRefreshLayout.setEnabled(false); + ShakeUtil.setShake(getContext()); + itemTouchHelper.startDrag(viewHolder); + } + return false; + } + }); + + treeRecyclerAdapter.setOnItemDragCompleteListener(new BaseRecyclerAdapter.OnItemDragCompleteListener() { + @Override + public void OnItemDragComplete(int lastFromPosition, int lastToPosition, List treeItems) { + Log.i("onItemLongClick--", "MainFragment4 onItemLongClick()" + +lastFromPosition + "+++" + lastToPosition); + StringBuilder stringBuilder = new StringBuilder(); + String ziId = ""; + if (lastFromPosition < 2 || lastToPosition < 2) { + return; + } + for (int i = lastFromPosition; i <= lastToPosition; i++) { + DeviceEntityV4.DataBean.DevicesBean data = (DeviceEntityV4.DataBean.DevicesBean) treeItems.get(i).getData(); + ziId = data.getZiId(); + String id = data.getId(); + String deviceType = data.getDeviceType(); + stringBuilder.append(id); + stringBuilder.append("_"); + stringBuilder.append(deviceType); + stringBuilder.append("_"); + stringBuilder.append(i - lastFromPosition + 1); + stringBuilder.append(","); + } + + updateSortNum(ziId, stringBuilder); + } + }); + + treeRecyclerAdapter.setOnItemClickListener(new BaseRecyclerAdapter.OnItemClickListener() { + @Override + public void onItemClick(ViewHolder viewHolder, int position, String ziId, int isOwner, String deviceVersion, String deviceName, + String addressId, String devicePosition, String id, String rid, String deviceType + , DeviceEntityV4.DataBean parentBean, DeviceEntityV4.DataBean.DevicesBean childBean) { + Intent intent; + switch (position) { + case 1: + break; + case 2: + if (parentBean.getAddressName().equals("其他") || TextUtils.isEmpty(parentBean.getAddressName())) { + intent = new Intent(getActivity(), DeviceA2FirstPosActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("isShowAll", true); + if (deviceVersion.equals("1")) { + intent.putExtra("tag", "a1"); + } else { + intent.putExtra("tag", "a2"); + } + startActivity(intent); + } else { + intent = new Intent(getActivity(), DeviceDetailActivity.class); + intent.putExtra("isOwner", isOwner); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceVersion", deviceVersion); + intent.putExtra("deviceName", deviceName); + intent.putExtra("devicePosition", devicePosition); + startActivity(intent); + } + break; + case 3: + if ((parentBean.getMinOtaFlag().equals("-1") && parentBean.getOnline().equals("1") && + SharedpreferencesUtil.get(ziId + Constans.SEESSIONID, "").equals("-1")) || + (parentBean.getMinOtaFlag().equals("-1") && parentBean.getOnline().equals("1") && + TextUtils.isEmpty(SharedpreferencesUtil.get(ziId + Constans.SEESSIONID, "")))) { + toUpgradeOta(ziId, deviceVersion, parentBean.getSubVersion()); + } else if (parentBean.getOnline().equals("3") || parentBean.getOnline().equals("5")) { + toUpadateOta(ziId, deviceVersion, parentBean.getSubVersion()); + } else { + SharedpreferencesUtil.save(ziId + Constans.SEESSIONID, "-1"); + switch (deviceVersion) { + case "1": + switch (deviceType) { + case ADD_TYPE: + addZiId = parentBean.getZiId(); + addAddressId = parentBean.getAddressId(); + if (parentBean.getAddressName().equals("其他") || TextUtils.isEmpty(parentBean.getAddressName())) { + intent = new Intent(getActivity(), DeviceA2FirstPosActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("isShowAll", true); + intent.putExtra("tag", "a1"); + startActivity(intent); + } else { + if (DensityUtil.isNetworkConnected(getContext())) { + if (parentBean.getSubVersion().equals("Y")) { + openSmartMic2(parentBean, "Y"); + } else if (parentBean.getSubVersion().equals("D")) { + openSmartMic2(parentBean, "D"); + } else { + openSmartMic1(parentBean, "1"); + } + } else { + ToastUtil.show(getContext(), R.string.net_error); + } + } + break; + default: + intent = new Intent(getContext(), DeviceControlActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("parentBean", parentBean); + intent.putExtras(bundle); + intent.putExtra("ziId", ziId); + intent.putExtra("id", id); + startActivity(intent); + break; + } + break; + case "2": + switch (deviceType) { + case ADD_TYPE: + addZiId = parentBean.getZiId(); + addAddressId = parentBean.getAddressId(); + if (parentBean.getAddressName().equals("其他") || TextUtils.isEmpty(parentBean.getAddressName())) { + intent = new Intent(getActivity(), DeviceA2FirstPosActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("isShowAll", true); + intent.putExtra("tag", "a2"); + startActivity(intent); + } else { + if (DensityUtil.isNetworkConnected(getContext())) { + openSmartMic2(parentBean, "2"); + } else { + ToastUtil.show(getContext(), R.string.net_error); + } + } + break; + default: + intent = new Intent(getContext(), DeviceControlActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("parentBean", parentBean); + intent.putExtras(bundle); + intent.putExtra("ziId", ziId); + intent.putExtra("id", id); + startActivity(intent); + break; + } + break; + case "3": + switch (deviceType) { + case AIR_TAG: + intent = new Intent(getContext(), AirA2Activity.class); + intent.putExtra("airStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("airName", deviceName); + if (1 == 1) { + intent.putExtra("cancelFlag", "0"); + intent.putExtra("rid", rid); + } + startActivity(intent); + break; + case FAN_TAG: + intent = new Intent(getContext(), FanA2Activity.class); + intent.putExtra("fanStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("fanName", deviceName); + intent.putExtra("id", id); + if (1 == 1) { + intent.putExtra("cancelFlag", "0"); + intent.putExtra("rid", rid); + } + startActivity(intent); + break; + case TV_TAG: + intent = new Intent(getContext(), TvA2Activity.class); + intent.putExtra("tvStateTag", "1"); + intent.putExtra("ziId", ziId); + /*if (mStringList.get(position).getAssistFlag() != null && mStringList.get(position).getAssistFlag().equals("1")) { + intent.putExtra("tvName", deviceName); + intent.putExtra("assistFlag", "1"); + } else { + }*/ + intent.putExtra("tvName", deviceName); + intent.putExtra("assistFlag", "0"); + intent.putExtra("id", id); + if (1 == 1) { + intent.putExtra("cancelFlag", "0"); + intent.putExtra("rid", rid); + } + startActivity(intent); + break; + case SWEEP_TAG: + intent = new Intent(getContext(), SweepA2Activity.class); + intent.putExtra("sweepStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("sweepName", deviceName); + intent.putExtra("id", id); + if (1 == 1) { + intent.putExtra("cancelFlag", "0"); + intent.putExtra("rid", rid); + } + startActivity(intent); + break; + case ADD_TYPE: + /*intent = new Intent(getContext(), ZigBeeSearchActivity.class); + startActivity(intent);*/ + addZiId = parentBean.getZiId(); + addAddressId = parentBean.getAddressId(); + if (DensityUtil.isNetworkConnected(getContext())) { + openSmartMic1(parentBean, "3"); + } else { + ToastUtil.show(getContext(), R.string.net_error); + } + break; + default: + intent = new Intent(getContext(), ZigBeeDetailActivity.class); + intent.putExtra("deviceType", deviceType); + intent.putExtra("id", id); + intent.putExtra("deviceInfrared", ""); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", addressId); + intent.putExtra("addressName", devicePosition); + intent.putExtra("devicePosition", devicePosition); + intent.putExtra("deviceName", deviceName); + intent.putExtra("ZigBeeType", ZIGBEE_PLUG); + startActivity(intent); + break; + } + break; + } + break; + } + } + } + }); + } + + private void convertTreeList(DeviceEntityV4 entity) { + //转成需要的列表 + List data = entity.getData(); + DevieFirstBean devieKetingBean = new DevieFirstBean(); + DevieFirstBean devieZhuwoBean = new DevieFirstBean(); + DevieFirstBean devieCiwoBean = new DevieFirstBean(); + DevieFirstBean devieErtongBean = new DevieFirstBean(); + DevieFirstBean devieShufangBean = new DevieFirstBean(); + DevieFirstBean devieChufangBean = new DevieFirstBean(); + DevieFirstBean devieCantingBean = new DevieFirstBean(); + DevieFirstBean devieYangtaiBean = new DevieFirstBean(); + DevieFirstBean devieWeishengBean = new DevieFirstBean(); + DevieFirstBean devieXishouBean = new DevieFirstBean(); + DevieFirstBean devieQitaBean = new DevieFirstBean(); + if (data.size() != 0) { + for (int i = 0; i < data.size(); i++) { + switch (data.get(i).getAddressName().toString()) { + case "客厅": + getPositionBean(data, devieKetingBean, "客厅"); + break; + case "主卧": + getPositionBean(data, devieZhuwoBean, "主卧"); + break; + case "次卧": + getPositionBean(data, devieCiwoBean, "次卧"); + break; + case "儿童房": + getPositionBean(data, devieErtongBean, "儿童房"); + break; + case "书房": + getPositionBean(data, devieShufangBean, "书房"); + break; + case "厨房": + getPositionBean(data, devieChufangBean, "厨房"); + break; + case "餐厅": + getPositionBean(data, devieCantingBean, "餐厅"); + break; + case "阳台": + getPositionBean(data, devieYangtaiBean, "阳台"); + break; + case "卫生间": + getPositionBean(data, devieWeishengBean, "卫生间"); + break; + case "洗手间": + getPositionBean(data, devieXishouBean, "洗手间"); + break; + default: + getPositionBean(data, devieQitaBean, "其他"); + break; + } + } + addPositionBean(devieQitaBean); + addPositionBean(devieKetingBean); + addPositionBean(devieZhuwoBean); + addPositionBean(devieCiwoBean); + addPositionBean(devieErtongBean); + addPositionBean(devieShufangBean); + addPositionBean(devieChufangBean); + addPositionBean(devieCantingBean); + addPositionBean(devieYangtaiBean); + addPositionBean(devieXishouBean); + addPositionBean(devieWeishengBean); + } + if (mDevieFirstBeans.size() == 0 && mChannelInfoList.size() == 0) { + rl_add_device.setVisibility(View.VISIBLE); + } else + rl_add_device.setVisibility(View.GONE); + } + + private void updateModelBasic(int model) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + map.put("modelType", String.valueOf(model)); + map.put("flag", "1"); + netWorkUtil.requestPostByAsynewApi(UPDATE_MODEL_BASIC, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelBasic", "ShareDeviceActivity onSuccess()" + respone); + ModelOpenEntity obj = JSON.parseObject(respone, ModelOpenEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void avtiveModel(final int nowPosition, final int model2) { + if (DensityUtil.isNetworkConnected(getActivity())) { + NettyHandlerUtil.getInstance(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", adInfoList.get(nowPosition).getShareNumber().toString()); + map.put("modelType", model2 + ""); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + netWorkUtil.requestPostByAsynewApi(AVTIVE_MODEL_NEW, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("avtiveModel", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (nowPosition == 0) { + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (8001 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_TO_SET); + msg.obj = model2; + mHandler.sendMessage(msg); + } else if (8002 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_TO_OPEN); + msg.obj = model2; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_FAIL); + msg.obj = obj.getMsg(); + msg.arg1 = nowPosition; + mHandler.sendMessage(msg); + } + } else { + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_FAIL); + msg.obj = obj.getMsg(); + // msg.obj = model2; + msg.arg1 = nowPosition; + mHandler.sendMessage(msg); + } + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } else { + ToastUtil.show(getActivity(), R.string.net_error); + } + } + + private void setIshaveDevice(Intent intent) { + /*boolean haveDevice = isHaveDevice(); + if (haveDevice) { + intent.putExtra("isHaveDevice", "1"); + } else { + intent.putExtra("isHaveDevice", "0"); + }*/ + intent.putExtra("isHaveDevice", "1"); + intent.putExtra("repeatTime", ""); + intent.putExtra("setTime", ""); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + } + + public int isHaveDevice() { + int isHaveDevice = 0; + if (mAllObjEntity != null && mAllObjEntity.size() != 0) { + isHaveDevice = 1; + for (int i = 0; i < mAllObjEntity.size(); i++) { + if (mAllObjEntity.get(i).getConnectFlag().equals("1")) { + isHaveDevice = 2; + } + } + return isHaveDevice; + } else { + return isHaveDevice; + } + } + + private void checkModelStatus(final int position, final int modelType) { + if (DensityUtil.isNetworkConnected(getActivity())) { + NettyHandlerUtil.getInstance(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", adInfoList.get(position - 1).getShareNumber().toString()); + map.put("modelType", modelType + ""); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + netWorkUtil.requestPostByAsynewApi(CHECK_MODEL_STATUS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("checkModelStatus", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + // if (nowChoosePosition == 0) { + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CHECK_MODEL_STATUS_SUCCESS); + msg.obj = modelType; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + NettyHandlerUtil.getInstance(); + Message msg = mHandler.obtainMessage(CHECK_MODEL_STATUS_SET); + msg.obj = modelType; + msg.arg1 = position; + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_FAIL); + msg.obj = message; + msg.arg1 = position; + mHandler.sendMessage(msg); + } + }); + } else { + ToastUtil.show(getActivity(), R.string.net_error); + } + } + + private void toUpadateOta(final String ziId, final String deviceVersion, final String subVersion) { + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + //跳转到OTA界面 + Intent intent = new Intent(getActivity(), SolidVersionActivity.class); + intent.putExtra("deviceVersion", deviceVersion); + intent.putExtra("nowVersion", "main"); + intent.putExtra("ziId", ziId); + intent.putExtra("isNewOtaFlag", "1"); + intent.putExtra("subVersion", subVersion); + startActivity(intent); + break; + } + } + }); + dialog.setContent("尊敬的用户,由于您在升级固件时中断或失败将不支持继续使用了,请重新升级版本。"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn("重新升级"); + dialog.setCancelable(false); + dialog.show(); + } + + private void toUpgradeOta(final String ziId, final String deviceVersion, final String subVersion) { + ForceUpdateDialog dialog = new ForceUpdateDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: //cancle + SharedpreferencesUtil.save(ziId + Constans.SEESSIONID, "0"); + break; + case 1: //sure + //跳转到OTA界面 + // SharedpreferencesUtil.save(ziId + Constans.SEESSIONID, "-1"); + Intent intent = new Intent(getActivity(), SolidVersionActivity.class); + intent.putExtra("deviceVersion", deviceVersion); + intent.putExtra("nowVersion", "main"); + intent.putExtra("ziId", ziId); + intent.putExtra("isNewOtaFlag", "1"); + intent.putExtra("subVersion", subVersion); + startActivity(intent); + break; + } + } + }); + dialog.setCancelable(false); + if (!dialog.isShowing()) { + dialog.show(); + } + } + + private List convetAdList(List objEntity) { + List newList = new ArrayList<>(); + adInfoList.clear(); + int safeNum = 0; + boolean isShowSafeControl = false; + String safeDetailList = ""; + if (objEntity != null && objEntity.size() != 0) { + for (int i = 0; i < objEntity.size(); i++) { + int safeNum1 = objEntity.get(i).getSafeNum(); + safeNum += safeNum1; + if (null != objEntity.get(i).getChildren() && objEntity.get(i).getChildren().size() > 0) { + for (int j = 0; j < objEntity.get(i).getChildren().size(); j++) { + if (objEntity.get(i).getChildren().get(j).getDeviceType().equals(DOOR_LOCK_TAG) || + objEntity.get(i).getChildren().get(j).getDeviceType().equals(INFRARED_TAG)) { + if (!objEntity.get(i).getChildren().get(j).isModeTriggerBound()) { + isShowSafeControl = true; + } + } + } + } + } + } else { + + } + if (safeNum != 0 && isShowSafeControl) { + safeDeviceDetailRl.setVisibility(View.VISIBLE); + } else { + safeDeviceDetailRl.setVisibility(View.GONE); + } + fragmentList.clear(); + weatherFragment = new WeatherFragment(safeNum); + fragmentList.add(weatherFragment); + mAdAdapter = new MainActivityAdapter(manager, fragmentList); + mViewPager.setScanScroll(true); + mViewPager.setAdapter(mAdAdapter); + mViewPager.setOffscreenPageLimit(fragmentList.size()); + mAdAdapter.notifyDataSetChanged(); + return adInfoList; + } + + private void openSmartMic1(DeviceEntityV4.DataBean parentBean, String type) { + Intent intent = new Intent(getActivity(), HotelAddDeviceListActivity.class); + intent.putExtra("ziId", parentBean.getZiId()); + intent.putExtra("subVersion", type); + intent.putExtra("deviceVersion", "1"); + startActivity(intent); + SharedpreferencesUtil.save(ISADDBAOSHI, false); + /*mSmartMic1 = new SmartMic1(layout1, type); + mViewPagerDelegate = new ViewPagerDelegate(); + if (type.equals("1")) { + mSmartMic1.setDelegate(mViewPagerDelegate).setMenuList(parentBean, handler1).show(); + } else { + mSmartMic1.setDelegate(mViewPagerDelegate).setMenuList(parentBean, handler3).show(); + }*/ + } + + private void openSmartMic2(DeviceEntityV4.DataBean parentBean, String type) { + if (isVirtual) { + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + showModifyPop(); + break; + } + } + }); + dialog.setContent("您现在属于虚拟家庭,请重新创建家庭后,再添加智能网关。虚拟家庭也会删除,是否创建家庭?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn("创建家庭"); + dialog.setCancelable(false); + dialog.show(); + } else { + SharedpreferencesUtil.save(ISADDBAOSHI, false); + if (type.equals("2") || type.equals("D")) { + // mSmartMic2.setDelegate(mViewPagerDelegate2).setMenuList(parentBean, handler2).show(); + if (type.equals("D")) { + SharedpreferencesUtil.save(ISADDBAOSHI, true); + } + } else { + // mSmartMic2.setDelegate(mViewPagerDelegate2).setMenuList(parentBean, handler3).show(); + } + Intent intent = new Intent(getActivity(), HotelAddDeviceListActivity.class); + intent.putExtra("ziId", parentBean.getZiId()); + intent.putExtra("subVersion", type); + intent.putExtra("deviceVersion", "2"); + startActivity(intent); + } + } + + private void getPositionBean(List data, DevieFirstBean devieKetingBean, String position) { + if (TextUtils.isEmpty(devieKetingBean.getAddressName().toString())) { + devieKetingBean.setAddressName(position); + List date2 = new ArrayList<>(data); + for (int a = date2.size() - 1; a >= 0; a--) { + if (!date2.get(a).getAddressName().toString().equals(position)) { + date2.remove(a); + } + } + devieKetingBean.setCitys(date2); + } + } + + private void addPositionBean(DevieFirstBean deviceBean) { + if (!TextUtils.isEmpty(deviceBean.getAddressName())) { + mDevieFirstBeans.add(deviceBean); + } + } + + //获取Z1列表 + private void getZ1Info() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (deviceNumListPosition > homeListEntity.getData().size() - 1) { + deviceNumListPosition = 0; + } + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + util.requestGetByAsy(NetWorkUrl.SEARCH_DEVICE_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getZ1Info", respone); + SharedpreferencesUtil.saveStringData(getActivity(), "mObjEntity", respone); + DeviceEntityV4 entity = JSON.parseObject(respone, DeviceEntityV4.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GETZIINFO_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GETZIINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GETZIINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_big_add: + if (AppIdUtil.isBaseZhiKong()) { + Intent intent = new Intent(getActivity(), AsxAddDeviceListActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + getActivity().startActivity(intent); + } else { + startAddDevice(); + } + break; + case R.id.iv_float_voice: + /*Intent intent = new Intent(getActivity(), UnitActivity.class); + startActivity(intent);*/ + break; + case R.id.stv_safe_switch: + oneKeySwitch(safeSwitch.isOpened()); + break; + } + } + + private void startAddDevice() { + if (isVirtual) { + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + showModifyPop(); + break; + } + } + }); + dialog.setContent("您现在属于虚拟家庭,请重新创建家庭后,再添加智能网关。虚拟家庭也会删除,是否创建家庭?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn("创建家庭"); + dialog.setCancelable(false); + dialog.show(); + } else { + Intent intent = new Intent(getActivity(), GatewagAddListActivity.class); + /*intent.putExtra("houseTypeName", "房间选择"); + intent.putExtra("deviceType", "000"); + intent.putExtra("deviceModel", "0");*/ + intent.putExtra("floorList", ""); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + startActivity(intent); + } + /*WifiManager wifimanager; + wifimanager = (WifiManager) getActivity().getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(getActivity(), ConnectWifiActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "MainFragment4"); + startActivity(intent); + } else { + Intent intent = new Intent(getActivity(), NoWifiConnectActicity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "MainFragment4"); + startActivity(intent); + }*/ + } + + public void showModifyPop() { + RenameNameDialog dialog = new RenameNameDialog(getContext(), new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + ToastUtil.show(getContext(), "房间名不能为空"); + return; + } + // createOrUpdateHouse(positioName); + addHouse(positioName); + break; + } + } + }); + dialog.setMaxEms(12); + dialog.setHintName(""); + dialog.setContent(R.string.Enter_home_name); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.Establish); + dialog.setCancelable(false); + dialog.show(); + } + + private void addHouse(String name) { + HomeDetailEntity.DataBean homeDetailEntity = new HomeDetailEntity.DataBean(); + homeDetailEntity.setName(name); + homeDetailEntity.setHouseCategory(1); + /* homeDetailEntity.setId(getIntent().getExtras().get("id").toString()); + homeDetailEntity.setHouseTypeCode(getIntent().getExtras().get("houseTypeCode").toString()); + homeDetailEntity.setFloorList(getIntent().getExtras().get("floorList").toString()); + homeDetailEntity.setPlace(place); + homeDetailEntity.setLon(longitude); + homeDetailEntity.setLat(latitude);*/ + String body = JSONObject.toJSONString(homeDetailEntity); + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestPostByAsyBody(NetWorkUrl.HOUSE_ADDHOUSE, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addHouse", "ShareDeviceActivity onSuccess()" + respone); + HomeDetailEntity obj = JSON.parseObject(respone, HomeDetailEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void oneKeySwitch(final boolean openFlag) { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("openFlag", String.valueOf(openFlag)); + netWorkUtil.requestPostByAsynew(NetWorkUrl.ONE_KEY_SWITCH, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("oneKeySwitch", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ONE_KEY_SWITCH_SUCCESS); + msg.obj = openFlag; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ONE_KEY_SWITCH_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ONE_KEY_SWITCH_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void showPositionBottom(final String deviveType) { + View rootview = LayoutInflater.from(getActivity()).inflate(R.layout.activity_child_device_a2, null); + PositionPopupWindow popupWindow = new PositionPopupWindow(getActivity(), addAddressId, new PositionPopupWindow.OnCompleteListener() { + @Override + public void onComplete(String time, List conditionList) { + Log.i("showPositionBottom", "SwitcherActivity onComplete()" + time + conditionList.toString()); + Intent intent; + switch (deviveType) { + case CURTAINS_TAG: + intent = new Intent(getActivity(), CurtainsStepOneActivity.class); + intent.putExtra("isFirst", "1"); + if (time.equals("13")) { + intent.putExtra("addressId", "0"); + } else { + intent.putExtra("addressId", String.valueOf(Integer.valueOf(time) + 1)); + } + intent.putExtra("ziId", addZiId); + intent.putExtra("deviceAddress", addAddressId); + startActivity(intent); + break; + case LIGHT_TAG: + + break; + case SWITCH_TAG: + intent = new Intent(getActivity(), SwitcherStepOneActivity.class); + intent.putExtra("isFirst", "1"); + if (time.equals("13")) { + intent.putExtra("addressId", "0"); + } else { + intent.putExtra("addressId", String.valueOf(Integer.valueOf(time) + 1)); + } + intent.putExtra("deviceAddress", addAddressId); + intent.putExtra("ziId", addZiId); + startActivity(intent); + break; + } + + } + }); + popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); + } + + public void queryHouses() { + HashMap map = new HashMap<>(); + map.put("autoCreate", "1"); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.QUERY_HOUSES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryHouses1", "UpdatePwActivity onSuccess()" + respone); + HomeListEntity obj = JSON.parseObject(respone, HomeListEntity.class); + if (-401 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USER_SESSION_NULL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private synchronized void loadChannelList(final LcListEntity lcListEntity) { + mChannelInfoList.clear(); + // 初始化数据 + Business.getInstance().getChannelList(new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + Business.RetObject retObject = (Business.RetObject) msg.obj; + if (msg.what == 0) { + List resp = (List) retObject.resp; + Log.i("findDevices", "MainFragment4 handleMessage()" + resp.size()); + for (int i = 0; i < resp.size(); i++) { + String name = resp.get(i).getDeviceCode(); + Log.i("findDevices", "MainFragment4 handleMessage()" + name); + for (int j = 0; j < lcListEntity.getData().size(); j++) { + if (name.contains(lcListEntity.getData().get(j).getDeviceId())) { + // resp.get(i).setDeviceName(lcListEntity.getData().get(j).getDeviceName()); + resp.get(i).setDeviceName(AddressNameUtil.getAddressName(lcListEntity.getData().get(j).getAddressId()) + "的" + lcListEntity.getData().get(j).getDeviceName()); + mChannelInfoList.add(resp.get(i)); + } + } + } + // mChannelInfoList.addAll((List) retObject.resp); + // mChannelInfoList = (List) retObject.resp; + if (mChannelInfoList != null && mChannelInfoList.size() > 0) { + rl_add_device.setVisibility(View.GONE); + ll_lecheng.setVisibility(View.VISIBLE); + horizontalRecyclerView.setVisibility(View.VISIBLE); + mHorizontalAdapter.notifyDataSetChanged(); + channelName.setText(mChannelInfoList.get(0).getDeviceName()); + // addDevices(); + } else { + ll_lecheng.setVisibility(View.GONE); + if (mDevieFirstBeans.size() == 0) { + rl_add_device.setVisibility(View.VISIBLE); + } + // Toast.makeText(getContext(), R.string.toast_device_no_devices, Toast.LENGTH_LONG).show(); + } + } else { + Toast.makeText(getContext(), retObject.mMsg, Toast.LENGTH_LONG).show(); + } + } + }); + + /*//国内支持共享设备和授权设备 + if (!Business.getInstance().isOversea) { + Business.getInstance().getSharedDeviceList(new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + Business.RetObject retObject = (Business.RetObject) msg.obj; + if (msg.what == 0 && retObject.resp != null) { + mChannelInfoList.addAll((List) retObject.resp); + // mChannelInfoList = (List) retObject.resp; + if (mChannelInfoList != null && mChannelInfoList.size() > 0) { + mHorizontalAdapter.notifyDataSetChanged(); + } else { + Toast.makeText(getContext(), R.string.devices_no_shared_device, Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(getContext(), retObject.mMsg, Toast.LENGTH_SHORT).show(); + } + } + }); + System.out.println("devices"); + Business.getInstance().getBeAuthDeviceList(new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + Business.RetObject retObject = (Business.RetObject) msg.obj; + if (msg.what == 0 && retObject.resp != null) { + mChannelInfoList.addAll((List) retObject.resp); + // mChannelInfoList = (List) retObject.resp; + if (mChannelInfoList != null && mChannelInfoList.size() > 0) { + mHorizontalAdapter.notifyDataSetChanged(); + rl_add_device.setVisibility(View.GONE); + } else { + Toast.makeText(getContext(), R.string.devices_no_authorized_device, Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(getContext(), retObject.mMsg, Toast.LENGTH_SHORT).show(); + } + } + }); + }*/ + } + + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(getActivity()); + mLoadingDialog.setMessage("执行中.."); + mLoadingDialog.show(); + } + + //handler + static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(MainFragment4 activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + MainFragment4 activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/main4/view/SmoothListView/SmoothListView.java b/app/src/main/java/com/yonsz/z1/fragment/main4/view/SmoothListView/SmoothListView.java new file mode 100644 index 0000000..a7e904e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/main4/view/SmoothListView/SmoothListView.java @@ -0,0 +1,361 @@ +package com.yonsz.z1.fragment.main4.view.SmoothListView; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewTreeObserver.OnGlobalLayoutListener; +import android.view.animation.DecelerateInterpolator; +import android.widget.AbsListView; +import android.widget.AbsListView.OnScrollListener; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.Scroller; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.listener.NoDoubleClickListener; + +public class SmoothListView extends ListView implements OnScrollListener { + + private final static int SCROLLBACK_HEADER = 0; + private final static int SCROLLBACK_FOOTER = 1; + private final static int SCROLL_DURATION = 400; // scroll back duration + private final static int PULL_LOAD_MORE_DELTA = 50; // when pull up >= 50px + // at bottom, trigger + // load more. + private final static float OFFSET_RADIO = 1.8f; // support iOS like pull + private float mLastY = -1; // save event y + private Scroller mScroller; // used for scroll back + private OnScrollListener mScrollListener; // user's scroll listener + // the interface to trigger refresh and load more. + private ISmoothListViewListener mListViewListener; + // -- header view + private SmoothListViewHeader mHeaderView; + // header view content, use it to calculate the Header's height. And hide it + // when disable pull refresh. + private RelativeLayout mHeaderViewContent; + private TextView mHeaderTimeView; + private int mHeaderViewHeight; // header view's height + private boolean mEnablePullRefresh = true; + private boolean mPullRefreshing = false; // is refreashing. + // -- footer view + private SmoothListViewFooter mFooterView; + private boolean mEnablePullLoad; + private boolean mPullLoading; + private boolean mIsFooterReady = false; + // total list items, used to detect is at the bottom of listview. + private int mTotalItemCount; + // for mScroller, scroll back from header or footer. + private int mScrollBack; + // feature. + + /** + * @param context + */ + public SmoothListView(Context context) { + super(context); + initWithContext(context); + } + + public SmoothListView(Context context, AttributeSet attrs) { + super(context, attrs); + initWithContext(context); + } + + public SmoothListView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initWithContext(context); + } + + private void initWithContext(Context context) { + mScroller = new Scroller(context, new DecelerateInterpolator()); + // XListView need the scroll event, and it will dispatch the event to + // user's listener (as a proxy). + super.setOnScrollListener(this); + + // init header view + mHeaderView = new SmoothListViewHeader(context); + mHeaderViewContent = (RelativeLayout) mHeaderView.findViewById(R.id.smoothlistview_header_content); + mHeaderTimeView = (TextView) mHeaderView.findViewById(R.id.smoothlistview_header_time); + addHeaderView(mHeaderView); + + // init footer view + mFooterView = new SmoothListViewFooter(context); + + // init header height + mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener( + new OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + mHeaderViewHeight = mHeaderViewContent.getHeight(); + getViewTreeObserver().removeGlobalOnLayoutListener(this); + } + }); + } + + @Override + public void setAdapter(ListAdapter adapter) { + // make sure XListViewFooter is the last footer view, and only add once. + if (mIsFooterReady == false) { + mIsFooterReady = true; + addFooterView(mFooterView); + } + super.setAdapter(adapter); + } + + /** + * enable or disable pull down refresh feature. + * + * @param enable + */ + public void setRefreshEnable(boolean enable) { + mEnablePullRefresh = enable; + if (!mEnablePullRefresh) { // disable, hide the content + mHeaderViewContent.setVisibility(View.INVISIBLE); + } else { + mHeaderViewContent.setVisibility(View.VISIBLE); + } + } + + /** + * enable or disable pull up load more feature. + * + * @param enable + */ + public void setLoadMoreEnable(boolean enable) { + mEnablePullLoad = enable; + if (!mEnablePullLoad) { + mFooterView.hide(); + mFooterView.setOnClickListener(null); + //make sure "pull up" don't show a line in bottom when listview with one page + setFooterDividersEnabled(false); + } else { + mPullLoading = false; + mFooterView.show(); + mFooterView.setState(SmoothListViewFooter.STATE_NORMAL); + //make sure "pull up" don't show a line in bottom when listview with one page + setFooterDividersEnabled(true); + // both "pull up" and "click" will invoke load more. + mFooterView.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + startLoadMore(); + } + }); + } + } + + /** + * stop refresh, reset header view. + */ + public void stopRefresh() { + if (mPullRefreshing == true) { + mPullRefreshing = false; + resetHeaderHeight(); + } + } + + /** + * stop load more, reset footer view. + */ + public void stopLoadMore() { + if (mPullLoading == true) { + mPullLoading = false; + mFooterView.setState(SmoothListViewFooter.STATE_NORMAL); + } + } + + /** + * set last refresh time + * + * @param time + */ + public void setRefreshTime(String time) { + mHeaderTimeView.setText(time); + } + + private void invokeOnScrolling() { + if (mScrollListener instanceof OnSmoothScrollListener) { + OnSmoothScrollListener l = (OnSmoothScrollListener) mScrollListener; + l.onSmoothScrolling(this); + } + } + + private void updateHeaderHeight(float delta) { + mHeaderView.setVisiableHeight((int) delta + + mHeaderView.getVisiableHeight()); + if (mEnablePullRefresh && !mPullRefreshing) { // 未处于刷新状态,更新箭头 + if (mHeaderView.getVisiableHeight() > mHeaderViewHeight) { + mHeaderView.setState(SmoothListViewHeader.STATE_READY); + } else { + mHeaderView.setState(SmoothListViewHeader.STATE_NORMAL); + } + } + setSelection(0); // scroll to top each time + } + + /** + * reset header view's height. + */ + private void resetHeaderHeight() { + int height = mHeaderView.getVisiableHeight(); + if (height == 0) // not visible. + return; + // refreshing and header isn't shown fully. do nothing. + if (mPullRefreshing && height <= mHeaderViewHeight) { + return; + } + int finalHeight = 0; // default: scroll back to dismiss header. + // is refreshing, just scroll back to show all the header. + if (mPullRefreshing && height > mHeaderViewHeight) { + finalHeight = mHeaderViewHeight; + } + mScrollBack = SCROLLBACK_HEADER; + mScroller.startScroll(0, height, 0, finalHeight - height, + SCROLL_DURATION); + // trigger computeScroll + invalidate(); + } + + private void updateFooterHeight(float delta) { + int height = mFooterView.getBottomMargin() + (int) delta; + if (mEnablePullLoad && !mPullLoading) { + if (height > PULL_LOAD_MORE_DELTA) { // height enough to invoke load + // more. + mFooterView.setState(SmoothListViewFooter.STATE_READY); + } else { + mFooterView.setState(SmoothListViewFooter.STATE_NORMAL); + } + } + mFooterView.setBottomMargin(height); + + // setSelection(mTotalItemCount - 1); // scroll to bottom + } + + private void resetFooterHeight() { + int bottomMargin = mFooterView.getBottomMargin(); + if (bottomMargin > 0) { + mScrollBack = SCROLLBACK_FOOTER; + mScroller.startScroll(0, bottomMargin, 0, -bottomMargin, SCROLL_DURATION); + invalidate(); + } + } + + private void startLoadMore() { + mPullLoading = true; + mFooterView.setState(SmoothListViewFooter.STATE_LOADING); + if (mListViewListener != null) { + mListViewListener.onLoadMore(); + } + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (mLastY == -1) { + mLastY = ev.getRawY(); + } + + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + mLastY = ev.getRawY(); + break; + case MotionEvent.ACTION_MOVE: + final float deltaY = ev.getRawY() - mLastY; + mLastY = ev.getRawY(); + if (getFirstVisiblePosition() == 0 + && (mHeaderView.getVisiableHeight() > 0 || deltaY > 0)) { + // the first item is showing, header has shown or pull down. + updateHeaderHeight(deltaY / OFFSET_RADIO); + invokeOnScrolling(); + } else if (getLastVisiblePosition() == mTotalItemCount - 1 + && (mFooterView.getBottomMargin() > 0 || deltaY < 0)) { + // last item, already pulled up or want to pull up. + updateFooterHeight(-deltaY / OFFSET_RADIO); + } + break; + default: + mLastY = -1; // reset + if (getFirstVisiblePosition() == 0) { + // invoke refresh + if (mEnablePullRefresh + && mHeaderView.getVisiableHeight() > mHeaderViewHeight) { + mPullRefreshing = true; + mHeaderView.setState(SmoothListViewHeader.STATE_REFRESHING); + if (mListViewListener != null) { + mListViewListener.onRefresh(); + } + } + resetHeaderHeight(); + } else if (getLastVisiblePosition() == mTotalItemCount - 1) { + // invoke load more. + if (mEnablePullLoad + && mFooterView.getBottomMargin() > PULL_LOAD_MORE_DELTA + && !mPullLoading) { + startLoadMore(); + } + resetFooterHeight(); + } + break; + } + return super.onTouchEvent(ev); + } + + @Override + public void computeScroll() { + if (mScroller.computeScrollOffset()) { + if (mScrollBack == SCROLLBACK_HEADER) { + mHeaderView.setVisiableHeight(mScroller.getCurrY()); + } else { + mFooterView.setBottomMargin(mScroller.getCurrY()); + } + postInvalidate(); + invokeOnScrolling(); + } + super.computeScroll(); + } + + @Override + public void setOnScrollListener(OnScrollListener l) { + mScrollListener = l; + } + + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + if (mScrollListener != null) { + mScrollListener.onScrollStateChanged(view, scrollState); + } + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { + // send to user's listener + mTotalItemCount = totalItemCount; + if (mScrollListener != null) { + mScrollListener.onScroll(view, firstVisibleItem, visibleItemCount, + totalItemCount); + } + } + + public void setSmoothListViewListener(ISmoothListViewListener l) { + mListViewListener = l; + } + + /** + * you can listen ListView.OnScrollListener or this one. it will invoke + * onSmoothScrolling when header/footer scroll back. + */ + public interface OnSmoothScrollListener extends OnScrollListener { + void onSmoothScrolling(View view); + } + + /** + * implements this interface to get refresh/load more event. + */ + public interface ISmoothListViewListener { + void onRefresh(); + + void onLoadMore(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/main4/view/SmoothListView/SmoothListViewFooter.java b/app/src/main/java/com/yonsz/z1/fragment/main4/view/SmoothListView/SmoothListViewFooter.java new file mode 100644 index 0000000..303fb9d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/main4/view/SmoothListView/SmoothListViewFooter.java @@ -0,0 +1,108 @@ +package com.yonsz.z1.fragment.main4.view.SmoothListView; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +public class SmoothListViewFooter extends LinearLayout { + public final static int STATE_NORMAL = 0; + public final static int STATE_READY = 1; + public final static int STATE_LOADING = 2; + + private Context mContext; + + private View mContentView; + private View mProgressBar; + private TextView mHintView; + + public SmoothListViewFooter(Context context) { + super(context); + initView(context); + } + + public SmoothListViewFooter(Context context, AttributeSet attrs) { + super(context, attrs); + initView(context); + } + + + public void setState(int state) { + mHintView.setVisibility(View.INVISIBLE); + mProgressBar.setVisibility(View.INVISIBLE); + mHintView.setVisibility(View.INVISIBLE); + if (state == STATE_READY) { + mHintView.setVisibility(View.VISIBLE); + mHintView.setText(R.string.smoothlistview_footer_hint_ready); + } else if (state == STATE_LOADING) { + mProgressBar.setVisibility(View.VISIBLE); + } else { + mHintView.setVisibility(View.VISIBLE); + mHintView.setText(R.string.smoothlistview_footer_hint_normal); + } + } + + public void setBottomMargin(int height) { + if (height < 0) return ; + LayoutParams lp = (LayoutParams)mContentView.getLayoutParams(); + lp.bottomMargin = height; + mContentView.setLayoutParams(lp); + } + + public int getBottomMargin() { + LayoutParams lp = (LayoutParams)mContentView.getLayoutParams(); + return lp.bottomMargin; + } + + + /** + * normal status + */ + public void normal() { + mHintView.setVisibility(View.VISIBLE); + mProgressBar.setVisibility(View.GONE); + } + + + /** + * loading status + */ + public void loading() { + mHintView.setVisibility(View.GONE); + mProgressBar.setVisibility(View.VISIBLE); + } + + /** + * hide footer when disable pull load more + */ + public void hide() { + LayoutParams lp = (LayoutParams)mContentView.getLayoutParams(); + lp.height = 0; + mContentView.setLayoutParams(lp); + } + + /** + * show footer + */ + public void show() { + LayoutParams lp = (LayoutParams)mContentView.getLayoutParams(); + lp.height = LayoutParams.WRAP_CONTENT; + mContentView.setLayoutParams(lp); + } + + private void initView(Context context) { + mContext = context; + LinearLayout moreView = (LinearLayout) LayoutInflater.from(mContext).inflate(R.layout.smoothlistview_footer, null); + addView(moreView); + moreView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); + + mContentView = moreView.findViewById(R.id.smoothlistview_footer_content); + mProgressBar = moreView.findViewById(R.id.smoothlistview_footer_progressbar); + mHintView = (TextView)moreView.findViewById(R.id.smoothlistview_footer_hint_textview); + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/main4/view/SmoothListView/SmoothListViewHeader.java b/app/src/main/java/com/yonsz/z1/fragment/main4/view/SmoothListView/SmoothListViewHeader.java new file mode 100644 index 0000000..8e2c663 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/main4/view/SmoothListView/SmoothListViewHeader.java @@ -0,0 +1,119 @@ +package com.yonsz.z1.fragment.main4.view.SmoothListView; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.yonsz.z1.R; + +public class SmoothListViewHeader extends LinearLayout { + private LinearLayout mContainer; + private ImageView mArrowImageView; + private ProgressBar mProgressBar; + private TextView mHintTextView; + private int mState = STATE_NORMAL; + + private Animation mRotateUpAnim; + private Animation mRotateDownAnim; + + private final int ROTATE_ANIM_DURATION = 180; + + public final static int STATE_NORMAL = 0; + public final static int STATE_READY = 1; + public final static int STATE_REFRESHING = 2; + + public SmoothListViewHeader(Context context) { + super(context); + initView(context); + } + + public SmoothListViewHeader(Context context, AttributeSet attrs) { + super(context, attrs); + initView(context); + } + + private void initView(Context context) { + // 初始情况,设置下拉刷新view高度为0 + LayoutParams lp = new LayoutParams( + LayoutParams.FILL_PARENT, 0); + mContainer = (LinearLayout) LayoutInflater.from(context).inflate( + R.layout.smoothlistview_header, null); + addView(mContainer, lp); + setGravity(Gravity.BOTTOM); + + mArrowImageView = (ImageView)findViewById(R.id.smoothlistview_header_arrow); + mHintTextView = (TextView)findViewById(R.id.smoothlistview_header_hint_textview); + mProgressBar = (ProgressBar)findViewById(R.id.smoothlistview_header_progressbar); + + mRotateUpAnim = new RotateAnimation(0.0f, -180.0f, + Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, + 0.5f); + mRotateUpAnim.setDuration(ROTATE_ANIM_DURATION); + mRotateUpAnim.setFillAfter(true); + mRotateDownAnim = new RotateAnimation(-180.0f, 0.0f, + Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, + 0.5f); + mRotateDownAnim.setDuration(ROTATE_ANIM_DURATION); + mRotateDownAnim.setFillAfter(true); + } + + public void setState(int state) { + if (state == mState) return ; + + if (state == STATE_REFRESHING) { // 显示进度 + mArrowImageView.clearAnimation(); + mArrowImageView.setVisibility(View.INVISIBLE); + mProgressBar.setVisibility(View.VISIBLE); + } else { // 显示箭头图片 + mArrowImageView.setVisibility(View.VISIBLE); + mProgressBar.setVisibility(View.INVISIBLE); + } + + switch(state){ + case STATE_NORMAL: + if (mState == STATE_READY) { + mArrowImageView.startAnimation(mRotateDownAnim); + } + if (mState == STATE_REFRESHING) { + mArrowImageView.clearAnimation(); + } + mHintTextView.setText(R.string.smoothlistview_header_hint_normal); + break; + case STATE_READY: + if (mState != STATE_READY) { + mArrowImageView.clearAnimation(); + mArrowImageView.startAnimation(mRotateUpAnim); + mHintTextView.setText(R.string.smoothlistview_header_hint_ready); + } + break; + case STATE_REFRESHING: + mHintTextView.setText(R.string.smoothlistview_header_hint_loading); + break; + default: + } + + mState = state; + } + + public void setVisiableHeight(int height) { + if (height < 0) + height = 0; + LayoutParams lp = (LayoutParams) mContainer + .getLayoutParams(); + lp.height = height; + mContainer.setLayoutParams(lp); + } + + public int getVisiableHeight() { + return mContainer.getHeight(); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/message/CustomLinearLayout.java b/app/src/main/java/com/yonsz/z1/fragment/message/CustomLinearLayout.java new file mode 100644 index 0000000..5757269 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/message/CustomLinearLayout.java @@ -0,0 +1,100 @@ +package com.yonsz.z1.fragment.message; + +import android.content.Context; +import android.support.annotation.Nullable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; +import android.widget.LinearLayout; + +/** + * Created by xiesuichao on 2018/8/24. + */ + +public class CustomLinearLayout extends LinearLayout implements View.OnTouchListener { + + private CustomLinearLayout thisView; + private GestureDetector gestureDetector; + private OnTopListener mTopListener; + private int parentScrollY = 0; + + public CustomLinearLayout(Context context) { + super(context); + init(); + } + + public CustomLinearLayout(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(); + } + + public CustomLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + public interface OnTopListener{ + void isTop(boolean state); + } + + public void setOnTopListener(OnTopListener topListener){ + this.mTopListener = topListener; + } + + public void setCustomScrollView(CustomScrollView scrollView){ + scrollView.setOnScrollYChangeListener(new CustomScrollView.OnScrollYChangeListener() { + @Override + public void scrollYChange(int scrollY) { + parentScrollY = scrollY; + } + }); + } + + private void init() { + thisView = this; + super.setOnTouchListener(this); + super.setClickable(true); + super.setLongClickable(true); + super.setFocusable(true); + gestureDetector = new GestureDetector(getContext(), new CustomGestureListener()); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (parentScrollY == 0){ + return gestureDetector.onTouchEvent(event); + }else { + return false; + } + } + + private class CustomGestureListener extends GestureDetector.SimpleOnGestureListener { + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + thisView.scrollBy(0, (int) distanceY); + Log.i("getScrollY", "CustomGestureListener onScroll()"+getScrollY()); + if (getScrollY() >= 0){ + thisView.setScrollY(0); + mTopListener.isTop(true); + }else { + mTopListener.isTop(false); + } + if(getScrollY() >= 1500) { + + } + return true; + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + + return true; + } + } + + + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/message/CustomScrollView.java b/app/src/main/java/com/yonsz/z1/fragment/message/CustomScrollView.java new file mode 100644 index 0000000..f166860 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/message/CustomScrollView.java @@ -0,0 +1,83 @@ +package com.yonsz.z1.fragment.message; + +import android.content.Context; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.ScrollView; + +/** + * Created by xiesuichao on 2018/8/24. + */ + +public class CustomScrollView extends ScrollView { + + private boolean isChildTop = true; + private float mInterceptDownY = 0; + private int mScrollY = -1; + private OnScrollYChangeListener mScrollYListener; + + public CustomScrollView(Context context) { + super(context); + } + + public CustomScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public void setOnScrollYChangeListener(OnScrollYChangeListener scrollYListener) { + this.mScrollYListener = scrollYListener; + } + + public void setCustomLinearLayout(CustomLinearLayout customLinearLayout) { + customLinearLayout.setOnTopListener(new CustomLinearLayout.OnTopListener() { + @Override + public void isTop(boolean state) { + isChildTop = state; + Log.i("isChildTop", "CustomScrollView isTop()"+isChildTop); + } + }); + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_MOVE && mScrollY == 0) { + onInterceptTouchEvent(ev); + } + return super.onTouchEvent(ev); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + mInterceptDownY = ev.getY(); + + } else if (ev.getAction() == MotionEvent.ACTION_MOVE) { + float interceptMoveY = ev.getY(); + if (!isChildTop) { + return false; + } else if (interceptMoveY - mInterceptDownY > 0 && mScrollY <= 10) { + scrollTo(0, 0); + return false; + } + } + return super.onInterceptTouchEvent(ev); + } + + @Override + protected void onScrollChanged(int l, int t, int oldl, int oldt) { + super.onScrollChanged(l, t, oldl, oldt); + mScrollY = t; + mScrollYListener.scrollYChange(t); + } + + public interface OnScrollYChangeListener { + void scrollYChange(int scrollY); + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/message/MessageActivity.java b/app/src/main/java/com/yonsz/z1/fragment/message/MessageActivity.java new file mode 100644 index 0000000..e18b2b8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/message/MessageActivity.java @@ -0,0 +1,377 @@ +package com.yonsz.z1.fragment.message; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.bigkoo.convenientbanner.ConvenientBanner; +import com.bigkoo.convenientbanner.holder.CBViewHolderCreator; +import com.bigkoo.convenientbanner.listener.OnItemClickListener; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AdInfo; +import com.yonsz.z1.database.entity.entitya2.MessageAllEntity; +import com.yonsz.z1.database.entity.entitya2.SafeLogEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.messagecenter.MssageCenterActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DateUtil; +import com.yonsz.z1.utils.NetworkImageHolderView; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.BadgeView; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_MSGS_FAIL; +import static com.yonsz.z1.net.Constans.GET_USER_MSGS_SUCCESS; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.SECURITY_MANIPULATOR; +import static com.yonsz.z1.net.Constans.SECURITY_TRIGGER; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.version4.MainActivity4.isRefreshMessage; + +/** + * Created by Administrator on 2017/11/3. + */ + +public class MessageActivity extends BaseActivity { + private static BadgeView badge1, badge2; + private TitleView mTitleView; + private RelativeLayout systemMsgRl, safeMsgRl, storeMsgRl; + private ConvenientBanner bannerMainTop; + private List adInfoList = new ArrayList<>(); + private MessageAllEntity messageAllEntity; + private TextView safeNum, sysNum, safeTxt, sysTxt; + private LoadingDialog mLoadingDialog; + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_message); + initView(); + isRefreshMessage = true; + } + + @Override + public void onResume() { + super.onResume(); + getListMessage(); + } + + + private void initView() { + sysNum = (TextView) findViewById(R.id.tv_system_message_red_circle); + safeNum = (TextView) findViewById(R.id.tv_safe_message_red_circle); + safeTxt = (TextView) findViewById(R.id.tv_safe_text); + sysTxt = (TextView) findViewById(R.id.tv_sys_text); + + badge1 = new BadgeView(this, safeNum); + badge2 = new BadgeView(this, sysNum); + + bannerMainTop = (ConvenientBanner) findViewById(R.id.cb_store); + systemMsgRl = (RelativeLayout) findViewById(R.id.rl_person_system_message); + safeMsgRl = (RelativeLayout) findViewById(R.id.rl_safe_message); + storeMsgRl = (RelativeLayout) findViewById(R.id.rl_person_store_message); + mTitleView = (TitleView) findViewById(R.id.title_message); + mTitleView.setHead(R.string.message_center_true); + mTitleView.setHeadFuntionTxtAndSise16("清除未读"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + sysmsgClearunread(); + } + + @Override + public void onFunctionText() { + + } + }); + + systemMsgRl.setOnClickListener(this); + safeMsgRl.setOnClickListener(this); + storeMsgRl.setOnClickListener(this); + + + AdInfo adInfo = new AdInfo(); + adInfo.setAdUrl(R.drawable.pic_index_scene); + adInfo.setShareNumber(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + if (adInfoList.size() == 0) { + adInfoList.add(0, adInfo); + } + bannerMainTop.setPages(new CBViewHolderCreator() { + @Override + public NetworkImageHolderView createHolder() { + return new NetworkImageHolderView(); + } + }, adInfoList).setPageIndicator(new int[]{R.drawable.kuang_corners_white_five, R.drawable.kuang_corners_red_dian_five}) + .setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.CENTER_HORIZONTAL) + .setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(int position) { + Intent intent; + } + }); + } + + private void sysmsgClearunread() { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.MSG_CLEARUNREAD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sysmsgClearunread", "ShareDeviceActivity onSuccess()" + respone); + SafeLogEntity obj = JSON.parseObject(respone, SafeLogEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_LOG_SUCCESS); + msg.obj = obj.getObj(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void setViewDate(MessageAllEntity messageAllEntity) { + if (null != messageAllEntity.getObj()) { + int num = messageAllEntity.getObj().getSysMsg().getNum(); + int num1 = messageAllEntity.getObj().getSafeMsg().getNum(); + if (num == 0) { + if (null != messageAllEntity.getObj().getSysMsg().getMsgInfo() && !messageAllEntity.getObj().getSysMsg().getMsgInfo().isEmpty()) { + sysTxt.setVisibility(View.VISIBLE); + sysTxt.setText(messageAllEntity.getObj().getSysMsg().getMsgInfo()); + } else { + sysTxt.setVisibility(View.GONE); + } + sysNum.setVisibility(View.GONE); + if (null != badge2 && badge2.isShown()) { + badge2.hide(); + } + } else { + if (null != messageAllEntity.getObj().getSysMsg().getMsgInfo() && !messageAllEntity.getObj().getSysMsg().getMsgInfo().isEmpty()) { + sysTxt.setVisibility(View.VISIBLE); + sysTxt.setText(messageAllEntity.getObj().getSysMsg().getMsgInfo()); + } else { + sysTxt.setVisibility(View.GONE); + } + sysNum.setVisibility(View.VISIBLE); + remind1(sysNum, num); + } + if (num1 != 0) { + setSafeTxt(messageAllEntity); + safeNum.setVisibility(View.VISIBLE); + remind2(safeNum, num1); + } else { + setSafeTxt(messageAllEntity); + safeNum.setVisibility(View.GONE); + if (null != badge1 && badge1.isShown()) { + badge1.hide(); + } + } + } else { + safeNum.setVisibility(View.GONE); + safeTxt.setVisibility(View.GONE); + } + + } + + private void setSafeTxt(MessageAllEntity messageAllEntity) { + if (null != messageAllEntity.getObj().getSafeMsg().getExecTime() && !messageAllEntity.getObj().getSafeMsg().getExecTime().isEmpty()) { + safeTxt.setVisibility(View.VISIBLE); + safeTxt.setText(messageAllEntity.getObj().getSafeMsg().getExecTime()); + + String dateStr = DateUtil.getDateStr(this, messageAllEntity.getObj().getSafeMsg().getExecTime()); + + if (null != messageAllEntity.getObj().getSafeMsg().getDeviceType()) { + switch (messageAllEntity.getObj().getSafeMsg().getDeviceType()) { + case DOOR_LOCK_TAG: + safeTxt.setText(dateStr + " 门磁报警器发出警报"); + break; + case INFRARED_TAG: + safeTxt.setText(dateStr + " 红外报警器发出警报"); + break; + case SMOKE_TAG: + safeTxt.setText(dateStr + " 烟雾报警器发出警报"); + break; + case GAS_TAG: + safeTxt.setText(dateStr + " 燃气报警器发出警报"); + break; + case WATER_TAG: + safeTxt.setText(dateStr + " 水浸报警器发出警报"); + break; + case INTELLIGENT_DOOR_LOCK: + safeTxt.setText(dateStr + " " + "智能门锁被打开"); + break; + case WIRELESS_EMERGENCY_BUTTON: + safeTxt.setText(dateStr + " " + "无线紧急按钮发出报警"); + break; + case INFRARED_CURTAIN_DETECTOR: + safeTxt.setText(dateStr + " " + "红外幕帘探测器发出报警"); + break; + case CAMERA_TAG: + safeTxt.setText(dateStr + " " + "智能摄像头发生画面变动"); + break; + case SECURITY_TRIGGER: + safeTxt.setText(dateStr + " " + "安防触发器发出报警"); + break; + case SECURITY_MANIPULATOR: + safeTxt.setText(dateStr + " " + "安防机械手发出报警"); + break; + default: + safeTxt.setText(dateStr + " " + "未知设备发出报警"); + break; + + } + } + } else { + safeTxt.setVisibility(View.GONE); + } + } + + private void remind1(View view, int totalNum) { //BadgeView的具体使用 + /*badge2.setText("" + totalNum); // 需要显示的提醒类容 + badge2.setBadgePosition(BadgeView.POSITION_TOP_RIGHT);// 显示的位置.右上角,BadgeView.POSITION_BOTTOM_LEFT,下左,还有其他几个属性 + badge2.setTextColor(Color.RED); // 文本颜色 + badge2.setBadgeBackgroundColor(Color.RED); // 提醒信息的背景颜色,自己设置 + //badge1.setBackgroundResource(R.mipmap.icon_message_png); //设置背景图片 + badge2.setTextSize(12); // 文本大小 + badge2.setBadgeMargin(60, 3); // 水平和竖直方向的间距 + //badge1.setBadgeMargin(40); //各边间隔 + // badge1.toggle(); //显示效果,如果已经显示,则影藏,如果影藏,则显示 + badge2.show();// 只有显示 + // badge1.hide();//影藏显示*/ + + badge2.setText("" + totalNum); // 需要显示的提醒类容 + badge2.setBadgePosition(BadgeView.POSITION_CENTER);// 显示的位置.右上角,BadgeView.POSITION_BOTTOM_LEFT,下左,还有其他几个属性 + badge2.setTextColor(Color.WHITE); // 文本颜色 + badge2.setBadgeBackgroundColor(Color.RED); // 提醒信息的背景颜色,自己设置 + //badge2.setBackgroundResource(R.mipmap.icon_message_png); //设置背景图片 + badge2.setTextSize(12); // 文本大小 + badge2.setBadgeMargin(40, 3); // 水平和竖直方向的间距 + //badge2.setBadgeMargin(40); //各边间隔 + // badge2.toggle(); //显示效果,如果已经显示,则影藏,如果影藏,则显示 + badge2.show();// 只有显示 + // badge2.hide();//影藏显示 + } + + private void remind2(View view, int totalNum) { //BadgeView的具体使用 + badge1.setText("" + totalNum); // 需要显示的提醒类容 + badge1.setBadgePosition(BadgeView.POSITION_CENTER);// 显示的位置.右上角,BadgeView.POSITION_BOTTOM_LEFT,下左,还有其他几个属性 + badge1.setTextColor(Color.WHITE); // 文本颜色 + badge1.setBadgeBackgroundColor(Color.RED); // 提醒信息的背景颜色,自己设置 + //badge1.setBackgroundResource(R.mipmap.icon_message_png); //设置背景图片 + badge1.setTextSize(12); // 文本大小 + badge1.setBadgeMargin(40, 3); // 水平和竖直方向的间距 + //badge1.setBadgeMargin(40); //各边间隔 + // badge1.toggle(); //显示效果,如果已经显示,则影藏,如果影藏,则显示 + badge1.show();// 只有显示 + // badge1.hide();//影藏显示 + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_person_system_message: + intent = new Intent(this, MssageCenterActivity.class); + startActivity(intent); + break; + case R.id.rl_safe_message: + intent = new Intent(this, SafeMessageActivity.class); + intent.putExtra("isOwner", "1"); + // intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case R.id.rl_person_store_message: + intent = new Intent(this, MssageCenterActivity.class); + startActivity(intent); + break; + } + } + + private void getListMessage() { + HashMap map = new HashMap<>(); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynew(NetWorkUrl.GET_USER_MSGS, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("getListMessage", "onSuccess: " + respone); + MessageAllEntity obj = JSON.parseObject(respone, MessageAllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USER_MSGS_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USER_MSGS_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_USER_MSGS_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_USER_MSGS_SUCCESS: + MessageAllEntity messageAllEntity = (MessageAllEntity) msg.obj; + setViewDate(messageAllEntity); + break; + case GET_LOG_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + getListMessage(); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/message/MessageFragment.java b/app/src/main/java/com/yonsz/z1/fragment/message/MessageFragment.java new file mode 100644 index 0000000..b57c85b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/message/MessageFragment.java @@ -0,0 +1,221 @@ +package com.yonsz.z1.fragment.message; + +import android.content.Intent; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListAdapter; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.bigkoo.convenientbanner.ConvenientBanner; +import com.bigkoo.convenientbanner.holder.CBViewHolderCreator; +import com.bigkoo.convenientbanner.listener.OnItemClickListener; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.AdInfo; +import com.yonsz.z1.database.entity.entitya2.MessageAllEntity; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.mine.messagecenter.MssageCenterActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.tcpudp.model.Module; +import com.yonsz.z1.tcpudp.net.UdpBroadcast; +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.tcpudp.utils.Utils; +import com.yonsz.z1.utils.NetworkImageHolderView; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; + +import java.net.DatagramPacket; +import java.util.ArrayList; +import java.util.List; + +import static android.content.Context.WIFI_SERVICE; + +/** + * Created by Administrator on 2017/11/3. + */ + +public class MessageFragment extends BaseFragment implements View.OnClickListener { + private View fragView; + private TitleView mTitleView; + private RelativeLayout systemMsgRl, safeMsgRl, storeMsgRl; + private ConvenientBanner bannerMainTop; + private List adInfoList = new ArrayList<>(); + private MessageAllEntity messageAllEntity; + private TextView safeNum, sysNum, safeTxt, sysTxt; + private WifiManager wifimanager; + + + //把搜索设备放在这里 + private List mModules; + private ListAdapter mAdapter; + private long lastTime; + private UdpBroadcast udpBroadcast; + + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_message, null); + + udpBroadcast = new UdpBroadcast(Constants.UDP_PORT,"") { + @Override + public void onReceived(List packets) { + Log.i("ApConfigActivity111", "StroeFragment onReceived()"); + mModules = decodePackets(packets); + saveDevices(mModules); + } + }; + wifimanager = (WifiManager) getActivity().getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + udpBroadcast.open(); + } + initView(); + + return fragView; + } + + @Override + public void onStart() { + Log.i("UdpBroadcast", "onStart"); + udpBroadcast.send(Utils.getCMDScanModules(getActivity())); + super.onStart(); + } + + @Override + public void onDestroy() { + Log.i("UdpBroadcast", "onStop"); + super.onDestroy(); + udpBroadcast.close(); + } + + private List decodePackets(List packets) { + + int i = 1; + Module module; + List list = new ArrayList(); + List modules = new ArrayList(); + + DECODE_PACKETS: + for (DatagramPacket packet : packets) { + + String data = new String(packet.getData(), 0, packet.getLength()); + Log.i("UdpBroadcast", i + ": " + data); + if (data.equals(Utils.getCMDScanModules(getActivity()))) { + continue; + } + + for (String item : list) { + if (item.equals(data)) { + continue DECODE_PACKETS; + } + } + + list.add(data); + if ((module = Utils.decodeBroadcast2Module(data)) != null) { + module.setId(i); + modules.add(module); + i++; + } + } + + return modules; + } + + /** + * save modules' data to local + * + * @param modules + */ + private void saveDevices(List modules) { + + /* SharedPreferences preferences = getContext().getSharedPreferences("module_list", MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit();*/ + if (modules.size() > 0) { + int i = 0; + for (Module module : modules) { + /*editor.putInt(Constants.KEY_PRE_ID + i, module.getId()); + editor.putString(Constants.KEY_PRE_IP + i, module.getIp()); + editor.putString(Constants.KEY_PRE_MAC + i, module.getMac()); + editor.putString(Constants.KEY_PRE_MODULEID + i, module.getModuleID()); + i++;*/ + SharedpreferencesUtil.save(module.getMac(), module.getIp()); + } + + /* editor.putInt(Constants.KEY_MODULE_COUNT, modules.size()); + editor.commit();*/ + } else { + // editor.clear().commit(); + } + } + + private void initView() { + sysNum = (TextView) fragView.findViewById(R.id.tv_system_message_red_circle); + safeNum = (TextView) fragView.findViewById(R.id.tv_safe_message_red_circle); + safeTxt = (TextView) fragView.findViewById(R.id.tv_safe_text); + sysTxt = (TextView) fragView.findViewById(R.id.tv_sys_text); + bannerMainTop = (ConvenientBanner) fragView.findViewById(R.id.cb_store); + systemMsgRl = (RelativeLayout) fragView.findViewById(R.id.rl_person_system_message); + safeMsgRl = (RelativeLayout) fragView.findViewById(R.id.rl_safe_message); + storeMsgRl = (RelativeLayout) fragView.findViewById(R.id.rl_person_store_message); + mTitleView = (TitleView) fragView.findViewById(R.id.title_message); + mTitleView.setHead(R.string.message_center_true); + mTitleView.setHeadBackGone(); + mTitleView.setHeadFuntionGone(); + mTitleView.showBackGroud(); + + systemMsgRl.setOnClickListener(this); + safeMsgRl.setOnClickListener(this); + storeMsgRl.setOnClickListener(this); + + + AdInfo adInfo = new AdInfo(); + adInfo.setAdUrl(R.drawable.pic_index_scene); + adInfo.setShareNumber(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + if (adInfoList.size() == 0) { + adInfoList.add(0, adInfo); + } + bannerMainTop.setPages(new CBViewHolderCreator() { + @Override + public NetworkImageHolderView createHolder() { + return new NetworkImageHolderView(); + } + }, adInfoList).setPageIndicator(new int[]{R.drawable.kuang_corners_white_five, R.drawable.kuang_corners_red_dian_five}) + .setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.CENTER_HORIZONTAL) + .setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(int position) { + Intent intent; + } + }); + } + + public void setViewDate(MessageAllEntity messageAllEntity) { + + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_person_system_message: + intent = new Intent(getActivity(), MssageCenterActivity.class); + startActivity(intent); + break; + case R.id.rl_safe_message: + intent = new Intent(getActivity(), SafeMessageActivity.class); + intent.putExtra("isOwner", "1"); + // intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case R.id.rl_person_store_message: + intent = new Intent(getActivity(), MssageCenterActivity.class); + startActivity(intent); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/message/SafeLogAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/message/SafeLogAdapter.java new file mode 100644 index 0000000..ea02962 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/message/SafeLogAdapter.java @@ -0,0 +1,106 @@ +package com.yonsz.z1.fragment.message; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.SafeLogEntity; +import com.yonsz.z1.utils.AutoLinerLayoutManager; +import com.yonsz.z1.utils.DateUtil; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.List; + +/** + * Created by Administrator on 2017/9/1. + */ +public class SafeLogAdapter extends RecyclerView.Adapter { + private List> mDatasRercord; + private Context mContext; + + public SafeLogAdapter(Context mContext, List> mDatasRercord) { + this.mDatasRercord = mDatasRercord; + this.mContext = mContext; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_safe_device_log, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDatasRercord != null ? mDatasRercord.size() : 0; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView tv_log_data; + private TextView tv_log_week; + private RecyclerView mLogRecyclerView; + private RelativeLayout rootView; + + public MessageViewHolder(View itemView) { + super(itemView); + tv_log_data = (TextView) itemView.findViewById(R.id.tv_log_data); + tv_log_week = (TextView) itemView.findViewById(R.id.tv_log_week); + mLogRecyclerView = (RecyclerView) itemView.findViewById(R.id.rc_device_log); + mLogRecyclerView.setLayoutManager(new AutoLinerLayoutManager(mContext)); + } + + public void setViews(final int position) { + SafeLogEntity.DataBean entity = mDatasRercord.get(position).get(0); + // tv_log_data.setText(entity.getCreateDate().substring(5, 10)); + tv_log_data.setText(DateUtil.getDateStr(mContext, entity.getExecTime())); + tv_log_week.setText(getWeek(entity.getCreateDate().substring(0, 10))); + SafeLogDetailAdapter adapter = new SafeLogDetailAdapter(mContext, mDatasRercord.get(position)); + mLogRecyclerView.setAdapter(adapter); + } + } + + private String getWeek(String pTime) { + String Week = "周"; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + if (c.get(Calendar.DAY_OF_WEEK) == 1) { + Week += "天"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 2) { + Week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 3) { + Week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 4) { + Week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 5) { + Week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 6) { + Week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 7) { + Week += "六"; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return Week; + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/message/SafeLogDetailAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/message/SafeLogDetailAdapter.java new file mode 100644 index 0000000..0826169 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/message/SafeLogDetailAdapter.java @@ -0,0 +1,138 @@ +package com.yonsz.z1.fragment.message; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.SafeLogEntity; +import com.yonsz.z1.utils.DateUtil; + +import java.util.List; + +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.SAFETY_VALVE; +import static com.yonsz.z1.net.Constans.SECURITY_MANIPULATOR; +import static com.yonsz.z1.net.Constans.SECURITY_TRIGGER; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; + +/** + * Created by Administrator on 2017/9/1. + */ +public class SafeLogDetailAdapter extends RecyclerView.Adapter { + private List mDatasRercord; + private Context mContext; + + public SafeLogDetailAdapter(Context mContext, List mDatasRercord) { + this.mDatasRercord = mDatasRercord; + this.mContext = mContext; + } + + @Override + public SafeLogDetailAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_safe_detail_log, + parent, false); + return new SafeLogDetailAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(SafeLogDetailAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDatasRercord != null ? mDatasRercord.size() : 0; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView tv_log_time; + private TextView tv_log_safe_position; + private TextView tv_log_record; + private TextView tv_log_safe_circle; + + + public MessageViewHolder(View itemView) { + super(itemView); + tv_log_record = (TextView) itemView.findViewById(R.id.tv_log_record); + tv_log_time = (TextView) itemView.findViewById(R.id.tv_log_time); + tv_log_safe_position = (TextView) itemView.findViewById(R.id.tv_log_safe_position); + tv_log_safe_circle = (TextView) itemView.findViewById(R.id.tv_log_safe_circle); + } + + public void setViews(final int position) { + tv_log_time.setText(DateUtil.getHourMinute(mContext, mDatasRercord.get(position).getExecTime())); + // tv_log_time.setText(mDatasRercord.get(position).getExecTime().substring(11, 16)); + if (null != mDatasRercord.get(position).getAddressName()) { + tv_log_safe_position.setText(mDatasRercord.get(position).getAddressName().toString()); + } + if (null != mDatasRercord.get(position).getDeviceType()) { + switch (mDatasRercord.get(position).getDeviceType()) { + case DOOR_LOCK_TAG: + tv_log_record.setText(R.string.door_warning); + tv_log_safe_circle.setBackground(mContext.getResources().getDrawable(R.drawable.notify_yellow_circle)); + break; + case INFRARED_TAG: + tv_log_record.setText(R.string.red_warning); + tv_log_safe_circle.setBackground(mContext.getResources().getDrawable(R.drawable.notify_yellow_circle)); + break; + case SMOKE_TAG: + tv_log_record.setText(R.string.smoke_warning); + break; + case GAS_TAG: + tv_log_record.setText(R.string.gas_warning); + break; + case WATER_TAG: + tv_log_record.setText(R.string.water_warning); + break; + case INTELLIGENT_DOOR_LOCK: + if (!mDatasRercord.get(position).getContent().isEmpty()) { + tv_log_record.setText(mDatasRercord.get(position).getContent()); + } else { + tv_log_record.setText("智能门锁被打开"); + } + tv_log_safe_circle.setBackground(mContext.getResources().getDrawable(R.drawable.notify_yellow_circle)); + break; + case WIRELESS_EMERGENCY_BUTTON: + tv_log_record.setText("无线紧急按钮发出报警"); + break; + case INFRARED_CURTAIN_DETECTOR: + tv_log_record.setText("红外幕帘探测器发出报警"); + tv_log_safe_circle.setBackground(mContext.getResources().getDrawable(R.drawable.notify_yellow_circle)); + break; + case CAMERA_TAG: + tv_log_record.setText("智能摄像头发生画面变动"); + tv_log_safe_circle.setBackground(mContext.getResources().getDrawable(R.drawable.notify_yellow_circle)); + break; + case SECURITY_TRIGGER: + tv_log_record.setText("安防触发器发出报警"); + tv_log_safe_circle.setBackground(mContext.getResources().getDrawable(R.drawable.notify_yellow_circle)); + break; + case SECURITY_MANIPULATOR: + tv_log_record.setText("安防机械手发出报警"); + tv_log_safe_circle.setBackground(mContext.getResources().getDrawable(R.drawable.notify_yellow_circle)); + break; + case SAFETY_VALVE: + tv_log_record.setText("阀门控制器发出报警"); + tv_log_safe_circle.setBackground(mContext.getResources().getDrawable(R.drawable.notify_yellow_circle)); + break; + default: + tv_log_record.setText("未知设备发出报警"); + tv_log_safe_circle.setBackground(mContext.getResources().getDrawable(R.drawable.notify_yellow_circle)); + break; + + } + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/message/SafeMessageActivity.java b/app/src/main/java/com/yonsz/z1/fragment/message/SafeMessageActivity.java new file mode 100644 index 0000000..cb4f4cf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/message/SafeMessageActivity.java @@ -0,0 +1,292 @@ +package com.yonsz.z1.fragment.message; + +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entitya2.SafeLogEntity; +import com.yonsz.z1.listener.OnRecyclerLoadDataListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LoadMoreRecyclerView; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.DELETE_DEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; + +/** + * Created by Administrator on 2018/1/11. + */ + +public class SafeMessageActivity extends BaseActivity { + private RelativeLayout mNoRecord; + private int DATA_TYPE; + private LoadingDialog mLoadingDialog; + private boolean isRefresh; + private boolean isLoadMore; + private int page = 0; + private TitleView mTitleView; + private List mDatas; + private List> mDatasRercord = new ArrayList<>(); + private LoadMoreRecyclerView mLogRecycler; + private SafeLogAdapter mLogAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_log); + initView(); + DATA_TYPE = Constans.REFRESH_DATA; + loadListViewData(page); + } + + private void loadListViewData(int page) { + //当有网络的时候 + if (DensityUtil.isNetworkConnected(this)) { + selectSafetyLog(page); + } else { + ToastUtil.show(this, R.string.net_error); + } + } + + private void selectSafetyLog(int page) { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("viewFlag", "1"); + map.put("startNo", page + ""); + netWorkUtil.requestPostByAsynew(NetWorkUrl.SELECT_SAFETY_LOG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectSafetyLog", "ShareDeviceActivity onSuccess()" + respone); + SafeLogEntity obj = JSON.parseObject(respone, SafeLogEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_LOG_SUCCESS); + msg.obj = obj.getObj(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void initView() { + mLogRecycler = (LoadMoreRecyclerView) findViewById(R.id.log_recyclerview); + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(SafeMessageActivity.this); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mLogRecycler.setLayoutManager(manager); + mDatas = new ArrayList<>(); + mLogAdapter = new SafeLogAdapter(SafeMessageActivity.this, mDatasRercord); + mNoRecord = (RelativeLayout) findViewById(R.id.ll_no_record); + mLogRecycler.setAdapter(mLogAdapter); + mLogRecycler.setOnLoadDataListener(new OnRecyclerLoadDataListener() { + @Override + public void onLoadMore() { + if (!isLoadMore) { + isLoadMore = true; + page += 20; + DATA_TYPE = Constans.MORE_DATA; + selectSafetyLog(page); + } + } + }); + mTitleView = (TitleView) findViewById(R.id.title_device_log); + mTitleView.setHead(R.string.safe_device_log); + if (getIntent().getExtras().get("isOwner").toString().equals("1")) { + mTitleView.setHeadFuntionTxt("清除"); + } else { + mTitleView.setHeadFuntionTxtGone(); + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + clearSafetyLog(); + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void clearSafetyLog() { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestPostByAsynew(NetWorkUrl.CLEAR_SAFETY_LOG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("clearSafetyLog", "ShareDeviceActivity onSuccess()" + respone); + SafeLogEntity obj = JSON.parseObject(respone, SafeLogEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELETE_DEVICE_SUCCESS); + msg.obj = obj.getObj(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case DELETE_DEVICE_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + mDatasRercord.clear(); + mLogAdapter.notifyDataSetChanged(); + mNoRecord.setVisibility(View.VISIBLE); + mTitleView.setHeadFuntionTxtGone(); + break; + case GET_LOG_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + if (msg.obj != null) { + onSuccess((List) msg.obj); + } else { + if (DATA_TYPE == Constans.REFRESH_DATA) { + mNoRecord.setVisibility(View.VISIBLE); + mTitleView.setHeadFuntionTxtGone(); + } + } + break; + case GET_LOG_FAIL: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void onSuccess(List logEntities) { + for (int j = 0; j < mDatasRercord.size(); j++) { + for (int k = 0; k < mDatasRercord.get(j).size(); k++) { + String id = mDatasRercord.get(j).get(k).getId(); + for (int f = 0; f < logEntities.size(); f++) { + if (logEntities.get(f).getId().equals(id)) { + logEntities.remove(logEntities.get(f)); + } + } + } + } + if (logEntities.size() > 0) { + String createDate = logEntities.get(0).getCreateDate().substring(0, 10); + if (mDatasRercord.size() == 0 || (mDatasRercord.get(0) != null && logEntities != null && logEntities.size() > 0 && !logEntities.get(0).getId().equals(mDatasRercord.get(0).get(0).getId()))) { + if (DATA_TYPE == Constans.REFRESH_DATA) { + isRefresh = false; + mDatas = new ArrayList<>(); + mDatasRercord.clear(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + if (mDatas.size() == logEntities.size()) { + mDatasRercord.add(mDatas); + } else if (i == logEntities.size() - 1) { + mDatasRercord.add(mDatas); + } + } + } else { + isLoadMore = false; + if (mDatas != null && mDatas.get(mDatas.size() - 1).getCreateDate().substring(0, 10).equals(createDate)) { + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } else { + mDatas = new ArrayList<>(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } + } + if (mDatasRercord.size() >= 2) { + if (mDatasRercord.get(0) == mDatasRercord.get(1)) { + mDatasRercord.remove(1); + } + } + mLogAdapter.notifyDataSetChanged(); + } else { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + isRefresh = false; + isLoadMore = false; + DATA_TYPE = -1; + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/message/TalkIMActivity.java b/app/src/main/java/com/yonsz/z1/fragment/message/TalkIMActivity.java new file mode 100644 index 0000000..5007ee3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/message/TalkIMActivity.java @@ -0,0 +1,89 @@ +package com.yonsz.z1.fragment.message; + +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.PopupWindow; +import android.widget.TextView; +import android.widget.Toast; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2018/8/28. + */ + +public class TalkIMActivity extends BaseActivity { + private TitleView mTitleView; + private PopupWindow mPopupWindow; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_talk_im); + initView(); + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.title_talk_im); + mTitleView.clearBackGroud(); + mTitleView.setHead(R.string.talk_record); + mTitleView.setHeadFuntionTxt("设备A1" + ">"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + showPopupWindow(); + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void showPopupWindow() { + View contentView = getPopupWindowContentView(); + mPopupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); + // 如果不设置PopupWindow的背景,有些版本就会出现一个问题:无论是点击外部区域还是Back键都无法dismiss弹框 + mPopupWindow.setBackgroundDrawable(new ColorDrawable()); + // 设置好参数之后再show + // popupWindow.showAsDropDown(mButton2); // 默认在mButton2的左下角显示 + contentView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); + // int xOffset = mButton2.getWidth() / 2 - contentView.getMeasuredWidth() / 2; + mPopupWindow.showAsDropDown(mTitleView, 0, 0); // 在mButton2的中间显示 + } + + private View getPopupWindowContentView() { + // 一个自定义的布局,作为显示的内容 + int layoutId = R.layout.popup_content_layout; // 布局ID + View contentView = LayoutInflater.from(this).inflate(layoutId, null); + View.OnClickListener menuItemOnClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + Toast.makeText(v.getContext(), "Click " + ((TextView) v).getText(), Toast.LENGTH_SHORT).show(); + if (mPopupWindow != null) { + mPopupWindow.dismiss(); + } + } + }; + return contentView; + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/message/TmallFragment.java b/app/src/main/java/com/yonsz/z1/fragment/message/TmallFragment.java new file mode 100644 index 0000000..562d042 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/message/TmallFragment.java @@ -0,0 +1,301 @@ +package com.yonsz.z1.fragment.message; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.chat.RecyclerViewChatFragment; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.CloseActivityEntity; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity4.VoiceChatEntity; +import com.yonsz.z1.database.entity.entitya2.MessageAllEntity; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.mine.messagecenter.MssageCenterActivity; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.view.ElasticTouchListenerView; +import com.yonsz.z1.view.TitleView; + +import java.lang.ref.WeakReference; +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.APP_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_DEVICEVOICE_CHATLIST_FAIL; +import static com.yonsz.z1.net.Constans.GET_DEVICEVOICE_CHATLIST_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; + +/** + * Created by Administrator on 2018/8/27. + */ + +public class TmallFragment extends BaseFragment implements View.OnClickListener { + private View fragView; + private TitleView mTitleView; + private RelativeLayout systemMsgRl, safeMsgRl; + private TextView safeNum, sysNum, safeTxt, sysTxt; + private CustomLinearLayout mContainerCll; + private CustomScrollView mMainSv; + private TextView lastTalkMessage, lastTalkMessageOwner; + private UIHandle mHandler; + private RelativeLayout ownerMessageRl, deviceMesageRl, noMessageRl; + private TextView tv_device_name; + private VoiceChatEntity voiceChatEntity; + + public void onEventMainThread(AppControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = APP_CONTROL_SUCCESS; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(CloseActivityEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("ElasticTouchListenerView")) { + Intent intent = new Intent(getActivity(), RecyclerViewChatFragment.class); + startActivity(intent); + getActivity().overridePendingTransition(R.anim.activity_bottom_in, R.anim.activity_bottom_out); + } + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_tmall, null); + initView(); + // getDeviceVoiceChatList(1); + getUserDevices4SimpleInfo(); + return fragView; + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + private void initView() { + ownerMessageRl = (RelativeLayout) fragView.findViewById(R.id.rl_owner_message); + deviceMesageRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_message); + noMessageRl = (RelativeLayout) fragView.findViewById(R.id.rl_no_message); + lastTalkMessageOwner = (TextView) fragView.findViewById(R.id.tv_last_message_owner); + lastTalkMessage = (TextView) fragView.findViewById(R.id.tv_last_message); + sysNum = (TextView) fragView.findViewById(R.id.tv_system_message_red_circle); + safeNum = (TextView) fragView.findViewById(R.id.tv_safe_message_red_circle); + safeTxt = (TextView) fragView.findViewById(R.id.tv_safe_text); + sysTxt = (TextView) fragView.findViewById(R.id.tv_sys_text); + systemMsgRl = (RelativeLayout) fragView.findViewById(R.id.rl_person_system_message); + safeMsgRl = (RelativeLayout) fragView.findViewById(R.id.rl_safe_message); + tv_device_name = (TextView) fragView.findViewById(R.id.tv_device_name); + + mMainSv = (CustomScrollView) fragView.findViewById(R.id.sv_main); + mContainerCll = (CustomLinearLayout) fragView.findViewById(R.id.cll_item_container); + + mTitleView = (TitleView) fragView.findViewById(R.id.title_tmall); + mTitleView.setHead(R.string.message_page); + mTitleView.setHeadBackGone(); + mTitleView.setHeadFuntionGone(); + mTitleView.showBackGroud(); + + systemMsgRl.setOnClickListener(this); + safeMsgRl.setOnClickListener(this); + lastTalkMessage.setOnClickListener(this); + lastTalkMessageOwner.setOnClickListener(this); + + mContainerCll.setOnTouchListener(new ElasticTouchListenerView()); + mMainSv.setCustomLinearLayout(mContainerCll); + mContainerCll.setCustomScrollView(mMainSv); + } + + @Override + public void onResume() { + super.onResume(); + mContainerCll.setVisibility(View.VISIBLE); + } + + public void setViewDate(MessageAllEntity messageAllEntity) { + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_person_system_message: + intent = new Intent(getActivity(), MssageCenterActivity.class); + startActivity(intent); + break; + case R.id.rl_safe_message: + intent = new Intent(getActivity(), SafeMessageActivity.class); + intent.putExtra("isOwner", "1"); + // intent.putExtra("ziId", ziId); + startActivity(intent); + break; + case R.id.tv_last_message: + case R.id.tv_last_message_owner: + intent = new Intent(getActivity(), RecyclerViewChatFragment.class); + startActivity(intent); + getActivity().overridePendingTransition(R.anim.activity_bottom_in, R.anim.activity_bottom_out); + break; + } + } + + private void getUserDevices4SimpleInfo() { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.GET_USERDEVICES4_SIMPLEINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getUserDevices4", "SolidVersionActivity onSuccess()" + respone); + DeviceSimpleEntity obj = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + + private void getDeviceVoiceChatList(int pageNo, String ziId) { + /*HashMap map = new HashMap<>(); + map.put("pageNo", pageNo + "");//控制类型,1:语音控制,2:app控制 + map.put("macId", ziId); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynew(NetWorkUrl.GET_DEVICEVOICE_CHATLIST, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("getDeviceVoiceChatList", "onSuccess: " + respone); + VoiceChatEntity obj = JSON.parseObject(respone, VoiceChatEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_DEVICEVOICE_CHATLIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + private void callBackUiThread(Message msg) { + switch (msg.what) { + case APP_CONTROL_SUCCESS: + NettyEntity nettyEntity = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + String macId = nettyEntity.getMacId(); + noMessageRl.setVisibility(View.GONE); + deviceMesageRl.setVisibility(View.VISIBLE); + ownerMessageRl.setVisibility(View.VISIBLE); + lastTalkMessageOwner.setText(nettyEntity.getVoice()); + lastTalkMessage.setText(nettyEntity.getReply()); + /*if (null != voiceChatEntity && null != voiceChatEntity.getObj()) { + for (int i = 0; i < voiceChatEntity.getObj().getList().size(); i++) { + if (macId.equals(voiceChatEntity.getObj().getList().get(i).getMacId())) { + tv_device_name.setText(voiceChatEntity.getObj().getList().get(i).getZiName()); + } + } + }*/ + if (nettyEntity.getExceptionType().equals("0")) { + lastTalkMessageOwner.setBackground(getResources().getDrawable(R.drawable.rectangle_normal_right)); + lastTalkMessage.setBackground(getResources().getDrawable(R.drawable.rectangle_normal_left)); + } else { + lastTalkMessageOwner.setBackground(getResources().getDrawable(R.drawable.rectangle_red_right)); + lastTalkMessage.setBackground(getResources().getDrawable(R.drawable.rectangle_red_left)); + } + break; + case GET_DEVICEVOICE_CHATLIST_SUCCESS: + voiceChatEntity = (VoiceChatEntity) msg.obj; + /*if (0 != voiceChatEntity.getObj().getCount()) { + noMessageRl.setVisibility(View.GONE); + deviceMesageRl.setVisibility(View.VISIBLE); + ownerMessageRl.setVisibility(View.VISIBLE); + lastTalkMessageOwner.setText(voiceChatEntity.getObj().getList().get(0).getControlTitle()); + lastTalkMessage.setText(voiceChatEntity.getObj().getList().get(0).getReply()); + tv_device_name.setText(voiceChatEntity.getObj().getList().get(0).getZiName()); + if (voiceChatEntity.getObj().getList().get(0).getExceptionType() == 0) { + lastTalkMessageOwner.setBackground(getResources().getDrawable(R.drawable.rectangle_normal_right)); + lastTalkMessage.setBackground(getResources().getDrawable(R.drawable.rectangle_normal_left)); + } else { + lastTalkMessageOwner.setBackground(getResources().getDrawable(R.drawable.rectangle_red_right)); + lastTalkMessage.setBackground(getResources().getDrawable(R.drawable.rectangle_red_left)); + } + } else { + noMessageRl.setVisibility(View.VISIBLE); + deviceMesageRl.setVisibility(View.GONE); + ownerMessageRl.setVisibility(View.GONE); + }*/ + break; + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + DeviceSimpleEntity simpleEntity = (DeviceSimpleEntity) msg.obj; + if (null != simpleEntity.getData()) { + String ziId = simpleEntity.getData().get(0).getZiId(); + getDeviceVoiceChatList(0, ziId); + } + break; + } + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(TmallFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + TmallFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/DeviceConnectActivity.java b/app/src/main/java/com/yonsz/z1/fragment/person/DeviceConnectActivity.java new file mode 100644 index 0000000..f963d16 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/DeviceConnectActivity.java @@ -0,0 +1,433 @@ +package com.yonsz.z1.fragment.person; + +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.BindEntity; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.fragment.person.binddevice.DragUtils; +import com.yonsz.z1.fragment.person.binddevice.HorizontalAdapter; +import com.yonsz.z1.fragment.person.binddevice.VerticalAdapter; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNextDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.version4.MainActivity4; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.listpopupwindow.RankingPopupWindow; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.net.Constans.ADD_BIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.ADD_BIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_ONLINE_DEVICELIST_FAIL; +import static com.yonsz.z1.net.Constans.GET_ONLINE_DEVICELIST_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_SUCCESS; +import static com.yonsz.z1.net.Constans.RELIEVE_BIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.RELIEVE_BIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; + +/** + * Created by Administrator on 2018/7/16. + */ + +public class DeviceConnectActivity extends BaseActivity implements DragUtils.DragStatus { + private List aloneDevices; + private List bindDevices; + private TitleView mTitleView; + private RecyclerView verticalRecyclerView, horizontalRecyclerView; + private HorizontalAdapter mHorizontalAdapter; + private VerticalAdapter mVerticalAdapter; + private RelativeLayout rl_bind_guide; + private TextView tv_my_home; + private RankingPopupWindow.Listener listener; + private RankingPopupWindow mWindow; + private HomeListEntity homeListEntity; + private int deviceNumListPos; + private List deviceNumListBind = new ArrayList<>(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_connect); + DragUtils.setCallBack(this); + initView(); + } + + private void initView() { + aloneDevices = new ArrayList<>(); + bindDevices = new ArrayList<>(); + tv_my_home = (TextView) findViewById(R.id.tv_my_home); + verticalRecyclerView = (RecyclerView) findViewById(R.id.vertical_RecyclerView); + horizontalRecyclerView = (RecyclerView) findViewById(R.id.horizontal_RecyclerView); + rl_bind_guide = (RelativeLayout) findViewById(R.id.rl_bind_guide); + mTitleView = (TitleView) findViewById(R.id.title_device_connect); + mTitleView.setHead(R.string.device_connect); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mHorizontalAdapter = new HorizontalAdapter(this, aloneDevices); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.HORIZONTAL); + horizontalRecyclerView.setHasFixedSize(true); + horizontalRecyclerView.setLayoutManager(manage); + horizontalRecyclerView.setAdapter(mHorizontalAdapter); + + mVerticalAdapter = new VerticalAdapter(this, bindDevices); + RecyclerViewNoBugLinearLayoutManager manage1 = new RecyclerViewNoBugLinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + verticalRecyclerView.setHasFixedSize(true); + verticalRecyclerView.setLayoutManager(manage1); + verticalRecyclerView.setAdapter(mVerticalAdapter); + + if (SharedpreferencesUtil.get(Constans.ISBIND)) { + rl_bind_guide.setVisibility(View.VISIBLE); + SharedpreferencesUtil.save(Constans.ISBIND, false); + } else { + rl_bind_guide.setVisibility(View.GONE); + } + + tv_my_home.setOnClickListener(this); + rl_bind_guide.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + rl_bind_guide.setVisibility(View.GONE); + } + }); + + DragUtils.bindDragInZone(horizontalRecyclerView, "3", -1); + deviceNumListPos = deviceNumListPosition; + queryHouses(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_my_home: + initListItem(deviceNumListBind, 2, tv_my_home.getText().toString()); + break; + } + } + + private void initListItem(final List list, final int flag, final String selectName) { + //生成Listener和清空 + setPopupWindowListener(); + mWindow = null; + //显示popupwindow + mWindow = new RankingPopupWindow(getActivity(), list, selectName, listener, tv_my_home, flag); + } + + private void setPopupWindowListener() { + listener = null; + listener = new RankingPopupWindow.Listener() { + @Override + public void onPopupWindowDismissListener() { + //消失时的操作 + } + + @Override + public void onItemClickListener(int position) { + //点击Item时的操作 + //跳转到家庭管理的页面 + deviceNumListPos = position; + if (deviceNumListBind.get(position).length() > 9) { + tv_my_home.setText(deviceNumListBind.get(position).substring(0, 6) + "…"); + } else { + tv_my_home.setText(deviceNumListBind.get(position)); + } + getOnlineDeviceList("0", homeListEntity.getData().get(position).getId()); + } + }; + } + + private void relieveBindDevices(String onlineMac, String aloneMac) { + HashMap map = new HashMap<>(); + map.put("onlineMac", onlineMac); + map.put("aloneMac", aloneMac); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynew(NetWorkUrl.RELIEVE_BIND_DEVICES, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("relieveBindDevices", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(RELIEVE_BIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(RELIEVE_BIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(RELIEVE_BIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void addBindDevices(String onlineMac, String aloneMac) { + HashMap map = new HashMap<>(); + map.put("onlineMac", onlineMac); + map.put("aloneMac", aloneMac); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynew(NetWorkUrl.ADD_BIND_DEVICES, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("addBindDevices", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_BIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_BIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_BIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getOnlineDeviceList(String autoBind, String houseId) { + HashMap map = new HashMap<>(); + NetWorkUtil net = NetWorkUtil.instans(); + map.put("autoBind", autoBind); + map.put("houseId", houseId); + net.requestPostByAsynew(NetWorkUrl.GET_ONLINE_DEVICELIST, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("getOnlineDeviceList", "onSuccess: " + respone); + BindEntity obj = JSON.parseObject(respone, BindEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_ONLINE_DEVICELIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_ONLINE_DEVICELIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_ONLINE_DEVICELIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_ONLINE_DEVICELIST_SUCCESS: + BindEntity bindEntity = (BindEntity) msg.obj; + //单机设备 + aloneDevices.clear(); + if (null != bindEntity.getObj() && null != bindEntity.getObj().getAloneDevices()) { + aloneDevices.addAll(bindEntity.getObj().getAloneDevices()); + } + mHorizontalAdapter.notifyDataSetChanged(); + //联机设备 + bindDevices.clear(); + List onlineDevices = new ArrayList<>(); + if (null != bindEntity.getObj() && null != bindEntity.getObj().getOnlineDevices()) { + onlineDevices.addAll(bindEntity.getObj().getOnlineDevices()); + } + if (null != onlineDevices && onlineDevices.size() != 0) { + for (int i = 0; i < onlineDevices.size(); i++) { + BindEntity.ObjBean.BindDevicesBean bindDevicesBean = new BindEntity.ObjBean.BindDevicesBean(); + BindEntity.ObjBean.BindDevicesBean.OnlineDeviceBean onlineDevicesBean = new BindEntity.ObjBean.BindDevicesBean.OnlineDeviceBean(); + onlineDevicesBean.setAddressId(onlineDevices.get(i).getAddressId()); + onlineDevicesBean.setDeviceVersion(onlineDevices.get(i).getDeviceVersion()); + onlineDevicesBean.setZiId(onlineDevices.get(i).getZiId()); + onlineDevicesBean.setZiName(onlineDevices.get(i).getZiName()); + onlineDevicesBean.setStandardCode(onlineDevices.get(i).getStandardCode()); + onlineDevicesBean.setConnectFlag(onlineDevices.get(i).getConnectFlag()); + bindDevicesBean.setOnlineDevice(onlineDevicesBean); + bindDevices.add(i, bindDevicesBean); + } + } + //绑定设备 + List bindDevices1 = new ArrayList<>(); + if (null != bindEntity.getObj() && null != bindEntity.getObj().getBindDevices()) { + bindDevices1.addAll(bindEntity.getObj().getBindDevices()); + } + if (null != bindDevices1 && bindDevices1.size() != 0) { + for (int i = 0; i < bindDevices1.size(); i++) { + if (null != bindDevices1.get(i) && null != bindDevices1.get(i).getAloneDevice() && null != bindDevices1.get(i).getOnlineDevice()) { + bindDevices.add(bindDevices1.get(i)); + } + } + } + mVerticalAdapter.notifyDataSetChanged(); + break; + case RELIEVE_BIND_DEVICES_SUCCESS: + MainActivity4.isRefreshMessage = true; + getOnlineDeviceList("0", homeListEntity.getData().get(deviceNumListPos).getId()); + break; + case ADD_BIND_DEVICES_SUCCESS: + MainActivity4.isRefreshMessage = true; + getOnlineDeviceList("0", homeListEntity.getData().get(deviceNumListPos).getId()); + break; + case QUERY_HOUSES_SUCCESS: + homeListEntity = (HomeListEntity) msg.obj; + deviceNumListBind.clear(); + if (null != homeListEntity && null != homeListEntity.getData()) { + tv_my_home.setText(homeListEntity.getData().get(deviceNumListPosition).getName()); + getOnlineDeviceList(getIntent().getExtras().get("isFirst").toString(), homeListEntity.getData().get(deviceNumListPosition).getId()); + + if (deviceNumListPos > homeListEntity.getData().size() - 1) { + deviceNumListPos = 0; + } + deviceNumListBind.clear(); + for (int i = 0; i < homeListEntity.getData().size(); i++) { + if (homeListEntity.getData().get(i).getDefFlag() == 1) { + if (Constans.isUseDefFlag) { + deviceNumListPos = i; + } + } + if (homeListEntity.getData().get(i).getName().length() > 9) { + deviceNumListBind.add(homeListEntity.getData().get(i).getName().substring(0, 6) + "…"); + } else { + deviceNumListBind.add(homeListEntity.getData().get(i).getName()); + } + } + /* if (homeListEntity.getData().get(deviceNumListPos).getName().length() > 9) { + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPos).getName().substring(0, 6) + "…"); + } else { + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPos).getName()); + }*/ + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPos).getName()); + } + break; + } + } + + @Override + public void complete(String obj, String toDoWhat, final int position2) { + final int position1 = Integer.parseInt(obj.substring(0, 1)); + final int isSelf = Integer.parseInt(obj.substring(1, 2)); + switch (toDoWhat) { + case "1": + //绑定设备,无需弹框 + Log.i("rex", obj + toDoWhat + "绑定设备,无需弹框" + isSelf); + if (isSelf != 1) { + addBindDevices(bindDevices.get(position2).getOnlineDevice().getZiId(), aloneDevices.get(position1).getZiId()); + } + break; + case "2": + //绑定设备,需要弹框 + Log.i("rex", obj + toDoWhat + "绑定设备,需要弹框" + isSelf); + if (isSelf != 1) { + ConfirmNextDialog dialog = new ConfirmNextDialog(DeviceConnectActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + + break; + case 1: + addBindDevices(bindDevices.get(position2).getOnlineDevice().getZiId(), aloneDevices.get(position1).getZiId()); + break; + } + } + }); + dialog.setTopTxt("确认绑定"); + dialog.setContent("该设备只能绑定一个设备,绑定新设备后原有的将自动解除绑定"); + dialog.setCancelable(false); + dialog.show(); + } + break; + case "3": + //解除绑定 + Log.i("rex", obj + toDoWhat + "解除绑定" + isSelf); + if (isSelf != 0) { + relieveBindDevices(bindDevices.get(position1).getOnlineDevice().getZiId(), bindDevices.get(position1).getAloneDevice().getZiId()); + } + break; + } + } + + public void queryHouses() { + HashMap map = new HashMap<>(); + map.put("autoCreate", "0"); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.QUERY_HOUSES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryHouses2", "UpdatePwActivity onSuccess()" + respone); + HomeListEntity obj = JSON.parseObject(respone, HomeListEntity.class); + if (-401 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USER_SESSION_NULL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/NormalSetingActivity.java b/app/src/main/java/com/yonsz/z1/fragment/person/NormalSetingActivity.java new file mode 100644 index 0000000..fb0ae8e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/NormalSetingActivity.java @@ -0,0 +1,196 @@ +package com.yonsz.z1.fragment.person; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.qw.soul.permission.SoulPermission; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.fragment.person.language.ChangeLanguageActivity; +import com.yonsz.z1.fragment.person.language.Languagetils; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.fragment.person.PersonFragment.isAutoOtaUpgrade; + +/** + * Created by Administrator on 2018/8/22. + */ + +public class NormalSetingActivity extends BaseActivity { + private TitleView mTitleView; + private CheckBox voiceCb, solidUpdateCb; + private RelativeLayout positionSet, changeLanguage; + private TextView tv_language; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_normal_setting); + initView(); + } + + private void initView() { + tv_language = (TextView) findViewById(R.id.tv_language); + positionSet = (RelativeLayout) findViewById(R.id.rl_position_set); + changeLanguage = (RelativeLayout) findViewById(R.id.rl_change_language); + voiceCb = (CheckBox) findViewById(R.id.cb_voice); + solidUpdateCb = (CheckBox) findViewById(R.id.cb_solid_update); + voiceCb.setOnClickListener(this); + solidUpdateCb.setOnClickListener(this); + positionSet.setOnClickListener(this); + changeLanguage.setOnClickListener(this); + mTitleView = (TitleView) findViewById(R.id.title_normal_set); + mTitleView.setHead(R.string.normal_setting); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + if (SharedpreferencesUtil.get(Constans.VOICE)) { + voiceCb.setChecked(true); + } else { + voiceCb.setChecked(false); + } + + if (isAutoOtaUpgrade) { + solidUpdateCb.setChecked(true); + } else { + solidUpdateCb.setChecked(false); + } + + switch (Languagetils.getLanguageType(this)) { + case 0: + tv_language.setText(R.string.setting_simplified_chinese); + break; + case 1: + tv_language.setText(R.string.setting_language_english); + break; + case 2: + tv_language.setText(R.string.setting_simplified_chinese); + break; + case 3: + tv_language.setText(R.string.setting_traditional_chinese); + break; + default: + tv_language.setText(R.string.setting_traditional_chinese); + break; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_voice: + if (voiceCb.isChecked()) { + SharedpreferencesUtil.save(Constans.VOICE, true); + } else { + SharedpreferencesUtil.save(Constans.VOICE, false); + } + break; + case R.id.cb_solid_update: + if (solidUpdateCb.isChecked()) { + isAutoOtaUpgrade = true; + saveAppSetting(true); + } else { + isAutoOtaUpgrade = false; + saveAppSetting(false); + } + break; + case R.id.rl_position_set: +// getAppDetailSettingIntent(getApplicationContext()); + SoulPermission.getInstance().goPermissionSettings(); + break; + case R.id.rl_change_language: + Intent intent = new Intent(NormalSetingActivity.this, ChangeLanguageActivity.class); + startActivity(intent); + break; + } + } + + private void saveAppSetting(boolean isAuto) { + HashMap map = new HashMap<>(); + map.put("autoOtaUpgrade", isAuto + ""); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynewApi(NetWorkUrl.SAVE_APP_SETTING, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("saveAppSetting", "UpdatePwActivity onSuccess()" + respone); + } + + @Override + public void onFail(String message) { + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } + + /** + * 跳转到权限设置界面 + */ + private void getAppDetailSettingIntent(Context context) { + + // vivo 点击设置图标>加速白名单>我的app + // 点击软件管理>软件管理权限>软件>我的app>信任该软件 + Intent appIntent = context.getPackageManager().getLaunchIntentForPackage("com.iqoo.secure"); + if (appIntent != null) { + context.startActivity(appIntent); + /*floatingView = new SettingFloatingView(this, "SETTING", getApplication(), 0); + floatingView.createFloatingView();*/ + return; + } + + // oppo 点击设置图标>应用权限管理>按应用程序管理>我的app>我信任该应用 + // 点击权限隐私>自启动管理>我的app + appIntent = context.getPackageManager().getLaunchIntentForPackage("com.oppo.safe"); + if (appIntent != null) { + context.startActivity(appIntent); + /*floatingView = new SettingFloatingView(this, "SETTING", getApplication(), 1); + floatingView.createFloatingView();*/ + return; + } + + Intent intent = new Intent(); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (Build.VERSION.SDK_INT >= 9) { + intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); + intent.setData(Uri.fromParts("package", getPackageName(), null)); + } else if (Build.VERSION.SDK_INT <= 8) { + intent.setAction(Intent.ACTION_VIEW); + intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); + intent.putExtra("com.android.settings.ApplicationPkgName", getPackageName()); + } + startActivity(intent); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/PersonFragment.java b/app/src/main/java/com/yonsz/z1/fragment/person/PersonFragment.java new file mode 100644 index 0000000..9f76e26 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/PersonFragment.java @@ -0,0 +1,694 @@ +package com.yonsz.z1.fragment.person; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.tencent.mm.opensdk.modelbase.BaseReq; +import com.tencent.mm.opensdk.modelbase.BaseResp; +import com.tencent.mm.opensdk.modelmsg.SendMessageToWX; +import com.tencent.mm.opensdk.modelmsg.WXMediaMessage; +import com.tencent.mm.opensdk.modelmsg.WXWebpageObject; +import com.tencent.mm.opensdk.openapi.IWXAPI; +import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler; +import com.tencent.mm.opensdk.openapi.WXAPIFactory; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.company.CompanyManagerActivity; +import com.yonsz.z1.database.entity.ResponeEntity; +import com.yonsz.z1.database.entity.entitya2.MessageAllEntity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.fragment.message.MessageActivity; +import com.yonsz.z1.fragment.person.changeserver.ServerSelectDialog; +import com.yonsz.z1.fragment.person.upgrade.DeviceUpgradeActivity; +import com.yonsz.z1.fragment.person.upgrade.UpgradeSmsActivity; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.mine.aboutversion.AboutVersionActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.feedback.FeedBackActivity; +import com.yonsz.z1.mine.mydevice.MyDeviceActivity; +import com.yonsz.z1.mine.personcenter.PersonCenterActivity; +import com.yonsz.z1.mine.sevicecenter.SeviceCenterActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.code.MyCodeActivity; +import com.yonsz.z1.version5.manager.DeviceManagerActivity; +import com.yonsz.z1.version5.time.TimeManagerActivity; +import com.yonsz.z1.view.CircleImageView; +import com.yonsz.z1.view.TitleView; + +import java.io.ByteArrayOutputStream; +import java.lang.ref.WeakReference; +import java.util.HashMap; + +import static com.tencent.mm.opensdk.modelmsg.SendMessageToWX.Req.WXSceneSession; +import static com.tencent.mm.opensdk.modelmsg.SendMessageToWX.Req.WXSceneTimeline; +import static com.yonsz.z1.difference.DifferConstans.WX_APP_ID; +import static com.yonsz.z1.difference.DifferConstans.versionUrl; +import static com.yonsz.z1.net.Constans.GET_USER_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.GET_USER_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.NICKNAME_RESULT; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.SERVER_URL_PHOTO; +import static com.yonsz.z1.net.NetWorkUrl.getSERVER; + +/** + * Created by Administrator on 2017/11/3. + */ + +public class PersonFragment extends BaseFragment implements View.OnClickListener, IWXAPIEventHandler { + public static boolean isAutoOtaUpgrade = true; + private TitleView mTitleView; + private View fragView; + private UIHandle mHandler; + private CircleImageView mUserIcon; + private TextView mUsername; + private RelativeLayout normalSettingRl, serviceCenterRl, serviceCenterRl1, messageCenterRl, aboutVersionRl, feedBackRl, personScoreRl, tMallRl, + xiaoaiRl, xiaoaiRl1, dingdongRl, dingdongRl1, deviceUpgradeRl, deviceSmsRl, timeManagerRl, companyManagerRl, rl_xiaomi, rl_xiaodu, rl_chuangwei, + rl_chuangwei1, rl_value_service, rl_person_top, rl_pay_point, deviceManagerRl; + private LinearLayout ll_declare; + private String userId; + private ResponeEntity.DataBean mMine; + private TextView mExit; + private int iconTag = 0; + private TextView redCircleMe, redCircleFind; + private CheckBox voiceCb; + private IWXAPI iwxapi; + private TextView tv_bind_red_circle; + private LinearLayout valueAddServiceLl; + private ImageView iv_device_manager_help, iv_my_code; + + public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + bmp.compress(Bitmap.CompressFormat.PNG, 100, output); + if (needRecycle) { + bmp.recycle(); + } + byte[] result = output.toByteArray(); + try { + output.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mHandler = new UIHandle(this); + + iwxapi = WXAPIFactory.createWXAPI(getActivity(), WX_APP_ID, false); + iwxapi.handleIntent(getActivity().getIntent(), this); + iwxapi.registerApp(WX_APP_ID); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + fragView = View.inflate(getActivity(), R.layout.fragment_person, null); + initView(); + initListener(); + return fragView; + } + + private void initView() { + ll_declare = fragView.findViewById(R.id.ll_declare); + mTitleView = (TitleView) fragView.findViewById(R.id.title_me); + // voiceCb = (CheckBox) fragView.findViewById(R.id.cb_voice); + redCircleMe = (TextView) fragView.findViewById(R.id.tv_notify_red_circle); + redCircleFind = (TextView) fragView.findViewById(R.id.tv_notify_red_circle_find); + mExit = (TextView) fragView.findViewById(R.id.btn_exit); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + mUserIcon = (CircleImageView) fragView.findViewById(R.id.civ_personl); + mUsername = (TextView) fragView.findViewById(R.id.tv_user); + // mydeviceRl = (RelativeLayout) fragView.findViewById(R.id.rl_person_mydevice); + normalSettingRl = (RelativeLayout) fragView.findViewById(R.id.rl_normal_setting); + personScoreRl = (RelativeLayout) fragView.findViewById(R.id.rl_person_score); + serviceCenterRl = (RelativeLayout) fragView.findViewById(R.id.rl_person_service_center); + serviceCenterRl1 = (RelativeLayout) fragView.findViewById(R.id.rl_person_service_center1); + messageCenterRl = (RelativeLayout) fragView.findViewById(R.id.rl_person_message_center); + timeManagerRl = (RelativeLayout) fragView.findViewById(R.id.rl_time_manager); + companyManagerRl = (RelativeLayout) fragView.findViewById(R.id.rl_company_manager); + aboutVersionRl = (RelativeLayout) fragView.findViewById(R.id.rl_person_about_version); + feedBackRl = (RelativeLayout) fragView.findViewById(R.id.rl_person_iv_person_feed_back); + valueAddServiceLl = (LinearLayout) fragView.findViewById(R.id.ll_value_add_service); + tMallRl = (RelativeLayout) fragView.findViewById(R.id.rl_tmall); + xiaoaiRl = (RelativeLayout) fragView.findViewById(R.id.rl_xiaoai); + xiaoaiRl1 = (RelativeLayout) fragView.findViewById(R.id.rl_xiaoai1); + dingdongRl = (RelativeLayout) fragView.findViewById(R.id.rl_dingdong); + dingdongRl1 = (RelativeLayout) fragView.findViewById(R.id.rl_dingdong1); + rl_xiaomi = (RelativeLayout) fragView.findViewById(R.id.rl_xiaomi); + rl_chuangwei = (RelativeLayout) fragView.findViewById(R.id.rl_chuangwei); + rl_chuangwei1 = (RelativeLayout) fragView.findViewById(R.id.rl_chuangwei1); + rl_xiaodu = (RelativeLayout) fragView.findViewById(R.id.rl_xiaodu); + deviceUpgradeRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_upgrade); + rl_value_service = (RelativeLayout) fragView.findViewById(R.id.rl_value_service); + rl_person_top = (RelativeLayout) fragView.findViewById(R.id.rl_person_top); + deviceSmsRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_sms); +// rl_pay_point = (RelativeLayout) fragView.findViewById(R.id.rl_pay_point); + deviceManagerRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_manager); + tv_bind_red_circle = (TextView) fragView.findViewById(R.id.tv_bind_red_circle); + iv_device_manager_help = (ImageView) fragView.findViewById(R.id.iv_device_manager_help); + iv_my_code = (ImageView) fragView.findViewById(R.id.iv_my_code); + if (SharedpreferencesUtil.get(Constans.USERICON, "").toString() != null) { + ImageLoader.getInstance().displayImage(SharedpreferencesUtil.get(Constans.USERICON, "").toString(), mUserIcon, UniKongApp.getHiApp().getImageLoaderOption()); + } + if (SharedpreferencesUtil.get(Constans.USERNAME, "").toString() != null) { + mUsername.setText(SharedpreferencesUtil.get(Constans.USERNAME, "").toString()); + } + + /*if (msgViewNum != 0) { + redCircleFind.setText(msgViewNum + ""); + redCircleFind.setVisibility(View.VISIBLE); + } + if (msgViewNum != 0) { + redCircleMe.setVisibility(View.VISIBLE); + }*/ + /*if (SharedpreferencesUtil.get(Constans.VOICE)) { + voiceCb.setChecked(true); + } else { + voiceCb.setChecked(false); + }*/ + + mTitleView.setHead(R.string.me_page); + mTitleView.setHeadBackGone(); + mTitleView.setHeadFuntionGone(); + mTitleView.clearBackGroud(); + + String server = getSERVER(); + Log.i("server", "PersonFragment initView()" + server); + + if (AppIdUtil.isStandard()) { + if (DifferConstans.APPID_S_VOICE.equals("110101")) { + tMallRl.setVisibility(View.VISIBLE); + // xiaoaiRl.setVisibility(View.GONE); + dingdongRl.setVisibility(View.VISIBLE); + timeManagerRl.setVisibility(View.GONE); +// rl_pay_point.setVisibility(View.GONE); + deviceSmsRl.setVisibility(View.GONE); + } + } else { + valueAddServiceLl.setVisibility(View.GONE); + tMallRl.setVisibility(View.GONE); + // xiaoaiRl.setVisibility(View.GONE); + dingdongRl.setVisibility(View.GONE); + } + if (AppIdUtil.isWork()) { + messageCenterRl.setVisibility(View.GONE); + personScoreRl.setVisibility(View.GONE); + ll_declare.setVisibility(View.GONE); + companyManagerRl.setVisibility(View.VISIBLE); + } + if (AppIdUtil.isZhiKong()) { + if (AppIdUtil.isChuangWei()) { + rl_value_service.setVisibility(View.GONE); + ll_declare.setVisibility(View.GONE); + } else { + deviceSmsRl.setVisibility(View.VISIBLE); +// rl_pay_point.setVisibility(View.VISIBLE); + } + deviceUpgradeRl.setVisibility(View.GONE); + messageCenterRl.setVisibility(View.GONE); + personScoreRl.setVisibility(View.GONE); + valueAddServiceLl.setVisibility(View.VISIBLE); + tMallRl.setVisibility(View.VISIBLE); + xiaoaiRl.setVisibility(View.VISIBLE); + dingdongRl.setVisibility(View.VISIBLE); + rl_chuangwei1.setVisibility(View.VISIBLE); + } + } + + @Override + public void onResume() { + super.onResume(); + if (DensityUtil.isNetworkConnected(getActivity())) { + initUserData(); + } else { + ToastUtil.show(getActivity(), R.string.Unconnected_network); + } + /*if (msgViewNum != 0) { + redCircleFind.setText(msgViewNum + ""); + redCircleFind.setVisibility(View.VISIBLE); + } else { + redCircleFind.setVisibility(View.GONE); + }*/ + /*if (AppGenerUtil.getVersionName(getActivity()) != null) { + if (!versionId.equals(AppGenerUtil.getVersionName(getActivity()))) { + redCircleMe.setVisibility(View.VISIBLE); + } else { + redCircleMe.setVisibility(View.GONE); + } + }*/ + } + + public void isShowRedCircle(boolean isShow) { + if (null != redCircleMe) { + if (isShow) { + redCircleMe.setVisibility(View.VISIBLE); + } else { + redCircleMe.setVisibility(View.GONE); + } + } + } + + private void initListener() { + // voiceCb.setOnClickListener(this); + mUserIcon.setOnClickListener(this); + // mydeviceRl.setOnClickListener(this); + personScoreRl.setOnClickListener(this); + serviceCenterRl.setOnClickListener(this); + serviceCenterRl1.setOnClickListener(this); + messageCenterRl.setOnClickListener(this); + timeManagerRl.setOnClickListener(this); + companyManagerRl.setOnClickListener(this); + aboutVersionRl.setOnClickListener(this); + feedBackRl.setOnClickListener(this); + mExit.setOnClickListener(this); + normalSettingRl.setOnClickListener(this); + xiaoaiRl.setOnClickListener(this); + xiaoaiRl1.setOnClickListener(this); + tMallRl.setOnClickListener(this); + dingdongRl.setOnClickListener(this); + dingdongRl1.setOnClickListener(this); + deviceUpgradeRl.setOnClickListener(this); + deviceSmsRl.setOnClickListener(this); +// rl_pay_point.setOnClickListener(this); + rl_xiaodu.setOnClickListener(this); + rl_xiaomi.setOnClickListener(this); + rl_chuangwei.setOnClickListener(this); + rl_chuangwei1.setOnClickListener(this); + rl_person_top.setOnClickListener(this); + deviceManagerRl.setOnClickListener(this); + iv_device_manager_help.setOnClickListener(this); + iv_my_code.setOnClickListener(this); + + mExit.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + new ServerSelectDialog(getActivity()).show(); + return false; + } + }); + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.civ_personl: + case R.id.rl_person_top: + intent = new Intent(getActivity(), PersonCenterActivity.class); + if (iconTag == 0) { + Bundle bundle = new Bundle(); + bundle.putSerializable("user", mMine); + intent.putExtras(bundle); + } + startActivityForResult(intent, NICKNAME_RESULT); + break; + case R.id.rl_person_mydevice: + startActivity(new Intent(getActivity(), MyDeviceActivity.class)); + break; + case R.id.rl_normal_setting: + intent = new Intent(getActivity(), NormalSetingActivity.class); + startActivity(intent); + break; + case R.id.rl_person_service_center: + case R.id.rl_person_service_center1: + startActivity(new Intent(getActivity(), SeviceCenterActivity.class)); + break; + case R.id.rl_time_manager: + startActivity(new Intent(getActivity(), TimeManagerActivity.class)); + break; + case R.id.rl_company_manager: + startActivity(new Intent(getActivity(), CompanyManagerActivity.class)); + break; + case R.id.rl_person_message_center: + if (!iwxapi.isWXAppInstalled()) { + Toast.makeText(getActivity(), getString(R.string.not_installed_Wechat), Toast.LENGTH_SHORT).show(); + return; + } + WXWebpageObject webpageObject = new WXWebpageObject(); + webpageObject.webpageUrl = "https://a.app.qq.com/o/simple.jsp?pkgname=com.standard.z1"; + WXMediaMessage msg = new WXMediaMessage(webpageObject); + msg.title = getString(R.string.app_name); + msg.description = getString(R.string.Welcome_download) + "『" + getString(R.string.app_name) + "APP』"; + Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.mipmap.app_lan); + msg.thumbData = bmpToByteArray(thumb, true); + final SendMessageToWX.Req req = new SendMessageToWX.Req(); + req.transaction = buildTransaction("Req"); + req.message = msg; + //分享到微信好友或者朋友圈 + // startActivity(new Intent(getActivity(), WXEntryActivity.class)); + DeviceBottomDialog dialog2 = new DeviceBottomDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //微信朋友圈 + req.scene = WXSceneTimeline; + iwxapi.sendReq(req); + break; + case 2: + //重新命名 + break; + case 3: + //微信好友 + req.scene = WXSceneSession; + iwxapi.sendReq(req); + break; + case 4: + break; + } + } + }); + dialog2.setContent(); + dialog2.setTop(getString(R.string.WeChat_friends)); + dialog2.setBottom(getString(R.string.WeChat_friends_circle)); + dialog2.setLearn(); + dialog2.setModifyName(); + dialog2.setOtherNameGone(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + break; + case R.id.rl_person_about_version: + startActivity(new Intent(getActivity(), AboutVersionActivity.class)); + break; + case R.id.rl_person_iv_person_feed_back: + // startActivity(new Intent(getActivity(), FeedBackActivity.class)); + startActivity(new Intent(getActivity(), MessageActivity.class)); + break; + case R.id.btn_exit: + logOut(); + break; + /*case R.id.cb_voice: + if (voiceCb.isChecked()) { + SharedpreferencesUtil.save(Constans.VOICE, true); + } else { + SharedpreferencesUtil.save(Constans.VOICE, false); + } + break;*/ + case R.id.rl_person_score: + intent = new Intent(getActivity(), DeviceConnectActivity.class); + intent.putExtra("isFirst", "0"); + startActivity(intent); + break; + case R.id.rl_tmall: + intent = new Intent(getActivity(), WebViewActivity.class); + intent.putExtra("platform", "tmall"); + startActivity(intent); + break; + case R.id.rl_xiaodu: + intent = new Intent(getActivity(), WebViewActivity.class); + intent.putExtra("platform", "xiaodu"); + startActivity(intent); + break; + case R.id.rl_xiaomi: + intent = new Intent(getActivity(), WebViewActivity.class); + intent.putExtra("platform", "xiaomi"); + startActivity(intent); + break; + case R.id.rl_chuangwei: + case R.id.rl_chuangwei1: + intent = new Intent(getActivity(), WebViewActivity.class); + intent.putExtra("platform", "chuangwei"); + startActivity(intent); +// goPayAccessPoint(); + break; + case R.id.rl_xiaoai: + case R.id.rl_xiaoai1: + // intent = new Intent(getActivity(), WebViewActivity.class); + intent = new Intent(getActivity(), FeedBackActivity.class); + intent.putExtra("platform", "xiaoai"); + startActivity(intent); + break; + case R.id.rl_dingdong: + case R.id.rl_dingdong1: + // intent = new Intent(getActivity(), WebViewActivity.class); + intent = new Intent(getActivity(), MyCodeActivity.class); + intent.putExtra("platform", "dingdong"); + startActivity(intent); + break; + case R.id.rl_device_upgrade: + intent = new Intent(getActivity(), DeviceUpgradeActivity.class); + startActivity(intent); + break; + case R.id.rl_device_sms: + intent = new Intent(getActivity(), UpgradeSmsActivity.class); + startActivity(intent); + break; + /* case R.id.rl_pay_point: + intent = new Intent(getActivity(), SeviceCenterActivity.class); + intent.putExtra("platform", "lecheng"); + startActivity(intent); + break;*/ + case R.id.rl_device_manager: + if (!DensityUtil.isNetConnected(getContext())) { + ToastUtil.show(getContext(), R.string.net_error_info); + return; + } + intent = new Intent(getActivity(), DeviceManagerActivity.class); + startActivity(intent); + break; + case R.id.iv_device_manager_help: + intent = new Intent(getActivity(), WebViewActivity.class); + intent.putExtra("platform", "manager"); + startActivity(intent); + break; + case R.id.iv_my_code: + intent = new Intent(getActivity(), WebViewActivity.class); + intent.putExtra("platform", "mycode"); + startActivity(intent); + break; + } + } + + private void logOut() { + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + // SharedpreferencesUtil.save(Constans.USERPHONE, ""); + // SharedpreferencesUtil.save(Constans.USERID, ""); + // SharedpreferencesUtil.save(Constans.USERNAME, ""); + // SharedpreferencesUtil.save(Constans.USERSEX, ""); + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + SharedpreferencesUtil.save(Constans.TOKENID, ""); + SharedpreferencesUtil.save(Constans.PASSWORD, ""); + SharedpreferencesUtil.save(Constans.MAIN_BG_URL, ""); + NettyHandlerUtil.closeCtx(); + getActivity().finish(); + Intent intent = new Intent(getActivity(), LoginActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + break; + } + } + }); + dialog.setContent(R.string.sure_exit); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void initUserData() { + HashMap map = new HashMap<>(); + map.put("userId", userId); + Log.i("personals", "PersonalActivity initUserData()" + SharedpreferencesUtil.get(Constans.SEESSIONID, "null")); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.PERSONAL_URL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("personals", respone); + ResponeEntity entity = JSON.parseObject(respone, ResponeEntity.class); + if (entity.getFlag() == -401) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USER_SESSION_NULL; + msg.obj = entity.getData(); + mHandler.sendMessage(msg); + } else if (entity.getFlag() == 1) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USER_DETAIL_SUCCESS; + msg.obj = entity.getData(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USER_DETAIL_FAIL; + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Log.i("personal", message); + Message msg = mHandler.obtainMessage(); + msg.what = GET_USER_DETAIL_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_USER_DETAIL_SUCCESS: + mMine = (ResponeEntity.DataBean) msg.obj; + initViewData(mMine); + break; + } + } + + private void initViewData(ResponeEntity.DataBean mine) { + if (mine != null) { + isAutoOtaUpgrade = mine.isAutoOtaUpgrade(); + if (mine.getNickName() != null) { + mUsername.setText(mine.getNickName()); + } + + if (null != mine.getAvatar()) { + ImageLoader.getInstance().displayImage(mine.getAvatar(), mUserIcon, UniKongApp.getHiApp().getImageLoaderOption()); + SharedpreferencesUtil.save(Constans.USERICON, mine.getAvatar()); + } else { + ImageLoader.getInstance().displayImage("", mUserIcon, UniKongApp.getHiApp().getImageLoaderOption()); + SharedpreferencesUtil.save(Constans.USERICON, ""); + } + } else { + mUsername.setText(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + String url = SERVER_URL_PHOTO + SharedpreferencesUtil.get(Constans.USERPHONE, "") + ".png"; + ImageLoader.getInstance().displayImage(url, mUserIcon, UniKongApp.getHiApp().getImageLoaderOption()); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == NICKNAME_RESULT) { + if (data != null && data.getExtras().get("data") != null) { + mUsername.setText((String) data.getExtras().get("data")); + if (mMine != null) { + mMine.setUserName((String) data.getExtras().get("data")); + } + } + if (data != null && data.getExtras().get("icon") != null) { + ImageLoader.getInstance().displayImage(data.getExtras().get("icon").toString(), mUserIcon, UniKongApp.getHiApp().getImageLoaderOption()); + SharedpreferencesUtil.save(Constans.USERICON, data.getExtras().get("icon").toString()); + iconTag = 1; + } + } + } + + @Override + public void onReq(BaseReq baseReq) { + Log.i("BaseReq111", "" + baseReq.openId + "---" + baseReq.transaction); + } + + @Override + public void onResp(BaseResp baseResp) { + Log.i("BaseReq111", "" + baseResp.openId + "---" + baseResp.transaction + "===" + baseResp.errCode + "==" + baseResp.errStr); + switch (baseResp.errCode) { + case BaseResp.ErrCode.ERR_OK: + + break; + case BaseResp.ErrCode.ERR_USER_CANCEL: + + break; + case BaseResp.ErrCode.ERR_AUTH_DENIED: + + break; + default: + + break; + } + } + + public void setBindCircle(MessageAllEntity messageAllEntity) { + if (null != messageAllEntity.getObj() && null != tv_bind_red_circle) { + if (messageAllEntity.getObj().getOnlineBindFlag() != 0) { + tv_bind_red_circle.setVisibility(View.VISIBLE); + } else { + tv_bind_red_circle.setVisibility(View.GONE); + } + } else { + if (null != tv_bind_red_circle) { + tv_bind_red_circle.setVisibility(View.GONE); + } + } + } + + public void setMessageNum(MessageAllEntity messageAllEntity) { + if (null != messageAllEntity.getObj()) { + if (messageAllEntity.getObj().getTotalNum() != 0) { + redCircleFind.setText(messageAllEntity.getObj().getTotalNum() + ""); + redCircleFind.setVisibility(View.VISIBLE); + } else { + redCircleFind.setVisibility(View.GONE); + } + } else { + redCircleFind.setVisibility(View.GONE); + } + } + + private String buildTransaction(final String type) { + return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); + } + + //handler + static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(PersonFragment activity) { + weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + PersonFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/WebViewActivity.java b/app/src/main/java/com/yonsz/z1/fragment/person/WebViewActivity.java new file mode 100644 index 0000000..b7b295d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/WebViewActivity.java @@ -0,0 +1,365 @@ +package com.yonsz.z1.fragment.person; + +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; +import android.os.Bundle; +import android.os.Message; +import android.support.annotation.Nullable; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.Window; +import android.view.WindowManager; +import android.webkit.ClientCertRequest; +import android.webkit.HttpAuthHandler; +import android.webkit.JavascriptInterface; +import android.webkit.JsResult; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import com.tencent.mm.opensdk.modelbase.BaseReq; +import com.tencent.mm.opensdk.modelbase.BaseResp; +import com.tencent.mm.opensdk.modelmsg.SendMessageToWX; +import com.tencent.mm.opensdk.modelmsg.WXMediaMessage; +import com.tencent.mm.opensdk.modelmsg.WXWebpageObject; +import com.tencent.mm.opensdk.openapi.IWXAPI; +import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler; +import com.tencent.mm.opensdk.openapi.WXAPIFactory; +import com.tencent.mm.opensdk.utils.Log; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.AsxAddDeviceListActivity; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.activity.MainActivity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ShareBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.version5.SwoitSyncActivity; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; +import java.util.Map; + +import static com.tencent.mm.opensdk.modelmsg.SendMessageToWX.Req.WXSceneSession; +import static com.tencent.mm.opensdk.modelmsg.SendMessageToWX.Req.WXSceneTimeline; +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.difference.DifferConstans.APPID_S_VOICE; +import static com.yonsz.z1.difference.DifferConstans.WX_APP_ID; +import static com.yonsz.z1.fragment.person.PersonFragment.bmpToByteArray; + +/** + * Created by Administrator on 2018/9/10. + */ + +public class WebViewActivity extends BaseActivity implements IWXAPIEventHandler { + private RelativeLayout instructionRl, afterServiceRl; + private TitleView mTitleView; + private WebView webView; + private String platform; + private String loadUrl; + private IWXAPI iwxapi; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sevice_center); + initView(); + initListener(); + + } + + private void initView() { + platform = getIntent().getExtras().get("platform").toString(); + instructionRl = (RelativeLayout) findViewById(R.id.rl_instruction); + afterServiceRl = (RelativeLayout) findViewById(R.id.rl_after_service); + mTitleView = (TitleView) findViewById(R.id.title_service_center); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (!iwxapi.isWXAppInstalled()) { + Toast.makeText(WebViewActivity.this, getString(R.string.not_installed_Wechat), Toast.LENGTH_SHORT).show(); + return; + } + WXWebpageObject webpageObject = new WXWebpageObject(); + webpageObject.webpageUrl = loadUrl; + WXMediaMessage msg = new WXMediaMessage(webpageObject); + msg.title = getIntent().getExtras().get("title").toString(); + // msg.description = getString(R.string.Welcome_download) + "『" + getString(R.string.app_name) + "APP』"; + Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.mipmap.app_lan); + msg.thumbData = bmpToByteArray(thumb, true); + final SendMessageToWX.Req req = new SendMessageToWX.Req(); + req.transaction = buildTransaction("Req"); + req.message = msg; + //分享到微信好友或者朋友圈 + // startActivity(new Intent(getActivity(), WXEntryActivity.class)); + ShareBottomDialog dialog2 = new ShareBottomDialog(WebViewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + if (webView != null) { + webView.onResume(); + //恢复pauseTimers状态 + webView.resumeTimers(); + webView.reload(); + } + break; + case 2: + //微信朋友圈 + req.scene = WXSceneTimeline; + iwxapi.sendReq(req); + break; + case 3: + //微信好友 + req.scene = WXSceneSession; + iwxapi.sendReq(req); + break; + case 4: + ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setText(loadUrl); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可 + cmb.getText();//获取粘贴信息 + Toast.makeText(WebViewActivity.this, "复制成功!", Toast.LENGTH_SHORT).show(); + break; + } + } + }); + /* dialog2.setContent(); + dialog2.setTop(getString(R.string.WeChat_friends)); + dialog2.setBottom(getString(R.string.WeChat_friends_circle)); + dialog2.setLearn();*/ + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + + @Override + public void onFunctionText() { + + } + }); + + webView = (WebView) findViewById(R.id.webView); + webView.addJavascriptInterface(new JsObject(), "oauthResult"); + webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setDomStorageEnabled(true); + webView.getSettings().setAllowContentAccess(true); + webView.getSettings().setAppCacheEnabled(false); + webView.getSettings().setDisplayZoomControls(true); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + webView.getSettings().setMixedContentMode(android.webkit.WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } +// webView.setWebChromeClient(new WebChromeClient()); + webView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return true; + } + }); + + String appId = APPID_S_VOICE; + /*switch (DifferConstans.APPID_S) { + case "1104": + //小讯智能 + appId = "1105"; + break; + case "1103": + //安顺祥 + if (AppIdUtil.isChuangWei()) { + appId = "110202"; + } else + appId = "1102"; + break; + case "1202": + //语音生活助手 + appId = "1104"; + break; + case "1201": + //语音遥控器 + appId = "1103"; + break; + default: + if (APPID_S_VOICE.equals("110101")) { + appId = "1103"; + } else + appId = "1101"; + break; + }*/ + + switch (platform) { + case "model": + loadUrl = "https://app-static.yonsz.net/help/" + appId + "/help.html"; + break; + case "dingdong": + loadUrl = "https://app-static.yonsz.net/help/intro/dingdong.html"; + break; + case "xiaoai": + loadUrl = "https://app-static.yonsz.net/help/intro/xiaoai.html"; + break; + case "tmall": + loadUrl = "https://app-static.yonsz.net/help/" + appId + "/intro/tianmao.html"; + break; + case "xiaodu": + loadUrl = "https://app-static.yonsz.net/help/" + appId + "/intro/xiaodu.html"; + break; + case "xiaomi": + loadUrl = "https://app-static.yonsz.net/help/" + appId + "/intro/mijia.html"; + break; + case "chuangwei": + loadUrl = "https://app-static.yonsz.net/help/" + appId + "/intro/chuangwei.html"; + break; + case "find": + iwxapi = WXAPIFactory.createWXAPI(WebViewActivity.this, WX_APP_ID, false); + iwxapi.handleIntent(getIntent(), WebViewActivity.this); + iwxapi.registerApp(WX_APP_ID); + + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + loadUrl = getIntent().getExtras().get("linkUrl").toString(); + break; + case "register": + loadUrl = "https://app-static.yonsz.net/help/" + appId + "/privacy.html"; + break; + case "lecheng": + loadUrl = NetWorkUrl.getSERVER() + "api/thirdDevice/goPayAccessPoint?session=" + SharedpreferencesUtil.get(Constans.SEESSIONID, "null"); + break; + case "heartbeat": + loadUrl = "https://app-static.yonsz.net/help/" + appId + "/heartbeat-help.html"; + break; + case "manager": + loadUrl = "https://app-static.yonsz.net/help/" + appId + "/device-help.html"; + break; + case "mycode": + loadUrl = "https://app-static.yonsz.net/help/" + appId + "/code-help.html"; + break; + case "skyworth_tv": + loadUrl = getIntent().getExtras().get("data").toString(); + break; + } + + if (loadUrl.startsWith("http://") || loadUrl.startsWith("https://")) { + + Map map = new HashMap<>(); + + map.put("Referer", "http://www.gxshapp.com"); + + webView.loadUrl(loadUrl, map); + } + + + webView.setWebChromeClient(new WebChromeClient() { + @Override + public void onReceivedTitle(WebView view, String title) { + super.onReceivedTitle(view, title); + if (title != null) { + mTitleView.setHead(title); + } + } + }); + + webView.setWebViewClient(new WebViewClient() { + + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + Log.i("onPageFinished", url); + callEvaluateJavascript(webView); + } + }); + } + + + class JsObject { + @Override + @JavascriptInterface + public String toString() { + return "injectedObject"; + } + } + + + private void callEvaluateJavascript(WebView webView) { + + webView.evaluateJavascript("status", new ValueCallback() { + @Override + public void onReceiveValue(String value) { + System.out.println("_]onReceiveValue value=" + value); + if (value.contains("success")) { + runOnUiThread(new Runnable() { + @Override + public void run() { + Intent intent1 = new Intent(WebViewActivity.this, SwoitSyncActivity.class); + intent1.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + startActivity(intent1); + finish(); + } + }); + + } + } + }); + } + + private String buildTransaction(final String type) { + return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); + } + + private void initListener() { + instructionRl.setOnClickListener(this); + afterServiceRl.setOnClickListener(this); + } + + /** + * 使点击回退按钮不会直接退出整个应用程序而是返回上一个页面 + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) { + webView.goBack();//返回上个页面 + return true; + } + return super.onKeyDown(keyCode, event);//退出整个应用程序 + } + + + @Override + public void callBackUiThread(Message msg) { + + } + + @Override + public void onReq(BaseReq baseReq) { + + } + + @Override + public void onResp(BaseResp baseResp) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/binddevice/DragUtils.java b/app/src/main/java/com/yonsz/z1/fragment/person/binddevice/DragUtils.java new file mode 100644 index 0000000..113745b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/binddevice/DragUtils.java @@ -0,0 +1,78 @@ +package com.yonsz.z1.fragment.person.binddevice; + +import android.content.ClipDescription; +import android.text.TextUtils; +import android.util.Log; +import android.view.DragEvent; +import android.view.View; + +/** + * Created by Administrator on 2018/7/18. + */ + +public class DragUtils { + + private static DragStatus mCallBack; + + //在需要传递数据的一端的构造方法对接口进行初始化。 + public static void bindDragInZone(View view, final String tag, final int position) { + final int[] dragPoint = new int[2]; + final boolean[] isIn = {false}; + final String[] localState = {""}; + view.setOnDragListener(new View.OnDragListener() { + @Override + public boolean onDrag(View v, DragEvent event) { + final int action = event.getAction(); + + switch (action) { + case DragEvent.ACTION_DRAG_STARTED://拖拽开始 + localState[0] = (String) event.getLocalState(); + Log.i("rex", "localState-----" + localState[0]); + if (event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) { + // shadowView.setBackgroundResource(R.drawable.xml_rect_line_bg); + return true; + } + return false; + case DragEvent.ACTION_DRAG_ENTERED://拖拽进入目标区域 + Log.i("rex", "拖拽进入目标区域" + event.getX() + "----" + event.getY()); + Log.e("rex", "拖拽进入目标区域"); + isIn[0] = true; + + return true; + case DragEvent.ACTION_DRAG_LOCATION://拖拽位置 + return true; + + case DragEvent.ACTION_DRAG_EXITED://拖拽到目标区域外 + isIn[0] = false; + Log.e("rex", "拖拽到目标区域外"); + return true; + case DragEvent.ACTION_DROP: //拖拽完成之后松开手指 + Log.e("rex", "拖拽完成之后松开手指" + event.getX() + "----" + event.getY()); + dragPoint[0] = (int) event.getX(); + dragPoint[1] = (int) event.getY(); + + return true; + case DragEvent.ACTION_DRAG_ENDED://拖拽完成 + //在合适的位置调用接口里面的方法,传递数据。 + if (isIn[0] && !TextUtils.isEmpty(localState[0]) && mCallBack != null) { + mCallBack.complete(localState[0], tag, position); + } + isIn[0] = false; + return true; + default: + break; + } + return false; + } + }); + } + + public static void setCallBack(DragStatus callBack) { + mCallBack = callBack; + } + + //定义一个接口,用这一接口方便 两个view之间所在的调用 + public interface DragStatus { + void complete(String obj, String obj1, int position); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/binddevice/HorizontalAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/person/binddevice/HorizontalAdapter.java new file mode 100644 index 0000000..bdc39c3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/binddevice/HorizontalAdapter.java @@ -0,0 +1,87 @@ +package com.yonsz.z1.fragment.person.binddevice; + +import android.content.ClipData; +import android.content.ClipDescription; +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity4.BindEntity; +import com.yonsz.z1.utils.AddressNameUtil; + +import java.util.List; + +/** + * Created by Administrator on 2018/7/18. + */ + +public class HorizontalAdapter extends RecyclerView.Adapter { + + private List mObjEntity; + private Context mContext; + + public HorizontalAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_horizontal_device, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private ImageView devicePic; + private TextView deviceName; + private RelativeLayout root_relativelayout; + + public MessageViewHolder(View view) { + super(view); + devicePic = (ImageView) view.findViewById(R.id.iv_device_pic); + deviceName = (TextView) view.findViewById(R.id.tv_device_name); + root_relativelayout = (RelativeLayout) view.findViewById(R.id.root_relativelayout); + } + + public void setViews(final int position) { + String address = AddressNameUtil.getAddressName(mObjEntity.get(position).getAddressId()); + deviceName.setText(address + " " + mObjEntity.get(position).getZiName()); + if (mObjEntity.get(position).getConnectFlag() == 1) { + root_relativelayout.setAlpha(0.5f); + } else { + root_relativelayout.setAlpha(1.0f); + } + root_relativelayout.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + // shadowView = v; + String TAG = "test"; + ClipData.Item item = new ClipData.Item((String) v.getTag()); + ClipData data = new ClipData(TAG, new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN}, item); + String obj = position + "0";//你想传递的数据。比如你想拖拽替换图片 + v.startDrag(data, new View.DragShadowBuilder(v), obj, 0); + //第一个view就是 长按谁点击 第二个就是影子的样子 + return true; + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/binddevice/VerticalAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/person/binddevice/VerticalAdapter.java new file mode 100644 index 0000000..9378b98 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/binddevice/VerticalAdapter.java @@ -0,0 +1,125 @@ +package com.yonsz.z1.fragment.person.binddevice; + +import android.content.ClipData; +import android.content.ClipDescription; +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity4.BindEntity; +import com.yonsz.z1.utils.AddressNameUtil; + +import java.util.List; + +/** + * Created by Administrator on 2018/7/18. + */ + +public class VerticalAdapter extends RecyclerView.Adapter { + + private List mObjEntity; + private Context mContext; + + public VerticalAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_vertical_device, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + + class MessageViewHolder extends RecyclerView.ViewHolder { + private ImageView devicePic; + private TextView deviceName; + private TextView deviceName1; + private RelativeLayout root_relativelayout; + private View line1, line2; + private String addressName; + private String addressName1; + private TextView bindTxt; + + + public MessageViewHolder(View view) { + super(view); + line1 = (View) view.findViewById(R.id.dotted_line_vertical_1); + line2 = (View) view.findViewById(R.id.dotted_line_vertical_2); + deviceName = (TextView) view.findViewById(R.id.tv_device_name); + bindTxt = (TextView) view.findViewById(R.id.tv_bind_txt); + deviceName1 = (TextView) view.findViewById(R.id.tv_device_name_1); + devicePic = (ImageView) view.findViewById(R.id.iv_device_pic); + root_relativelayout = (RelativeLayout) view.findViewById(R.id.root_relativelayout); + } + + public void setViews(final int position) { + if (position == 0) { + line1.setVisibility(View.INVISIBLE); + } + if (position == mObjEntity.size() - 1) { + line2.setVisibility(View.INVISIBLE); + } + String addressId = mObjEntity.get(position).getOnlineDevice().getAddressId(); + addressName = AddressNameUtil.getAddressName(addressId); + deviceName.setText(addressName + " " + mObjEntity.get(position).getOnlineDevice().getZiName()); + if (null != mObjEntity.get(position).getAloneDevice()) { + String addressId1 = mObjEntity.get(position).getAloneDevice().getAddressId(); + addressName1 = AddressNameUtil.getAddressName(addressId1); + deviceName1.setText(addressName1 + " " + mObjEntity.get(position).getAloneDevice().getZiName()); + root_relativelayout.setVisibility(View.VISIBLE); + bindTxt.setVisibility(View.GONE); + } else { + root_relativelayout.setVisibility(View.GONE); + bindTxt.setVisibility(View.VISIBLE); + } + + if (mObjEntity.get(position).getOnlineDevice().getDeviceVersion() == 2) { + devicePic.setImageResource(R.drawable.pic_a2); + } else { + devicePic.setImageResource(R.drawable.pic_linkage_z1_online1); + } + + if (mObjEntity.get(position).getOnlineDevice().getStandardCode().equals("D1-L")) { + devicePic.setImageResource(R.drawable.pic_d1_online); + } + + DragUtils.bindDragInZone(root_relativelayout, "2", position); + DragUtils.bindDragInZone(bindTxt, "1", position); + + root_relativelayout.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + // shadowView = v; + String TAG = "test"; + ClipData.Item item = new ClipData.Item((String) v.getTag()); + ClipData data = new ClipData(TAG, new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN}, item); + String obj = position + "1";//你想传递的数据。比如你想拖拽替换图片 + v.startDrag(data, new View.DragShadowBuilder(v), obj, 0); + //第一个view就是 长按谁点击 第二个就是影子的样子 + return true; + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/BaseServerDialog.java b/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/BaseServerDialog.java new file mode 100644 index 0000000..7672179 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/BaseServerDialog.java @@ -0,0 +1,169 @@ +package com.yonsz.z1.fragment.person.changeserver; + +import android.app.Activity; +import android.content.Context; +import android.support.design.widget.TextInputLayout; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.Toast; + +import com.alibaba.fastjson.JSONArray; +import com.yonsz.z1.R; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Thisfeng on 2017/3/9 0009 20:44 + */ + +public abstract class BaseServerDialog implements View.OnClickListener { + + + private static final String serverSP = "serverSP"; + private static final String SERVER_LIST = "serverList"; + private static ShareStorage storage; + private Activity context; + private AlertDialog dialog; + private AlertDialog.Builder builder; + private LinearLayout layout; + private TextInputLayout inputLayout; + private TextInputLayout session, port; + private RecyclerView recyclerView; + private List serverList; + + public BaseServerDialog(final Activity context) { + this.context = context; + builder = new AlertDialog.Builder(context); + layout = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.dialog_base_server, null); + inputLayout = (TextInputLayout) layout.findViewById(R.id.tl); + session = (TextInputLayout) layout.findViewById(R.id.session); + port = (TextInputLayout) layout.findViewById(R.id.port); + inputLayout.getEditText().setText(getServerUrl());//手动设置的地址 + session.getEditText().setText(SharedpreferencesUtil.get(Constans.SEESSIONID, ""));//手动设置的地址 + if (!SharedpreferencesUtil.get(Constans.PORT, "").isEmpty() && SharedpreferencesUtil.get(Constans.PORT, "").contains(":")) { + port.getEditText().setText(SharedpreferencesUtil.get(Constans.PORT, ""));//手动设置的地址 + } else { + port.getEditText().setText("wss.yonsz.net:25533");//手动设置的地址 + } + recyclerView = (RecyclerView) layout.findViewById(R.id.rv); + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + serverList = new ArrayList<>(); + String list = getStorage(context).getString(SERVER_LIST);//取得SP中的服务器list数据 + //如果list为空就添加,不为空则将sp中的list数据解析成Array用于给adapter设置数据 + if (list.isEmpty()) { + serverList.addAll(defaultServerUrlList()); + } else { + //这里我在项目中用的是fastJson为了简单直接用它转换为list + serverList = JSONArray.parseArray(getStorage(context).getString(SERVER_LIST), String.class); + } + ServerDialogAdapter adapter = new ServerDialogAdapter(serverList, new ServerDialogAdapter.OnItemClickListener() { + @Override + public void onItemClick(View view, int position, String url) { + setServerUrl(url); +// dismiss(); + inputLayout.getEditText().setText(url); + if (url.contains("stress.yonsz.net")) { + port.getEditText().setText("wss.yonsz.net:25533"); + } else { + port.getEditText().setText(url.substring(url.lastIndexOf("//") + 2, url.lastIndexOf(":")) + ":25533"); + } + Toast.makeText(context, "设置更换地址成功,请结束应用重新开启", Toast.LENGTH_SHORT).show(); + } + }); + recyclerView.setAdapter(adapter); + + + Button btnNext = (Button) layout.findViewById(R.id.btn); + btnNext.setOnClickListener(this); + + } + + /** + * 创建一个SharedPreferences存储 服务器地址 + */ + private static ShareStorage getStorage(Context context) { + if (storage == null) { + storage = new ShareStorage(context, serverSP); + } + return storage; + } + + /** + * 手动输入时将此输入地址 添加进本地SP存储 + */ + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.btn: + String string = inputLayout.getEditText().getText().toString().trim(); + String stringSession = session.getEditText().getText().toString().trim(); + String stringPort = port.getEditText().getText().toString().trim(); + if (!stringSession.isEmpty()) { + if (!SharedpreferencesUtil.get(Constans.SEESSIONID, "").equals(stringSession)) { + Toast.makeText(context, "session修改成功", Toast.LENGTH_SHORT).show(); + SharedpreferencesUtil.save(Constans.SEESSIONID, stringSession); + } + } + if (!stringPort.isEmpty()) { + if (!SharedpreferencesUtil.get(Constans.PORT, "").equals(stringPort)) { + // Toast.makeText(context, "端口号修改成功", Toast.LENGTH_SHORT).show(); + SharedpreferencesUtil.save(Constans.PORT, stringPort); + } + } else { + Toast.makeText(context, "端口号不能为空", Toast.LENGTH_SHORT).show(); + return; + } + if (!string.isEmpty()) { + String url = inputLayout.getEditText().getText().toString().trim(); + //如果不包含添加进来list首位 + if (!serverList.contains(url)) { + serverList.add(0, url); + //这里我用的是fastJson将array转换成string存 + getStorage(context).put(SERVER_LIST, JSONArray.toJSONString(serverList)); + } + setServerUrl(url);//设置输入的服务器地址 + Toast.makeText(context, "设置更换地址成功,请结束应用重新开启", Toast.LENGTH_SHORT).show(); + } + dismiss(); + break; + + } + } + + /** + * use this method to show dialog, do not use getBuilder to show + */ + public void show() { + if (dialog == null) { + dialog = builder.create(); + dialog.setCanceledOnTouchOutside(false);//点击外部是否消失 + } + dialog.show(); + dialog.getWindow().setContentView(layout); + dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + } + + public void dismiss() { + if (dialog != null) { + dialog.dismiss(); + } + } + + protected abstract String getServerUrl(); + + protected abstract void setServerUrl(String selectedUrl); + + protected abstract List defaultServerUrlList(); + + protected abstract List defaultServerUrlList1(); +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/SP.java b/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/SP.java new file mode 100644 index 0000000..a5784a2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/SP.java @@ -0,0 +1,22 @@ +package com.yonsz.z1.fragment.person.changeserver; + + +import com.yonsz.z1.UniKongApp; + +/** + * Created by Thisfeng on 2017/3/9 0009 21:54 + * 项目中专门用来管理本地用户数据 和公共的数据的 SharedPreferences + */ + +public class SP { + public static final String server = "server"; + private static final String publicSP = "publicSP"; + private static ShareStorage publicStorage; + + public static ShareStorage getPublic() { + if (publicStorage == null) { + publicStorage = new ShareStorage(UniKongApp.getHiApp().getApplicationContext(), publicSP); + } + return publicStorage; + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/ServerDialogAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/ServerDialogAdapter.java new file mode 100644 index 0000000..866e9fb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/ServerDialogAdapter.java @@ -0,0 +1,82 @@ +package com.yonsz.z1.fragment.person.changeserver; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.yonsz.z1.R; + +import java.util.List; + +/** + * Created by Thisfeng on 2017/3/9 0009 21:13 + */ + +public class ServerDialogAdapter extends RecyclerView.Adapter { + + /** + * 数据源 + */ + private List datas; + + /** + * 回调 + */ + private ServerDialogAdapter.OnItemClickListener onItemClickListener; + + /** + * @param datas 数据源 + * @param listener item 点击回调 + */ + public ServerDialogAdapter(List datas, ServerDialogAdapter.OnItemClickListener listener) { + this.datas = datas; + this.onItemClickListener = listener; + notifyDataSetChanged(); + } + + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_server_url, parent, false); + ViewHolder viewHolder = new ViewHolder(view); + return viewHolder; + } + + @Override + public void onBindViewHolder(final ViewHolder holder, final int position) { + holder.tv.setText(datas.get(position)); + holder.tv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onItemClickListener != null) { + onItemClickListener.onItemClick(holder.itemView, holder.getLayoutPosition(), datas.get(position)); + } + } + }); + + } + + + @Override + public int getItemCount() { + return datas == null ? 0 : datas.size(); + } + + + public interface OnItemClickListener { + void onItemClick(View view, int position, String url); + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + + TextView tv; + + public ViewHolder(View itemView) { + super(itemView); + tv = (TextView) itemView.findViewById(R.id.tv); + } + } + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/ServerSelectDialog.java b/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/ServerSelectDialog.java new file mode 100644 index 0000000..918b36c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/ServerSelectDialog.java @@ -0,0 +1,51 @@ +package com.yonsz.z1.fragment.person.changeserver; + +import android.app.Activity; + +import com.yonsz.z1.net.NetWorkUrl; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Thisfeng on 2017/3/9 0009 21:53 + */ + +public class ServerSelectDialog extends BaseServerDialog { + + public ServerSelectDialog(Activity context) { + super(context); + } + + @Override + protected String getServerUrl() { + return NetWorkUrl.getSERVER(); + } + + /** + * @param selectedUrl 将地址设置到本地SP文件中 + */ + @Override + protected void setServerUrl(String selectedUrl) { + //这个SP中一般存储的是公共的参数包含服务器地址 + SP.getPublic().put(SP.server, selectedUrl); + } + + @Override + protected List defaultServerUrlList() { + List serverList = new ArrayList<>(); + serverList.add(NetWorkUrl.SERVER_URL); + serverList.add(NetWorkUrl.SERVER_BACKUP); + serverList.add(NetWorkUrl.SERVER_BACKUP2); + serverList.add(NetWorkUrl.SERVER_BACKUP3); + return serverList; + } + + @Override + protected List defaultServerUrlList1() { + List serverList = new ArrayList<>(); + serverList.add("192.168.3.114:25533"); + serverList.add("192.168.3.119:25533"); + return serverList; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/ShareStorage.java b/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/ShareStorage.java new file mode 100644 index 0000000..2aa0686 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/changeserver/ShareStorage.java @@ -0,0 +1,83 @@ +package com.yonsz.z1.fragment.person.changeserver; + +import android.content.Context; +import android.content.SharedPreferences; +import android.support.annotation.NonNull; + +/** + * Created by XY on 2016-07-27. + */ +public class ShareStorage { + + private SharedPreferences storage; + + public ShareStorage(@NonNull Context context, @NonNull String preferenceName) { + storage = context.getSharedPreferences(preferenceName, Context.MODE_PRIVATE); + } + + /** + * clear all content + */ + public void clear() { + storage.edit().clear().apply(); + } + + public void put(String key, Object value) { + storage.edit().putString(key, value.toString()).apply(); + } + + public void put(String key, int value) { + storage.edit().putInt(key, value).apply(); + } + + public void put(String key, float value) { + storage.edit().putFloat(key, value).apply(); + } + + public void put(String key, boolean value) { + storage.edit().putBoolean(key, value).apply(); + } + + public void put(String key, String value) { + storage.edit().putString(key, value).apply(); + } + + public void put(String key, long value) { + storage.edit().putLong(key, value).apply(); + } + + public void put(String key, double value) { + Double newValue = value; + storage.edit().putString(key, newValue.toString()).apply(); + } + + public String getString(String key) { + return storage.getString(key, ""); + } + + public String getString(String key, String defValue) { + return storage.getString(key, defValue); + } + + public boolean getBoolean(String key, boolean defValue) { + return storage.getBoolean(key, defValue); + } + + public int getInt(String key, int defValue) { + return storage.getInt(key, defValue); + } + + public float getFloat(String key, float defValue) { + return storage.getFloat(key, defValue); + } + + public double getDouble(String key, double defValue) { + String value = storage.getString(key, null); + return value == null ? defValue : Double.parseDouble(value); + } + + public long getLong(String key, long defValue) { + return storage.getLong(key, defValue); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/language/ChangeLanguageActivity.java b/app/src/main/java/com/yonsz/z1/fragment/person/language/ChangeLanguageActivity.java new file mode 100644 index 0000000..b6954c8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/language/ChangeLanguageActivity.java @@ -0,0 +1,142 @@ +package com.yonsz.z1.fragment.person.language; + +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2018/11/15. + */ + +public class ChangeLanguageActivity extends BaseActivity { + private static int languageState; + private TitleView mTitleView; + private RelativeLayout oneRl, twoRl, threeRl; + private ImageView oneIv, twoIv, threeIv; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_change_language); + initView(); + initListener(); + } + + private void initView() { + languageState = Languagetils.getLanguageType(this); + oneRl = (RelativeLayout) findViewById(R.id.rl_one); + twoRl = (RelativeLayout) findViewById(R.id.rl_two); + threeRl = (RelativeLayout) findViewById(R.id.rl_three); + + oneIv = (ImageView) findViewById(R.id.iv_one); + twoIv = (ImageView) findViewById(R.id.iv_two); + threeIv = (ImageView) findViewById(R.id.iv_three); + + mTitleView = (TitleView) findViewById(R.id.title_change_language); + mTitleView.setHead(R.string.more_language); + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + toSetLanguage(languageState); + } + + @Override + public void onFunctionText() { + + } + }); + + switch (languageState) { + case 0: + oneIv.setVisibility(View.VISIBLE); + twoIv.setVisibility(View.INVISIBLE); + threeIv.setVisibility(View.INVISIBLE); + break; + case 1: + oneIv.setVisibility(View.INVISIBLE); + twoIv.setVisibility(View.INVISIBLE); + threeIv.setVisibility(View.VISIBLE); + break; + case 2: + oneIv.setVisibility(View.VISIBLE); + twoIv.setVisibility(View.INVISIBLE); + threeIv.setVisibility(View.INVISIBLE); + break; + case 3: + oneIv.setVisibility(View.INVISIBLE); + twoIv.setVisibility(View.VISIBLE); + threeIv.setVisibility(View.INVISIBLE); + break; + default: + oneIv.setVisibility(View.INVISIBLE); + twoIv.setVisibility(View.VISIBLE); + threeIv.setVisibility(View.INVISIBLE); + break; + } + } + + private void initListener() { + oneRl.setOnClickListener(this); + twoRl.setOnClickListener(this); + threeRl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rl_one: + oneIv.setVisibility(View.VISIBLE); + twoIv.setVisibility(View.INVISIBLE); + threeIv.setVisibility(View.INVISIBLE); + languageState = 2; + break; + case R.id.rl_two: + oneIv.setVisibility(View.INVISIBLE); + twoIv.setVisibility(View.VISIBLE); + threeIv.setVisibility(View.INVISIBLE); + languageState = 3; + break; + case R.id.rl_three: + oneIv.setVisibility(View.INVISIBLE); + twoIv.setVisibility(View.INVISIBLE); + threeIv.setVisibility(View.VISIBLE); + languageState = 1; + break; + } + } + + private void toSetLanguage(int type) { + Languagetils.setLocale(this, type); + // 前面取系统语言时判断spType=0时取第一值,所以设置完语言后缓存type + Languagetils.putLanguageType(this, type); + Languagetils.toRestartMainActvity(this); + /*boolean sameLanguage = Languagetils.isSameLanguage(this, type); + if (!sameLanguage) { + Languagetils.setLocale(this, type); + // 前面取系统语言时判断spType=0时取第一值,所以设置完语言后缓存type + Languagetils.putLanguageType(this, type); + Languagetils.toRestartMainActvity(this); + } else { + // 缓存用户此次选择的类型,可能出现type不同而locale一样的情况(如:系统默认泰语type = 0,而我选择的也是泰语type = 3) + Languagetils.putLanguageType(this, type); + }*/ + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/language/Languagetils.java b/app/src/main/java/com/yonsz/z1/fragment/person/language/Languagetils.java new file mode 100644 index 0000000..12a4a0e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/language/Languagetils.java @@ -0,0 +1,157 @@ +package com.yonsz.z1.fragment.person.language; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.util.DisplayMetrics; +import android.util.Log; +import android.webkit.WebView; + +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.version4.MainActivity4; + +import java.util.Locale; + +/** + * Created by Fitem on 2017/12/8. + */ + +public class Languagetils { + + private static final String TAG = "I18NUtils"; + + /** + * 设置本地化语言 + * + * @param context + * @param type + */ + public static void setLocale(Context context, int type) { + // 解决webview所在的activity语言没有切换问题 +// new WebView(context).destroy(); + // 切换语言 + Resources resources = context.getResources(); + DisplayMetrics dm = resources.getDisplayMetrics(); + Configuration config = resources.getConfiguration(); + config.locale = getLocaleByType(type); + Log.d(TAG, "setLocale: " + config.locale.toString()); + resources.updateConfiguration(config, dm); + } + + /** + * 根据type获取locale + * + * @param type + * @return + */ + private static Locale getLocaleByType(int type) { + Locale locale; + // 应用用户选择语言 + switch (type) { + case 0: + //由于API仅支持7.0,需要判断,否则程序会crash(解决7.0以上系统不能跟随系统语言问题) + /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + LocaleList localeList = LocaleList.getDefault(); + int spType = getLanguageType(UniKongApp.getInstance().getApplicationContext()); + // 如果app已选择不跟随系统语言,则取第二个数据为系统默认语言 + if (spType != 0 && localeList.size() > 1) { + locale = localeList.get(1); + } else { + locale = localeList.get(0); + } + } else { + locale = Locale.getDefault(); + }*/ + locale = Locale.SIMPLIFIED_CHINESE; + break; + case 1: + locale = Locale.US; + break; + case 2: + locale = Locale.SIMPLIFIED_CHINESE; + break; + default: + locale = Locale.TRADITIONAL_CHINESE; + break; + } + return locale; + } + + /** + * 根据sp数据设置本地化语言 + * + * @param context + */ + public static void setLocale(Context context) { + int type = getLanguageType(context); + setLocale(context, type); + } + + /** + * 判断是否是相同语言 + * + * @param context + * @return + */ + public static boolean isSameLanguage(Context context) { + int type = getLanguageType(context); + return isSameLanguage(context, type); + } + + /** + * 判断是否是相同语言 + * + * @param context + * @param type + * @return + */ + public static boolean isSameLanguage(Context context, int type) { + Locale locale = getLocaleByType(type); + Locale appLocale = context.getResources().getConfiguration().locale; + boolean equals = appLocale.equals(locale); + Log.d(TAG, "isSameLanguage: " + locale.toString() + " / " + appLocale.toString() + " / " + equals); + return equals; + } + + /** + * sp存储本地语言类型 + * + * @param context + * @param type + */ + public static void putLanguageType(Context context, int type) { + SharedPreferences sp = context.getSharedPreferences(Constans.I18N, Context.MODE_PRIVATE); + SharedPreferences.Editor edit = sp.edit(); + edit.putInt(Constans.LOCALE_LANGUAGE, type); + edit.commit(); + } + + /** + * sp获取本地存储语言类型 + * + * @param context + * @return + */ + public static int getLanguageType(Context context) { + SharedPreferences sp = context.getSharedPreferences(Constans.I18N, Context.MODE_PRIVATE); + int type = sp.getInt(Constans.LOCALE_LANGUAGE, 0); + return type; + } + + /** + * 跳转主页 + * + * @param activity + */ + public static void toRestartMainActvity(Activity activity) { + Intent intent = new Intent(activity, MainActivity4.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + activity.startActivity(intent); + // 杀掉进程,如果是跨进程则杀掉当前进程 + // android.os.Process.killProcess(android.os.Process.myPid()); + // System.exit(0); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/DeviceUpgradeActivity.java b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/DeviceUpgradeActivity.java new file mode 100644 index 0000000..1a07e62 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/DeviceUpgradeActivity.java @@ -0,0 +1,66 @@ +package com.yonsz.z1.fragment.person.upgrade; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2018/11/7. + */ + +public class DeviceUpgradeActivity extends BaseActivity { + private TitleView mTitleView; + private TextView toUpgradeTv; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_upgrade); + initView(); + } + + private void initView() { + toUpgradeTv = (TextView) findViewById(R.id.tv_to_upgrade); + mTitleView = (TitleView) findViewById(R.id.title_device_upgrade); + mTitleView.setHead(R.string.device_upgrade); + mTitleView.clearBackGroud(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + + @Override + public void onFunctionText() { + + } + }); + + toUpgradeTv.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent = new Intent(DeviceUpgradeActivity.this, UpgradeChooseActivity.class); + startActivity(intent); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/MessageManageActivity.java b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/MessageManageActivity.java new file mode 100644 index 0000000..d7d659e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/MessageManageActivity.java @@ -0,0 +1,227 @@ +package com.yonsz.z1.fragment.person.upgrade; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import android.widget.Button; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.MessageManageEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_SUCCESS; + +/** + * Created by Administrator on 2018/9/11. + */ + +public class MessageManageActivity extends BaseActivity { + private TitleView mTitleView; + private RecyclerView homeManagerRv; + private List homeList; + private MessageManageAdapter mHomeManageAdapter; + private LoadingDialog mLoadingDialog; + private Button bt_start_config; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_message_manage); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + queryHouses(); + } + + private void initView() { + homeList = new ArrayList<>(); + homeManagerRv = (RecyclerView) findViewById(R.id.rv_home_manage); + bt_start_config = (Button) findViewById(R.id.bt_start_config); + bt_start_config.setOnClickListener(this); + mTitleView = (TitleView) findViewById(R.id.title_home_manage); + mTitleView.setHead("短信提醒管理"); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + mHomeManageAdapter = new MessageManageAdapter(this, homeList); + RecyclerViewNoBugLinearLayoutManager manage1 = new RecyclerViewNoBugLinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + homeManagerRv.setHasFixedSize(true); + homeManagerRv.setLayoutManager(manage1); + homeManagerRv.setAdapter(mHomeManageAdapter); + + mHomeManageAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + if (homeList.get(position).getSafeSmsSwitch()==1) { + homeList.get(position).setSafeSmsSwitch(0); + } else { + homeList.get(position).setSafeSmsSwitch(1); + } + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_start_config: + userSmsNotifyManager(); + break; + } + } + + private void userSmsNotifyManager() { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestPostByAsyBody(NetWorkUrl.USERSMS_SAFETYSMSNOTIFYMANAGER, map, JSONObject.toJSONString(homeList), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("SmsNotifyManager", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case QUERY_HOUSES_SUCCESS: + MessageManageEntity homeListEntity = (MessageManageEntity) msg.obj; + homeList.clear(); + homeList.addAll(homeListEntity.getData()); + mHomeManageAdapter.notifyDataSetChanged(); + break; + case CREATE_ORUPDATE_HOUSE_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, "保存成功"); + break; + case CREATE_ORUPDATE_HOUSE_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case GET_USER_SESSION_NULL: + NettyHandlerUtil.closeCtx(); + ToastUtil.show(this, "用户在其他手机登陆"); + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + SharedpreferencesUtil.save(Constans.TOKENID, ""); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(MessageManageActivity.this, LoginActivity.class); + startActivity(intent); + finish(); + } + }, 1000); + break; + } + } + + private void queryHouses() { + HashMap map = new HashMap<>(); + map.put("autoCreate", "0"); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.QUERY_HOUSES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryHouses", "UpdatePwActivity onSuccess()" + respone); + MessageManageEntity obj = JSON.parseObject(respone, MessageManageEntity.class); + if (-401 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USER_SESSION_NULL); + mHandler.sendMessage(msg); + } else if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/MessageManageAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/MessageManageAdapter.java new file mode 100644 index 0000000..57c53fc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/MessageManageAdapter.java @@ -0,0 +1,102 @@ +package com.yonsz.z1.fragment.person.upgrade; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.MessageManageEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2018/9/11. + */ + +public class MessageManageAdapter extends RecyclerView.Adapter { + private List mObjEntity; + private Context mContext; + private OnRecyclerClickListener mOnItemClickListener; + + public MessageManageAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message_manage, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView homeName; + private TextView isOwner; + private RelativeLayout root_relativelayout; + private View line; + private CheckBox cb_message; + + public MessageViewHolder(View view) { + super(view); + homeName = (TextView) view.findViewById(R.id.tv_home_name); + isOwner = (TextView) view.findViewById(R.id.tv_is_owner); + root_relativelayout = (RelativeLayout) view.findViewById(R.id.root); + line = (View) view.findViewById(R.id.view_line); + cb_message = (CheckBox) view.findViewById(R.id.cb_message); + } + + public void setViews(final int position) { + homeName.setText(mObjEntity.get(position).getHouseName()); + if (mObjEntity.get(position).getIsOwner() == 1) { + isOwner.setText(""); + } else { + isOwner.setText(mObjEntity.get(position).getShareUser() + "分享"); + } + if (mObjEntity.get(position).getSafeSmsSwitch()==1) { + cb_message.setChecked(true); + } else { + cb_message.setChecked(false); + } + + /*root_relativelayout.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + } + });*/ + cb_message.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeChooseActivity.java b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeChooseActivity.java new file mode 100644 index 0000000..3960ea3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeChooseActivity.java @@ -0,0 +1,295 @@ +package com.yonsz.z1.fragment.person.upgrade; + +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.tencent.mm.opensdk.modelpay.PayReq; +import com.tencent.mm.opensdk.openapi.IWXAPI; +import com.tencent.mm.opensdk.openapi.WXAPIFactory; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AppPayEntity; +import com.yonsz.z1.database.entity.UpgradeDeviceEntity; +import com.yonsz.z1.device.DeviceExpandableListView; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.fragment.main4.MainFragment4; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.difference.DifferConstans.WX_APP_ID; +import static com.yonsz.z1.net.Constans.APP_PAY_FAIL; +import static com.yonsz.z1.net.Constans.APP_PAY_SUCCESS; +import static com.yonsz.z1.net.Constans.NEEDUPGRADE_TOONLINE_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.NEEDUPGRADE_TOONLINE_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.APP_PAY; +import static com.yonsz.z1.net.NetWorkUrl.NEEDUPGRADE_TOONLINE_DEVICES; + +/** + * Created by Administrator on 2018/11/7. + */ + +public class UpgradeChooseActivity extends BaseActivity { + private static double price = 0.0; + private TitleView mTitleView; + private DeviceExpandableListView mListView; + private CheckBox weChatPay, aliPay; + private TextView totalMoney, toBuy; + private IWXAPI iwxapi; + private UpgradeDeviceAdapter deviceAdapter; + private List mStringList = new ArrayList<>(); + private String totalAmount = "0"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_choose_upgrade); + initView(); + iwxapi = WXAPIFactory.createWXAPI(this, WX_APP_ID, false); + iwxapi.registerApp(WX_APP_ID); + } + + @Override + public void onResume() { + super.onResume(); + totalAmount = "0"; + mStringList.clear(); + needUpgradeToOnlineDevices(); + } + + private void initView() { + weChatPay = (CheckBox) findViewById(R.id.cb_wechat_pay); + aliPay = (CheckBox) findViewById(R.id.cb_ali_pay); + totalMoney = (TextView) findViewById(R.id.tv_total_money); + toBuy = (TextView) findViewById(R.id.tv_to_buy); + mTitleView = (TitleView) findViewById(R.id.title_choose_upgrade); + mTitleView.setHead(R.string.choose_upgrade_device); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mListView = (DeviceExpandableListView) findViewById(R.id.expandablelist); + weChatPay.setOnClickListener(this); + aliPay.setOnClickListener(this); + toBuy.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_wechat_pay: + if (DifferConstans.APPID_S_VOICE.equals("110101")) { + ToastUtil.show(this, "微信支付正在开发中。"); + weChatPay.setChecked(false); + } else { + isGray(); + } + break; + case R.id.cb_ali_pay: + + break; + case R.id.tv_to_buy: + if (totalMoney.getText().toString().trim().equals("0")) { + ToastUtil.show(this, "请选择需要升级的设备"); + return; + } + if (!weChatPay.isChecked()) { + ToastUtil.show(this, "请选择支付方式"); + return; + } + appPay(); + break; + } + } + + private void isGray() { + if (!totalMoney.getText().toString().trim().equals("0") && weChatPay.isChecked()) { + toBuy.setEnabled(true); + toBuy.setBackground(getDrawable(R.drawable.btn_round_360_bg)); + } else { + toBuy.setEnabled(false); + toBuy.setBackground(getDrawable(R.drawable.btn_round_360_gray)); + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case APP_PAY_SUCCESS: + AppPayEntity appPayEntity = (AppPayEntity) msg.obj; + String appId = appPayEntity.getData().getAppid(); + String partnerId = appPayEntity.getData().getPartnerid(); + String prepayId = appPayEntity.getData().getPrepayid(); + String packageValue = "Sign=WXPay"; + String nonceStr = appPayEntity.getData().getNoncestr(); + String timeStamp = appPayEntity.getData().getTimestamp(); + String sign = appPayEntity.getData().getSign(); + + PayReq req = new PayReq(); + req.appId = appId; + req.partnerId = partnerId; + req.prepayId = prepayId; + req.packageValue = packageValue; + req.nonceStr = nonceStr; + req.timeStamp = timeStamp; + req.sign = sign; + iwxapi.sendReq(req); + break; + case APP_PAY_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case NEEDUPGRADE_TOONLINE_DEVICES_SUCCESS: + totalMoney.setText(totalAmount); + toBuy.setEnabled(false); + toBuy.setBackground(getDrawable(R.drawable.btn_round_360_gray)); + UpgradeDeviceEntity deviceEntity = (UpgradeDeviceEntity) msg.obj; + if (null != deviceEntity.getData()) { + setViewData(deviceEntity); + } + break; + case NEEDUPGRADE_TOONLINE_DEVICES_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void setViewData(UpgradeDeviceEntity deviceEntity) { + deviceAdapter = new UpgradeDeviceAdapter(getBaseContext(), deviceEntity.getData()); + if (deviceEntity.getData().size() > 0) { + price = Double.parseDouble(deviceEntity.getData().get(0).getPrice()); + } + mListView.setAdapter(deviceAdapter); + for (int i = 0; i < deviceAdapter.getGroupCount(); i++) { + mListView.expandGroup(i); + } + deviceAdapter.setmOnExpandItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id) { + switch (j) { + case 0: + //删除 + mStringList.remove(id); + if (mStringList.size() == 0) { + totalAmount = "0"; + } else + totalAmount = String.valueOf((double) price * mStringList.size()); + totalMoney.setText(totalAmount); + break; + case 1: + //添加 + mStringList.add(id); + if (mStringList.size() == 0) { + totalAmount = "0"; + } else + totalAmount = String.valueOf((double) price * mStringList.size()); + totalMoney.setText(totalAmount); + break; + } + isGray(); + } + }); + } + + private void appPay() { + StringBuilder stringBuilderAdd = new StringBuilder(); + if (mStringList.size() == 0) { + ToastUtil.show(this, "请选择需要升级的设备"); + return; + } else { + for (int i = 0; i < mStringList.size(); i++) { + if (i < mStringList.size() - 1) { + stringBuilderAdd.append(mStringList.get(i)); + stringBuilderAdd.append("_"); + } else { + stringBuilderAdd.append(mStringList.get(i)); + } + } + } + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("totalAmount", totalAmount); + map.put("macs", String.valueOf(stringBuilderAdd)); + map.put("goodsType", "1"); + map.put("payMode", "2"); + netWorkUtil.requestPostByAsynew(APP_PAY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("appPay", "onSuccess()" + respone); + AppPayEntity obj = JSON.parseObject(respone, AppPayEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(APP_PAY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(APP_PAY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(APP_PAY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private void needUpgradeToOnlineDevices() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + netWorkUtil.requestPostByAsynewApi(NEEDUPGRADE_TOONLINE_DEVICES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("needUpgrade", "onSuccess()" + respone); + UpgradeDeviceEntity obj = JSON.parseObject(respone, UpgradeDeviceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(NEEDUPGRADE_TOONLINE_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(NEEDUPGRADE_TOONLINE_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(NEEDUPGRADE_TOONLINE_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeDeviceAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeDeviceAdapter.java new file mode 100644 index 0000000..8cc19e8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeDeviceAdapter.java @@ -0,0 +1,216 @@ +package com.yonsz.z1.fragment.person.upgrade; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseExpandableListAdapter; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.UpgradeDeviceEntity; +import com.yonsz.z1.device.SlideView; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.utils.AddressNameUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2018/11/7. + */ + +public class UpgradeDeviceAdapter extends BaseExpandableListAdapter { + private Context mContext; + private List mObjEntity; + private List> mDatas = new ArrayList<>(); + private int groupCount = 0; + private String houseName; + private OnExbandItemClickListener mExbandItemClickListener; + private int totalNUmber = 0; + + + public UpgradeDeviceAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + //转换成需要的列表 + convertList(mObjEntity); + } + + private List> convertList(List mObjEntity) { + if (mObjEntity != null && mObjEntity.size() > 0) { + List mChildData = null; + houseName = mObjEntity.get(0).getHouseName().toString(); + List ziIdStrings = new ArrayList<>(); + for (int i = 0; i < mObjEntity.size(); i++) { + ziIdStrings.add(mObjEntity.get(i).getHouseName()); + } + List list = removeDuplicate(ziIdStrings); + for (int i = 0; i < list.size(); i++) { + mChildData = new ArrayList<>(); + for (int j = 0; j < mObjEntity.size(); j++) { + if (mObjEntity.get(j).getHouseName().equals(list.get(i))) { + mChildData.add(mObjEntity.get(j)); + } + } + mDatas.add(mChildData); + } + } + return mDatas; + } + + private List removeDuplicate(List list) { + for (int i = 0; i < list.size() - 1; i++) { + for (int j = list.size() - 1; j > i; j--) { + if (list.get(j).equals(list.get(i))) { + list.remove(j); + } + } + } + return list; + } + + + @Override + public int getGroupCount() { + return mDatas.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + return mDatas.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return mObjEntity.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + ParentHolder parentHolder; + SlideView slideView = (SlideView) convertView; + if (slideView == null) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_choose_upgrade, null); + slideView = new SlideView(mContext, false, false); + slideView.setContentView(itemView); + parentHolder = new ParentHolder(slideView); + slideView.setTag(parentHolder); + } else { + parentHolder = (ParentHolder) slideView.getTag(); + } + slideView.shrink(); + if (mDatas.get(groupPosition).get(0).getHouseName() != null) { + parentHolder.devicePosition.setText(mDatas.get(groupPosition).get(0).getHouseName().toString()); + } else { + parentHolder.devicePosition.setText(R.string.no_position); + } + if (isExpanded) { + parentHolder.arrowIv.setImageDrawable(mContext.getResources().getDrawable(R.drawable.arrow_down)); + } else { + parentHolder.arrowIv.setImageDrawable(mContext.getResources().getDrawable(R.drawable.arrow_up)); + } + return slideView; + } + + @Override + public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + final ChildHolder childHolder; + SlideView slideView = (SlideView) convertView; + if (slideView == null) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_choose_upgrade_child, null); + slideView = new SlideView(mContext, false, false); + slideView.setContentView(itemView); + childHolder = new ChildHolder(slideView); + slideView.setTag(childHolder); + } else { + childHolder = (ChildHolder) slideView.getTag(); + } + slideView.shrink(); + String deviceAddress = AddressNameUtil.getAddressName(mDatas.get(groupPosition).get(childPosition).getAddressId()); + childHolder.position.setText(deviceAddress); + childHolder.name.setText(mDatas.get(groupPosition).get(childPosition).getZiName()); + childHolder.price.setText(mDatas.get(groupPosition).get(childPosition).getPrice()); + + final SlideView finalSlideView = slideView; + childHolder.mDeviceChoose.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + if (!childHolder.mDeviceChoose.isChecked()) { + //删除 + if (totalNUmber > 0) { + totalNUmber -= 1; + } + mExbandItemClickListener.onClick(finalSlideView, groupPosition, childPosition, 0, 0, mDatas.get(groupPosition).get(childPosition).getZiId()); + childHolder.mDeviceChoose.setChecked(false); + } else { + //增加 + totalNUmber += 1; + mExbandItemClickListener.onClick(finalSlideView, groupPosition, childPosition, 0, 1, mDatas.get(groupPosition).get(childPosition).getZiId()); + } + } + } + }); + return slideView; + } + + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + //点击事件 + public void setmOnExpandItemClickListener(OnExbandItemClickListener mExbandItemClickListener) { + this.mExbandItemClickListener = mExbandItemClickListener; + } + + private static class ChildHolder { + public TextView position; + public TextView name; + public TextView price; + private CheckBox mDeviceChoose; + private RelativeLayout rl_innet_bg; + + ChildHolder(View view) { + position = (TextView) view.findViewById(R.id.tv_device_position); + name = (TextView) view.findViewById(R.id.tv_device_name); + price = (TextView) view.findViewById(R.id.tv_device_price); + mDeviceChoose = (CheckBox) view.findViewById(R.id.cb_device_choose); + } + } + + private static class ParentHolder { + public TextView devicePosition; + private ImageView arrowIv; + + ParentHolder(View view) { + devicePosition = (TextView) view.findViewById(R.id.tv_device_position); + arrowIv = (ImageView) view.findViewById(R.id.iv_arrow_down_up); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeSmsActivity.java b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeSmsActivity.java new file mode 100644 index 0000000..bc75cb0 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeSmsActivity.java @@ -0,0 +1,349 @@ +package com.yonsz.z1.fragment.person.upgrade; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.tencent.mm.opensdk.modelpay.PayReq; +import com.tencent.mm.opensdk.openapi.IWXAPI; +import com.tencent.mm.opensdk.openapi.WXAPIFactory; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AppPayEntity; +import com.yonsz.z1.database.entity.MessageEntity; +import com.yonsz.z1.listener.OnRecyclerListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.difference.DifferConstans.WX_APP_ID; +import static com.yonsz.z1.net.Constans.APP_PAY_FAIL; +import static com.yonsz.z1.net.Constans.APP_PAY_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_PHONE_NUMBER; +import static com.yonsz.z1.net.Constans.NEEDUPGRADE_TOONLINE_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.NEEDUPGRADE_TOONLINE_DEVICES_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.GET_SMSPACKAGE_LIST; +import static com.yonsz.z1.net.NetWorkUrl.GET_USERSMS_INFO; +import static com.yonsz.z1.net.NetWorkUrl.USERSMS_CREATEORDER; + +/** + * Created by Administrator on 2018/11/7. + */ + +public class UpgradeSmsActivity extends BaseActivity { + private int price = 1; + private TitleView mTitleView; + private RecyclerView mListView; + private TextView totalMoney, toBuy, messageNumberTv, messageManagerTv; + private IWXAPI iwxapi; + private UpgradeSmsAdapter mSmsAdapter; + private List mStringList = new ArrayList<>(); + private String packageId = "0"; + private String payAmount = "0"; + private String quantity = "0"; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_upgrade_sms); + initView(); + iwxapi = WXAPIFactory.createWXAPI(this, WX_APP_ID, false); + iwxapi.registerApp(WX_APP_ID); + } + + @Override + public void onResume() { + super.onResume(); + mStringList.clear(); + getUserSmsInfo(); + } + + private void initView() { + messageNumberTv = (TextView) findViewById(R.id.tv_message_number); + messageManagerTv = (TextView) findViewById(R.id.tv_message_manager); + totalMoney = (TextView) findViewById(R.id.tv_total_money); + toBuy = (TextView) findViewById(R.id.tv_to_buy); + mTitleView = (TitleView) findViewById(R.id.title_choose_upgrade); + mTitleView.setHead("短信提醒"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mListView = (RecyclerView) findViewById(R.id.expandablelist); + toBuy.setOnClickListener(this); + messageManagerTv.setOnClickListener(this); + + getSmsPackageList(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_to_buy: + createOrder(); + break; + case R.id.tv_message_manager: + Intent intent = new Intent(this, MessageManageActivity.class); + startActivity(intent); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case APP_PAY_SUCCESS: + AppPayEntity appPayEntity = (AppPayEntity) msg.obj; + String appId = appPayEntity.getData().getAppid(); + String partnerId = appPayEntity.getData().getPartnerid(); + String prepayId = appPayEntity.getData().getPrepayId(); + String packageValue = "Sign=WXPay"; + String nonceStr = appPayEntity.getData().getNoncestr(); + String timeStamp = appPayEntity.getData().getTimestamp(); + String sign = appPayEntity.getData().getSign(); + + PayReq req = new PayReq(); + req.appId = WX_APP_ID; + req.partnerId = "1511229451"; + req.prepayId = prepayId; + req.packageValue = packageValue; + req.nonceStr = nonceStr; + req.timeStamp = timeStamp; + req.sign = sign; + iwxapi.sendReq(req); + break; + case APP_PAY_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case NEEDUPGRADE_TOONLINE_DEVICES_SUCCESS: + MessageEntity messageEntity = (MessageEntity) msg.obj; + int smsSurplus = Integer.parseInt(messageEntity.getData().getSmsSurplus()); + int freeSmsSurplus = Integer.parseInt(messageEntity.getData().getFreeSmsSurplus()); + if (null != messageEntity.getData()) { + messageNumberTv.setText("剩余短信:" + (smsSurplus + freeSmsSurplus) + + "条(其中赠送短信" + freeSmsSurplus + "条)"); + } + break; + case NEEDUPGRADE_TOONLINE_DEVICES_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case GET_PHONE_NUMBER: + MessageEntity entity = (MessageEntity) msg.obj; + if (null != entity.getData()) { + setViewData(entity); + } + break; + } + } + + private void setViewData(MessageEntity messageEntity) { + List packageRegions = messageEntity.getData().getPackageRegions(); + price = messageEntity.getData().getPrice(); + GridLayoutManager manager = new GridLayoutManager(this, 3); + mListView.setLayoutManager(manager); + mSmsAdapter = new UpgradeSmsAdapter(this, packageRegions, price); + mListView.setAdapter(mSmsAdapter); + + if (payAmount.equals("0") || quantity.equals("0") || packageId.equals("0")) { + if (packageRegions.size()>0){ + packageId = packageRegions.get(0).getId(); + payAmount = (packageRegions.get(0).getDiscount() * packageRegions.get(0).getMax() * price) + ""; + quantity = String.valueOf(packageRegions.get(0).getMax()); + } + } + + mSmsAdapter.setmOnItemClickListener(new OnRecyclerListener() { + @Override + public void onClick(View view, final int position) { + packageId = packageRegions.get(position).getId(); + if (position == packageRegions.size() - 1) { + RenameNameDialog dialog = new RenameNameDialog(UpgradeSmsActivity.this, new Callback1() { + @Override + public void callback(int position1, String positioName) { + switch (position1) { + case 0: + break; + case 1: + if (Integer.parseInt(positioName) <= 0) { + ToastUtil.show(UpgradeSmsActivity.this, "请输入大于0的数字"); + return; + } + mSmsAdapter.setIsEdit(true); + packageRegions.get(position).setMax(Integer.parseInt(positioName)); + quantity = String.valueOf(packageRegions.get(position).getMax()); + for (int i = 0; i < packageRegions.size(); i++) { + if (packageRegions.get(position).getMax() <= packageRegions.get(i).getMax()) { + packageRegions.get(position).setDiscount(packageRegions.get(i).getDiscount()); + packageId = packageRegions.get(i).getId(); + i = packageRegions.size(); + } + /*if (i == packageRegions.size() - 1) { + if (packageRegions.get(position).getMax() >= packageRegions.get(i).getMin()) { + packageRegions.get(position).setDiscount(50); + packageId = packageRegions.get(i).getId(); + } + } else { + if (packageRegions.get(position).getMax() <= packageRegions.get(i).getMax()) { + packageRegions.get(position).setDiscount(packageRegions.get(i).getDiscount()); + packageId = packageRegions.get(i).getId(); + i = packageRegions.size(); + } + }*/ + } + payAmount = (packageRegions.get(position).getDiscount() * packageRegions.get(position).getMax() * price) + ""; + mSmsAdapter.notifyDataSetChanged(); + break; + } + } + }); + dialog.setHintName("请输入想要购买的短信数额"); + dialog.setContent("购买其他短信数额"); + dialog.setInputTYpe(); + dialog.setMaxEms(5); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + } else { + quantity = String.valueOf(packageRegions.get(position).getMax()); + payAmount = (packageRegions.get(position).getDiscount() * packageRegions.get(position).getMax() * price) + ""; + } + } + + @Override + public void onLongClick(RecyclerView.ViewHolder view, int position) { + + } + }); + } + + private void getUserSmsInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestPostByAsynewApi(GET_USERSMS_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getUserSmsInfo", "onSuccess()" + respone); + MessageEntity obj = JSON.parseObject(respone, MessageEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(NEEDUPGRADE_TOONLINE_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(NEEDUPGRADE_TOONLINE_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(NEEDUPGRADE_TOONLINE_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getSmsPackageList() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestPostByAsynewApi(GET_SMSPACKAGE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getSmsPackageList", "onSuccess()" + respone); + MessageEntity obj = JSON.parseObject(respone, MessageEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_PHONE_NUMBER); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(NEEDUPGRADE_TOONLINE_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(NEEDUPGRADE_TOONLINE_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void createOrder() { + if (!iwxapi.isWXAppInstalled()) { + Toast.makeText(this, getString(R.string.not_installed_Wechat), Toast.LENGTH_SHORT).show(); + return; + } + if (payAmount.equals("0") || quantity.equals("0") || packageId.equals("0")) { + ToastUtil.show(this, "请选择短信套餐"); + return; + } + /*int realTotalAmount = smsAreaPrice.getPrice() * quantity; + int realPayAmount = realTotalAmount * packageRegion.getDiscount(); + realPayAmount = realPayAmount == 0 ? 1 : realPayAmount;*/ + + int realPayAmount = Integer.parseInt(payAmount); + // 不足1分按1分算 + realPayAmount = realPayAmount % 100 > 0 ? (realPayAmount / 100 + 1) : (realPayAmount / 100); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("packageId", packageId); + map.put("payAmount", realPayAmount + ""); + map.put("payMode", "2"); + map.put("quantity", quantity); + netWorkUtil.requestPostByAsynewApi(USERSMS_CREATEORDER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("createOrder", "onSuccess()" + respone); + AppPayEntity obj = JSON.parseObject(respone, AppPayEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(APP_PAY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(APP_PAY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(APP_PAY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeSmsAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeSmsAdapter.java new file mode 100644 index 0000000..b0f9f62 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/person/upgrade/UpgradeSmsAdapter.java @@ -0,0 +1,187 @@ +package com.yonsz.z1.fragment.person.upgrade; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.MessageEntity; +import com.yonsz.z1.listener.OnRecyclerListener; + +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + + +public class UpgradeSmsAdapter extends RecyclerView.Adapter { + private List mDataBeans; + private Context mContext; + private int price; + private OnRecyclerListener mOnItemClickListener; + private int nowPosition = 0; + private String addressId = ""; + private boolean isEdit = false; + + + public UpgradeSmsAdapter(Context context, List mDataBeans, int price) { + this.mDataBeans = mDataBeans; + this.mContext = context; + this.price = price; + } + + /** + * 元转分,确保price保留两位有效数字 + * + * @return + */ + public static int changeY2F(double price) { + DecimalFormat df = new DecimalFormat("#.00"); + price = Double.valueOf(df.format(price)); + int money = (int) (price * 100); + return money; + } + + /** + * 分转元,转换为bigDecimal在toString + * + * @return + */ + public static String changeF2Y(int price) { + return BigDecimal.valueOf(Long.valueOf(price)).divide(new BigDecimal(100)).toString(); + } + + /** + * 角转元,转换为bigDecimal在toString + * + * @return + */ + public static String changeJ2Y(int price) { + return BigDecimal.valueOf(Long.valueOf(price)).divide(new BigDecimal(10)).toString(); + } + + public void setIsEdit(boolean isEdit) { + this.isEdit = isEdit; + // this.notifyDataSetChanged(); + } + + public void setAddressId(String addressId) { + this.addressId = addressId; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view; + if (viewType == 1) { + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_upgrade_message, parent, false); + } else { + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_upgrade_message_edit, parent, false); + } + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(holder, position); + } + + @Override + public int getItemCount() { + return mDataBeans == null ? 0 : mDataBeans.size() - 1; + } + + @Override + public int getItemViewType(int position) { + if (!isEdit && position == mDataBeans.size() - 1) { + return 2; + } else { + return 1; + } + } + + public void setmOnItemClickListener(OnRecyclerListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.tv_message_number) + TextView messageNumberTv; + @BindView(R.id.tv_money_number) + TextView moneyNumberTv; + @BindView(R.id.tv_message_discount) + TextView messageDiscountTv; + @BindView(R.id.ll_bg) + LinearLayout mLlBg; + + public MessageViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final RecyclerView.ViewHolder holder, final int position) { + if (position < mDataBeans.size() - 1) { + messageNumberTv.setText(mDataBeans.get(position).getMax() + "条"); + if (mDataBeans.get(position).getDiscount() == 100) { + messageDiscountTv.setText("无折扣"); + } else { + messageDiscountTv.setText(changeJ2Y(mDataBeans.get(position).getDiscount()) + "折"); + } + + int v = (mDataBeans.get(position).getDiscount() * mDataBeans.get(position).getMax() * price); + // 不足1分按1分算 + v = v % 100 > 0 ? (v / 100 + 1) : (v / 100); + moneyNumberTv.setText(changeF2Y(v)); + } else if (position == mDataBeans.size() - 1) { + if (isEdit) { + messageNumberTv.setText(mDataBeans.get(position).getMax() + "条"); + for (int i = 0; i < mDataBeans.size(); i++) { + if (i == mDataBeans.size() - 1) { + if (mDataBeans.get(position).getMax() >= mDataBeans.get(i).getMax()) { + messageDiscountTv.setText(changeJ2Y(mDataBeans.get(i).getDiscount()) + "折"); + } + } else { + if (mDataBeans.get(position).getMax() <= mDataBeans.get(i).getMax()) { + if (mDataBeans.get(i).getDiscount() == 100) { + messageDiscountTv.setText("无折扣"); + } else { + messageDiscountTv.setText(changeJ2Y(mDataBeans.get(i).getDiscount()) + "折"); + } + i = mDataBeans.size(); + } + } + } + } else { + + } + + int v = (mDataBeans.get(position).getDiscount() * mDataBeans.get(position).getMax() * price); + // 不足1分按1分算 + v = v % 100 > 0 ? (v / 100 + 1) : (v / 100); + moneyNumberTv.setText(changeF2Y(v)); + } + + if (nowPosition == position) { + mLlBg.setBackgroundResource(R.drawable.kuang_398dee); + } else { + mLlBg.setBackgroundResource(R.drawable.kuang_eeeeee); + } + + mLlBg.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + nowPosition = position; + notifyDataSetChanged(); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/AreaItem.java b/app/src/main/java/com/yonsz/z1/fragment/scene/AreaItem.java new file mode 100644 index 0000000..81e5e23 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/AreaItem.java @@ -0,0 +1,1040 @@ +package com.yonsz.z1.fragment.scene; + + +import android.graphics.ColorMatrix; +import android.graphics.ColorMatrixColorFilter; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.entity4.GetZ1Event; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.database.entity.entitya2.LoadEvent; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItem; +import com.yonsz.z1.fragment.scene.treerecyclerview.manager.ItemManager; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CLOTHES_HANGER; +import static com.yonsz.z1.net.Constans.GEMSTONE_ELVES; + +/** + * + */ +public class AreaItem extends TreeItem { + private String ziId; + private int isOwner; + private String onlineFlag; + private String loadStatus; + private String loadErrorType; + private String deviceVersion; + private String addressId; + private String deviceBrand, deviceName; + private String devicePosition; + private String id; + private String rid; + private String deviceType; + private int zigbeeFlag; + private DeviceEntityV4.DataBean parentDate; + private ItemManager itemManager; + private RelativeLayout rl_upload_progress; + private CircularProgressBar mCircularProgressBar; + private TextView tv_progressbar_circle, tv_content_position; + private ImageView iv_device_pic; + private int isRegister = 0; + private int isRefresh = 0; + + @Override + public int getLayoutId() { + return R.layout.item_device_detail; + } + + public void onEventMainThread(LoadEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil111", msg); + NettyEntity nettyEntity = JSON.parseObject(msg, NettyEntity.class); + String macId = nettyEntity.getMacId(); + // TODO: 2018/7/5 两个设备同时下载的情况 + float countNum = Integer.parseInt(nettyEntity.getCountNum()); + float loadNum = Integer.parseInt(nettyEntity.getLoadNum()); + mCircularProgressBar.setProgress((int) (loadNum / countNum * 100)); + tv_progressbar_circle.setText((int) (loadNum / countNum * 100) + "%"); + Log.i("setProgress", "AirA2Activity callBackUiThread()" + (loadNum * 10000 / countNum / 100)); + if (loadNum / countNum == 1) { + rl_upload_progress.setVisibility(View.GONE); + if (isRefresh == 0) { + EventBus.getDefault().post( + new GetZ1Event("刷新")); + isRefresh++; + Log.e("nettyUtil111", "isRefresh" + isRefresh); + } + } + } + + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + mCircularProgressBar = holder.getView(R.id.progressbar_circle); + tv_progressbar_circle = holder.getView(R.id.tv_progressbar_circle); + rl_upload_progress = holder.getView(R.id.rl_upload_progress); + iv_device_pic = holder.getView(R.id.iv_device_pic); + tv_content_position = holder.getView(R.id.tv_content_position); + + itemManager = getItemManager(); + parentDate = (DeviceEntityV4.DataBean) getParentItem().getData(); + ziId = parentDate.getZiId(); + deviceVersion = parentDate.getDeviceModel(); + if (deviceVersion.contains("A1")) { + deviceVersion = "1"; + } else { + deviceVersion = "2"; + } + zigbeeFlag = parentDate.getZigbeeFlag(); + if (zigbeeFlag == 1) { + deviceVersion = "3"; + } + deviceBrand = getData().getDeviceBrand(); + deviceName = getData().getName(); + devicePosition = parentDate.getDeviceAddress(); + addressId = parentDate.getAddressId(); + onlineFlag = parentDate.getOnline(); + loadStatus = parentDate.getLoadStatus(); + loadErrorType = parentDate.getLoadErrorType(); + id = getData().getId(); + rid = getData().getRid(); + deviceType = getData().getDeviceType(); + if (!TextUtils.isEmpty(parentDate.getIsOwner()) || parentDate.getPartner().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + isOwner = 1; + } else { + isOwner = 0; + } + // holder.setText(R.id.tv_content_position, getData().getAddressName()); + switch (getData().getAddressName()) { + case "客厅": + holder.setText(R.id.tv_content_position, R.string.keting); + break; + case "儿童房": + holder.setText(R.id.tv_content_position, R.string.ertongfang); + break; + case "主卧": + holder.setText(R.id.tv_content_position, R.string.zhuwo); + break; + case "卫生间": + holder.setText(R.id.tv_content_position, R.string.weishengjian); + break; + case "书房": + holder.setText(R.id.tv_content_position, R.string.shufang); + break; + case "餐厅": + holder.setText(R.id.tv_content_position, R.string.canting); + break; + case "次卧": + holder.setText(R.id.tv_content_position, R.string.ciwo); + break; + case "厨房": + holder.setText(R.id.tv_content_position, R.string.chufang); + break; + case "阳台": + holder.setText(R.id.tv_content_position, R.string.yangtai); + break; + case "门口": + holder.setText(R.id.tv_content_position, R.string.qita); + break; + case "洗手间": + holder.setText(R.id.tv_content_position, R.string.xishoujian); + break; + default: + holder.setVisible(R.id.tv_content_position, false); + break; + } + /*if (onlineFlag.equals("0")) { + switch (deviceType) { + case Constans.AIR_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.air); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_kt_offline); + break; + case Constans.FAN_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.fan); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_fs_offline); + break; + case Constans.TV_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.tv); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_tv_offline); + break; + case Constans.TVONE_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.tv2); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_tv_offline); + break; + case Constans.SWEEP_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.sweep); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_clean_offline); + break; + case Constans.LIGHT_TAG: + holder.setVisible(R.id.rl_add_type, false); + switch (getData().getLightType()) { + case "0"://灯光 + holder.setText(R.id.tv_content_name, R.string.light); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_light_offline); + break; + case "1"://筒灯 + holder.setText(R.id.tv_content_name, R.string.tong_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_tubelamp_offline); + break; + case "2"://灯带 + holder.setText(R.id.tv_content_name, R.string.deng_dai); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_lightbelt_offline); + break; + case "3"://射灯 + holder.setText(R.id.tv_content_name, R.string.she_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_lamp_offline); + break; + case "4"://壁灯 + holder.setText(R.id.tv_content_name, R.string.bi_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_walllamp_offline); + break; + case "5"://吊灯 + holder.setText(R.id.tv_content_name, R.string.diao_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_chandelier_offline); + break; + case "6"://廊灯 + holder.setText(R.id.tv_content_name, R.string.lang_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_porchlamp_offline); + break; + case "7"://排气扇 + holder.setText(R.id.tv_content_name, R.string.paiqi_shan); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_exhaust_offline); + break; + default: + holder.setText(R.id.tv_content_name, R.string.light); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_lightbelt_offline); + break; + } + break; + case Constans.CURTAINS_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.curtains); + if (getData().getRelatedStatus().equals("1")) { + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_curtaingauzecurtain_offline); + } else { + if (getData().getBlindType().equals("1")) { + holder.setText(R.id.tv_content_name, R.string.sha_curtains); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gauze_offline); + } else { + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_curtains_offline); + } + } + break; + case Constans.SITUATIONAL_PANEL: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.situational_panel); + switch (getData().getDeviceCount()) { + case 1: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_one_offline); + break; + case 2: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_two_offline); + break; + case 3: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_three_offline); + break; + case 4: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_four_offline); + break; + case 6: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_six_offline); + break; + default: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_one_offline); + break; + } + break; + case Constans.SWITCH_TAG: + holder.setVisible(R.id.rl_add_type, false); + switch (getData().getPlugType()) { + case "0"://插座 + holder.setText(R.id.tv_content_name, R.string.chazuo); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_chazuo_offline); + break; + case "1"://台灯 + holder.setText(R.id.tv_content_name, R.string.tai_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_desklamp_offline); + break; + case "2"://热水器(厨电) + holder.setText(R.id.tv_content_name, R.string.chu_dian); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_kitchenpower_offline); + break; + case "3"://墙壁插座 + holder.setText(R.id.tv_content_name, R.string.bi_cha); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_wallsocket_offline); + break; + case "4"://热水壶 + holder.setText(R.id.tv_content_name, R.string.reshui_hu); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_kettle_offline); + break; + case "5"://取暖器 + holder.setText(R.id.tv_content_name, R.string.qunuan_qi); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_heater_offline); + break; + case "6"://电蚊香 + holder.setText(R.id.tv_content_name, R.string.dianwen_xiang); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_dwx_offline); + break; + default: + holder.setText(R.id.tv_content_name, R.string.chazuo); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_chazuo_offline); + break; + } + break; + case Constans.DOOR_LOCK_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.men_ci); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gatemagnetic_offline); + break; + case Constans.INFRARED_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.hong_wai); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_infrared_offline); + break; + case Constans.SMOKE_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.yan_wu); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_smoke_offline); + break; + case Constans.GAS_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.ran_qi); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gas_433_offline); + break; + case Constans.WATER_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.shui_jin); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_waterimmersion_offline); + break; + case Constans.ZIGBEE_LIGHT: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.light); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_light_offline); + break; + case Constans.ZIGBEE_PLUG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.chazuo); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_chazuo_offline); + break; + case Constans.ZIGBEE_INFRARED: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.hong_wai); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_infrared_offline); + break; + case Constans.ZIGBEE_TEMPERATURE: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.wenshi_du); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_humiture_offline); + break; + case Constans.ZIGBEE_DOOR: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.men_ci); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gatemagnetic_offline); + break; + case Constans.ZIGBEE_CO: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, "CO"); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_carbonmonoxide_offline); + break; + case Constans.ZIGBEE_WATER: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.shui_jin); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_waterimmersion_offline); + break; + case Constans.ZIGBEE_SMOKE: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.yan_wu); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_smoke_offline); + break; + case Constans.MUSIC_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.music); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_music_offline); + break; + case GEMSTONE_ELVES: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, "宝石精灵"); + holder.setVisible(R.id.tv_content_position, false); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gemstone_elves); + break; + case Constans.ADD_TYPE: + holder.setVisible(R.id.rl_add_type, true); + break; + case CLOTHES_HANGER: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, "晾衣机"); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_airer); + ColorMatrix matrix = new ColorMatrix(); + matrix.setSaturation(0); + ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); + iv_device_pic.setColorFilter(filter); + break; + } + } else if (loadStatus.equals("1")) { + switch (deviceType) { + case Constans.AIR_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.air); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_kt_offline); + if (loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.FAN_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.fan); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_fs_offline); + if (loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.TV_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.tv); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_tv_offline); + if (loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.TVONE_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.tv2); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_tv_offline); + if (loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.SWEEP_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.sweep); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_clean_offline); + if (loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.LIGHT_TAG: + holder.setVisible(R.id.rl_add_type, false); + switch (getData().getLightType()) { + case "0"://灯光 + holder.setText(R.id.tv_content_name, R.string.light); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_light_offline); + break; + case "1"://筒灯 + holder.setText(R.id.tv_content_name, R.string.tong_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_tubelamp_offline); + break; + case "2"://灯带 + holder.setText(R.id.tv_content_name, R.string.deng_dai); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_lightbelt_offline); + break; + case "3"://射灯 + holder.setText(R.id.tv_content_name, R.string.she_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_lamp_offline); + break; + case "4"://壁灯 + holder.setText(R.id.tv_content_name, R.string.bi_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_walllamp_offline); + break; + case "5"://吊灯 + holder.setText(R.id.tv_content_name, R.string.diao_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_chandelier_offline); + break; + case "6"://廊灯 + holder.setText(R.id.tv_content_name, R.string.lang_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_porchlamp_offline); + break; + case "7"://排气扇 + holder.setText(R.id.tv_content_name, R.string.paiqi_shan); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_exhaust_offline); + break; + default: + holder.setText(R.id.tv_content_name, R.string.light); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_lightbelt_offline); + break; + } + break; + case Constans.CURTAINS_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.curtains); + if (getData().getRelatedStatus().equals("1")) { + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_curtaingauzecurtain_offline); + } else { + if (getData().getBlindType().equals("1")) { + holder.setText(R.id.tv_content_name, R.string.curtain_sha); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gauze_offline); + } else { + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_curtains_offline); + } + } + break; + case Constans.SITUATIONAL_PANEL: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.situational_panel); + switch (getData().getDeviceCount()) { + case 1: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_one_offline); + break; + case 2: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_two_offline); + break; + case 3: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_three_offline); + break; + case 4: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_four_offline); + break; + case 6: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_six_offline); + break; + default: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_one_offline); + break; + } + break; + case Constans.SWITCH_TAG: + holder.setVisible(R.id.rl_add_type, false); + switch (getData().getPlugType()) { + case "0"://插座 + holder.setText(R.id.tv_content_name, R.string.chazuo); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_chazuo_offline); + break; + case "1"://台灯 + holder.setText(R.id.tv_content_name, R.string.tai_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_desklamp_offline); + break; + case "2"://热水器(厨电) + holder.setText(R.id.tv_content_name, R.string.chu_dian); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_kitchenpower_offline); + break; + case "3"://墙壁插座 + holder.setText(R.id.tv_content_name, R.string.bi_cha); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_wallsocket_offline); + break; + case "4"://热水壶 + holder.setText(R.id.tv_content_name, R.string.reshui_hu); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_kettle_offline); + break; + case "5"://取暖器 + holder.setText(R.id.tv_content_name, R.string.qunuan_qi); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_heater_offline); + break; + case "6"://电蚊香 + holder.setText(R.id.tv_content_name, R.string.dianwen_xiang); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_dwx_offline); + break; + default: + holder.setText(R.id.tv_content_name, R.string.chazuo); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_chazuo_offline); + break; + } + break; + case Constans.DOOR_LOCK_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.men_ci); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gatemagnetic_offline); + break; + case Constans.INFRARED_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.hong_wai); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_infrared_offline); + break; + case Constans.SMOKE_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.yan_wu); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_smoke_offline); + break; + case Constans.GAS_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.ran_qi); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gas_433_offline); + break; + case Constans.WATER_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.shui_jin); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_waterimmersion_offline); + break; + case Constans.ZIGBEE_LIGHT: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.light); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_light_offline); + break; + case Constans.ZIGBEE_PLUG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.chazuo); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_index_chazuo_offline); + break; + case Constans.ZIGBEE_INFRARED: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.hong_wai); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_infrared_offline); + break; + case Constans.ZIGBEE_TEMPERATURE: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.wenshi_du); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_humiture_offline); + break; + case Constans.ZIGBEE_DOOR: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.men_ci); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gatemagnetic_offline); + break; + case Constans.ZIGBEE_CO: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, "CO"); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_carbonmonoxide_offline); + break; + case Constans.ZIGBEE_WATER: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.shui_jin); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_waterimmersion_offline); + break; + case Constans.ZIGBEE_SMOKE: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.yan_wu); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_smoke_offline); + break; + case Constans.MUSIC_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.music); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_music_offline); + if (loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case GEMSTONE_ELVES: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, "宝石精灵"); + holder.setVisible(R.id.tv_content_position, false); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gemstone_elves); + break; + case Constans.ADD_TYPE: + holder.setVisible(R.id.rl_add_type, true); + break; + case CLOTHES_HANGER: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, "晾衣机"); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_airer); + ColorMatrix matrix = new ColorMatrix(); + matrix.setSaturation(0); + ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); + iv_device_pic.setColorFilter(filter); + break; + } + } else {*/ + if (onlineFlag.equals("0") || loadStatus.equals("1")) { + ColorMatrix matrix = new ColorMatrix(); + matrix.setSaturation(0); + ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); + iv_device_pic.setColorFilter(filter); + } + switch (deviceType) { + case Constans.AIR_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.air); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_kt); + if (loadStatus.equals("1") && loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.FAN_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.fan); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_fs); + if (loadStatus.equals("1") && loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.TV_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.tv); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_tv); + if (loadStatus.equals("1") && loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.TVONE_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.tv2); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_set_top_box); + if (loadStatus.equals("1") && loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.SWEEP_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.sweep); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_clean); + if (loadStatus.equals("1") && loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.MOVIE_CAMERA: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, "投影机"); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_device_projector); + if (loadStatus.equals("1") && loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.AIR_CLEANER: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, "净化器"); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_purifier); + if (loadStatus.equals("1") && loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case Constans.LIGHT_TAG: + holder.setVisible(R.id.rl_add_type, false); + switch (getData().getLightType()) { + case "0"://灯光 + holder.setText(R.id.tv_content_name, R.string.light); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_light); + break; + case "1"://筒灯 + holder.setText(R.id.tv_content_name, R.string.tong_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_tubelamp); + break; + case "2"://灯带 + holder.setText(R.id.tv_content_name, R.string.deng_dai); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_lightbelt); + break; + case "3"://射灯 + holder.setText(R.id.tv_content_name, R.string.she_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_lamp); + break; + case "4"://壁灯 + holder.setText(R.id.tv_content_name, R.string.bi_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_walllamp); + break; + case "5"://吊灯 + holder.setText(R.id.tv_content_name, R.string.diao_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_chandelier); + break; + case "6"://廊灯 + holder.setText(R.id.tv_content_name, R.string.lang_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_porchlamp); + break; + case "7"://排气扇 + holder.setText(R.id.tv_content_name, R.string.paiqi_shan); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_exhaust); + break; + default: + holder.setText(R.id.tv_content_name, R.string.light); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_light); + break; + } + break; + case Constans.CURTAINS_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.curtains); + if (getData().getRelatedStatus().equals("1")) { + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_curtains); + } else { + if (getData().getBlindType().equals("1")) { + holder.setText(R.id.tv_content_name, R.string.curtain_sha); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gauze); + } else { + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_curtains); + } + } + break; + case Constans.SITUATIONAL_PANEL: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.situational_panel); + switch (getData().getDeviceCount()) { + case 1: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_one); + break; + case 2: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_two); + break; + case 3: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_three); + break; + case 4: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_four); + break; + case 6: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_six); + break; + default: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_scene_one); + break; + } + break; + case Constans.SWITCH_TAG: + holder.setVisible(R.id.rl_add_type, false); + switch (getData().getPlugType()) { + case "0"://插座 + holder.setText(R.id.tv_content_name, R.string.chazuo); + switch (getData().getDeviceModel()) { + case "0": + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_device_plug_t1); + break; + case "1": + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_device_wallsocket_t2); + break; + case "2": + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_device_plug_t4); + break; + case "4": + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_device_wifi_socket); + break; + default: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_chazuo); + break; + } + break; + case "1"://台灯 + holder.setText(R.id.tv_content_name, R.string.tai_deng); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_desklamp); + break; + case "2"://热水器(厨电) + holder.setText(R.id.tv_content_name, R.string.chu_dian); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_kitchenpower); + break; + case "3"://墙壁插座 + holder.setText(R.id.tv_content_name, R.string.bi_cha); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_device_wallsocket_t2); + break; + case "4"://热水壶 + holder.setText(R.id.tv_content_name, R.string.reshui_hu); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_kettle); + break; + case "5"://取暖器 + holder.setText(R.id.tv_content_name, R.string.qunuan_qi); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_heater); + break; + case "6"://电蚊香 + holder.setText(R.id.tv_content_name, R.string.dianwen_xiang); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_dwx); + break; + case "7"://紫外消毒灯 + holder.setText(R.id.tv_content_name, "紫外消毒灯"); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_sterilizing_lamp); + break; + default: + holder.setText(R.id.tv_content_name, R.string.chazuo); + switch (getData().getDeviceModel()) { + case "0": + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_device_plug_t1); + break; + case "1": + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_device_wallsocket_t2); + break; + case "2": + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_device_plug_t4); + break; + case "4": + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_device_wifi_socket); + break; + default: + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_chazuo); + break; + } + break; + } + break; + case Constans.DOOR_LOCK_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.men_ci); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gatemagnetic); + break; + case Constans.INFRARED_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.hong_wai); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_infrared); + break; + case Constans.SMOKE_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.yan_wu); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_smoke); + break; + case Constans.GAS_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.ran_qi); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gas); + break; + case Constans.WATER_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.shui_jin); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_waterimmersion); + break; + case Constans.ZIGBEE_LIGHT: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.light); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_light); + break; + case Constans.ZIGBEE_PLUG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.chazuo); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_chazuo); + break; + case Constans.ZIGBEE_INFRARED: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.hong_wai); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_infrared); + break; + case Constans.ZIGBEE_TEMPERATURE: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.wenshi_du); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_humiture); + break; + case Constans.ZIGBEE_DOOR: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.men_ci); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gatemagnetic); + break; + case Constans.ZIGBEE_CO: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, "CO"); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_carbonmonoxide); + break; + case Constans.ZIGBEE_WATER: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.shui_jin); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_waterimmersion); + break; + case Constans.ZIGBEE_SMOKE: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.yan_wu); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_smoke); + break; + case Constans.MUSIC_TAG: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, R.string.music); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_music); + if (loadStatus.equals("1") && loadErrorType.equals(deviceType)) { + //注册eventBus + EventBus.getDefault().register(this); + holder.setVisible(R.id.rl_upload_progress, true); + } + break; + case GEMSTONE_ELVES: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, "宝石精灵"); + holder.setVisible(R.id.tv_content_position, false); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_gemstone_elves); + break; + case Constans.ADD_TYPE: + holder.setVisible(R.id.rl_add_type, true); + break; + case CLOTHES_HANGER: + holder.setVisible(R.id.rl_add_type, false); + holder.setText(R.id.tv_content_name, "晾衣机"); + holder.setImageResource(R.id.iv_device_pic, R.drawable.icon_airer); + break; + } + // } + if (deviceName.length() > 3 && tv_content_position.getVisibility() == View.VISIBLE) { + holder.setText(R.id.tv_content_name, deviceName.substring(0, 3)); + } else { + holder.setText(R.id.tv_content_name, deviceName); + } + } + + + @Override + public void onClick(ViewHolder viewHolder, BaseRecyclerAdapter.OnItemClickListener onItemClickListener, int layoutPosition) { + Log.i("mOnItemClickListener", "TreeRecyclerAdapter onClick()" + "我是第三层呀"); + // onItemClickListener.onItemClick(viewHolder, 3, ziId, isOwner, deviceVersion, deviceBrand, addressId, devicePosition, id, rid, deviceType, parentDate, getData()); + if (isOwner == 1) { + if (onlineFlag.equals("3") || onlineFlag.equals("5")) { + onItemClickListener.onItemClick(viewHolder, 3, ziId, isOwner, deviceVersion, deviceBrand, addressId, devicePosition, id, rid, deviceType, parentDate, getData()); + } else { + if (onlineFlag.equals("0")) { + // Toast.makeText(UniKongApp.getHiApp(), "设备离线,请稍候再使用。", Toast.LENGTH_SHORT).show(); + onItemClickListener.onItemClick(viewHolder, 3, ziId, isOwner, deviceVersion, deviceBrand, addressId, devicePosition, id, rid, deviceType, parentDate, getData()); + } else if (loadStatus.equals("1")) { + if (loadErrorType.equals(deviceType)) { + onItemClickListener.onItemClick(viewHolder, 3, ziId, isOwner, deviceVersion, deviceBrand, addressId, devicePosition, id, rid, deviceType, parentDate, getData()); + } else + Toast.makeText(UniKongApp.getHiApp(), R.string.date_ing, Toast.LENGTH_SHORT).show(); + } else { + onItemClickListener.onItemClick(viewHolder, 3, ziId, isOwner, deviceVersion, deviceBrand, addressId, devicePosition, id, rid, deviceType, parentDate, getData()); + } + } + } else { + if (onlineFlag.equals("3")) { + Toast.makeText(UniKongApp.getHiApp(), R.string.solid_ing, Toast.LENGTH_SHORT).show(); + } else if (onlineFlag.equals("5")) { + Toast.makeText(UniKongApp.getHiApp(), R.string.solid_fail, Toast.LENGTH_SHORT).show(); + } else { + if (loadStatus.equals("-1")) { + Toast.makeText(UniKongApp.getHiApp(), R.string.date_fail, Toast.LENGTH_SHORT).show(); + } else if (loadStatus.equals("1")) { + Toast.makeText(UniKongApp.getHiApp(), R.string.date_ing, Toast.LENGTH_SHORT).show(); + } else { + if (onlineFlag.equals("0")) { + Toast.makeText(UniKongApp.getHiApp(), R.string.device_offline_, Toast.LENGTH_SHORT).show(); + // onItemClickListener.onItemClick(viewHolder, 3, ziId, isOwner, deviceVersion, deviceBrand, addressId, devicePosition, id, rid, deviceType, parentDate, getData()); + } else if (onlineFlag.equals("2")) { + Toast.makeText(UniKongApp.getHiApp(), R.string.device_intnet_ing, Toast.LENGTH_SHORT).show(); + } else { + onItemClickListener.onItemClick(viewHolder, 3, ziId, isOwner, deviceVersion, deviceBrand, addressId, devicePosition, id, rid, deviceType, parentDate, getData()); + } + } + } + } + } + + @Override + public void onLongClick(ViewHolder viewHolder, BaseRecyclerAdapter.OnItemLongClickListener onItemLongClickListener, int layoutPosition) { + if (null != onItemLongClickListener) { + onItemLongClickListener.onItemLongClick(viewHolder, layoutPosition, ziId, isOwner, deviceVersion, deviceBrand, addressId, devicePosition, id, rid, deviceType, parentDate, getData()); + } + } + + @Override + public int getSpanSize() { + return 1; + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/CircularProgressBar.java b/app/src/main/java/com/yonsz/z1/fragment/scene/CircularProgressBar.java new file mode 100644 index 0000000..f4767b6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/CircularProgressBar.java @@ -0,0 +1,172 @@ +package com.yonsz.z1.fragment.scene; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.View; + +/** + * 环形的进度条 + * + * @author lwz + */ +public class CircularProgressBar extends View { + + private int mDuration = 100; + private int mProgress = 0; + + private Paint mPaint = new Paint(); + private RectF mRectF = new RectF(); + + private int mBackgroundColor = Color.LTGRAY; + private int mPrimaryColor = Color.parseColor("#F5A623"); + private float mStrokeWidth = 10F; + private OnProgressChangeListener mOnChangeListener; + + public CircularProgressBar(Context context) { + super(context); + } + + public CircularProgressBar(Context context, AttributeSet attrs) { + super(context, attrs); + } + + /** + * 设置进度条改变监听 + * + * @param l + */ + public void setOnProgressChangeListener(OnProgressChangeListener l) { + mOnChangeListener = l; + } + + /** + * 得到进度条的最大值 + * + * @return + */ + public int getMax() { + return mDuration; + } + + /** + * 设置进度条的最大值, 该值要 大于 0 + * + * @param max + */ + public void setMax(int max) { + if (max < 0) { + max = 0; + } + mDuration = max; + } + + /** + * 得到进度条当前的值 + * + * @return + */ + public int getProgress() { + return mProgress; + } + + /** + * 设置进度条的当前的值 + * + * @param progress + */ + public void setProgress(int progress) { + if (progress > mDuration) { + progress = mDuration; + } + mProgress = progress; + if (mOnChangeListener != null) { + mOnChangeListener.onChange(mDuration, progress, getRateOfProgress()); + } + invalidate(); + } + + /** + * 设置进度条背景的颜色 + */ + public void setBackgroundColor(int color) { + mBackgroundColor = color; + } + + /** + * 设置进度条进度的颜色 + */ + public void setPrimaryColor(int color) { + mPrimaryColor = color; + } + + /** + * 设置环形的宽度 + * + * @param width + */ + public void setCircleWidth(float width) { + mStrokeWidth = width; + + } + + @Override + protected synchronized void onDraw(Canvas canvas) { + super.onDraw(canvas); + + int halfWidth = getWidth() / 2; + int halfHeight = getHeight() / 2; + int radius = halfWidth < halfHeight ? halfWidth : halfHeight; + float halfStrokeWidth = mStrokeWidth / 2; + + // 设置画笔 + mPaint.setColor(mBackgroundColor); + mPaint.setDither(true); + mPaint.setFlags(Paint.ANTI_ALIAS_FLAG); + mPaint.setAntiAlias(true); + mPaint.setStrokeWidth(mStrokeWidth); + mPaint.setStyle(Paint.Style.STROKE); //设置图形为空心 + + // 画背景 + canvas.drawCircle(halfWidth, halfHeight, radius - halfStrokeWidth, mPaint); + + // 画当前进度的圆环 + mPaint.setColor(mPrimaryColor); // 改变画笔颜色 + mRectF.top = halfHeight - radius + halfStrokeWidth; + mRectF.bottom = halfHeight + radius - halfStrokeWidth; + mRectF.left = halfWidth - radius + halfStrokeWidth; + mRectF.right = halfWidth + radius - halfStrokeWidth; + canvas.drawArc(mRectF, -90, getRateOfProgress() * 360, false, mPaint); + canvas.save(); + } + + /** + * 得到当前的进度的比率 + *

用进度条当前的值 与 进度条的最大值求商

+ * + * @return + */ + private float getRateOfProgress() { + return (float) mProgress / mDuration; + } + + /** + * 进度条改变监听 + *

+ * {@link #onChange(int duration, int progress, float rate)} + */ + public interface OnProgressChangeListener { + /** + * 进度改变事件,当进度条进度改变,就会调用该方法 + * + * @param duration 总进度 + * @param progress 当前进度 + * @param rate 当前进度与总进度的商 即:rate = (float)progress / duration + */ + public void onChange(int duration, int progress, float rate); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/CityBean.java b/app/src/main/java/com/yonsz/z1/fragment/scene/CityBean.java new file mode 100644 index 0000000..09bf6dc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/CityBean.java @@ -0,0 +1,114 @@ +package com.yonsz.z1.fragment.scene; + + +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseItemData; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by baozi on 2016/12/8. + */ +public class CityBean extends BaseItemData { + + /** + * citys : [{"areas":[{"areaId":2799,"areaName":"三环以内"},{"areaId":2819,"areaName":"三环到四环之间"},{"areaId":2839,"areaName":"四环到五环之间"},{"areaId":2840,"areaName":"五环到六环之间"},{"areaId":4137,"areaName":"管庄"},{"areaId":4139,"areaName":"北苑"},{"areaId":4211,"areaName":"定福庄"}],"cityId":72,"cityName":"朝阳区"},{"areas":[{"areaId":2848,"areaName":"三环以内"},{"areaId":2849,"areaName":"三环到四环之间"},{"areaId":2850,"areaName":"四环到五环之间"},{"areaId":2851,"areaName":"五环到六环之间"},{"areaId":2852,"areaName":"六环以外"},{"areaId":4134,"areaName":"西三旗"},{"areaId":4209,"areaName":"西二旗"}],"cityId":2800,"cityName":"海淀区"},{"areas":[{"areaId":2853,"areaName":"二环到三环"},{"areaId":2827,"areaName":"内环到二环里"}],"cityId":2801,"cityName":"西城区"},{"areas":[{"areaId":2821,"areaName":"内环到三环里"}],"cityId":2802,"cityName":"东城区"},{"areas":[{"areaId":2842,"areaName":"二环到三环"},{"areaId":2829,"areaName":"一环到二环"}],"cityId":2803,"cityName":"崇文区"},{"areas":[{"areaId":2828,"areaName":"内环到三环里"}],"cityId":2804,"cityName":"宣武区"},{"areas":[{"areaId":34545,"areaName":"六环之外"},{"areaId":34544,"areaName":"五环到六环之间"},{"areaId":2855,"areaName":"三环到四环之间"},{"areaId":2854,"areaName":"二环到三环"},{"areaId":2832,"areaName":"四环到五环之间"}],"cityId":2805,"cityName":"丰台区"},{"areas":[{"areaId":4188,"areaName":"八大处科技园区"},{"areaId":4187,"areaName":"石景山城区"},{"areaId":2831,"areaName":"四环到五环内"}],"cityId":2806,"cityName":"石景山区"},{"areas":[{"areaId":51562,"areaName":"清水镇"},{"areaId":51561,"areaName":"斋堂镇"},{"areaId":51560,"areaName":"雁翅镇"},{"areaId":51559,"areaName":"妙峰山镇"},{"areaId":51558,"areaName":"军庄镇"},{"areaId":51557,"areaName":"王平镇"},{"areaId":51556,"areaName":"潭柘寺镇"},{"areaId":51555,"areaName":"大台镇"},{"areaId":51554,"areaName":"永定镇"},{"areaId":51553,"areaName":"龙泉镇"},{"areaId":51552,"areaName":"城区"}],"cityId":2807,"cityName":"门头沟"},{"areas":[{"areaId":51538,"areaName":"南窖乡"},{"areaId":51537,"areaName":"琉璃河镇"},{"areaId":51536,"areaName":"良乡镇"},{"areaId":51535,"areaName":"河北镇"},{"areaId":51534,"areaName":"韩村河镇"},{"areaId":51532,"areaName":"佛子庄乡"},{"areaId":51531,"areaName":"窦店镇"},{"areaId":51530,"areaName":"大石窝镇"},{"areaId":51529,"areaName":"大安山乡"},{"areaId":51528,"areaName":"城区"},{"areaId":51539,"areaName":"蒲洼乡"},{"areaId":51540,"areaName":"青龙湖镇"},{"areaId":51541,"areaName":"十渡镇"},{"areaId":51542,"areaName":"石楼镇"},{"areaId":51543,"areaName":"史家营乡"},{"areaId":51544,"areaName":"霞云岭乡"},{"areaId":51545,"areaName":"新镇"},{"areaId":51546,"areaName":"阎村镇"},{"areaId":51547,"areaName":"燕山地区"},{"areaId":51548,"areaName":"张坊镇"},{"areaId":51549,"areaName":"长沟镇"},{"areaId":51550,"areaName":"长阳镇"},{"areaId":51551,"areaName":"周口店镇"}],"cityId":2808,"cityName":"房山区"},{"areas":[{"areaId":51216,"areaName":"六环内(马驹桥镇)"},{"areaId":51217,"areaName":"六环外(马驹桥镇)"},{"areaId":51218,"areaName":"永顺镇"},{"areaId":51219,"areaName":"梨园镇"},{"areaId":51220,"areaName":"宋庄镇"},{"areaId":51221,"areaName":"漷县镇"},{"areaId":51222,"areaName":"张家湾镇"},{"areaId":51223,"areaName":"西集镇"},{"areaId":51224,"areaName":"永乐店镇"},{"areaId":51225,"areaName":"潞城镇"},{"areaId":51226,"areaName":"台湖镇"},{"areaId":51227,"areaName":"于家务乡"},{"areaId":51228,"areaName":"中仓街道"},{"areaId":51229,"areaName":"新华街道"},{"areaId":51230,"areaName":"玉桥街道"},{"areaId":51231,"areaName":"北苑街道"},{"areaId":51232,"areaName":"次渠镇"}],"cityId":2809,"cityName":"通州区"},{"areas":[{"areaId":4194,"areaName":"四环至五环之间"},{"areaId":4205,"areaName":"六环以外"},{"areaId":6501,"areaName":"五环至六环之间"},{"areaId":51081,"areaName":"亦庄经济开发区"}],"cityId":2810,"cityName":"大兴区"},{"areas":[{"areaId":51125,"areaName":"北石槽镇"},{"areaId":51126,"areaName":"北务镇"},{"areaId":51127,"areaName":"北小营镇"},{"areaId":51128,"areaName":"大孙各庄镇"},{"areaId":51129,"areaName":"高丽营镇"},{"areaId":51130,"areaName":"光明街道"},{"areaId":51131,"areaName":"后沙峪地区"},{"areaId":51132,"areaName":"空港街道"},{"areaId":51133,"areaName":"李桥镇"},{"areaId":51134,"areaName":"李遂镇"},{"areaId":51135,"areaName":"龙湾屯镇"},{"areaId":51136,"areaName":"马坡地区"},{"areaId":51137,"areaName":"木林镇"},{"areaId":51138,"areaName":"南彩镇"},{"areaId":51139,"areaName":"南法信地区"},{"areaId":51140,"areaName":"牛栏山地区"},{"areaId":51141,"areaName":"仁和地区"},{"areaId":51142,"areaName":"胜利街道"},{"areaId":51143,"areaName":"石园街道"},{"areaId":51144,"areaName":"双丰街道"},{"areaId":51145,"areaName":"天竺地区"},{"areaId":51146,"areaName":"旺泉街道"},{"areaId":51147,"areaName":"杨镇地区"},{"areaId":51148,"areaName":"张镇"},{"areaId":51149,"areaName":"赵全营镇"}],"cityId":2812,"cityName":"顺义区"},{"areas":[{"areaId":2847,"areaName":"郊区"},{"areaId":6115,"areaName":"城区以内"}],"cityId":2814,"cityName":"怀柔区"},{"areas":[{"areaId":2862,"areaName":"城区以外"},{"areaId":6667,"areaName":"城区"}],"cityId":2816,"cityName":"密云区"},{"areas":[{"areaId":2906,"areaName":"城区以外"},{"areaId":4135,"areaName":"六环以内"},{"areaId":4136,"areaName":"城区"}],"cityId":2901,"cityName":"昌平区"},{"areas":[{"areaId":2954,"areaName":"城区以外"},{"areaId":6666,"areaName":"城区"}],"cityId":2953,"cityName":"平谷区"},{"areas":[{"areaId":51505,"areaName":"延庆镇"},{"areaId":51506,"areaName":"城区"},{"areaId":51507,"areaName":"康庄镇"},{"areaId":51508,"areaName":"八达岭镇"},{"areaId":51509,"areaName":"永宁镇"},{"areaId":51510,"areaName":"旧县镇"},{"areaId":51511,"areaName":"张山营镇"},{"areaId":51512,"areaName":"四海镇"},{"areaId":51513,"areaName":"千家店镇"},{"areaId":51514,"areaName":"沈家营镇"},{"areaId":51515,"areaName":"大榆树镇"},{"areaId":51516,"areaName":"井庄镇"},{"areaId":51517,"areaName":"大庄科乡"},{"areaId":51518,"areaName":"刘斌堡乡"},{"areaId":51519,"areaName":"香营乡"},{"areaId":51520,"areaName":"珍珠泉乡"}],"cityId":3065,"cityName":"延庆县"}] + * provinceId : 1 + * provinceName : 北京 + */ + + private int provinceId; + private String provinceName; + private List citys; + + public int getProvinceId() { + return provinceId; + } + + public void setProvinceId(int provinceId) { + this.provinceId = provinceId; + } + + public String getProvinceName() { + return provinceName; + } + + public void setProvinceName(String provinceName) { + this.provinceName = provinceName; + } + + public List getCitys() { + if (citys == null) { + return new ArrayList<>(); + } + return citys; + } + + public void setCitys(List citys) { + this.citys = citys; + } + + public static class CitysBean extends BaseItemData { + /** + * areas : [{"areaId":2799,"areaName":"三环以内"},{"areaId":2819,"areaName":"三环到四环之间"},{"areaId":2839,"areaName":"四环到五环之间"},{"areaId":2840,"areaName":"五环到六环之间"},{"areaId":4137,"areaName":"管庄"},{"areaId":4139,"areaName":"北苑"},{"areaId":4211,"areaName":"定福庄"}] + * cityId : 72 + * cityName : 朝阳区 + */ + + private int cityId; + private String cityName; + private List areas; + + public int getCityId() { + return cityId; + } + + public void setCityId(int cityId) { + this.cityId = cityId; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public List getAreas() { + return areas; + } + + public void setAreas(List areas) { + this.areas = areas; + } + + public static class AreasBean extends BaseItemData { + /** + * areaId : 2799 + * areaName : 三环以内 + */ + + private int areaId; + private String areaName; + + public int getAreaId() { + return areaId; + } + + public void setAreaId(int areaId) { + this.areaId = areaId; + } + + public String getAreaName() { + return areaName; + } + + public void setAreaName(String areaName) { + this.areaName = areaName; + } + + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/CountyItemParent.java b/app/src/main/java/com/yonsz/z1/fragment/scene/CountyItemParent.java new file mode 100644 index 0000000..e21f66b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/CountyItemParent.java @@ -0,0 +1,141 @@ +package com.yonsz.z1.fragment.scene; + + +import android.util.Log; +import android.widget.ImageView; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; +import com.yonsz.z1.fragment.scene.treerecyclerview.factory.ItemHelperFactory; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItem; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItemGroup; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.StandardCodeUtil; + +import java.util.List; + +/** + */ +public class CountyItemParent extends TreeItemGroup { + private String ziId; + private int isOwner; + private String onlineFlag; + private String loadStatus; + private String deviceVersion; + private String deviceName; + private String devicePosition; + private String addressId; + private String minOtaFlag; + private ImageView aiIcon; + + @Override + public List initChildList(DeviceEntityV4.DataBean data) { + return ItemHelperFactory.createTreeItemList(data.getChildren(), AreaItem.class, this, 3); + } + + + @Override + public int getLayoutId() { + return R.layout.item_main_device; + } + + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + DeviceEntityV4.DataBean data = getData(); + aiIcon = holder.getView(R.id.iv_device_icon); + ziId = getData().getZiId(); + deviceVersion = getData().getDeviceModel(); + deviceName = getData().getName(); + devicePosition = getData().getAddressName(); + addressId = getData().getAddressId(); + /*if (deviceVersion.equals("2")) { + holder.setImageResource(R.id.iv_device_icon, R.drawable.pic_a2); + } else if (getData().getConnectFlag().equals("1")) { + holder.setImageResource(R.id.iv_device_icon, R.drawable.pic_z1_online); + } else { + holder.setImageResource(R.id.iv_device_icon, R.drawable.pic_a1); + } + if (getData().getSubVersion().equals("D")) { + holder.setImageResource(R.id.iv_device_icon, R.drawable.pic_d1_online); + } + if (getData().getSubVersion().equals("I")) { + holder.setImageResource(R.id.iv_device_icon, R.drawable.icon_device_yk1); + }*/ + holder.setImageResource(R.id.iv_device_icon, StandardCodeUtil.getDevicePicDrawable(deviceVersion)); + +// ImageLoader.getInstance().displayImage(getData().getDevices().get(0).getIcon(), aiIcon, UniKongApp.getHiApp().getImageLoaderOption()); + if ((null != getData().getIsOwner() && getData().getIsOwner().equals("1")) || getData().getPartner().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + isOwner = 1; + holder.setText(R.id.tv_device_from, ""); + holder.setVisible(R.id.ll_device_from, false); + if (getData().getIsNewOtaFlag() == 1) { + // TODO: 2018/9/14 在这里去搜索ip + holder.setVisible(R.id.tv_red_to_update, true); + } else { + holder.setVisible(R.id.tv_red_to_update, false); + } + } else { + isOwner = 1; + holder.setVisible(R.id.ll_device_from, false); + holder.setText(R.id.tv_device_from, getData().getPartnerName()); + } + holder.setText(R.id.tv_device_name, getData().getName()); + onlineFlag = getData().getOnline(); + loadStatus = getData().getLoadStatus(); + minOtaFlag = getData().getMinOtaFlag(); + if (onlineFlag.equals("3")) { + holder.setText(R.id.tv_isInNet, R.string.device_solid_update); + holder.setTextColor(R.id.tv_isInNet, 0xfff7ac00); + } else if (onlineFlag.equals("5")) { + holder.setText(R.id.tv_isInNet, R.string.device_solid_fail); + holder.setTextColor(R.id.tv_isInNet, 0xfff7ac00); + } else { + if (loadStatus.equals("-1")) { + holder.setText(R.id.tv_isInNet, R.string.device_date_fail); + holder.setTextColor(R.id.tv_isInNet, 0xfff7ac00); + } else if (loadStatus.equals("1")) { + holder.setText(R.id.tv_isInNet, R.string.device_date_download); + holder.setTextColor(R.id.tv_isInNet, 0xfff7ac00); + } else { + if (onlineFlag.equals("0")) { + holder.setText(R.id.tv_isInNet, R.string.device_offline); + holder.setTextColor(R.id.tv_isInNet, 0xfff7ac00); + } else if (onlineFlag.equals("2")) { + holder.setText(R.id.tv_isInNet, R.string.device_intenet); + holder.setTextColor(R.id.tv_isInNet, 0xff999999); + } else if (minOtaFlag.equals("-1")) { + holder.setText(R.id.tv_isInNet, R.string.device_ota_low); + holder.setTextColor(R.id.tv_isInNet, 0xfff7ac00); + } else { + holder.setText(R.id.tv_isInNet, R.string.device_online); + holder.setTextColor(R.id.tv_isInNet, 0xff999999); + } + } + } + } + + @Override + public boolean isCanExpand() { + //设置这一层不可折叠 + return false; + } + + @Override + public boolean isExpand() { + return super.isExpand(); + } + + @Override + public void onClick(ViewHolder viewHolder, BaseRecyclerAdapter.OnItemClickListener onItemClickListener, int layoutPosition) { + super.onClick(viewHolder, onItemClickListener, layoutPosition); + Log.i("mOnItemClickListener", "TreeRecyclerAdapter onClick()" + "我是第二层呀"); + DeviceEntityV4.DataBean.DevicesBean devicesBean = new DeviceEntityV4.DataBean.DevicesBean(); + onItemClickListener.onItemClick(viewHolder, 2, ziId, isOwner, deviceVersion, deviceName, addressId, devicePosition, "", "", "", getData(), devicesBean); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/ModelSet4Activity.java b/app/src/main/java/com/yonsz/z1/fragment/scene/ModelSet4Activity.java new file mode 100644 index 0000000..41414cf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/ModelSet4Activity.java @@ -0,0 +1,153 @@ +package com.yonsz.z1.fragment.scene; + +import android.os.Bundle; +import android.os.Message; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.view.View; +import android.widget.ImageView; +import android.widget.RadioButton; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.activity.MainActivityAdapter; +import com.yonsz.z1.database.entity.entitya2.AddModelEntity; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.MainViewPager; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.ADD_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.ADD_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_SUCCESS; + +/** + * Created by Administrator on 2018/4/25. + */ + +public class ModelSet4Activity extends BaseActivity { + private ImageView iv_back; + private RadioButton rb_model_set, rb_model_time; + private RelativeLayout mFuntion; + private TextView mHeadFuntion; + private MainViewPager mViewPager; + private OnTitleItemClickListener mListener; + private TimeSettingFragment mTimeSettingFragment; + private TimeSetEntity.ObjEntity timEntity; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_model_set_4); + initView(); + initListener(); + } + + private void initView() { + iv_back = (ImageView) findViewById(R.id.iv_back); + rb_model_set = (RadioButton) findViewById(R.id.rb_model_set); + rb_model_time = (RadioButton) findViewById(R.id.rb_model_time); + mFuntion = (RelativeLayout) findViewById(R.id.iv_funtion); + mViewPager = (MainViewPager) findViewById(R.id.mvp_main); + mHeadFuntion = (TextView) findViewById(R.id.tv_set); + + List fragmentList = new ArrayList<>(); + fragmentList.add(new ModelSetting4Fragment()); + mTimeSettingFragment = new TimeSettingFragment(mHandler); + fragmentList.add(mTimeSettingFragment); + FragmentManager manager = this.getSupportFragmentManager(); + mViewPager.setAdapter(new MainActivityAdapter(manager, fragmentList)); + mViewPager.setOffscreenPageLimit(1); + + mFuntion.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if ((Boolean) getIntent().getExtras().get("isAdd")) { + mTimeSettingFragment.updateModelTime(); + } else { + mTimeSettingFragment.addModelTime(); + } + } + }); + } + + public void setTitleListener(OnTitleItemClickListener listener) { + mListener = listener; + } + + + private void initListener() { + iv_back.setOnClickListener(this); + rb_model_set.setOnClickListener(this); + rb_model_time.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_back: + finish(); + break; + case R.id.rb_model_set: + mHeadFuntion.setVisibility(View.GONE); + mViewPager.setCurrentItem(0, false); + break; + case R.id.rb_model_time: + mHeadFuntion.setVisibility(View.VISIBLE); + mViewPager.setCurrentItem(1, false); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_MODEL_TIME_SUCCESS: + AddModelEntity addModelEntity = (AddModelEntity) msg.obj; + ToastUtil.show(this, addModelEntity.getMsg().toString()); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + break; + case ADD_MODEL_TIME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_MODEL_TIME_SUCCESS: + AddModelEntity addModelEntity1 = (AddModelEntity) msg.obj; + ToastUtil.show(this, addModelEntity1.getMsg().toString()); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + break; + case UPDATE_MODEL_TIME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case SELECT_MODEL_TIME_SUCCESS: + TimeSetEntity timeSetEntity = (TimeSetEntity) msg.obj; + if (null != timeSetEntity.getObj()) { + List mDatas = timeSetEntity.getObj(); + for (int i = 0; i < mDatas.size(); i++) { + if (mDatas.get(i).getModelType().equals(String.valueOf(getIntent().getExtras().get("model")))) { + timEntity = mDatas.get(i); + } + } + mTimeSettingFragment.setViewDate(timEntity); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/ModelSetting4Fragment.java b/app/src/main/java/com/yonsz/z1/fragment/scene/ModelSetting4Fragment.java new file mode 100644 index 0000000..3e10aad --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/ModelSetting4Fragment.java @@ -0,0 +1,397 @@ +package com.yonsz.z1.fragment.scene; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.ModelOpenEntity; +import com.yonsz.z1.database.entity.entitya2.ModelSetEntity; +import com.yonsz.z1.device.DeviceExpandableListView; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.model.ChooseDeviceActivity; +import com.yonsz.z1.model.ModelSetAdapter; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.id.tv_che_dan; +import static com.yonsz.z1.net.Constans.DEL_MODEL_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.DEL_MODEL_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_CONTROL_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_BASIC; +import static com.yonsz.z1.new433.light.LightNewActivity.removeDuplicate; + +/** + * Created by Administrator on 2018/5/23. + */ + +public class ModelSetting4Fragment extends BaseFragment implements View.OnClickListener { + private UIHandle mHandler; + private View view; + private LoadingDialog mLoadingDialog; + private int model; + private TextView modelNameTv, modelDeclareTv; + private CheckBox modelOpenCb; + private DeviceExpandableListView mListView; + private ModelSetAdapter mModelSetAdapter; + private List mObjEntity; + private ImageView modelAddIv; + private TextView tvDeclare; + private TextView tv_1; + private RelativeLayout mainDeclare; + private RelativeLayout noDeviceRl; + private RelativeLayout allAddRl; + private RelativeLayout topDecalre; + private String respone; + private List mChildData = new ArrayList<>(); + private List> mDatas = new ArrayList<>(); + private String ziId; + private String isHaveDevice; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(R.layout.fragment_model_setting4, container, false); + initView(view); + initListener(); + return view; + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(getActivity()); + mLoadingDialog.show(); + } + + @Override + public void onResume() { + super.onResume(); + selectModelDetail(); + } + + private void initView(View view) { + model = (int) getActivity().getIntent().getExtras().get("model"); + isHaveDevice = (String) getActivity().getIntent().getExtras().get("isHaveDevice"); + modelAddIv = (ImageView) view.findViewById(R.id.iv_time_set_add); + modelNameTv = (TextView) view.findViewById(R.id.tv_model_name); + modelDeclareTv = (TextView) view.findViewById(R.id.tv_model_declare); + tvDeclare = (TextView) view.findViewById(tv_che_dan); + tv_1 = (TextView) view.findViewById(R.id.tv_1); + topDecalre = (RelativeLayout) view.findViewById(R.id.rl_declare); + mainDeclare = (RelativeLayout) view.findViewById(R.id.rl_text_declare); + noDeviceRl = (RelativeLayout) view.findViewById(R.id.rl_text_declare_no_device); + allAddRl = (RelativeLayout) view.findViewById(R.id.rl_time_set_add); + modelOpenCb = (CheckBox) view.findViewById(R.id.cb_model_open); + + switch (model) { + case 1: + modelNameTv.setText("回家模式"); + modelDeclareTv.setText("可开启灯光、空调等设备"); + tvDeclare.setText("触发“回家模式”后,执行以下动作"); + tv_1.setText("触发“回家模式”后,所要"); + break; + case 2: + modelNameTv.setText("离家模式"); + modelDeclareTv.setText("可关闭灯光、空调等"); + tvDeclare.setText("触发“离家模式”后,执行以下动作"); + tv_1.setText("触发“离家模式”后,所要"); + break; + case 3: + modelNameTv.setText("睡眠模式"); + modelDeclareTv.setText("可关闭电视、开启夜灯等"); + tvDeclare.setText("触发“睡眠模式”后,执行以下动作"); + tv_1.setText("触发“睡眠模式”后,所要"); + break; + case 4: + modelNameTv.setText("起床模式"); + modelDeclareTv.setText("关闭夜灯、打开窗帘等"); + tvDeclare.setText("触发“起床模式”后,执行以下动作"); + tv_1.setText("触发“起床模式”后,所要"); + break; + } + mListView = (DeviceExpandableListView) view.findViewById(R.id.expandablelist); + mObjEntity = new ArrayList<>(); + + if (isHaveDevice.equals("1")) { + + } else { + modelOpenCb.setEnabled(false); + noDeviceRl.setVisibility(View.VISIBLE); + allAddRl.setVisibility(View.GONE); + } + } + + private void initListener() { + modelAddIv.setOnClickListener(this); + modelOpenCb.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_time_set_add: + Intent intent = new Intent(getActivity(), ChooseDeviceActivity.class); + intent.putExtra("model", model); + intent.putExtra("respone", respone); + startActivity(intent); + break; + case R.id.cb_model_open: + if (modelOpenCb.isChecked()) { + updateModelBasic("1"); + } else { + updateModelBasic("0"); + } + break; + } + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECT_MODEL_DETAIL_SUCCESS: + if (null != msg.obj) { + if (isHaveDevice.equals("1")) { + ModelSetEntity modelSetEntity = (ModelSetEntity) msg.obj; + if (null != modelSetEntity.getData()) { + if (String.valueOf(modelSetEntity.getData().getFlag()).equals("1")) { + modelOpenCb.setChecked(true); + } else { + modelOpenCb.setChecked(false); + } + setViewData(modelSetEntity); + } + } else { + + } + } else { + + } + break; + case UPDATE_MODEL_BASIC_SUCCESS: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ModelOpenEntity obj = (ModelOpenEntity) msg.obj; + if (null != obj.getObj()) { + if (obj.getObj().getFlag() == 1) { + mListView.setVisibility(View.VISIBLE); + mainDeclare.setVisibility(View.GONE); + topDecalre.setVisibility(View.VISIBLE); + selectModelDetail(); + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + } + } + break; + case UPDATE_MODEL_BASIC_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case SELECT_MODEL_DETAIL_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case DEL_MODEL_CONTROL_SUCCESS: + selectModelDetail(); + mListView.deferNotifyDataSetChanged(); + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + break; + case DEL_MODEL_CONTROL_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case UPDATE_MODEL_CONTROL_SUCCESS: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + break; + case UPDATE_MODEL_CONTROL_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(getActivity(), (String) msg.obj); + break; + } + } + + private void setViewData(final ModelSetEntity modelSetEntity) { + mObjEntity = modelSetEntity.getData().getControlList(); + convertList(mObjEntity); + if (String.valueOf(modelSetEntity.getData().getFlag()).equals("1")) { + if (mObjEntity != null) { + mListView.setVisibility(View.VISIBLE); + mainDeclare.setVisibility(View.GONE); + topDecalre.setVisibility(View.VISIBLE); + mModelSetAdapter = new ModelSetAdapter(getContext(), mObjEntity); + mListView.setAdapter(mModelSetAdapter); + for (int i = 0; i < mModelSetAdapter.getGroupCount(); i++) { + mListView.expandGroup(i); + } + mModelSetAdapter.setmOnExpandItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id) { + switch (i) { + case 0: + //删除 + delModelControl(id); + break; + case 1: + //开关 + if (j == 0) { + updateModelControl(mDatas.get(parentPosition).get(childPosition).getId().toString(), "1"); + } else { + updateModelControl(mDatas.get(parentPosition).get(childPosition).getId().toString(), "0"); + } + break; + } + } + }); + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + } + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + } + } + + private List> convertList(List mObjEntity) { + if (mObjEntity != null && mObjEntity.size() > 0) { + List mChildData = null; + ziId = mObjEntity.get(0).getZiId().toString(); + List ziIdStrings = new ArrayList<>(); + for (int i = 0; i < mObjEntity.size(); i++) { + ziIdStrings.add(mObjEntity.get(i).getZiId()); + } + List list = removeDuplicate(ziIdStrings); + for (int i = 0; i < list.size(); i++) { + mChildData = new ArrayList<>(); + for (int j = 0; j < mObjEntity.size(); j++) { + if (mObjEntity.get(j).getZiId().equals(list.get(i))) { + mChildData.add(mObjEntity.get(j)); + } + } + mDatas.add(mChildData); + } + + /*ziId = mObjEntity.get(0).getZiId().toString(); + for (int i = 0; i < mObjEntity.size(); i++) { + if (mObjEntity.get(i).getZiId().equals(ziId)) { + mChildData.add(mObjEntity.get(i)); + } else { + ziId = mObjEntity.get(i).getZiId().toString(); + mDatas.add(mChildData); + mChildData = new ArrayList<>(); + mChildData.add(mObjEntity.get(i)); + } + if (mChildData.size() == mObjEntity.size()) { + mDatas.add(mChildData); + } else if (i == mObjEntity.size() - 1) { + mDatas.add(mChildData); + } + }*/ + } + + return mDatas; + } + + private void delModelControl(String controlId) { + + } + + private void updateModelControl(String controlId, String cmdType) { + + } + + private void updateModelBasic(String flag) { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + map.put("modelType", String.valueOf(model)); + map.put("flag", flag); + netWorkUtil.requestPostByAsynewApi(UPDATE_MODEL_BASIC, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelBasic", "ShareDeviceActivity onSuccess()" + respone); + ModelOpenEntity obj = JSON.parseObject(respone, ModelOpenEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void selectModelDetail() { + + } + + static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(ModelSetting4Fragment activity) { + weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + ModelSetting4Fragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/ProvinceItemParent.java b/app/src/main/java/com/yonsz/z1/fragment/scene/ProvinceItemParent.java new file mode 100644 index 0000000..bbeb1ae --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/ProvinceItemParent.java @@ -0,0 +1,108 @@ +package com.yonsz.z1.fragment.scene; + +import android.util.Log; +import android.widget.ImageView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.DevieFirstBean; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; +import com.yonsz.z1.fragment.scene.treerecyclerview.factory.ItemHelperFactory; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItem; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItemGroup; + +import java.util.List; + +/** + * Created by baozi on 2016/12/8. + */ +public class ProvinceItemParent extends TreeItemGroup { + private ImageView iv_arrow_down_up; + + @Override + public List initChildList(DevieFirstBean data) { + return ItemHelperFactory.createTreeItemList(data.getCitys(), CountyItemParent.class, this, 2); + } + + @Override + public int getLayoutId() { + return R.layout.item_main_position; + } + + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + iv_arrow_down_up = holder.getView(R.id.iv_arrow_down_up); + switch (getData().getAddressName()) { + case "客厅": + holder.setText(R.id.tv_content, R.string.keting); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_position_parlour); + break; + case "儿童房": + holder.setText(R.id.tv_content, R.string.ertongfang); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_position_children); + break; + case "主卧": + holder.setText(R.id.tv_content, R.string.zhuwo); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_position_bedroom); + break; + case "卫生间": + holder.setText(R.id.tv_content, R.string.weishengjian); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_position_toilet); + break; + case "书房": + holder.setText(R.id.tv_content, R.string.shufang); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_position_study); + break; + case "餐厅": + holder.setText(R.id.tv_content, R.string.canting); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_position_restaurant); + break; + case "次卧": + holder.setText(R.id.tv_content, R.string.ciwo); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_position_second_lie); + break; + case "厨房": + holder.setText(R.id.tv_content, R.string.chufang); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_position_kitchen); + break; + case "阳台": + holder.setText(R.id.tv_content, R.string.yangtai); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_position_balcony); + break; + case "门口": + holder.setText(R.id.tv_content, R.string.qita); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_not_set); + break; + case "洗手间": + holder.setText(R.id.tv_content, R.string.xishoujian); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_position_restroom); + break; + default: + holder.setText(R.id.tv_content, R.string.qita); + holder.setImageResource(R.id.iv_position_icon, R.drawable.icon_not_set); + break; + } + } + + @Override + public boolean isExpand() { + return super.isExpand(); + } + + @Override + public boolean isCanExpand() { + return true; + } + + @Override + public void onClick(ViewHolder viewHolder, BaseRecyclerAdapter.OnItemClickListener onItemClickListener, int layoutPosition) { + super.onClick(viewHolder, onItemClickListener, layoutPosition); + Log.i("mOnItemClickListener", "TreeRecyclerAdapter onClick()" + "我是第一层呀"); + if (isExpand()) { + iv_arrow_down_up.setImageResource(R.drawable.arrow_down); + } else { + iv_arrow_down_up.setImageResource(R.drawable.arrow_up); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/SceneFragment.java b/app/src/main/java/com/yonsz/z1/fragment/scene/SceneFragment.java new file mode 100644 index 0000000..3bc34c1 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/SceneFragment.java @@ -0,0 +1,632 @@ +package com.yonsz.z1.fragment.scene; + +import android.content.Intent; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.AddPanelModelEntity; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.database.entity.entitya2.ModelOpenEntity; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.fragment.main4.MainFragment4; +import com.yonsz.z1.listener.OnRecyclerTypeClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNextDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.model.Module; +import com.yonsz.z1.tcpudp.net.UdpBroadcast; +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.tcpudp.utils.Utils; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.model.ModelNewAdapter; +import com.yonsz.z1.version5.scene.Model5DetailActivity; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.listpopupwindow.RankingPopupWindow; + +import java.lang.ref.WeakReference; +import java.net.DatagramPacket; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static android.content.Context.WIFI_SERVICE; +import static android.support.v7.widget.helper.ItemTouchHelper.ACTION_STATE_DRAG; +import static android.support.v7.widget.helper.ItemTouchHelper.ACTION_STATE_IDLE; +import static com.yonsz.z1.net.Constans.ADD_MODEL_BASIC_FAIL; +import static com.yonsz.z1.net.Constans.ADD_MODEL_BASIC_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumList; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.Constans.isUseDefFlag; +import static com.yonsz.z1.net.NetWorkUrl.ADD_MODEL_BASIC; +import static com.yonsz.z1.net.NetWorkUrl.AVTIVE_MODEL_NEW; +import static com.yonsz.z1.net.NetWorkUrl.MODEL_SORTMODEL; +import static com.yonsz.z1.net.NetWorkUrl.SELECT_MODEL_TIME; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_BASIC; + +/** + * Created by Administrator on 2017/11/3. + */ + +public class SceneFragment extends BaseFragment implements View.OnClickListener { + private SceneFragment.UIHandle mHandler; + private TitleView mTitleView; + private View view; + private List mDatas; + private String modelId; + private MainFragment4 mMainFragment; + private RankingPopupWindow mWindow; + private RankingPopupWindow.Listener listener; + private boolean isQueryHouses = false; + private RecyclerView mRecyclerView; + private ModelNewAdapter modelAdapter; + + + //把搜索设备放在这里 + private List mModules; + private UdpBroadcast udpBroadcast; + private WifiManager wifimanager; + private ItemTouchHelper itemTouchHelper; + private RecyclerView.ViewHolder lastDragViewHolder; + private int fromPosition; + private int toPosition; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new SceneFragment.UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(R.layout.fragment_scene5, container, false); + + udpBroadcast = new UdpBroadcast(Constants.UDP_PORT,"") { + @Override + public void onReceived(List packets) { + Log.i("nettyUtil", "SceneFragment onReceived()"); + mModules = decodePackets(packets); + saveDevices(mModules); + } + }; + wifimanager = (WifiManager) getActivity().getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + udpBroadcast.open(); + } + + initView(view); + initListener(); + + udpBroadcast.send(Utils.getCMDScanModules(getActivity())); + return view; + } + + public void onEventMainThread(ChooseHomeEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("1") || msg.equals("3") || msg.equals("100")) { + // mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + /*if (homeListEntity.getData().get(deviceNumListPosition).getName().length() > 9) { + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName().substring(0, 6) + "…"); + } else { + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + }*/ + isQueryHouses = true; + } + } + + @Override + public void onStart() { + Log.i("UdpBroadcast", "onStart"); + super.onStart(); + } + + + @Override + public void onResume() { + super.onResume(); + if (isQueryHouses) { + selectModelTime(); + } + } + + public void reRefrash() { + selectModelTime(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + udpBroadcast.close(); + } + + private void initView(View view) { + mDatas = new ArrayList<>(); + mMainFragment = new MainFragment4(); + mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); + mTitleView = (TitleView) view.findViewById(R.id.title_scene); + mTitleView.clearBackGroud(); + mTitleView.setHead("场景模式"); + mTitleView.setHeadHomeVisible(); +// mTitleView.setHeadHomeVisible(R.drawable.icon_home_house1); + mTitleView.setHeadFuntion(R.drawable.icon_nav_add_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + // initListItem(deviceNumList, 0, mTitleView.getHomeNameTxt()); + } + + + @Override + public void onFunction() { + /*Intent intent = new Intent(getContext(), ActiveModelActivity.class); + startActivity(intent);*/ + showAddDialog(); + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void showAddDialog() { + RenameNameDialog dialog = new RenameNameDialog(getContext(), new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + addModelBasic(positioName, ""); + break; + } + } + }); + dialog.setHintName(""); + dialog.setContent("设置自定义模式名称"); + dialog.setMaxEms(10); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + } + + private void initListener() { + + } + + private void selectModelTime() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (deviceNumListPosition > homeListEntity.getData().size() - 1) { + deviceNumListPosition = 0; + } + map.put("houseId", homeListEntity.getData().get(deviceNumListPosition).getId()); + map.put("isCustom", "1"); + netWorkUtil.requestGetByAsy(SELECT_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("selectModelTime", "ShareDeviceActivity onSuccess()" + respone); + TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECT_MODEL_TIME_SUCCESS: + TimeSetEntity timeSetEntity = (TimeSetEntity) msg.obj; + AddressNameUtil.setInstance(timeSetEntity); + mDatas.clear(); + mDatas.addAll(timeSetEntity.getData()); + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(getContext()); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setLayoutManager(manager); + modelAdapter = new ModelNewAdapter(getContext(), mDatas); + mRecyclerView.setAdapter(modelAdapter); + // setViewDate(mDatas); + + itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + Log.i("getMovementFlags", "getMovementFlags: "); + int dragFlags; + int swipeFlags; + if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | + ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; + swipeFlags = 0; + } else { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; + swipeFlags = 0; + } + return makeMovementFlags(dragFlags, swipeFlags); + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + fromPosition = viewHolder.getAdapterPosition(); + toPosition = target.getAdapterPosition(); + Log.i("onMove", "onMove: " + fromPosition + "===" + toPosition + "===" + mDatas.size()); + if (fromPosition == mDatas.size() || toPosition == mDatas.size()) { + return false; + } + if (fromPosition < toPosition) { + for (int i = fromPosition; i < toPosition; i++) { + Collections.swap(mDatas, i, i + 1); + } + } else { + for (int i = fromPosition; i > toPosition; i--) { + Collections.swap(mDatas, i, i - 1); + } + } + modelAdapter.notifyItemMoved(fromPosition, toPosition); + // modelAdapter.notifyDataSetChanged(); + return true; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + Log.i("onSwiped", "onSwiped: "); + + } + + @Override + public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { + super.onSelectedChanged(viewHolder, actionState); + if (viewHolder != null && actionState == ACTION_STATE_DRAG) { + lastDragViewHolder = viewHolder; + } + //ACTION_STATE_IDLE就是松开了,把大小改为原状 + if (lastDragViewHolder != null && actionState == ACTION_STATE_IDLE) { + lastDragViewHolder = null; + sortModel(); + } + } + + @Override + public boolean isLongPressDragEnabled() { + return false; + } + }); + itemTouchHelper.attachToRecyclerView(mRecyclerView); + + modelAdapter.setmOnItemClickListener(new OnRecyclerTypeClickListener() { + @Override + public void onClick(View view, int position, int i) { + if (i == 0) { + final TimeSetEntity.DataBean entity4 = mDatas.get(position); + ConfirmNextDialog dialog1 = new ConfirmNextDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + + break; + case 1: + // updateModelBasic(entity4); + avtiveModel(entity4); + break; + } + } + }); + dialog1.setTopTxt("开启" + entity4.getModelName()); + dialog1.setContent("开启" + entity4.getModelName() + "下的设备预设动作"); + dialog1.setCancelable(false); + dialog1.show(); + } else if (i == 1) { + TimeSetEntity.DataBean entity = mDatas.get(position); + Intent intent = new Intent(getActivity(), Model5DetailActivity.class); + intent.putExtra("model", entity.getModelType()); + intent.putExtra("isAdd", true); + intent.putExtra("modelId1", entity.getModelId()); + intent.putExtra("modelId", entity.getId()); + intent.putExtra("repeatTime", ""); + intent.putExtra("setTime", ""); + intent.putExtra("isHaveDevice", "1"); + intent.putExtra("houseId", entity.getHouseId()); + intent.putExtra("houseModelName", entity.getModelName()); + startActivity(intent); + } + + } + + @Override + public void onLongClick(RecyclerView.ViewHolder viewHolder, int position) { + if (position != mDatas.size()) { + itemTouchHelper.startDrag(viewHolder); + } + } + }); + break; + case QUERY_HOUSES_SUCCESS: + homeListEntity = (HomeListEntity) msg.obj; + deviceNumList.clear(); + if (null != homeListEntity && null != homeListEntity.getData()) { + if (deviceNumListPosition > homeListEntity.getData().size() - 1) { + deviceNumListPosition = 0; + } + deviceNumList.clear(); + for (int i = 0; i < homeListEntity.getData().size(); i++) { + if (homeListEntity.getData().get(i).getDefFlag() == 1) { + if (isUseDefFlag) { + deviceNumListPosition = i; + } + } + deviceNumList.add(homeListEntity.getData().get(i).getName()); + } +// deviceNumList.add(getString(R.string.home_manage)); + +// mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + } + EventBus.getDefault().post( + new ChooseHomeEvent("2")); + selectModelTime(); + break; + case UPDATE_MODEL_BASIC_SUCCESS: + ToastUtil.show(getActivity(), "开启成功"); + break; + case ADD_MODEL_BASIC_SUCCESS: + EventBus.getDefault().post( + new ChooseHomeEvent("10")); +// modelAdapter.notifyDataSetChanged(); + selectModelTime(); + break; + case ADD_MODEL_BASIC_FAIL: + case SELECT_MODEL_TIME_FAIL: + case UPDATE_MODEL_BASIC_FAIL: + ToastUtil.show(getActivity(), (String) msg.obj); + break; + } + } + + private void sortModel() { + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < mDatas.size(); i++) { + stringBuilder.append(mDatas.get(i).getModelId()); + stringBuilder.append("_" + (i + 1)); + if (i < mDatas.size() - 1) { + stringBuilder.append(","); + } + } + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("sortInfos", String.valueOf(stringBuilder)); + netWorkUtil.requestPostByAsynewApi(MODEL_SORTMODEL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sortModel", "onSuccess()" + respone); + EventBus.getDefault().post( + new ChooseHomeEvent("10")); + /*AddPanelModelEntity obj = JSON.parseObject(respone, AddPanelModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_MODEL_BASIC_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_MODEL_BASIC_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*/ + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_MODEL_BASIC_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_in_home: + + break; + case R.id.rl_out_home: + + break; + case R.id.rl_in_bed: + + break; + case R.id.rl_out_bed: + + break; + } + } + + private List decodePackets(List packets) { + + int i = 1; + Module module; + List list = new ArrayList(); + List modules = new ArrayList(); + + DECODE_PACKETS: + for (DatagramPacket packet : packets) { + + String data = new String(packet.getData(), 0, packet.getLength()); + Log.i("UdpBroadcast", i + ": " + data); + if (data.equals(Utils.getCMDScanModules(getActivity()))) { + continue; + } + + for (String item : list) { + if (item.equals(data)) { + continue DECODE_PACKETS; + } + } + + list.add(data); + if ((module = Utils.decodeBroadcast2Module(data)) != null) { + module.setId(i); + modules.add(module); + i++; + } + } + + return modules; + } + + /** + * save modules' data to local + * + * @param modules + */ + private void saveDevices(List modules) { + if (modules.size() > 0) { + for (Module module : modules) { + SharedpreferencesUtil.save(module.getMac(), module.getIp()); + } + } else { + } + } + + private void avtiveModel(final TimeSetEntity.DataBean entity1) { + if (DensityUtil.isNetworkConnected(getActivity())) { + NettyHandlerUtil.getInstance(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", entity1.getUserId()); + map.put("modelType", entity1.getModelType()); + map.put("modelId", entity1.getModelId()); + map.put("houseId", entity1.getHouseId()); + netWorkUtil.requestPostByAsynewApi(AVTIVE_MODEL_NEW, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("avtiveModel", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } else { + ToastUtil.show(getActivity(), R.string.net_error); + } + } + + private void addModelBasic(String modelName, final String modelType) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("modelName", modelName); + if (!modelType.isEmpty()) { + map.put("modelType", modelType); + } + /*else { + map.put("modelType", "60"); + }*/ + netWorkUtil.requestPostByAsynewApi(ADD_MODEL_BASIC, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addModelBasic", "onSuccess()" + respone); + AddPanelModelEntity obj = JSON.parseObject(respone, AddPanelModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_MODEL_BASIC_SUCCESS); + msg.obj = modelType; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_MODEL_BASIC_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_MODEL_BASIC_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(SceneFragment activity) { + weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + SceneFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/TimeSettingFragment.java b/app/src/main/java/com/yonsz/z1/fragment/scene/TimeSettingFragment.java new file mode 100644 index 0000000..7b811c2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/TimeSettingFragment.java @@ -0,0 +1,466 @@ +package com.yonsz.z1.fragment.scene; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.bigkoo.pickerview.TimePickerView; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entitya2.AddModelEntity; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.model.ModelSelectActivity; +import com.yonsz.z1.model.ReapetTimeActivity; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.id.tv_model_select; +import static com.yonsz.z1.net.Constans.ADD_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.ADD_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.MODEL_REAPEAT; +import static com.yonsz.z1.net.Constans.MODEL_SELECT; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.SURE_BUTTON; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.ADD_MODEL_TIME; +import static com.yonsz.z1.net.NetWorkUrl.SELECT_MODEL_TIME; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_TIME; + +/** + * Created by Administrator on 2018/4/25. + * 用不到了 + */ + +public class TimeSettingFragment extends BaseFragment implements View.OnClickListener { + protected Handler mHandler; + private View view; + private RelativeLayout modelSelectRl, repeatTimeRl, timeSetRl; + private TextView timeSetTv, modelSelectTv, onceTimeTv; + private String modelType; + private int model; + private boolean isModify; + private String useId; + private TimeSetEntity.ObjEntity mObjEntity; + private String week = ""; + private LoadingDialog mLoadingDialog; + private ModelSet4Activity mActivity = new ModelSet4Activity(); + + public TimeSettingFragment() { + } + + @SuppressLint("ValidFragment") + public TimeSettingFragment(Handler handler) { + mHandler = handler; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(R.layout.activity_time_setting4, container, false); + initView(view); + return view; + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(getContext()); + mLoadingDialog.show(); + } + + private void initView(View view) { + model = (int) getActivity().getIntent().getExtras().get("model"); + isModify = true; + /*if (isModify) { + mObjEntity = (TimeSetEntity.ObjEntity) getIntent().getExtras().get("mDatas"); + useId = mObjEntity.getId().toString(); + } else { + + }*/ + modelSelectRl = (RelativeLayout) view.findViewById(R.id.rl_model_select); + repeatTimeRl = (RelativeLayout) view.findViewById(R.id.rl_repeat_time); + onceTimeTv = (TextView) view.findViewById(R.id.tv_once_time); + timeSetRl = (RelativeLayout) view.findViewById(R.id.rl_time_set); + timeSetTv = (TextView) view.findViewById(R.id.tv_time_set); + modelSelectTv = (TextView) view.findViewById(tv_model_select); + modelSelectRl.setOnClickListener(this); + repeatTimeRl.setOnClickListener(this); + timeSetRl.setOnClickListener(this); + switch (model) { + case 1: + modelType = "1"; + modelSelectTv.setText("回家模式"); + break; + case 2: + modelType = "2"; + modelSelectTv.setText("离家模式"); + break; + case 3: + modelType = "3"; + modelSelectTv.setText("睡眠模式"); + break; + case 4: + modelType = "4"; + modelSelectTv.setText("起床模式"); + break; + } + + selectModelTime(); + } + + public void setViewDate(TimeSetEntity.ObjEntity mObjEntity) { + if (mObjEntity != null) { + timeSetTv.setText(mObjEntity.getExecTime().toString()); + modelType = mObjEntity.getModelType().toString(); + switch (modelType) { + case "1": + modelSelectTv.setText("回家模式"); + break; + case "2": + modelSelectTv.setText("离家模式"); + break; + case "3": + modelSelectTv.setText("睡眠模式"); + break; + case "4": + modelSelectTv.setText("起床模式"); + break; + } + + if (mObjEntity.getOnceFlag() == 0) { + String str = ""; + if (mObjEntity.getWeekNum1().equals("1")) { + str += "周一 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum2().equals("1")) { + str += "周二 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum3().equals("1")) { + str += "周三 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum4().equals("1")) { + str += "周四 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum5().equals("1")) { + str += "周五 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum6().equals("1")) { + str += "周六 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum7().equals("1")) { + str += "周天"; + week += "1"; + } else { + week += "0"; + } + onceTimeTv.setText(str); + } + } + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_model_select: + intent = new Intent(getActivity(), ModelSelectActivity.class); + intent.putExtra("modelNow", modelSelectTv.getText().toString().trim()); + startActivityForResult(intent, MODEL_SELECT); + break; + case R.id.rl_repeat_time: + intent = new Intent(getActivity(), ReapetTimeActivity.class); + if (week.length() == 7) { + intent.putExtra("repeatTime", week); + } + startActivityForResult(intent, MODEL_REAPEAT); + break; + case R.id.rl_time_set: + setTime(timeSetTv); + break; + } + } + + private void setTime(final TextView textView) { + TimePickerView pvTime = new TimePickerView.Builder(getContext(), new TimePickerView.OnTimeSelectListener() { + @Override + public void onTimeSelect(Date date, View v) {//选中事件回调 + textView.setText(getTime(date)); + // updateOnceTimer(id, "1", textView); + } + })//年月日时分秒 的显示与否,不设置则默认全部显示 + .setType(new boolean[]{false, false, false, true, true, false}) + .setLabel("", "", "", "点", "分", "") + .isCenterLabel(false) + .setDividerColor(Color.DKGRAY) + .setContentSize(21) + .setBackgroundId(0x00FFFFFF) //设置外部遮罩颜色 + .setDecorView(null) + .build(); + pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。 + pvTime.show(); + } + + private String getTime(Date date) {//可根据需要自行截取数据显示 + SimpleDateFormat format = new SimpleDateFormat("HH:mm"); + return format.format(date); + } + + + private void callBackUiThread(Message msg) { + mHandler.handleMessage(msg); + switch (msg.what) { + case ADD_MODEL_TIME_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + AddModelEntity addModelEntity = (AddModelEntity) msg.obj; + ToastUtil.show(getActivity(), addModelEntity.getMsg().toString()); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }, 1000); + break; + case ADD_MODEL_TIME_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(getContext(), (String) msg.obj); + break; + case UPDATE_MODEL_TIME_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + AddModelEntity addModelEntity1 = (AddModelEntity) msg.obj; + ToastUtil.show(getActivity(), addModelEntity1.getMsg().toString()); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }, 1000); + break; + case UPDATE_MODEL_TIME_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(getContext(), (String) msg.obj); + break; + case SELECT_MODEL_TIME_SUCCESS: + TimeSetEntity timeSetEntity = (TimeSetEntity) msg.obj; + List mDatas = timeSetEntity.getObj(); + for (int i = 0; i < mDatas.size(); i++) { + if (mDatas.get(i).getModelType().equals(modelType)) { + mObjEntity = mDatas.get(i); + } + } + setViewDate(mObjEntity); + break; + case SURE_BUTTON: + if ((Boolean) getActivity().getIntent().getExtras().get("isAdd")) { + updateModelTime(); + } else { + addModelTime(); + } + break; + } + } + + public void updateModelTime() { + // initLoadDialog(); + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", getActivity().getIntent().getExtras().get("modelId").toString()); + if (modelType != null) { + map.put("modelType", modelType); + } else { + map.put("modelType", "1"); + } + map.put("execTime", timeSetTv.getText().toString()); + if (onceTimeTv.getText().toString().equals(getString(R.string.once_time))) { + map.put("onceFlag", "1"); + } else { + map.put("week", week); + map.put("onceFlag", "0"); + } + netWorkUtil.requestPostByAsynewApi(UPDATE_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelTime", "ShareDeviceActivity onSuccess()" + respone); + AddModelEntity obj = JSON.parseObject(respone, AddModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + + public void addModelTime() { + // initLoadDialog(); + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (modelType != null) { + map.put("modelType", modelType); + } else { + map.put("modelType", "1"); + } + map.put("execTime", timeSetTv.getText().toString()); + if (onceTimeTv.getText().toString().equals(getString(R.string.once_time))) { + map.put("onceFlag", "1"); + } else { + map.put("week", week); + map.put("onceFlag", "0"); + } + netWorkUtil.requestPostByAsynew(ADD_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addModelTime", "ShareDeviceActivity onSuccess()" + respone); + AddModelEntity obj = JSON.parseObject(respone, AddModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODEL_SELECT: + if (data != null && data.getExtras().get("modelSelect") != null) { + modelSelectTv.setText(data.getExtras().get("modelSelect").toString().trim()); + switch (data.getExtras().get("modelSelect").toString().trim()) { + case "回家模式": + modelType = "1"; + break; + case "离家模式": + modelType = "2"; + break; + case "睡眠模式": + modelType = "3"; + break; + case "起床模式": + modelType = "4"; + break; + } + } + break; + case MODEL_REAPEAT: + if (data != null && data.getExtras().get("modelRepeat") != null) { + if (!TextUtils.isEmpty(data.getExtras().get("modelRepeat").toString().trim())) { + onceTimeTv.setText(data.getExtras().get("modelRepeat").toString().trim()); + week = data.getExtras().get("week").toString().trim(); + } else { + onceTimeTv.setText(R.string.once_time); + week = "0000000"; + } + } + break; + } + } + + private void selectModelTime() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestGetByAsy(SELECT_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectModelTime", "ShareDeviceActivity onSuccess()" + respone); + TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/TreeItemType.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/TreeItemType.java new file mode 100644 index 0000000..99a9f8b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/TreeItemType.java @@ -0,0 +1,15 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Created by 125C01063144 on 2018/2/27. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface TreeItemType { + int type(); +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/TreeRecyclerAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/TreeRecyclerAdapter.java new file mode 100644 index 0000000..63f7aa8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/TreeRecyclerAdapter.java @@ -0,0 +1,443 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.adpater; + +import android.graphics.Rect; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; + +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; +import com.yonsz.z1.fragment.scene.treerecyclerview.factory.ItemHelperFactory; +import com.yonsz.z1.fragment.scene.treerecyclerview.helper.ItemTouchHelperAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItem; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItemGroup; +import com.yonsz.z1.fragment.scene.treerecyclerview.manager.ItemManager; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Created by baozi on 2017/4/20. + * 树级结构recycleradapter. + * item之间有子父级关系, + */ + +public class TreeRecyclerAdapter extends BaseRecyclerAdapter implements ItemTouchHelperAdapter { + + private TreeRecyclerType type; + + private ItemManager mItemManager; + private int lastFromPosition; + private int lastToPosition; + + public TreeRecyclerAdapter() { + this(null); + } + + public TreeRecyclerAdapter(TreeRecyclerType treeRecyclerType) { + type = treeRecyclerType == null ? TreeRecyclerType.SHOW_DEFUTAL : treeRecyclerType; + } + + @Override + public void onBindViewHolderClick(final ViewHolder holder, View view) { + if (!view.hasOnClickListeners()) { + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int layoutPosition = holder.getLayoutPosition(); + //获得处理后的position + layoutPosition = checkPosition(layoutPosition); + //拿到BaseItem + TreeItem item = getDatas().get(layoutPosition); + TreeItemGroup itemParentItem = item.getParentItem(); + //判断上一级是否需要拦截这次事件,只处理当前item的上级,不关心上上级如何处理. + if (itemParentItem != null && itemParentItem.onInterceptClick(item)) { + return; + } + //必须是TreeItemGroup才能展开折叠,并且type不能为 TreeRecyclerType.SHOW_ALL + // if (item instanceof TreeItemGroup && type != TreeRecyclerType.SHOW_ALL) { + if (item instanceof TreeItemGroup) { + if (item instanceof TreeItemGroup) { + TreeItemGroup treeItemGroup = (TreeItemGroup) item; + treeItemGroup.setExpand(!treeItemGroup.isExpand()); + } + } + getDatas().get(layoutPosition).onClick(holder, mOnItemClickListener, layoutPosition); + } + }); + } + + if (!view.isLongClickable()) { + view.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + //获得holder的position + int layoutPosition = holder.getLayoutPosition(); + //检查position是否可以点击 + //检查并得到真实的position + int itemPosition = checkPosition(layoutPosition); + if (mOnItemLongClickListener != null) { + // return mOnItemLongClickListener.onItemLongClick(holder, itemPosition); + getDatas().get(layoutPosition).onLongClick(holder, mOnItemLongClickListener, layoutPosition); + } + return false; + } + }); + } + } + + @Override + public void setDatas(List items) { + if (null == items || items.isEmpty()) { + return; + } + getDatas().clear(); + assembleItems(items); + } + + public void setDatas(TreeItemGroup treeItemGroup) { + if (null == treeItemGroup) { + return; + } + ArrayList arrayList = new ArrayList<>(); + arrayList.add(treeItemGroup); + setDatas(arrayList); + } + + /** + * 对初始的一级items进行遍历,将每个item的childs拿出来,进行組合。 + * + * @param items + */ + private void assembleItems(List items) { + if (type != null) { + List datas = getDatas(); + datas.addAll(ItemHelperFactory.getChildItemsWithType(items, type)); + } else { + super.setDatas(items); + } + } + + public ItemManager getItemManager() { + if (mItemManager == null) { + mItemManager = new TreeItemManageImpl(this); + } + return mItemManager; + } + + public void setItemManager(ItemManager itemManage) { + this.mItemManager = itemManage; + } + + @Override + public int getLayoutId(int position) { + return getDatas().get(position).getLayoutId(); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + TreeItem t = getDatas().get(position); + checkItemManage(t); + t.onBindViewHolder(holder, position); + } + + private void checkItemManage(TreeItem item) { + if (item.getItemManager() == null) { + item.setItemManager(getItemManager()); + } + } + + @Override + public final void onBindViewHolder(ViewHolder holder, TreeItem item, int position) { + + } + + @Override + public void onAttachedToRecyclerView(RecyclerView recyclerView) { + super.onAttachedToRecyclerView(recyclerView); + recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() { + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) view.getLayoutParams(); + int viewLayoutPosition = layoutParams.getViewLayoutPosition(); + int i = getItemCount(); + if (getItemCount() == 0) { + return; + } + int checkPosition = checkPosition(viewLayoutPosition); + if (checkPosition < 0 || checkPosition >= i) { + return; + } + getData(checkPosition).getItemOffsets(outRect, layoutParams, checkPosition); + } + }); + final RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager) { + final GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager; + final int spanCount = gridLayoutManager.getSpanCount(); + gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { + @Override + public int getSpanSize(int position) { + int i = getItemCount(); + if (i == 0) { + return spanCount; + } + int checkPosition = checkPosition(position); + if (checkPosition < 0 || checkPosition >= i) { + return spanCount; + } + int itemSpanSize = getItemSpanSize(checkPosition); + if (itemSpanSize == 0) { + return spanCount; + } + return itemSpanSize; + } + }); + } + } + + public int getItemSpanSize(int position) { + return getData(position).getSpanSize(); + } + + + /** + * 需要设置在setdata之前,否则type不会生效 + * + * @param type + */ + @Deprecated + public void setType(TreeRecyclerType type) { + this.type = type; + } + + @Override + public boolean onItemMove(int fromPosition, int toPosition) { + int itemCount = getItemCount(); + List datas = getDatas(); + Log.i("onItemLongClick", "TreeRecyclerAdapter onItemMove()" + fromPosition + "-----" + toPosition + "----" + itemCount); + lastFromPosition = 0; + lastToPosition = 0; + boolean isStopFrom = true; + for (int i = fromPosition; i < datas.size(); i++) { + TreeItem item = getDatas().get(i); + if (item instanceof TreeItemGroup) { + if (isStopFrom) { + lastToPosition = i - 2; + isStopFrom = false; + } + } + } + if (lastToPosition == 0) { + lastToPosition = datas.size() - 2; + } + Log.i("onItemLongClick", "TreeRecyclerAdapter" + lastToPosition); + boolean isStopTo = true; + for (int i = fromPosition; i > 0; i--) { + TreeItem item = getDatas().get(i); + if (item instanceof TreeItemGroup) { + if (isStopTo) { + lastFromPosition = i + 1; + isStopTo = false; + } + } + } + Log.i("onItemLongClick", "TreeRecyclerAdapter" + lastFromPosition); + if (lastFromPosition <= toPosition && toPosition <= lastToPosition) { + // Collections.swap(datas, fromPosition, toPosition); + //处理datas数据 + if (fromPosition < toPosition) { + for (int i = fromPosition; i < toPosition; i++) { + Collections.swap(datas, i, i + 1); + } + } else { + for (int i = fromPosition; i > toPosition; i--) { + Collections.swap(datas, i, i - 1); + } + } + notifyItemMoved(fromPosition, toPosition); + } + return true; + } + + @Override + public void onItemDragComplete(RecyclerView.ViewHolder viewHolder) { + // TODO: 2018/8/30 发送排序的接口过去 + if (null != mOnItemDragCompleteListener) { + mOnItemDragCompleteListener.OnItemDragComplete(lastFromPosition, lastToPosition, getDatas()); + } + } + + private class TreeItemManageImpl extends ItemManager { + + TreeItemManageImpl(BaseRecyclerAdapter adapter) { + super(adapter); + } + + @Override + public void addItem(TreeItem item) { + if (null == item) { + return; + } + // ArrayList items = checkItemHasItems(item); + // if (item instanceof TreeItemGroup) { + // ((TreeItemGroup) item).getChild().addAll(items); + // } + if (item instanceof TreeItemGroup) { + ArrayList childItemsWithType = ItemHelperFactory.getChildItemsWithType((TreeItemGroup) item, type); + childItemsWithType.add(0, item); + getDatas().addAll(childItemsWithType); + } else { + getDatas().add(item); + } + notifyDataChanged(); + } + + private ArrayList checkItemHasItems(TreeItem item) { + ArrayList treeItems; + if (item instanceof TreeItemGroup) { + treeItems = ItemHelperFactory.getChildItemsWithType((TreeItemGroup) item, type); + treeItems.add(0, item); + return treeItems; + } else { + treeItems = new ArrayList<>(); + TreeItemGroup itemParentItem = item.getParentItem(); + if (itemParentItem != null) { + List child = itemParentItem.getChild(); + if (child != null) { + int i = getDatas().indexOf(itemParentItem) + 1; + child.add(i, item); + treeItems.add(item); + // getDatas().add(i + child.size(), item); + } else { + + child = new ArrayList(); + itemParentItem.setChild(child); + treeItems.add(item); + // int i = getDatas().indexOf(itemParentItem); + // getDatas().add(i + child.size(), item); + } + } else { + treeItems.add(item); + } + } + return treeItems; + } + + @Override + public void addItem(int position, TreeItem item) { + getDatas().add(position, item); + // if (item != null && item.getParentItem() != null) { + // item.getParentItem().getChild().add(item); + // } + notifyDataChanged(); + } + + @Override + public void addItems(List items) { + // ArrayList list = new ArrayList<>(); + // for (TreeItem item : items) { + // ArrayList items1 = checkItemHasItems(item); + // list.addAll(items1); + // } + ArrayList childItemsWithType = ItemHelperFactory.getChildItemsWithType(items, type); + getDatas().addAll(childItemsWithType); + notifyDataChanged(); + } + + @Override + public void addItems(int position, List items) { + // ArrayList list = new ArrayList<>(); + // for (TreeItem item : items) { + // ArrayList items1 = checkItemHasItems(item); + // list.addAll(items1); + // } + ArrayList childItemsWithType = ItemHelperFactory.getChildItemsWithType(items, type); + getDatas().addAll(position, childItemsWithType); + notifyDataChanged(); + } + + @Override + public void removeItem(TreeItem item) { + if (null == item) { + return; + } + if (item instanceof TreeItemGroup) { + ArrayList childItemsWithType = ItemHelperFactory.getChildItemsWithType((TreeItemGroup) item, type); + childItemsWithType.add(0, item); + getDatas().removeAll(childItemsWithType); + } else { + getDatas().remove(item); + } + notifyDataChanged(); + } + + @Override + public void removeItem(int position) { + // TreeItem t = getDatas().get(position); + // TreeItemGroup parentItem = t.getParentItem(); + // if (parentItem != null && parentItem.getChild() != null) { + // parentItem.getChild().remove(t); + // } + getDatas().remove(position); + notifyDataChanged(); + } + + @Override + public void removeItems(List items) { + // for (TreeItem item : items) { + // ArrayList items1 = checkItemHasItems(item); + // item.getParentItem().getChild().removeAll(items1); + // } + ArrayList childItemsWithType = ItemHelperFactory.getChildItemsWithType(items, type); + getDatas().removeAll(childItemsWithType); + notifyDataChanged(); + } + + @Override + public void replaceItem(int position, TreeItem item) { + // TreeItem t = getDatas().get(position); + // if (t instanceof TreeItemGroup) { + // getDatas().set(position, item); + // } else { + // TreeItemGroup parentItem = t.getParentItem(); + // if (parentItem != null && parentItem.getChild() != null) { + // List childs = parentItem.getChild(); + // int i = childs.indexOf(t); + // childs.set(i, item); + // } + getDatas().set(position, item); + // } + notifyDataChanged(); + } + + @Override + public void replaceAllItem(List items) { + if (items != null) { + setDatas(items); + notifyDataChanged(); + } + } + + @Override + public void clean() { + getDatas().clear(); + notifyDataChanged(); + } + + @Override + public TreeItem getItem(int position) { + return getDatas().get(position); + } + + @Override + public int getItemPosition(TreeItem item) { + return getDatas().indexOf(item); + } + + } + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/TreeRecyclerType.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/TreeRecyclerType.java new file mode 100644 index 0000000..0a21822 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/TreeRecyclerType.java @@ -0,0 +1,20 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.adpater; + +public enum TreeRecyclerType { + /** + * 显示所有,不可展开折叠 + * 适用场景,多级的data数据展示,多type布局. + */ + SHOW_ALL, + /** + * 根据isExpand的状态显示展开与折叠, + * 适用场景,多级的data数据展示,多type布局. + */ + SHOW_EXPAND, + + /** + * 默认显示,显示一级,点击展开,折叠不会影响子级展开折叠 + * 适用场景,多级列表,保存展开状态 + */ + SHOW_DEFUTAL; +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/BaseWrapper.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/BaseWrapper.java new file mode 100644 index 0000000..8b05b24 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/BaseWrapper.java @@ -0,0 +1,123 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.adpater.wrapper; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; + +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; +import com.yonsz.z1.fragment.scene.treerecyclerview.manager.ItemManager; + +import java.util.List; + +/** + * Created by baozi on 2017/5/16. + */ + +public class BaseWrapper extends BaseRecyclerAdapter { + + protected BaseRecyclerAdapter mAdapter; + + public BaseWrapper(BaseRecyclerAdapter adapter) { + mAdapter = adapter; + mAdapter.getItemManager().setAdapter(this); + } + + @Override + public void addCheckItemInterfaces(CheckItemInterface itemInterface) { + mAdapter.addCheckItemInterfaces(itemInterface); + } + + @Override + public void removeCheckItemInterfaces(CheckItemInterface itemInterface) { + mAdapter.removeCheckItemInterfaces(itemInterface); + } + + @Override + public void onBindViewHolderClick(ViewHolder holder, View view) { + mAdapter.onBindViewHolderClick(holder, view); + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return mAdapter.onCreateViewHolder(parent, viewType); + } + + @Override + public void onAttachedToRecyclerView(RecyclerView recyclerView) { + mAdapter.onAttachedToRecyclerView(recyclerView); + } + + @Override + public void onViewAttachedToWindow(ViewHolder holder) { + mAdapter.onViewAttachedToWindow(holder); + } + + @Override + public int getItemViewType(int position) { + return mAdapter.getItemViewType(position); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + mAdapter.onBindViewHolder(holder, position); + } + + @Override + public int getItemCount() { + return mAdapter.getItemCount(); + } + + + @Override + public int getLayoutId(int position) { + return mAdapter.getLayoutId(position); + } + + @Override + public T getData(int position) { + return mAdapter.getData(position); + } + + @Override + public List getDatas() { + return mAdapter.getDatas(); + } + + @Override + public void setDatas(List datas) { + mAdapter.setDatas(datas); + } + + @Override + public void onBindViewHolder(ViewHolder holder, T t, int position) { + mAdapter.onBindViewHolder(holder, t, position); + } + + + @Override + public int checkPosition(int position) { + return mAdapter.checkPosition(position); + } + + + @Override + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + mAdapter.setOnItemClickListener(onItemClickListener); + } + + @Override + public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) { + mAdapter.setOnItemLongClickListener(onItemLongClickListener); + } + + @Override + public ItemManager getItemManager() { + return mAdapter.getItemManager(); + } + + @Override + public void setItemManager(ItemManager itemManager) { + mAdapter.setItemManager(itemManager); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/HeaderAndFootWrapper.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/HeaderAndFootWrapper.java new file mode 100644 index 0000000..ce8f451 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/HeaderAndFootWrapper.java @@ -0,0 +1,124 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.adpater.wrapper; + +import android.util.SparseArray; +import android.view.View; +import android.view.ViewGroup; + +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; + +/** + * Created by baozi on 2017/4/30. + */ + +public class HeaderAndFootWrapper extends BaseWrapper { + private static final int HEAD_ITEM = 1000; + private static final int FOOT_ITEM = 2000; + private SparseArray mHeaderViews = new SparseArray<>(); + private SparseArray mFootViews = new SparseArray<>(); + private boolean headShow = true; + private boolean footShow = true; + + public HeaderAndFootWrapper(BaseRecyclerAdapter adapter) { + super(adapter); + addCheckItemInterfaces(new CheckItemInterface() { + @Override + public int checkPosition(int position) { + return position - getHeadersCount(); + } + }); + } + + @Override + public T getData(int position) { + return mAdapter.getData(position); + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + if (mHeaderViews.get(viewType) != null) { + return ViewHolder.createViewHolder(mHeaderViews.get(viewType)); + } else if (mFootViews.get(viewType) != null) { + return ViewHolder.createViewHolder(mFootViews.get(viewType)); + } + return mAdapter.onCreateViewHolder(parent, viewType); + } + + @Override + public void onBindViewHolderClick(ViewHolder holder, View view) { + int layoutPosition = holder.getLayoutPosition(); + if ((isHeaderViewPos(layoutPosition) || isFooterViewPos(layoutPosition))) { + return; + } + super.onBindViewHolderClick(holder, view); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + if (isHeaderViewPos(position) || isFooterViewPos(position)) { + return; + } + mAdapter.onBindViewHolder(holder, position - getHeadersCount()); + } + + @Override + public int getItemCount() { + return getHeadersCount() + getFootersCount() + mAdapter.getItemCount(); + } + + public int getItemSpanSize(int position) { + if (isHeaderViewPos(position)) { + return 0; + } + return mAdapter.getItemSpanSize(position); + } + + @Override + public int getItemViewType(int position) { + if (isHeaderViewPos(position)) { + return mHeaderViews.keyAt(position); + } else if (isFooterViewPos(position)) { + return mFootViews.keyAt(position - getHeadersCount() - mAdapter.getItemCount()); + } + return mAdapter.getItemViewType(position - getHeadersCount()); + } + + + public void addHeaderView(View view) { + mHeaderViews.put(HEAD_ITEM + mHeaderViews.size(), view); + } + + public void addFootView(View view) { + mFootViews.put(FOOT_ITEM + mFootViews.size(), view); + } + + private boolean isHeaderViewPos(int position) { + return position < getHeadersCount(); + } + + private boolean isFooterViewPos(int position) { + return position >= getHeadersCount() + mAdapter.getItemCount(); + } + + public void setShowHeadView(boolean show) { + this.headShow = show; + int size = mHeaderViews.size(); + for (int i = 0; i < size; i++) { + View view = mHeaderViews.valueAt(i); + view.setVisibility(show ? View.VISIBLE : View.GONE); + } + } + + public int getHeadersCount() { + if (!headShow) { + return 0; + } + return mHeaderViews.size(); + } + + public int getFootersCount() { + return mFootViews.size(); + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/LoadingWrapper.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/LoadingWrapper.java new file mode 100644 index 0000000..0b4a93a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/LoadingWrapper.java @@ -0,0 +1,283 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.adpater.wrapper; + +import android.content.Context; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; + +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; + +/** + * Created by baozi on 2017/4/30. + * 该装饰请务必使用在最后一次 + */ + +public class LoadingWrapper extends BaseWrapper { + private static final int ITEM_TYPE_EMPTY = -3000; + private static final int ITEM_TYPE_LOADING = -4000; + private static final int ITEM_LOAD_MORE = -5000; + private View mEmptyView; + private int mEmptyLayoutId; + private View mLoadingView; + private int mLoadingLayoutId; + private LoadMoreItem mLoadMoreItem; + private LoadMoreListener loadMoreListener; + private boolean initLoadMore; + private Type mType; + + public enum Type { + EMPTY, REFRESH_OVER, @Deprecated SUCCESS, LOADING, LOAD_MORE, LOAD_ERROR, LOAD_OVER + } + + public LoadingWrapper(BaseRecyclerAdapter adapter) { + super(adapter); + } + + private boolean isEmpty() { + return getDatas().size() == 0; + } + + private boolean isLoading() { + return mType == Type.LOADING; + } + + private boolean isLoadMoreViewPos(int position) { + return position >= mAdapter.getItemCount(); + } + + public void setType(Type type) { + switch (type) { + case EMPTY: + break; + case SUCCESS: + case REFRESH_OVER: + break; + case LOADING: + if (mLoadingView == null && mLoadingLayoutId == 0) { + return; + } + notifyDataSetChanged(); + break; + case LOAD_MORE: + case LOAD_OVER: + case LOAD_ERROR: + if (mLoadMoreItem != null) { + mLoadMoreItem.setType(type); + } + break; + } + mType = type; + } + + @Override + public void onAttachedToRecyclerView(RecyclerView recyclerView) { + super.onAttachedToRecyclerView(recyclerView); + if (mEmptyView == null && mEmptyLayoutId == 0) { + mEmptyView = new View(recyclerView.getContext()); + } + if (mLoadingView == null && mLoadingLayoutId == 0) { + mLoadingView = new View(recyclerView.getContext()); + } + setType(Type.LOADING); + if (mLoadMoreItem != null) { + recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + if (loadMoreListener == null) return; + LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); +// int itemCount = layoutManager.getItemCount(); + int itemCount = getDatas().size(); + int lastPosition = checkPosition(layoutManager.findLastVisibleItemPosition()); + //如果当前不是正在加载更多,并且到了该加载更多的位置,加载更多。 + int lastVisibleIndex = mLoadMoreItem.getLastVisibleIndex() == 0 ? 1 : mLoadMoreItem.getLastVisibleIndex(); + if (lastPosition >= (itemCount - lastVisibleIndex) && itemCount >= (mLoadMoreItem.getMinPageSize() - lastVisibleIndex)) { + loadMoreListener.loadMore(mType); + } + } + }); + } + } + + @Override + public int getItemSpanSize(int position) { + if ((isEmpty() || isLoading()) && position == 0) { + return 0; + } + if (isLoadMoreViewPos(position)) { + return 0; + } + return super.getItemSpanSize(position); + } + + public LoadMoreListener getLoadMoreListener() { + return loadMoreListener; + } + + public void setLoadMoreListener(LoadMoreListener loadMoreListener) { + this.loadMoreListener = loadMoreListener; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + if (viewType == ITEM_TYPE_LOADING) { + if (mLoadingLayoutId > 0) { + return ViewHolder.createViewHolder(parent, mLoadingLayoutId); + } else { + return ViewHolder.createViewHolder(mLoadingView); + } + } + if (viewType == ITEM_TYPE_EMPTY) { + if (mEmptyLayoutId > 0) { + return ViewHolder.createViewHolder(parent, mEmptyLayoutId); + } else { + return ViewHolder.createViewHolder(mEmptyView); + } + } + if (viewType == ITEM_LOAD_MORE) { + return ViewHolder.createViewHolder(mLoadMoreItem.getLoadMoreView()); + } + return mAdapter.onCreateViewHolder(parent, viewType); + } + + @Override + public int getItemViewType(int position) { + if (isLoading()) { + return ITEM_TYPE_LOADING; + } + if (isEmpty()) { + return ITEM_TYPE_EMPTY; + } + if (isLoadMoreViewPos(position)) { + return ITEM_LOAD_MORE; + } + return mAdapter.getItemViewType(position); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + if (isEmpty() || isLoading() || isLoadMoreViewPos(position)) { + return; + } + mAdapter.onBindViewHolder(holder, position); + } + + @Override + public int getItemCount() { + if (isEmpty() || isLoading()) { + return 1; + } + if (initLoadMore && mAdapter.getItemCount() >= mLoadMoreItem.getMinPageSize()) { + return mAdapter.getItemCount() + 1; + } + return mAdapter.getItemCount(); + } + + public void setEmptyView(View emptyView) { + mEmptyView = emptyView; + } + + public void setEmptyView(int layoutId) { + mEmptyLayoutId = layoutId; + } + + public void setLoadingView(View loadingView) { + mLoadingView = loadingView; + } + + public void setLoadingView(int layoutId) { + mLoadingLayoutId = layoutId; + } + + public void setLoadMore(LoadMoreItem loadMoreItem) { + mLoadMoreItem = loadMoreItem; + initLoadMore = mLoadMoreItem != null; + } + + public interface LoadMoreListener { + void loadMore(Type type); + } + + public abstract static class LoadMoreItem { + private FrameLayout mLayout; + private View loadMoreView; + private View loadOverView; + private View loadErrorView; + + public LoadMoreItem(Context context) { + mLayout = new FrameLayout(context); + mLayout.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT)); + loadErrorView = getLoadErrorView(); + if (loadErrorView != null) { + mLayout.addView(loadErrorView); + } else { + loadErrorView = new View(context); + } + + loadOverView = getLoadOverView(); + int loadOverLayout = getLoadOverLayout(); + if (loadOverView != null) { + mLayout.addView(loadOverView); + } else if (getLoadOverLayout() > 0) { + loadOverView = LayoutInflater.from(context).inflate(loadOverLayout, mLayout, false); + mLayout.addView(loadOverView); + } else { + loadOverView = new View(context); + } + + int loadMoreLayout = getLoadMoreLayout(); + if (loadMoreLayout > 0) { + loadMoreView = LayoutInflater.from(context).inflate(loadMoreLayout, mLayout, false); + mLayout.addView(loadMoreView); + } else { + loadMoreView = new View(context); + } + } + + public View getLoadMoreView() { + return mLayout; + } + + //倒数第几条开始加载更多 + public int getLastVisibleIndex() { + return 0; + } + + public View getLoadOverView() { + return null; + } + + public View getLoadErrorView() { + return null; + } + + void setType(Type type) { + loadErrorView.setVisibility(View.GONE); + loadMoreView.setVisibility(View.GONE); + loadOverView.setVisibility(View.GONE); + switch (type) { + case LOAD_MORE: + loadMoreView.setVisibility(View.VISIBLE); + break; + case LOAD_OVER: + loadOverView.setVisibility(View.VISIBLE); + break; + case LOAD_ERROR: + loadErrorView.setVisibility(View.VISIBLE); + break; + } + } + + public abstract int getLoadMoreLayout(); + + public abstract int getLoadOverLayout(); + + + //屏幕可见条目数 + public abstract int getMinPageSize(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/SwipeWrapper.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/SwipeWrapper.java new file mode 100644 index 0000000..01b2e93 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/adpater/wrapper/SwipeWrapper.java @@ -0,0 +1,311 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.adpater.wrapper; + +import android.support.v7.widget.RecyclerView; +import android.util.SparseIntArray; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.SwipeItem; +import com.yonsz.z1.fragment.scene.treerecyclerview.widget.swipe.SwipeItemMangerInterface; +import com.yonsz.z1.fragment.scene.treerecyclerview.widget.swipe.SwipeLayout; +import com.yonsz.z1.fragment.scene.treerecyclerview.widget.swipe.SwipeMode; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Created by Administrator on 2017/8/18 0018. + */ + +public class SwipeWrapper extends BaseWrapper { + private static final int SWIPE_ITEM = 6666; + private SwipeItemMangerInterface mSwipeManger; + // private HashMap swipeLayoutHashMap = new HashMap<>(); + private SparseIntArray swipeItemSparseArray = new SparseIntArray(); + + public SwipeWrapper(BaseRecyclerAdapter adapter) { + super(adapter); + } + + public SwipeItemMangerInterface getSwipeManger() { + if (mSwipeManger == null) { + mSwipeManger = new SwipeItemMangerImpl(); + } + return mSwipeManger; + } + + public void setmSwipeManger(SwipeItemMangerInterface mSwipeManger) { + this.mSwipeManger = mSwipeManger; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + int i = swipeItemSparseArray.get(viewType, -1); + if (i != -1) { + SwipeLayout swipeLayout = new SwipeLayout(parent.getContext()); + View inflate = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false); + swipeLayout.setLayoutParams(inflate.getLayoutParams()); + swipeLayout.addView(inflate); + ViewHolder swipeViewHolder = ViewHolder.createViewHolder(swipeLayout); + super.onBindViewHolderClick(swipeViewHolder, inflate); + return swipeViewHolder; + } + return super.onCreateViewHolder(parent, viewType); + } + + @Override + public int getItemViewType(int position) { + int itemViewType = super.getItemViewType(position); + if (swipeItemSparseArray.get(itemViewType, -1) == -1) {//说明该type不存在; + Object o = getData(checkPosition(position)); + if (o instanceof SwipeItem) { + swipeItemSparseArray.put(itemViewType, SWIPE_ITEM + swipeItemSparseArray.size()); + } + } + return super.getItemViewType(position); + } + + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + int checkPosition = checkPosition(position); + Object data = getData(checkPosition); + if (data instanceof SwipeItem) { + checkSwipeLayout(holder, (SwipeItem) data, position); + } + super.onBindViewHolder(holder, position); + } + + private void checkSwipeLayout(ViewHolder holder, SwipeItem data, int position) { + SwipeLayout swipeLayout = (SwipeLayout) holder.itemView; + Map dragEdgeMap = swipeLayout.getDragEdgeMap(); + if (dragEdgeMap.get(data.getDragEdge()) == null) { + View inflate = LayoutInflater.from(swipeLayout.getContext()).inflate(data.getSwipeLayoutId(), swipeLayout, false); + swipeLayout.addDrag(data.getDragEdge(), inflate, inflate.getLayoutParams()); + } + getSwipeManger().bind(swipeLayout, data.getSwipeLayoutId(), position); + data.onBindSwipeView(holder, position, getSwipeManger()); + } + + @Override + public void onAttachedToRecyclerView(RecyclerView recyclerView) { + super.onAttachedToRecyclerView(recyclerView); + recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + if (!getSwipeManger().isOpen(SwipeItemMangerImpl.INVALID_POSITION)) { + getSwipeManger().closeAllItems(); + } + } + }); + } + + /** + * Swipe ItemMangerImpl is a helper class to help all the adapters to maintain open status. + */ + private class SwipeItemMangerImpl implements SwipeItemMangerInterface { + private SwipeMode mode = SwipeMode.Single; + public static final int INVALID_POSITION = -1; + + protected int mOpenPosition = INVALID_POSITION; + + protected Set mOpenPositions = new HashSet(); + protected Set mShownLayouts = new HashSet(); + + public SwipeItemMangerImpl() { + } + + public SwipeMode getMode() { + return mode; + } + + public void setMode(SwipeMode mode) { + this.mode = mode; + mOpenPositions.clear(); + mShownLayouts.clear(); + mOpenPosition = INVALID_POSITION; + } + + public void bind(SwipeLayout swipeLayout, int resId, int position) { + if (swipeLayout.getTag(resId) == null) { + OnLayoutListener onLayoutListener = new OnLayoutListener(position); + SwipeMemory swipeMemory = new SwipeMemory(position); + swipeLayout.addSwipeListener(swipeMemory); + swipeLayout.addOnLayoutListener(onLayoutListener); + swipeLayout.setTag(resId, new ValueBox(position, swipeMemory, onLayoutListener)); + mShownLayouts.add(swipeLayout); + } else { + ValueBox valueBox = (ValueBox) swipeLayout.getTag(resId); + valueBox.swipeMemory.setPosition(position); + valueBox.onLayoutListener.setPosition(position); + valueBox.position = position; + } + } + + @Override + public void openItem(int position) { + if (mode == SwipeMode.Multiple) { + if (!mOpenPositions.contains(position)) + mOpenPositions.add(position); + } else { + mOpenPosition = position; + } + getItemManager().notifyDataChanged(); + } + + @Override + public void closeItem(int position) { + if (mode == SwipeMode.Multiple) { + mOpenPositions.remove(position); + } else { + if (mOpenPosition == position) + mOpenPosition = INVALID_POSITION; + } + getItemManager().notifyDataChanged(); + } + + @Override + public void closeAllExcept(SwipeLayout layout) { + for (SwipeLayout s : mShownLayouts) { + if (s != layout) + s.close(); + } + } + + @Override + public void closeAllItems() { + if (mode == SwipeMode.Multiple) { + mOpenPositions.clear(); + } else { + mOpenPosition = INVALID_POSITION; + } + for (SwipeLayout s : mShownLayouts) { + s.close(); + } + } + + @Override + public void removeShownLayouts(SwipeLayout layout) { + mShownLayouts.remove(layout); + } + + @Override + public List getOpenItems() { + if (mode == SwipeMode.Multiple) { + return new ArrayList(mOpenPositions); + } else { + return Collections.singletonList(mOpenPosition); + } + } + + @Override + public List getOpenLayouts() { + return new ArrayList(mShownLayouts); + } + + @Override + public boolean isOpen(int position) { + if (mode == SwipeMode.Multiple) { + return mOpenPositions.contains(position); + } else { + return mOpenPosition == position; + } + } + + private class ValueBox { + OnLayoutListener onLayoutListener; + SwipeMemory swipeMemory; + int position; + + ValueBox(int position, SwipeMemory swipeMemory, OnLayoutListener onLayoutListener) { + this.swipeMemory = swipeMemory; + this.onLayoutListener = onLayoutListener; + this.position = position; + } + } + + private class OnLayoutListener implements SwipeLayout.OnLayout { + + private int position; + + OnLayoutListener(int position) { + this.position = position; + } + + public void setPosition(int position) { + this.position = position; + } + + @Override + public void onLayout(SwipeLayout v) { + } + + } + + private class SwipeMemory implements SwipeLayout.SwipeListener { + + private int position; + + SwipeMemory(int position) { + this.position = position; + } + + @Override + public void onClose(SwipeLayout layout) { + if (mode == SwipeMode.Multiple) { + mOpenPositions.remove(position); + } else { + if (mOpenPosition == position) { + mOpenPosition = INVALID_POSITION; + } + } + } + + @Override + public void onUpdate(SwipeLayout layout, int leftOffset, int topOffset) { + + } + + @Override + public void onHandRelease(SwipeLayout layout, float xvel, float yvel) { + + } + + @Override + public void onStartOpen(SwipeLayout layout) { + if (mode == SwipeMode.Single) { + closeAllExcept(layout); + } + } + + @Override + public void onOpen(SwipeLayout layout) { + if (mode == SwipeMode.Multiple) + mOpenPositions.add(position); + else { + closeAllExcept(layout); + mOpenPosition = position; + } + } + + @Override + public void onStartClose(SwipeLayout layout) { + + } + + public void setPosition(int position) { + this.position = position; + } + } + + } + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/base/BaseItemData.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/base/BaseItemData.java new file mode 100644 index 0000000..50fe163 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/base/BaseItemData.java @@ -0,0 +1,26 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.base; + +/** + * Created by baozi on 2017/4/14. + */ + +import android.support.annotation.Keep; + +import java.io.Serializable; + +/** + * javabean继承该类,后台返回的json中可以包含viewItemType,通过解析返回的viewItemType确定item样式 + */ +@Keep +public abstract class BaseItemData implements Serializable{ + + private int viewItemType; + + public void setViewItemType(int viewItemType) { + this.viewItemType = viewItemType; + } + + public int getViewItemType() { + return viewItemType; + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/base/BaseRecyclerAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/base/BaseRecyclerAdapter.java new file mode 100644 index 0000000..da3b938 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/base/BaseRecyclerAdapter.java @@ -0,0 +1,203 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.base; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; + +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItem; +import com.yonsz.z1.fragment.scene.treerecyclerview.manager.ItemManageImpl; +import com.yonsz.z1.fragment.scene.treerecyclerview.manager.ItemManager; +import com.yonsz.z1.listener.NoDoubleClickListener; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by zhy on 16/4/9. + */ +public abstract class BaseRecyclerAdapter extends RecyclerView.Adapter { + + protected ItemManager mItemManager; + protected OnItemClickListener mOnItemClickListener; + protected OnItemLongClickListener mOnItemLongClickListener; + protected OnItemDragCompleteListener mOnItemDragCompleteListener; + private List mDatas; + private ArrayList checkItemInterfaces; + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + ViewHolder holder = ViewHolder.createViewHolder(parent, viewType); + onBindViewHolderClick(holder, holder.itemView); + return holder; + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + onBindViewHolder(holder, getDatas().get(position), position); + } + + /** + * 实现item的点击事件 + */ + public void onBindViewHolderClick(final ViewHolder viewHolder, View view) { + //判断当前holder是否已经设置了点击事件 + if (!view.hasOnClickListeners()) { + view.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + //获得holder的position + int layoutPosition = viewHolder.getLayoutPosition(); + //检查item的position,是否可以点击. + // 检查并得到真实的position + int itemPosition = checkPosition(layoutPosition); + if (mOnItemClickListener != null) { + // mOnItemClickListener.onItemClick(viewHolder, itemPosition, "", -1); + } + } + }); + } + if (!view.isLongClickable()) { + view.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + //获得holder的position + int layoutPosition = viewHolder.getLayoutPosition(); + //检查position是否可以点击 + //检查并得到真实的position + int itemPosition = checkPosition(layoutPosition); + if (mOnItemLongClickListener != null) { + // return mOnItemLongClickListener.onItemLongClick(viewHolder, itemPosition); + } + return false; + } + }); + } + } + + @Override + public int getItemViewType(int position) { + return getLayoutId(position); + } + + @Override + public int getItemCount() { + return getDatas().size(); + } + + public int getItemSpanSize(int position) { + return 0; + } + + public List getDatas() { + if (mDatas == null) { + mDatas = new ArrayList<>(); + } + return mDatas; + } + + public void setDatas(List datas) { + if (datas != null && !datas.isEmpty()) { + getDatas().clear(); + getDatas().addAll(datas); + } + } + + public T getData(int position) { + if (position >= 0) { + return getDatas().get(position); + } + return null; + } + + /** + * 操作adapter + * + * @return + */ + public ItemManager getItemManager() { + if (mItemManager == null) { + mItemManager = new ItemManageImpl(this); + } + return mItemManager; + } + + public void setItemManager(ItemManager itemManager) { + mItemManager = itemManager; + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + mOnItemClickListener = onItemClickListener; + } + + public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) { + mOnItemLongClickListener = onItemLongClickListener; + } + + public void setOnItemDragCompleteListener(OnItemDragCompleteListener onItemDragCompleteListener) { + mOnItemDragCompleteListener = onItemDragCompleteListener; + } + + public void removeCheckItemInterfaces(CheckItemInterface itemInterface) { + if (checkItemInterfaces == null) + return; + checkItemInterfaces.remove(itemInterface); + } + + public void addCheckItemInterfaces(CheckItemInterface itemInterface) { + if (checkItemInterfaces == null) { + checkItemInterfaces = new ArrayList<>(); + } + checkItemInterfaces.add(itemInterface); + } + + //检查当前position,获取原始角标 + public int checkPosition(int position) { + if (checkItemInterfaces != null) { + for (CheckItemInterface itemInterface : checkItemInterfaces) { + position = itemInterface.checkPosition(position); + } + } + return position; + } + + /** + * 获取该position的item的layout + * + * @param position 角标 + * @return item的layout id + */ + public abstract int getLayoutId(int position); + + /** + * view与数据绑定 + * + * @param holder + * @param t + * @param position + */ + public abstract void onBindViewHolder(ViewHolder holder, T t, int position); + + public interface OnItemClickListener { + void onItemClick(ViewHolder viewHolder, int position, String ziId, int isOwner, String version, String deviceName, + String addressId, String devicePosition, String id, String rid, String deviceType, DeviceEntityV4.DataBean parentBean, DeviceEntityV4.DataBean.DevicesBean childBean); + } + + + public interface OnItemLongClickListener { + boolean onItemLongClick(ViewHolder viewHolder, int position, String ziId, int isOwner, String version, String deviceName, + String addressId, String devicePosition, String id, String rid, String deviceType, DeviceEntityV4.DataBean parentBean, DeviceEntityV4.DataBean.DevicesBean childBean); + } + + public interface OnItemDragCompleteListener { + void OnItemDragComplete(int lastFromPosition, int lastToPosition, List treeItemList); + } + + /** + * 检查item属性 + */ + public interface CheckItemInterface { + int checkPosition(int position); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/base/ViewHolder.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/base/ViewHolder.java new file mode 100644 index 0000000..2206427 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/base/ViewHolder.java @@ -0,0 +1,250 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.base; + +import android.annotation.SuppressLint; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.Paint; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.support.v7.widget.RecyclerView; +import android.text.util.Linkify; +import android.util.SparseArray; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AlphaAnimation; +import android.widget.Checkable; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.RatingBar; +import android.widget.TextView; + +public class ViewHolder extends RecyclerView.ViewHolder { + private SparseArray mViews; + + public ViewHolder(View itemView) { + super(itemView); + mViews = new SparseArray<>(); + } + + public static ViewHolder createViewHolder(View itemView) { + return new ViewHolder(itemView); + } + + public static ViewHolder createViewHolder(ViewGroup parent, int layoutId) { + View itemView = null; + try { + itemView = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, + false); + } catch (Resources.NotFoundException exception) { + itemView = new View(parent.getContext()); + } + return createViewHolder(itemView); + } + + /** + * 通过viewId获取控件 + * + * @param viewId + * @return + */ + public T getView(int viewId) { + View view = mViews.get(viewId); + if (null == view) { + view = itemView.findViewById(viewId); + mViews.put(viewId, view); + } + return (T) view; + } + + /** + * 用的挺多,所以写个方法. + * + * @param id + * @return + */ + public ImageView getImageView(int id) { + return getView(id); + } + + /****以下为辅助方法*****/ + + /** + * 设置TextView的值 + * + * @param viewId + * @param text + * @return + */ + public ViewHolder setText(int viewId, String text) { + TextView tv = getView(viewId); + tv.setText(text); + return this; + } + /** + * 设置TextView的值 + * + * @param viewId + * @param text + * @return + */ + public ViewHolder setText(int viewId, int text) { + TextView tv = getView(viewId); + tv.setText(text); + return this; + } + + public ViewHolder setImageResource(int viewId, int resId) { + ImageView view = getView(viewId); + view.setImageResource(resId); + return this; + } + + public ViewHolder setImageBitmap(int viewId, Bitmap bitmap) { + ImageView view = getView(viewId); + view.setImageBitmap(bitmap); + return this; + } + + public ViewHolder setImageDrawable(int viewId, Drawable drawable) { + ImageView view = getView(viewId); + view.setImageDrawable(drawable); + return this; + } + + public ViewHolder setBackgroundColor(int viewId, int color) { + View view = getView(viewId); + view.setBackgroundColor(color); + return this; + } + + public ViewHolder setBackgroundRes(int viewId, int backgroundRes) { + View view = getView(viewId); + view.setBackgroundResource(backgroundRes); + return this; + } + + public ViewHolder setTextColor(int viewId, int textColor) { + TextView view = getView(viewId); + view.setTextColor(textColor); + return this; + } + + public ViewHolder setTextColorRes(int viewId, int textColorRes) { + TextView view = getView(viewId); + view.setTextColor(view.getContext().getResources().getColor(textColorRes)); + return this; + } + + @SuppressLint("NewApi") + public ViewHolder setAlpha(int viewId, float value) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + getView(viewId).setAlpha(value); + } else { + // Pre-honeycomb hack to set Alpha value + AlphaAnimation alpha = new AlphaAnimation(value, value); + alpha.setDuration(0); + alpha.setFillAfter(true); + getView(viewId).startAnimation(alpha); + } + return this; + } + + public ViewHolder setVisible(int viewId, boolean visible) { + View view = getView(viewId); + view.setVisibility(visible ? View.VISIBLE : View.GONE); + return this; + } + + public ViewHolder linkify(int viewId) { + TextView view = getView(viewId); + Linkify.addLinks(view, Linkify.ALL); + return this; + } + + public ViewHolder setTypeface(Typeface typeface, int... viewIds) { + for (int viewId : viewIds) { + TextView view = getView(viewId); + view.setTypeface(typeface); + view.setPaintFlags(view.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); + } + return this; + } + + public ViewHolder setProgress(int viewId, int progress) { + ProgressBar view = getView(viewId); + view.setProgress(progress); + return this; + } + + public ViewHolder setProgress(int viewId, int progress, int max) { + ProgressBar view = getView(viewId); + view.setMax(max); + view.setProgress(progress); + return this; + } + + public ViewHolder setMax(int viewId, int max) { + ProgressBar view = getView(viewId); + view.setMax(max); + return this; + } + + public ViewHolder setRating(int viewId, float rating) { + RatingBar view = getView(viewId); + view.setRating(rating); + return this; + } + + public ViewHolder setRating(int viewId, float rating, int max) { + RatingBar view = getView(viewId); + view.setMax(max); + view.setRating(rating); + return this; + } + + public ViewHolder setTag(int viewId, Object tag) { + View view = getView(viewId); + view.setTag(tag); + return this; + } + + public ViewHolder setTag(int viewId, int key, Object tag) { + View view = getView(viewId); + view.setTag(key, tag); + return this; + } + + public ViewHolder setChecked(int viewId, boolean checked) { + Checkable view = getView(viewId); + view.setChecked(checked); + return this; + } + + /** + * 关于事件的 + */ + public ViewHolder setOnClickListener(int viewId, + View.OnClickListener listener) { + View view = getView(viewId); + view.setOnClickListener(listener); + return this; + } + + public ViewHolder setOnTouchListener(int viewId, + View.OnTouchListener listener) { + View view = getView(viewId); + view.setOnTouchListener(listener); + return this; + } + + public ViewHolder setOnLongClickListener(int viewId, + View.OnLongClickListener listener) { + View view = getView(viewId); + view.setOnLongClickListener(listener); + return this; + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/factory/ItemConfig.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/factory/ItemConfig.java new file mode 100644 index 0000000..5ab6af6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/factory/ItemConfig.java @@ -0,0 +1,44 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.factory; + +import android.util.SparseArray; +import com.yonsz.z1.fragment.scene.treerecyclerview.TreeItemType; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItem; + +import java.lang.annotation.Annotation; + +public class ItemConfig { + + private static SparseArray> treeViewHolderTypes; + + static { + treeViewHolderTypes = new SparseArray<>(); + } + + public static Class getTreeViewHolderType(int type) { + return treeViewHolderTypes.get(type); + } + + public static void addTreeHolderType(int type, Class clazz) { + if (null == clazz) { + return; + } + treeViewHolderTypes.put(type, clazz); + } + + @SafeVarargs + public static void addTreeHolderType(Class... clazz) { + for (Class zClass : clazz) { + Annotation annotation = zClass.getAnnotation(TreeItemType.class); + if (annotation != null) { + int type = ((TreeItemType) annotation).type(); + Class aClass = treeViewHolderTypes.get(type); + if (aClass == null) { + treeViewHolderTypes.put(type, zClass); + } else if (!aClass.getSimpleName().equals(zClass.getSimpleName())) { + throw new IllegalStateException(zClass.getSimpleName() + + " type already exists and " + treeViewHolderTypes.get(type).getSimpleName()); + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/factory/ItemHelperFactory.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/factory/ItemHelperFactory.java new file mode 100644 index 0000000..782a0c5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/factory/ItemHelperFactory.java @@ -0,0 +1,236 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.factory; + +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.fragment.scene.treerecyclerview.adpater.TreeRecyclerType; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseItemData; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItem; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItemGroup; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeSortItem; +import com.yonsz.z1.net.Constans; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by baozi on 2017/4/29. + */ + +public class ItemHelperFactory { + public static List createTreeItemList(@Nullable List list, @Nullable TreeItemGroup treeParentItem) { + if (null == list) { + return null; + } + ArrayList treeItemList = new ArrayList<>(); + int size = list.size(); + + for (int i = 0; i < size; i++) { + try { + BaseItemData itemData = list.get(i); + int viewItemType = itemData.getViewItemType(); + TreeItem treeItem; + //判断是否是TreeItem的子类 + if (ItemConfig.getTreeViewHolderType(viewItemType) != null) { + Class treeItemClass = ItemConfig.getTreeViewHolderType(viewItemType); + treeItem = treeItemClass.newInstance(); + treeItem.setData(itemData); + treeItem.setParentItem(treeParentItem); + treeItemList.add(treeItem); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return treeItemList; + } + + public static List createTreeItemList(@Nullable List list, Class iClass, @Nullable TreeItemGroup treeParentItem, int item) { + ArrayList treeItemList = new ArrayList<>(); + if (item != 3) { + if (null == list) { + return null; + } + int size = list.size(); + for (int i = 0; i < size; i++) { + try { + Object itemData = list.get(i); + if (iClass != null) { + TreeItem treeItem = iClass.newInstance(); + treeItem.setData(itemData); + treeItem.setParentItem(treeParentItem); + treeItemList.add(treeItem); + treeParentItem.setExpand(true); + } + } catch (Exception e) { + //e.printStackTrace(); + } + } + } else { + if (null == list || list.size() == 0) { + try { + DeviceEntityV4.DataBean.DevicesBean devicesBean = new DeviceEntityV4.DataBean.DevicesBean(); + devicesBean.setDeviceType(Constans.ADD_TYPE); + if (iClass != null) { + TreeItem treeItem = iClass.newInstance(); + treeItem.setData(devicesBean); + treeItem.setParentItem(treeParentItem); + treeItemList.add(treeItem); + } + } catch (Exception e) { + //e.printStackTrace(); + } + } else { + int size = list.size(); + for (int i = 0; i < size; i++) { + try { + Object itemData = list.get(i); + if (iClass != null) { + TreeItem treeItem = iClass.newInstance(); + treeItem.setData(itemData); + treeItem.setParentItem(treeParentItem); + treeItemList.add(treeItem); + } + } catch (Exception e) { + //e.printStackTrace(); + } + } + try { + DeviceEntityV4.DataBean.DevicesBean devicesBean = new DeviceEntityV4.DataBean.DevicesBean(); + devicesBean.setDeviceType(Constans.ADD_TYPE); + if (iClass != null) { + TreeItem treeItem = iClass.newInstance(); + treeItem.setData(devicesBean); + treeItem.setParentItem(treeParentItem); + treeItemList.add(treeItem); + } + } catch (Exception e) { + //e.printStackTrace(); + } + } + } + return treeItemList; + } + + /** + * 创建排序List + * + * @param list + * @param iClass + * @param sortKey + * @param treeParentItem + * @return + */ + public static List createTreeSortList(@Nullable List list, Class iClass, Object sortKey, @Nullable TreeItemGroup treeParentItem) { + if (null == list) { + return null; + } + int size = list.size(); + ArrayList treeItemList = new ArrayList<>(); + for (int i = 0; i < size; i++) { + try { + Object itemData = list.get(i); + if (iClass != null) { + TreeSortItem sortItem = iClass.newInstance(); + sortItem.setData(itemData); + sortItem.setSortKey(sortKey); + sortItem.setParentItem(treeParentItem); + treeItemList.add(sortItem); + } + } catch (Exception e) { + //e.printStackTrace(); + } + } + return treeItemList; + } + + /** + * 确定item的class类型,并且添加到了itemConfig,用该方法创建TreeItem + * + * @return + */ + public static TreeItem createTreeItem(D d, Class zClass) { + TreeItem treeItem = null; + try { + treeItem = zClass.newInstance(); + treeItem.setData(d); + } catch (Exception e) { + //e.printStackTrace(); + } + return treeItem; + } + + /** + * 确定item的class类型,并且添加到了itemConfig,用该方法创建TreeItem + * + * @return + */ + public static TreeItem createTreeItem(D d) { + Class itemClass = ItemConfig.getTreeViewHolderType(d.getViewItemType()); + return createTreeItem(d, itemClass); + } + + /** + * 根据TreeRecyclerType获取子item集合,不包含TreeItemGroup自身 + * + * @param itemGroup + * @param type + * @return + */ + @NonNull + public static ArrayList getChildItemsWithType(@Nullable TreeItemGroup itemGroup, @Nullable TreeRecyclerType type) { + ArrayList baseItems = new ArrayList<>(); + List allChild = itemGroup.getChild(); + if (allChild == null) + return baseItems; + int childCount = allChild.size(); + for (int i = 0; i < childCount; i++) { + //下级 + TreeItem baseItem = (TreeItem) allChild.get(i); + baseItems.add(baseItem); + //判断下级是否为TreeItemGroup + if (baseItem instanceof TreeItemGroup) { + List list = null; + switch (type) { + case SHOW_ALL: + //调用下级的getAllChilds遍历,相当于递归遍历 + list = ((TreeItemGroup) baseItem).getAllChilds(); + break; + case SHOW_EXPAND: + //根据isExpand,来决定是否展示 + if (((TreeItemGroup) baseItem).isExpand()) { + list = ((TreeItemGroup) baseItem).getExpandChild(); + } + break; + case SHOW_DEFUTAL: + break; + } + if (list != null && list.size() > 0) { + baseItems.addAll(list); + } + } + } + return baseItems; + } + + @NonNull + public static ArrayList getChildItemsWithType(@NonNull List treeItems, @NonNull TreeRecyclerType type) { + if (type == TreeRecyclerType.SHOW_DEFUTAL) { + return (ArrayList) treeItems; + } + ArrayList baseItems = new ArrayList(); + int childCount = treeItems.size(); + for (int i = 0; i < childCount; i++) { + TreeItem treeItem = treeItems.get(i); + baseItems.add(treeItem); + if (treeItem instanceof TreeItemGroup) { + ArrayList childItems = getChildItemsWithType((TreeItemGroup) treeItem, type); + if (!childItems.isEmpty()) { + baseItems.addAll(childItems); + } + } + } + return baseItems; + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/helper/ItemTouchHelperAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/helper/ItemTouchHelperAdapter.java new file mode 100644 index 0000000..4960ca7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/helper/ItemTouchHelperAdapter.java @@ -0,0 +1,11 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.helper; + +import android.support.v7.widget.RecyclerView; + +/** + * Created by Karl on 2016/9/8. + */ +public interface ItemTouchHelperAdapter { + boolean onItemMove(int fromPosition, int toPosition); + void onItemDragComplete(RecyclerView.ViewHolder viewHolder); +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/helper/ItemTouchHelperCallback.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/helper/ItemTouchHelperCallback.java new file mode 100644 index 0000000..9b0224e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/helper/ItemTouchHelperCallback.java @@ -0,0 +1,120 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.helper; + +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; + +import static android.support.v7.widget.helper.ItemTouchHelper.ACTION_STATE_DRAG; +import static android.support.v7.widget.helper.ItemTouchHelper.ACTION_STATE_IDLE; + +/** + * Created by Karl on 2016/9/8. + *

+ * 使用ItemTouchHelper需要实现ItemTouchHelper.Callback接口 + * 通过该接口对move和swipe事件进行监听、也可以控制View的选择状态和覆盖默认动画 + */ +public class ItemTouchHelperCallback extends ItemTouchHelper.Callback { + + RecyclerView.ViewHolder lastDragViewHolder; + private ItemTouchHelperAdapter adapter; + + public ItemTouchHelperCallback(ItemTouchHelperAdapter adapter) { + this.adapter = adapter; + } + + /** + * 返回true,开启长按拖拽 + * + * @return + */ + @Override + public boolean isLongPressDragEnabled() { + return false; + } + + /** + * 返回true,开启swipe事件 + * + * @return + */ + @Override + public boolean isItemViewSwipeEnabled() { + return false; + } + + /** + * 当用户长按后,会触发拖拽的选中效果,viewHolder就是当前的选中 + * + * @param viewHolder + * @param actionState 取下面中的值 + * {@link ItemTouchHelper#ACTION_STATE_IDLE}, + * {@link ItemTouchHelper#ACTION_STATE_SWIPE}, + * {@link ItemTouchHelper#ACTION_STATE_DRAG}. + */ + @Override + public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { + super.onSelectedChanged(viewHolder, actionState); + //如果状态为拖拽,说明选中了 + //我在xml里面写的scale都为0.8 我们需要把当前的视图放大一下,所以设置为1就可以了 + if (viewHolder != null && actionState == ACTION_STATE_DRAG) { + lastDragViewHolder = viewHolder; + /* viewHolder.itemView.setScaleX(1.2F); + viewHolder.itemView.setScaleY(1.2F);*/ + } + + //ACTION_STATE_IDLE就是松开了,把大小改为原状 + if (lastDragViewHolder != null && actionState == ACTION_STATE_IDLE) { + /* lastDragViewHolder.itemView.setScaleX(1); + lastDragViewHolder.itemView.setScaleY(1);*/ + lastDragViewHolder = null; + adapter.onItemDragComplete(viewHolder); + } + } + + + /** + * getMovementFlags、onMove、onSwiped是必须要实现的三个方法 + */ + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + /** + * ItemTouchHelper支持事件方向判断,但是必须重写当前getMovementFlags来指定支持的方向 + * 这里我同时设置了dragFlag为上下左右四个方向,swipeFlag的左右方向 + * 最后通过makeMovementFlags(dragFlag,swipe)创建方向的Flag, + * 因为我们目前只需要实现拖拽,所以我并未创建swipe的flag + */ + int adapterPosition = viewHolder.getAdapterPosition(); + int dragFlag = ItemTouchHelper.UP; + if (adapterPosition != 0 && adapterPosition != 1) { + if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { + dragFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; + int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; + } else { + dragFlag = ItemTouchHelper.UP | ItemTouchHelper.DOWN; + final int swipeFlags = 0; + } + } else { + + } + // return makeMovementFlags(dragFlags, swipeFlags); + return makeMovementFlags(dragFlag, 0); + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + /** + * 回调 + */ + adapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); + return false; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + /** + * 回调 + */ + // adapter.onItemDismiss(viewHolder.getAdapterPosition()); + + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/SwipeItem.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/SwipeItem.java new file mode 100644 index 0000000..b4a1029 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/SwipeItem.java @@ -0,0 +1,23 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.item; + +import android.support.annotation.NonNull; + +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; +import com.yonsz.z1.fragment.scene.treerecyclerview.widget.swipe.SwipeItemMangerInterface; +import com.yonsz.z1.fragment.scene.treerecyclerview.widget.swipe.SwipeLayout; + +/** + * Created by Administrator on 2017/8/18 0018. + * 实现该接口,侧滑删除 + */ + +public interface SwipeItem { + + int getSwipeLayoutId(); + + SwipeLayout.DragEdge getDragEdge(); + + void onBindSwipeView(@NonNull ViewHolder viewHolder, int position, SwipeItemMangerInterface swipeManger); + + void openCallback(); +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeItem.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeItem.java new file mode 100644 index 0000000..cc58f06 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeItem.java @@ -0,0 +1,117 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.item; + +import android.graphics.Rect; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.widget.RecyclerView; + +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; +import com.yonsz.z1.fragment.scene.treerecyclerview.manager.ItemManager; + +/** + * TreeRecyclerAdapter的item + */ +public abstract class TreeItem { + /** + * 当前item的数据 + */ + protected D data; + private TreeItemGroup parentItem; + /** + * item在每行中的spansize + * 默认为0,如果为0则占满一行 + * + * @return 所占值, 比如recyclerview的列数为6, item需要占一半宽度, 就设置3 + */ + private int spanSize; + private ItemManager mItemManager; + + /** + * 获取当前item的父级 + * + * @return + */ + @Nullable + public TreeItemGroup getParentItem() { + return parentItem; + } + + public void setParentItem(TreeItemGroup parentItem) { + this.parentItem = parentItem; + } + + /** + * 应该在void onBindViewHolder(ViewHolder viewHolder)的地方使用. + * 如果要使用,可能为null,请加判断. + * + * @return + */ + public ItemManager getItemManager() { + return mItemManager; + } + + public void setItemManager(ItemManager itemManager) { + mItemManager = itemManager; + } + // + // public int getLayoutId() { + // return this.getLayoutId(); + // } + + + /** + * 该条目的布局id + * + * @return 布局id + */ + public abstract int getLayoutId(); + + /** + * 觉得item的所占比例 + * + * @return , 如果设置的列数为6, 返回3, 则代表item占1半宽度 + */ + public int getSpanSize() { + return spanSize; + } + + public void setSpanSize(int spanSize) { + this.spanSize = spanSize; + } + + /** + * 设置当前条目间隔 + * + * @param outRect + * @param layoutParams + * @param position + */ + public void getItemOffsets(@NonNull Rect outRect, RecyclerView.LayoutParams layoutParams, int position) { + + } + + public D getData() { + return data; + } + + public void setData(D data) { + this.data = data; + } + + /** + * 抽象holder的绑定 + */ + public abstract void onBindViewHolder(@NonNull ViewHolder viewHolder, int position); + + /** + * 当前条目的点击回调 + */ + public void onClick(ViewHolder viewHolder, BaseRecyclerAdapter.OnItemClickListener onItemClickListener, int layoutPosition) { + + } + + public void onLongClick(ViewHolder viewHolder, BaseRecyclerAdapter.OnItemLongClickListener onItemLongClickListener, int layoutPosition) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeItemGroup.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeItemGroup.java new file mode 100644 index 0000000..7a74673 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeItemGroup.java @@ -0,0 +1,176 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.item; + +import android.support.annotation.Nullable; + +import com.yonsz.z1.fragment.scene.treerecyclerview.adpater.TreeRecyclerType; +import com.yonsz.z1.fragment.scene.treerecyclerview.factory.ItemHelperFactory; +import com.yonsz.z1.fragment.scene.treerecyclerview.manager.ItemManager; + +import java.util.List; + +/** + * Created by baozi on 2016/12/22. + * //拥有子集 + * //子集可以是parent,也可以是child + * //可展开折叠 + */ + +public abstract class TreeItemGroup extends TreeItem { + + /** + * 持有的子item + */ + private List child; + + /** + * 是否展开 + */ + private boolean isExpand; + + + public boolean isExpand() { + return isExpand; + } + + /** + * 设置为传入 + * + * @param expand 传入true则展开,传入false则折叠 + */ + public final void setExpand(boolean expand) { + if (!isCanExpand()) { + return; + } + if (expand) { + onExpand(); + } else { + onCollapse(); + } + } + + /** + * 刷新Item的展开状态 + */ + @Deprecated + public void notifyExpand() { + setExpand(isExpand); + } + + /** + * 展开 + */ + protected void onExpand() { + isExpand = true; + ItemManager itemManager = getItemManager(); + if (itemManager != null) { + int itemPosition = itemManager.getItemPosition(this); + itemManager.addItems(itemPosition + 1, getExpandChild()); + itemManager.notifyDataChanged(); + } + } + + /** + * 折叠 + */ + protected void onCollapse() { + isExpand = false; + ItemManager itemManager = getItemManager(); + if (itemManager != null) { + itemManager.removeItems(getExpandChild()); + itemManager.notifyDataChanged(); + } + } + + /** + * 能否展开折叠 + * + * @return + */ + public boolean isCanExpand() { + return true; + } + + + /** + * 获得所有childs,包括子item的childs + * + * @return + */ + @Nullable + public List getExpandChild() { + if (getChild() == null) { + return null; + } + return ItemHelperFactory.getChildItemsWithType(this, TreeRecyclerType.SHOW_EXPAND); + } + + + public void setData(D data) { + super.setData(data); + child = initChildList(data); + } + + public void setChild(List child) { + this.child = child; + } + + /** + * 获得所有childs,包括下下....级item的childs + * + * @return + */ + @Nullable + public List getAllChilds() { + if (getChild() == null) { + return null; + } + return ItemHelperFactory.getChildItemsWithType(this, TreeRecyclerType.SHOW_ALL); + } + + /** + * 获得自己的childs. + * + * @return + */ + @Nullable + public List getChild() { + return child; + } + + + public int getChildCount() { + return child == null ? 0 : child.size(); + } + + /** + * 初始化子集 + * + * @param data + * @return + */ + @Nullable + protected abstract List initChildList(D data); + + /** + * 是否消费child的click事件 + * + * @param child 具体click的item + * @return 返回true代表消费此次事件,child不会走onclick(),返回false说明不消费此次事件,child依然会走onclick() + */ + public boolean onInterceptClick(TreeItem child) { + return false; + } + +// /** +// * 相应RecyclerView的点击事件 展开或关闭某节点 +// */ +// public void expandOrCollapse() { +// //展开,折叠 +// setExpand(!isExpand); +// } + + @Override + public int getSpanSize() { + return super.getSpanSize(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeSelectItemGroup.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeSelectItemGroup.java new file mode 100644 index 0000000..bcf6894 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeSelectItemGroup.java @@ -0,0 +1,88 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.item; + + +import android.support.annotation.NonNull; + +import java.util.ArrayList; +import java.util.List; + + +/** + * Created by baozi on 2016/12/22. + * 可以选中子item的TreeItemGroup,点击的item会保存起来.可以通过 getSelectItems()获得选中item + */ +public abstract class TreeSelectItemGroup + extends TreeItemGroup { + /** + * 选中的子item.只支持下一级,不支持下下级 + */ + private List selectItems; + + public List getSelectItems() { + if (selectItems == null) { + selectItems = new ArrayList<>(); + } + return selectItems; + } + + /** + * 子级是否有选中 + * + * @return + */ + public boolean isChildCheck() { + return !getSelectItems().isEmpty(); + } + + @Override + public boolean onInterceptClick(TreeItem child) { + addSelectItem(child); + return super.onInterceptClick(child); + } + + /** + * 添加选中的Item;不建议直接调用该方法, + * 当不需要用onInterceptClick()的时候,可以主动调用添加Item. + * < + * 如果onInterceptClick()生效,还主动调用该方法添加item,将无法添加. + * + * @param child + */ + protected void addSelectItem(@NonNull TreeItem child) { + if (selectFlag() == SelectFlag.SINGLE_CHOICE) { + if (getSelectItems().size() != 0) { + getSelectItems().set(0, child); + } else { + getSelectItems().add(child); + } + } else { + int index = getSelectItems().indexOf(child); + if (index == -1) {//不存在则添加 + getSelectItems().add(child); + } else {//存在则添加 + getSelectItems().remove(index); + } + } + } + + /** + * 必须指定选中样式 + * + * @return + */ + public abstract SelectFlag selectFlag(); + + /** + * 决定TreeSelectItemGroup的选中样式 + */ + public enum SelectFlag { + /** + * 单选 + */ + SINGLE_CHOICE, + /** + * 多选 + */ + MULTIPLE_CHOICE + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeSortItem.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeSortItem.java new file mode 100644 index 0000000..cb794c9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/TreeSortItem.java @@ -0,0 +1,18 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.item; + +/** + * Created by Administrator on 2017/8/8 0008. + */ + +public abstract class TreeSortItem extends TreeItemGroup { + protected Object sortKey; + + public void setSortKey(Object sortKey) { + this.sortKey = sortKey; + } + + public Object getSortKey() { + return sortKey; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/_ItemParent.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/_ItemParent.java new file mode 100644 index 0000000..05aaaca --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/item/_ItemParent.java @@ -0,0 +1,36 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.item; + + +import java.util.List; + +/** + * @author jlanglang 2016/12/23 17:04 + * @版本 2.0 + * @Change + */ +interface _ItemParent { + /** + * 是否允许展开 + * + * @return + */ + boolean isCanExpand(); + + /** + * 展开后的回调 + */ + void onExpand(); + + /** + * 折叠后的回调 + */ + void onCollapse(); + + /** + * 获取子集 + * + * @return + */ + List getChilds(); + +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/manager/ItemManageImpl.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/manager/ItemManageImpl.java new file mode 100644 index 0000000..3711899 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/manager/ItemManageImpl.java @@ -0,0 +1,98 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.manager; + + +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; + +import java.util.List; + +/** + * 默认使用 notifyDataChanged();刷新. + * 如果使用带动画效果的,条目过多可能会出现卡顿. + */ +public class ItemManageImpl extends ItemManager { + + public ItemManageImpl(BaseRecyclerAdapter adapter) { + super(adapter); + } + + @Override + public void addItem(T item) { + if (item == null) return; + getDatas().add(item); + notifyDataChanged(); + } + + @Override + public void addItem(int position, T item) { + getDatas().add(position, item); + notifyDataChanged(); + } + + @Override + public void addItems(List items) { + getDatas().addAll(items); + notifyDataChanged(); + } + + @Override + public void addItems(int position, List items) { + getDatas().addAll(position, items); + notifyDataChanged(); + } + + @Override + public void removeItem(T item) { + getDatas().remove(item); + notifyDataChanged(); + } + + @Override + public void removeItem(int position) { + getDatas().remove(position); + notifyDataChanged(); + } + + @Override + public void removeItems(List items) { + getDatas().removeAll(items); + notifyDataChanged(); + } + + @Override + public void replaceItem(int position, T item) { + getDatas().set(position, item); + notifyDataChanged(); + } + + @Override + public void replaceAllItem(List items) { + if (items != null) { + setDatas(items); + notifyDataChanged(); + } + } + + protected void setDatas(List items) { + getAdapter().setDatas(items); + } + + protected List getDatas() { + return getAdapter().getDatas(); + } + + @Override + public T getItem(int position) { + return getDatas().get(position); + } + + @Override + public int getItemPosition(T item) { + return getDatas().indexOf(item); + } + + @Override + public void clean() { + getDatas().clear(); + notifyDataChanged(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/manager/ItemManager.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/manager/ItemManager.java new file mode 100644 index 0000000..139ee9e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/manager/ItemManager.java @@ -0,0 +1,58 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.manager; + + +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; + +import java.util.List; + +public abstract class ItemManager { + + private BaseRecyclerAdapter mAdapter; + + public ItemManager(BaseRecyclerAdapter adapter) { + mAdapter = adapter; + } + + public BaseRecyclerAdapter getAdapter() { + return mAdapter; + } + + public void setAdapter(BaseRecyclerAdapter adapter) { + mAdapter = adapter; + } + + //增 + public abstract void addItem(T item); + + public abstract void addItem(int position, T item); + + public abstract void addItems(List items); + + public abstract void addItems(int position, List items); + + //删 + public abstract void removeItem(T item); + + public abstract void removeItem(int position); + + public abstract void removeItems(List items); + + + //改 + public abstract void replaceItem(int position, T item); + + public abstract void replaceAllItem(List items); + + //查 + public abstract T getItem(int position); + + public abstract int getItemPosition(T item); + + public abstract void clean(); + + //刷新 + public void notifyDataChanged() { + mAdapter.notifyDataSetChanged(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/DragSelectRecyclerAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/DragSelectRecyclerAdapter.java new file mode 100644 index 0000000..c0dc29b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/DragSelectRecyclerAdapter.java @@ -0,0 +1,177 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.widget; + +import android.os.Bundle; +import android.view.View; + +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.ViewHolder; + +import java.util.ArrayList; + +/** + */ +public abstract class DragSelectRecyclerAdapter extends BaseRecyclerAdapter { + + private ArrayList mSelectedIndices; + private SelectionListener mSelectionListener; + private int mLastCount = -1; + private int mMaxSelectionCount = -1; + protected DragSelectRecyclerAdapter() { + mSelectedIndices = new ArrayList<>(); + } + + private void fireSelectionListener() { + if (mLastCount == mSelectedIndices.size()) + return; + mLastCount = mSelectedIndices.size(); + if (mSelectionListener != null) + mSelectionListener.onDragSelectionChanged(mLastCount); + } + + @Override + public void onBindViewHolderClick(ViewHolder holder, View view) { + super.onBindViewHolderClick(holder, view); + holder.itemView.setTag(holder); + } + + public void setMaxSelectionCount(int maxSelectionCount) { + this.mMaxSelectionCount = maxSelectionCount; + } + + public void setSelectionListener(SelectionListener selectionListener) { + this.mSelectionListener = selectionListener; + } + + public void saveInstanceState(Bundle out) { + saveInstanceState("selected_indices", out); + } + + public void saveInstanceState(String key, Bundle out) { + out.putSerializable(key, mSelectedIndices); + } + + public void restoreInstanceState(Bundle in) { + restoreInstanceState("selected_indices", in); + } + + public void restoreInstanceState(String key, Bundle in) { + if (in != null && in.containsKey(key)) { + //noinspection unchecked + mSelectedIndices = (ArrayList) in.getSerializable(key); + if (mSelectedIndices == null) + mSelectedIndices = new ArrayList<>(); + else + fireSelectionListener(); + } + } + + public final void setSelected(int index, boolean selected) { + if (!isIndexSelectable(index)) + selected = false; + if (selected) { + if (!mSelectedIndices.contains(index) && + (mMaxSelectionCount == -1 || + mSelectedIndices.size() < mMaxSelectionCount)) { + mSelectedIndices.add(index); + notifyDataSetChanged(); + } + } else if (mSelectedIndices.contains(index)) { + mSelectedIndices.remove((Integer) index); + notifyDataSetChanged(); + } + fireSelectionListener(); + } + + public final boolean toggleSelected(int index) { + boolean selectedNow = false; + if (isIndexSelectable(index)) { + if (mSelectedIndices.contains(index)) { + mSelectedIndices.remove((Integer) index); + } else if (mMaxSelectionCount == -1 || + mSelectedIndices.size() < mMaxSelectionCount) { + mSelectedIndices.add(index); + selectedNow = true; + } + notifyDataSetChanged(); + } + fireSelectionListener(); + return selectedNow; + } + + protected boolean isIndexSelectable(int index) { + return true; + } + + public final void selectRange(int from, int to, int min, int max) { + if (from == to) { + // Finger is back on the initial item, unselect everything else + for (int i = min; i <= max; i++) { + if (i == from) + continue; + setSelected(i, false); + } + fireSelectionListener(); + return; + } + + if (to < from) { + // When selecting from one to previous items + for (int i = to; i <= from; i++) + setSelected(i, true); + if (min > -1 && min < to) { + // Unselect items that were selected during this drag but no longer are + for (int i = min; i < to; i++) { + if (i == from) + continue; + setSelected(i, false); + } + } + if (max > -1) { + for (int i = from + 1; i <= max; i++) + setSelected(i, false); + } + } else { + // When selecting from one to next items + for (int i = from; i <= to; i++) + setSelected(i, true); + if (max > -1 && max > to) { + // Unselect items that were selected during this drag but no longer are + for (int i = to + 1; i <= max; i++) { + if (i == from) + continue; + setSelected(i, false); + } + } + if (min > -1) { + for (int i = min; i < from; i++) + setSelected(i, false); + } + } + fireSelectionListener(); + } + + public final void clearSelected() { + mSelectedIndices.clear(); + notifyDataSetChanged(); + fireSelectionListener(); + } + + public final int getSelectedCount() { + return mSelectedIndices.size(); + } + + public final ArrayList getSelectedIndices() { + if (mSelectedIndices == null) { + mSelectedIndices = new ArrayList<>(); + } + return mSelectedIndices; + } + + public final boolean isIndexSelected(int index) { + return mSelectedIndices.contains(index); + } + + public interface SelectionListener { + void onDragSelectionChanged(int count); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/DragSelectRecyclerView.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/DragSelectRecyclerView.java new file mode 100644 index 0000000..5fa7058 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/DragSelectRecyclerView.java @@ -0,0 +1,292 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.os.Handler; +import android.support.annotation.Nullable; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; + +import com.yonsz.z1.R; + +/** + */ +public class DragSelectRecyclerView extends RecyclerView { + + private static final boolean LOGGING = false; + private static final int AUTO_SCROLL_DELAY = 25; + private int mLastDraggedIndex = -1; + private DragSelectRecyclerAdapter mAdapter; + private int mInitialSelection; + private boolean mDragSelectActive; + private int mMinReached; + private int mMaxReached; + private int mHotspotHeight; + private int mHotspotOffsetTop; + private int mHotspotOffsetBottom; + private int mHotspotTopBoundStart; + private int mHotspotTopBoundEnd; + private int mHotspotBottomBoundStart; + private int mHotspotBottomBoundEnd; + private int mAutoScrollVelocity; + private FingerListener mFingerListener; + private boolean mInTopHotspot; + private boolean mInBottomHotspot; + private Handler mAutoScrollHandler; + private Runnable mAutoScrollRunnable = new Runnable() { + @Override + public void run() { + if (mAutoScrollHandler == null) + return; + if (mInTopHotspot) { + scrollBy(0, -mAutoScrollVelocity); + mAutoScrollHandler.postDelayed(this, AUTO_SCROLL_DELAY); + } else if (mInBottomHotspot) { + scrollBy(0, mAutoScrollVelocity); + mAutoScrollHandler.postDelayed(this, AUTO_SCROLL_DELAY); + } + } + }; + private RectF mTopBoundRect; + private RectF mBottomBoundRect; + private Paint mDebugPaint; + private boolean mDebugEnabled = false; + + public DragSelectRecyclerView(Context context) { + super(context); + init(context, null); + } + + public DragSelectRecyclerView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + public DragSelectRecyclerView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(context, attrs); + } + + private static void LOG(String message, Object... args) { + //noinspection PointlessBooleanExpression + if (!LOGGING) + return; + if (args != null) { + Log.d("DragSelectRecyclerView", String.format(message, args)); + } else { + Log.d("DragSelectRecyclerView", message); + } + } + + private void init(Context context, AttributeSet attrs) { + mAutoScrollHandler = new Handler(); + final int defaultHotspotHeight = context.getResources().getDimensionPixelSize(R.dimen.dsrv_defaultHotspotHeight); + + if (attrs != null) { + TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.DragSelectRecyclerView, 0, 0); + try { + boolean autoScrollEnabled = a.getBoolean(R.styleable.DragSelectRecyclerView_dsrv_autoScrollEnabled, true); + if (!autoScrollEnabled) { + mHotspotHeight = -1; + mHotspotOffsetTop = -1; + mHotspotOffsetBottom = -1; + LOG("Auto-scroll disabled"); + } else { + mHotspotHeight = a.getDimensionPixelSize( + R.styleable.DragSelectRecyclerView_dsrv_autoScrollHotspotHeight, defaultHotspotHeight); + mHotspotOffsetTop = a.getDimensionPixelSize( + R.styleable.DragSelectRecyclerView_dsrv_autoScrollHotspot_offsetTop, 0); + mHotspotOffsetBottom = a.getDimensionPixelSize( + R.styleable.DragSelectRecyclerView_dsrv_autoScrollHotspot_offsetBottom, 0); + LOG("Hotspot height = %d", mHotspotHeight); + } + } finally { + a.recycle(); + } + } else { + mHotspotHeight = defaultHotspotHeight; + LOG("Hotspot height = %d", mHotspotHeight); + } + } + + public void setFingerListener(@Nullable FingerListener listener) { + this.mFingerListener = listener; + } + + @Override + protected void onMeasure(int widthSpec, int heightSpec) { + super.onMeasure(widthSpec, heightSpec); + if (mHotspotHeight > -1) { + mHotspotTopBoundStart = mHotspotOffsetTop; + mHotspotTopBoundEnd = mHotspotOffsetTop + mHotspotHeight; + mHotspotBottomBoundStart = (getMeasuredHeight() - mHotspotHeight) - mHotspotOffsetBottom; + mHotspotBottomBoundEnd = getMeasuredHeight() - mHotspotOffsetBottom; + LOG("RecyclerView height = %d", getMeasuredHeight()); + LOG("Hotspot top bound = %d to %d", mHotspotTopBoundStart, mHotspotTopBoundStart); + LOG("Hotspot bottom bound = %d to %d", mHotspotBottomBoundStart, mHotspotBottomBoundEnd); + } + } + + public boolean setDragSelectActive(boolean active, int initialSelection) { + if (active && mDragSelectActive) { + LOG("Drag selection is already active."); + return false; + } + mLastDraggedIndex = -1; + mMinReached = -1; + mMaxReached = -1; + if (!mAdapter.isIndexSelectable(initialSelection)) { + mDragSelectActive = false; + mInitialSelection = -1; + mLastDraggedIndex = -1; + LOG("Index %d is not selectable.", initialSelection); + return false; + } + mAdapter.setSelected(initialSelection, true); + mDragSelectActive = active; + mInitialSelection = initialSelection; + mLastDraggedIndex = initialSelection; + if (mFingerListener != null) + mFingerListener.onDragSelectFingerAction(true); + LOG("Drag selection initialized, starting at index %d.", initialSelection); + return true; + } + + /** + * Use {@link #setAdapter(DragSelectRecyclerAdapter)} instead. + */ + @Override + @Deprecated + public void setAdapter(Adapter adapter) { + if (!(adapter instanceof DragSelectRecyclerAdapter)) + throw new IllegalArgumentException("Adapter must be a DragSelectRecyclerAdapter."); + setAdapter((DragSelectRecyclerAdapter) adapter); + } + + public void setAdapter(DragSelectRecyclerAdapter adapter) { + super.setAdapter(adapter); + mAdapter = adapter; + } + + private int getItemPosition(MotionEvent e) { + final View v = findChildViewUnder(e.getX(), e.getY()); + if (v == null) + return -2; + if (v.getTag() == null || !(v.getTag() instanceof ViewHolder)) + throw new IllegalStateException("Make sure your adapter makes a call to super.onBindViewHolder(), and doesn't override itemView tags."); + final ViewHolder holder = (ViewHolder) v.getTag(); + return holder.getAdapterPosition(); + } + + public final void enableDebug() { + mDebugEnabled = true; + invalidate(); + } + + @Override + public void onDraw(Canvas c) { + super.onDraw(c); + + if (mDebugEnabled) { + if (mDebugPaint == null) { + mDebugPaint = new Paint(); + mDebugPaint.setColor(Color.BLACK); + mDebugPaint.setAntiAlias(true); + mDebugPaint.setStyle(Paint.Style.FILL); + mTopBoundRect = new RectF(0, mHotspotTopBoundStart, getMeasuredWidth(), mHotspotTopBoundEnd); + mBottomBoundRect = new RectF(0, mHotspotBottomBoundStart, getMeasuredWidth(), mHotspotBottomBoundEnd); + } + c.drawRect(mTopBoundRect, mDebugPaint); + c.drawRect(mBottomBoundRect, mDebugPaint); + } + } + + @Override + public boolean dispatchTouchEvent(MotionEvent e) { + if (mAdapter.getItemCount() == 0) + return super.dispatchTouchEvent(e); + + if (mDragSelectActive) { + final int itemPosition = getItemPosition(e); + if (e.getAction() == MotionEvent.ACTION_UP) { + mDragSelectActive = false; + mInTopHotspot = false; + mInBottomHotspot = false; + mAutoScrollHandler.removeCallbacks(mAutoScrollRunnable); + if (mFingerListener != null) + mFingerListener.onDragSelectFingerAction(false); + return true; + } else if (e.getAction() == MotionEvent.ACTION_MOVE) { + // Check for auto-scroll hotspot + if (mHotspotHeight > -1) { + if (e.getY() >= mHotspotTopBoundStart && e.getY() <= mHotspotTopBoundEnd) { + mInBottomHotspot = false; + if (!mInTopHotspot) { + mInTopHotspot = true; + //LOG("Now in TOP hotspot"); + mAutoScrollHandler.removeCallbacks(mAutoScrollRunnable); + mAutoScrollHandler.postDelayed(mAutoScrollRunnable, AUTO_SCROLL_DELAY); + } + + final float simulatedFactor = mHotspotTopBoundEnd - mHotspotTopBoundStart; + final float simulatedY = e.getY() - mHotspotTopBoundStart; + mAutoScrollVelocity = (int) (simulatedFactor - simulatedY) / 2; + + //LOG("Auto scroll velocity = %d", mAutoScrollVelocity); + } else if (e.getY() >= mHotspotBottomBoundStart && e.getY() <= mHotspotBottomBoundEnd) { + mInTopHotspot = false; + if (!mInBottomHotspot) { + mInBottomHotspot = true; + //LOG("Now in BOTTOM hotspot"); + mAutoScrollHandler.removeCallbacks(mAutoScrollRunnable); + mAutoScrollHandler.postDelayed(mAutoScrollRunnable, AUTO_SCROLL_DELAY); + } + + final float simulatedY = e.getY() + mHotspotBottomBoundEnd; + final float simulatedFactor = mHotspotBottomBoundStart + mHotspotBottomBoundEnd; + mAutoScrollVelocity = (int) (simulatedY - simulatedFactor) / 2; + + //LOG("Auto scroll velocity = %d", mAutoScrollVelocity); + } else if (mInTopHotspot || mInBottomHotspot) { + //LOG("Left the hotspot"); + mAutoScrollHandler.removeCallbacks(mAutoScrollRunnable); + mInTopHotspot = false; + mInBottomHotspot = false; + } + } + + // Drag selection logic + if (itemPosition != -2 && mLastDraggedIndex != itemPosition) { + mLastDraggedIndex = itemPosition; + if (mMinReached == -1) + mMinReached = mLastDraggedIndex; + if (mMaxReached == -1) + mMaxReached = mLastDraggedIndex; + if (mLastDraggedIndex > mMaxReached) + mMaxReached = mLastDraggedIndex; + if (mLastDraggedIndex < mMinReached) + mMinReached = mLastDraggedIndex; + if (mAdapter != null) + mAdapter.selectRange(mInitialSelection, mLastDraggedIndex, mMinReached, mMaxReached); + if (mInitialSelection == mLastDraggedIndex) { + mMinReached = mLastDraggedIndex; + mMaxReached = mLastDraggedIndex; + } + } + return true; + } + } + return super.dispatchTouchEvent(e); + } + + public interface FingerListener { + void onDragSelectFingerAction(boolean fingerDown); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/TreeSortAdapter.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/TreeSortAdapter.java new file mode 100644 index 0000000..2d1b764 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/TreeSortAdapter.java @@ -0,0 +1,174 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.widget; + + +import com.yonsz.z1.fragment.scene.treerecyclerview.adpater.TreeRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.adpater.TreeRecyclerType; +import com.yonsz.z1.fragment.scene.treerecyclerview.base.BaseRecyclerAdapter; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeItem; +import com.yonsz.z1.fragment.scene.treerecyclerview.item.TreeSortItem; +import com.yonsz.z1.fragment.scene.treerecyclerview.manager.ItemManager; + +import java.util.HashMap; +import java.util.List; + + +/** + * Created by Administrator on 2017/8/8 0008. + * 索引adapter + */ + +public class TreeSortAdapter extends TreeRecyclerAdapter { + private final HashMap sortMap = new HashMap<>(); + private TreeSortManageWrapper manageWrapper; + + public TreeSortAdapter() { + + } + + public TreeSortAdapter(TreeRecyclerType treeRecyclerType) { + super(treeRecyclerType); + } + + @Override + public void setDatas(List datas) { + super.setDatas(datas); + getItemManager().updateSorts(getDatas()); + } + + + public int getSortIndex(Object o) { + if (o == null) { + return -1; + } + Integer integer = sortMap.get(o); + return integer == null ? -1 : integer; + } + + @Override + public TreeSortManageWrapper getItemManager() { + if (manageWrapper == null) { + manageWrapper = new TreeSortManageWrapper(this, super.getItemManager()); + } + return manageWrapper; + } + + public class TreeSortManageWrapper extends ItemManager { + ItemManager manager; + + public TreeSortManageWrapper(BaseRecyclerAdapter adapter, ItemManager manager) { + super(adapter); + this.manager = manager; + } + + @Override + public void addItem(TreeItem treeItem) { + manager.addItem(treeItem); + updateSort(manager.getItemPosition(treeItem), treeItem); + } + + + @Override + public void addItem(int i, TreeItem treeItem) { + manager.addItem(i, treeItem); + updateSort(i, treeItem); + } + + @Override + public void addItems(List list) { + manager.addItems(list); + updateSorts(list); + } + + @Override + public void addItems(int i, List list) { + manager.addItems(i, list); + updateSorts(list); + } + + @Override + public void setAdapter(BaseRecyclerAdapter adapter) { + manager.setAdapter(adapter); + } + + @Override + public BaseRecyclerAdapter getAdapter() { + return manager.getAdapter(); + } + + @Override + public void removeItem(TreeItem treeItem) { + manager.removeItem(treeItem); + updateSort(getItemPosition(treeItem), treeItem); + } + + @Override + public void removeItem(int i) { + TreeItem item = manager.getItem(i); + if (item instanceof TreeSortItem) { + sortMap.remove(((TreeSortItem) item).getSortKey()); + } + manager.removeItem(i); + } + + @Override + public void removeItems(List list) { + manager.removeItems(list); + int size = list.size(); + for (int i = 0; i < size; i++) { + TreeItem item = list.get(i); + if (item instanceof TreeSortItem) { + sortMap.remove(((TreeSortItem) item).getSortKey()); + } + } + } + + @Override + public void replaceItem(int i, TreeItem treeItem) { + manager.replaceItem(i, treeItem); + updateSort(i, treeItem); + } + + @Override + public void replaceAllItem(List list) { + manager.replaceAllItem(list); + updateSorts(list); + } + + @Override + public TreeItem getItem(int i) { + return manager.getItem(i); + } + + @Override + public int getItemPosition(TreeItem treeItem) { + return manager.getItemPosition(treeItem); + } + + @Override + public void clean() { + manager.clean(); + } + + public void updateSorts(List treeItems) { + int size = treeItems.size(); + for (int i = 0; i < size; i++) { + TreeItem treeItem = treeItems.get(i); + if (treeItem instanceof TreeSortItem) { + sortMap.put(((TreeSortItem) treeItem).getSortKey(), getItemPosition(treeItem)); + } + } + } + + public void updateSort(TreeItem treeItem) { + if (treeItem instanceof TreeSortItem) { + sortMap.put(((TreeSortItem) treeItem).getSortKey(), getItemPosition(treeItem)); + } + } + + public void updateSort(int position, TreeItem treeItem) { + if (treeItem instanceof TreeSortItem) { + sortMap.put(((TreeSortItem) treeItem).getSortKey(), position); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/swipe/SwipeItemMangerInterface.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/swipe/SwipeItemMangerInterface.java new file mode 100644 index 0000000..75b5d0b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/swipe/SwipeItemMangerInterface.java @@ -0,0 +1,27 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.widget.swipe; + +import java.util.List; + +public interface SwipeItemMangerInterface { + void bind(SwipeLayout swipeLayout, int res, int position); + + void openItem(int position); + + void closeItem(int position); + + void closeAllExcept(SwipeLayout layout); + + void closeAllItems(); + + List getOpenItems(); + + List getOpenLayouts(); + + void removeShownLayouts(SwipeLayout layout); + + boolean isOpen(int position); + + SwipeMode getMode(); + + void setMode(SwipeMode mode); +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/swipe/SwipeLayout.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/swipe/SwipeLayout.java new file mode 100644 index 0000000..d5a379c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/swipe/SwipeLayout.java @@ -0,0 +1,1696 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.widget.swipe; + +import android.content.Context; +import android.graphics.Rect; +import android.support.v4.view.GravityCompat; +import android.support.v4.view.ViewCompat; +import android.support.v4.widget.ViewDragHelper; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.Gravity; +import android.view.HapticFeedbackConstants; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.ViewParent; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.FrameLayout; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import static com.yonsz.z1.fragment.scene.treerecyclerview.widget.swipe.SwipeLayout.ShowMode.LayDown; +import static com.yonsz.z1.fragment.scene.treerecyclerview.widget.swipe.SwipeLayout.ShowMode.PullOut; + + +public class SwipeLayout extends FrameLayout { + @Deprecated + public static final int EMPTY_LAYOUT = -1; + private static final int DRAG_LEFT = 1; + private static final int DRAG_RIGHT = 2; + private static final int DRAG_TOP = 4; + private static final int DRAG_BOTTOM = 8; + private static final DragEdge DefaultDragEdge = DragEdge.Right; + + private int mTouchSlop; + + private DragEdge mCurrentDragEdge = DefaultDragEdge; + private ViewDragHelper mDragHelper; + + private int mDragDistance = 0; + private LinkedHashMap mDragEdges = new LinkedHashMap<>(); + private ShowMode mShowMode = PullOut; + + private float[] mEdgeSwipesOffset = new float[4]; + + private List mSwipeListeners = new ArrayList<>(); + private List mSwipeDeniers = new ArrayList<>(); + private Map> mRevealListeners = new HashMap<>(); + private Map mShowEntirely = new HashMap<>(); + private Map mViewBoundCache = new HashMap<>();//save all children's bound, restore in onLayout + + private DoubleClickListener mDoubleClickListener; + + private boolean mSwipeEnabled = true; + private boolean[] mSwipesEnabled = new boolean[]{true, true, true, true}; + private boolean mClickToClose = false; + private float mWillOpenPercentAfterOpen = 0.75f; + private float mWillOpenPercentAfterClose = 0.25f; + + public enum DragEdge { + Left, + Top, + Right, + Bottom + } + + public enum ShowMode { + LayDown, + PullOut + } + + + public SwipeLayout(Context context) { + this(context, null); + } + + public SwipeLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public SwipeLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mDragHelper = ViewDragHelper.create(this, mDragHelperCallback); + mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + +// TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SwipeLayout); +// int dragEdgeChoices = a.getInt(R.styleable.SwipeLayout_drag_edge, DRAG_RIGHT); + int dragEdgeChoices = DRAG_RIGHT; +// mEdgeSwipesOffset[DragEdge.Left.ordinal()] = a.getDimension(R.styleable.SwipeLayout_leftEdgeSwipeOffset, 0); +// mEdgeSwipesOffset[DragEdge.Right.ordinal()] = a.getDimension(R.styleable.SwipeLayout_rightEdgeSwipeOffset, 0); +// mEdgeSwipesOffset[DragEdge.Top.ordinal()] = a.getDimension(R.styleable.SwipeLayout_topEdgeSwipeOffset, 0); +// mEdgeSwipesOffset[DragEdge.Bottom.ordinal()] = a.getDimension(R.styleable.SwipeLayout_bottomEdgeSwipeOffset, 0); +// setClickToClose(a.getBoolean(R.styleable.SwipeLayout_clickToClose, mClickToClose)); + + if ((dragEdgeChoices & DRAG_LEFT) == DRAG_LEFT) { + mDragEdges.put(DragEdge.Left, null); + } + if ((dragEdgeChoices & DRAG_TOP) == DRAG_TOP) { + mDragEdges.put(DragEdge.Top, null); + } + if ((dragEdgeChoices & DRAG_RIGHT) == DRAG_RIGHT) { + mDragEdges.put(DragEdge.Right, null); + } + if ((dragEdgeChoices & DRAG_BOTTOM) == DRAG_BOTTOM) { + mDragEdges.put(DragEdge.Bottom, null); + } +// int ordinal = a.getInt(R.styleable.SwipeLayout_show_mode, PullOut.ordinal()); + mShowMode = ShowMode.values()[PullOut.ordinal()]; +// a.recycle(); + + } + + public interface SwipeListener { + void onStartOpen(SwipeLayout layout); + + void onOpen(SwipeLayout layout); + + void onStartClose(SwipeLayout layout); + + void onClose(SwipeLayout layout); + + void onUpdate(SwipeLayout layout, int leftOffset, int topOffset); + + void onHandRelease(SwipeLayout layout, float xvel, float yvel); + } + + public void addSwipeListener(SwipeListener l) { + mSwipeListeners.add(l); + } + + public void removeSwipeListener(SwipeListener l) { + mSwipeListeners.remove(l); + } + + public void removeAllSwipeListener() { + mSwipeListeners.clear(); + } + + public interface SwipeDenier { + /* + * Called in onInterceptTouchEvent Determines if this swipe event should + * be denied Implement this interface if you are using views with swipe + * gestures As a child of SwipeLayout + * + * @return true deny false allow + */ + boolean shouldDenySwipe(MotionEvent ev); + } + + public void addSwipeDenier(SwipeDenier denier) { + mSwipeDeniers.add(denier); + } + + public void removeSwipeDenier(SwipeDenier denier) { + mSwipeDeniers.remove(denier); + } + + public void removeAllSwipeDeniers() { + mSwipeDeniers.clear(); + } + + public interface OnRevealListener { + void onReveal(View child, DragEdge edge, float fraction, int distance); + } + + /** + * bind a view with a specific + * + * @param childId the view id. + * @param l the target + */ + public void addRevealListener(int childId, OnRevealListener l) { + View child = findViewById(childId); + if (child == null) { + throw new IllegalArgumentException("Child does not belong to SwipeListener."); + } + + if (!mShowEntirely.containsKey(child)) { + mShowEntirely.put(child, false); + } + if (mRevealListeners.get(child) == null) + mRevealListeners.put(child, new ArrayList()); + + mRevealListeners.get(child).add(l); + } + + /** + * bind multiple views with an + * + * @param childIds the view id. + */ + public void addRevealListener(int[] childIds, OnRevealListener l) { + for (int i : childIds) + addRevealListener(i, l); + } + + public void removeRevealListener(int childId, OnRevealListener l) { + View child = findViewById(childId); + + if (child == null) return; + + mShowEntirely.remove(child); + if (mRevealListeners.containsKey(child)) mRevealListeners.get(child).remove(l); + } + + public void removeAllRevealListeners(int childId) { + View child = findViewById(childId); + if (child != null) { + mRevealListeners.remove(child); + mShowEntirely.remove(child); + } + } + + private ViewDragHelper.Callback mDragHelperCallback = new ViewDragHelper.Callback() { + + @Override + public int clampViewPositionHorizontal(View child, int left, int dx) { + if (child == getSurfaceView()) { + switch (mCurrentDragEdge) { + case Top: + case Bottom: + return getPaddingLeft(); + case Left: + if (left < getPaddingLeft()) return getPaddingLeft(); + if (left > getPaddingLeft() + mDragDistance) + return getPaddingLeft() + mDragDistance; + break; + case Right: + if (left > getPaddingLeft()) return getPaddingLeft(); + if (left < getPaddingLeft() - mDragDistance) + return getPaddingLeft() - mDragDistance; + break; + } + } else if (getCurrentBottomView() == child) { + + switch (mCurrentDragEdge) { + case Top: + case Bottom: + return getPaddingLeft(); + case Left: + if (mShowMode == PullOut) { + if (left > getPaddingLeft()) return getPaddingLeft(); + } + break; + case Right: + if (mShowMode == PullOut) { + if (left < getMeasuredWidth() - mDragDistance) { + return getMeasuredWidth() - mDragDistance; + } + } + break; + } + } + return left; + } + + @Override + public int clampViewPositionVertical(View child, int top, int dy) { + if (child == getSurfaceView()) { + switch (mCurrentDragEdge) { + case Left: + case Right: + return getPaddingTop(); + case Top: + if (top < getPaddingTop()) return getPaddingTop(); + if (top > getPaddingTop() + mDragDistance) + return getPaddingTop() + mDragDistance; + break; + case Bottom: + if (top < getPaddingTop() - mDragDistance) { + return getPaddingTop() - mDragDistance; + } + if (top > getPaddingTop()) { + return getPaddingTop(); + } + } + } else { + View surfaceView = getSurfaceView(); + int surfaceViewTop = surfaceView == null ? 0 : surfaceView.getTop(); + switch (mCurrentDragEdge) { + case Left: + case Right: + return getPaddingTop(); + case Top: + if (mShowMode == PullOut) { + if (top > getPaddingTop()) return getPaddingTop(); + } else { + if (surfaceViewTop + dy < getPaddingTop()) + return getPaddingTop(); + if (surfaceViewTop + dy > getPaddingTop() + mDragDistance) + return getPaddingTop() + mDragDistance; + } + break; + case Bottom: + if (mShowMode == PullOut) { + if (top < getMeasuredHeight() - mDragDistance) + return getMeasuredHeight() - mDragDistance; + } else { + if (surfaceViewTop + dy >= getPaddingTop()) + return getPaddingTop(); + if (surfaceViewTop + dy <= getPaddingTop() - mDragDistance) + return getPaddingTop() - mDragDistance; + } + } + } + return top; + } + + @Override + public boolean tryCaptureView(View child, int pointerId) { + boolean result = child == getSurfaceView() || getBottomViews().contains(child); + if (result) { + isCloseBeforeDrag = getOpenStatus() == Status.Close; + } + return result; + } + + @Override + public int getViewHorizontalDragRange(View child) { + return mDragDistance; + } + + @Override + public int getViewVerticalDragRange(View child) { + return mDragDistance; + } + + boolean isCloseBeforeDrag = true; + + @Override + public void onViewReleased(View releasedChild, float xvel, float yvel) { + super.onViewReleased(releasedChild, xvel, yvel); + processHandRelease(xvel, yvel, isCloseBeforeDrag); + for (SwipeListener l : mSwipeListeners) { + l.onHandRelease(SwipeLayout.this, xvel, yvel); + } + + invalidate(); + } + + @Override + public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { + View surfaceView = getSurfaceView(); + if (surfaceView == null) return; + View currentBottomView = getCurrentBottomView(); + int evLeft = surfaceView.getLeft(), + evRight = surfaceView.getRight(), + evTop = surfaceView.getTop(), + evBottom = surfaceView.getBottom(); + if (changedView == surfaceView) { + + if (mShowMode == PullOut && currentBottomView != null) { + if (mCurrentDragEdge == DragEdge.Left || mCurrentDragEdge == DragEdge.Right) { + currentBottomView.offsetLeftAndRight(dx); + } else { + currentBottomView.offsetTopAndBottom(dy); + } + } + + } else if (getBottomViews().contains(changedView)) { + + if (mShowMode == PullOut) { + surfaceView.offsetLeftAndRight(dx); + surfaceView.offsetTopAndBottom(dy); + } else { + Rect rect = computeBottomLayDown(mCurrentDragEdge); + if (currentBottomView != null) { + currentBottomView.layout(rect.left, rect.top, rect.right, rect.bottom); + } + + int newLeft = surfaceView.getLeft() + dx, newTop = surfaceView.getTop() + dy; + + if (mCurrentDragEdge == DragEdge.Left && newLeft < getPaddingLeft()) + newLeft = getPaddingLeft(); + else if (mCurrentDragEdge == DragEdge.Right && newLeft > getPaddingLeft()) + newLeft = getPaddingLeft(); + else if (mCurrentDragEdge == DragEdge.Top && newTop < getPaddingTop()) + newTop = getPaddingTop(); + else if (mCurrentDragEdge == DragEdge.Bottom && newTop > getPaddingTop()) + newTop = getPaddingTop(); + + surfaceView.layout(newLeft, newTop, newLeft + getMeasuredWidth(), newTop + getMeasuredHeight()); + } + } + + dispatchRevealEvent(evLeft, evTop, evRight, evBottom); + + dispatchSwipeEvent(evLeft, evTop, dx, dy); + + invalidate(); + + captureChildrenBound(); + } + }; + + /** + * save children's bounds, so they can restore the bound in {@link #onLayout(boolean, int, int, int, int)} + */ + private void captureChildrenBound() { +// View currentBottomView = getCurrentBottomView(); +// if (getOpenStatus() == Status.Close) { +// mViewBoundCache.remove(currentBottomView); +// return; +// } + View currentBottomView = getCurrentBottomView(); + if (getOpenStatus() == Status.Close) { + mViewBoundCache.remove(currentBottomView); + mViewBoundCache.remove(getSurfaceView()); + return; + } + View[] views = new View[]{ + getSurfaceView(), + currentBottomView}; + for (View child : views) { + Rect rect = mViewBoundCache.get(child); + if (rect == null) { + rect = new Rect(); + mViewBoundCache.put(child, rect); + } + rect.left = child.getLeft(); + rect.top = child.getTop(); + rect.right = child.getRight(); + rect.bottom = child.getBottom(); + } + } + + /** + * the dispatchRevealEvent method may not always get accurate position, it + * makes the view may not always get the event when the view is totally + * show( fraction = 1), so , we need to calculate every time. + */ + protected boolean isViewTotallyFirstShowed(View child, Rect relativePosition, DragEdge edge, int surfaceLeft, + int surfaceTop, int surfaceRight, int surfaceBottom) { + if (mShowEntirely.get(child)) return false; + int childLeft = relativePosition.left; + int childRight = relativePosition.right; + int childTop = relativePosition.top; + int childBottom = relativePosition.bottom; + boolean r = false; + if (getShowMode() == LayDown) { + if ((edge == DragEdge.Right && surfaceRight <= childLeft) + || (edge == DragEdge.Left && surfaceLeft >= childRight) + || (edge == DragEdge.Top && surfaceTop >= childBottom) + || (edge == DragEdge.Bottom && surfaceBottom <= childTop)) r = true; + } else if (getShowMode() == PullOut) { + if ((edge == DragEdge.Right && childRight <= getWidth()) + || (edge == DragEdge.Left && childLeft >= getPaddingLeft()) + || (edge == DragEdge.Top && childTop >= getPaddingTop()) + || (edge == DragEdge.Bottom && childBottom <= getHeight())) r = true; + } + return r; + } + + protected boolean isViewShowing(View child, Rect relativePosition, DragEdge availableEdge, int surfaceLeft, + int surfaceTop, int surfaceRight, int surfaceBottom) { + int childLeft = relativePosition.left; + int childRight = relativePosition.right; + int childTop = relativePosition.top; + int childBottom = relativePosition.bottom; + if (getShowMode() == LayDown) { + switch (availableEdge) { + case Right: + if (surfaceRight > childLeft && surfaceRight <= childRight) { + return true; + } + break; + case Left: + if (surfaceLeft < childRight && surfaceLeft >= childLeft) { + return true; + } + break; + case Top: + if (surfaceTop >= childTop && surfaceTop < childBottom) { + return true; + } + break; + case Bottom: + if (surfaceBottom > childTop && surfaceBottom <= childBottom) { + return true; + } + break; + } + } else if (getShowMode() == PullOut) { + switch (availableEdge) { + case Right: + if (childLeft <= getWidth() && childRight > getWidth()) return true; + break; + case Left: + if (childRight >= getPaddingLeft() && childLeft < getPaddingLeft()) return true; + break; + case Top: + if (childTop < getPaddingTop() && childBottom >= getPaddingTop()) return true; + break; + case Bottom: + if (childTop < getHeight() && childTop >= getPaddingTop()) return true; + break; + } + } + return false; + } + + protected Rect getRelativePosition(View child) { + View t = child; + Rect r = new Rect(t.getLeft(), t.getTop(), 0, 0); + while (t.getParent() != null && t != getRootView()) { + t = (View) t.getParent(); + if (t == this) break; + r.left += t.getLeft(); + r.top += t.getTop(); + } + r.right = r.left + child.getMeasuredWidth(); + r.bottom = r.top + child.getMeasuredHeight(); + return r; + } + + private int mEventCounter = 0; + + protected void dispatchSwipeEvent(int surfaceLeft, int surfaceTop, int dx, int dy) { + DragEdge edge = getDragEdge(); + boolean open = true; + if (edge == DragEdge.Left) { + if (dx < 0) open = false; + } else if (edge == DragEdge.Right) { + if (dx > 0) open = false; + } else if (edge == DragEdge.Top) { + if (dy < 0) open = false; + } else if (edge == DragEdge.Bottom) { + if (dy > 0) open = false; + } + + dispatchSwipeEvent(surfaceLeft, surfaceTop, open); + } + + protected void dispatchSwipeEvent(int surfaceLeft, int surfaceTop, boolean open) { + safeBottomView(); + Status status = getOpenStatus(); + + if (!mSwipeListeners.isEmpty()) { + mEventCounter++; + for (SwipeListener l : mSwipeListeners) { + if (mEventCounter == 1) { + if (open) { + l.onStartOpen(this); + } else { + l.onStartClose(this); + } + } + l.onUpdate(SwipeLayout.this, surfaceLeft - getPaddingLeft(), surfaceTop - getPaddingTop()); + } + + if (status == Status.Close) { + for (SwipeListener l : mSwipeListeners) { + l.onClose(SwipeLayout.this); + } + mEventCounter = 0; + } + + if (status == Status.Open) { + View currentBottomView = getCurrentBottomView(); + if (currentBottomView != null) { + currentBottomView.setEnabled(true); + } + for (SwipeListener l : mSwipeListeners) { + l.onOpen(SwipeLayout.this); + } + mEventCounter = 0; + } + } + } + + /** + * prevent bottom view get any touch event. Especially in LayDown mode. + */ + private void safeBottomView() { + Status status = getOpenStatus(); + List bottoms = getBottomViews(); + + if (status == Status.Close) { + for (View bottom : bottoms) { + if (bottom != null && bottom.getVisibility() != INVISIBLE) { + bottom.setVisibility(INVISIBLE); + } + } + } else { + View currentBottomView = getCurrentBottomView(); + if (currentBottomView != null && currentBottomView.getVisibility() != VISIBLE) { + currentBottomView.setVisibility(VISIBLE); + } + } + } + + protected void dispatchRevealEvent(final int surfaceLeft, final int surfaceTop, final int surfaceRight, + final int surfaceBottom) { + if (mRevealListeners.isEmpty()) return; + for (Map.Entry> entry : mRevealListeners.entrySet()) { + View child = entry.getKey(); + Rect rect = getRelativePosition(child); + if (isViewShowing(child, rect, mCurrentDragEdge, surfaceLeft, surfaceTop, + surfaceRight, surfaceBottom)) { + mShowEntirely.put(child, false); + int distance = 0; + float fraction = 0f; + if (getShowMode() == LayDown) { + switch (mCurrentDragEdge) { + case Left: + distance = rect.left - surfaceLeft; + fraction = distance / (float) child.getWidth(); + break; + case Right: + distance = rect.right - surfaceRight; + fraction = distance / (float) child.getWidth(); + break; + case Top: + distance = rect.top - surfaceTop; + fraction = distance / (float) child.getHeight(); + break; + case Bottom: + distance = rect.bottom - surfaceBottom; + fraction = distance / (float) child.getHeight(); + break; + } + } else if (getShowMode() == PullOut) { + switch (mCurrentDragEdge) { + case Left: + distance = rect.right - getPaddingLeft(); + fraction = distance / (float) child.getWidth(); + break; + case Right: + distance = rect.left - getWidth(); + fraction = distance / (float) child.getWidth(); + break; + case Top: + distance = rect.bottom - getPaddingTop(); + fraction = distance / (float) child.getHeight(); + break; + case Bottom: + distance = rect.top - getHeight(); + fraction = distance / (float) child.getHeight(); + break; + } + } + + for (OnRevealListener l : entry.getValue()) { + l.onReveal(child, mCurrentDragEdge, Math.abs(fraction), distance); + if (Math.abs(fraction) == 1) { + mShowEntirely.put(child, true); + } + } + } + + if (isViewTotallyFirstShowed(child, rect, mCurrentDragEdge, surfaceLeft, surfaceTop, + surfaceRight, surfaceBottom)) { + mShowEntirely.put(child, true); + for (OnRevealListener l : entry.getValue()) { + if (mCurrentDragEdge == DragEdge.Left + || mCurrentDragEdge == DragEdge.Right) + l.onReveal(child, mCurrentDragEdge, 1, child.getWidth()); + else + l.onReveal(child, mCurrentDragEdge, 1, child.getHeight()); + } + } + + } + } + + @Override + public void computeScroll() { + super.computeScroll(); + if (mDragHelper.continueSettling(true)) { + ViewCompat.postInvalidateOnAnimation(this); + } + } + + /** + * {@link OnLayoutChangeListener} added in API 11. I need + * to support it from API 8. + */ + public interface OnLayout { + void onLayout(SwipeLayout v); + } + + private List mOnLayoutListeners; + + public void addOnLayoutListener(OnLayout l) { + if (mOnLayoutListeners == null) mOnLayoutListeners = new ArrayList(); + mOnLayoutListeners.add(l); + } + + public void removeOnLayoutListener(OnLayout l) { + if (mOnLayoutListeners != null) mOnLayoutListeners.remove(l); + } + + public void clearDragEdge() { + mDragEdges.clear(); + } + + public void setDrag(DragEdge dragEdge, int childId) { + clearDragEdge(); + addDrag(dragEdge, childId); + } + + public void setDrag(DragEdge dragEdge, View child) { + clearDragEdge(); + addDrag(dragEdge, child); + } + + public void addDrag(DragEdge dragEdge, int childId) { + addDrag(dragEdge, findViewById(childId), null); + } + + public void addDrag(DragEdge dragEdge, View child) { + addDrag(dragEdge, child, null); + } + + public void addDrag(DragEdge dragEdge, View child, ViewGroup.LayoutParams params) { + if (child == null) return; + + if (params == null) { + params = generateDefaultLayoutParams(); + } + if (!checkLayoutParams(params)) { + params = generateLayoutParams(params); + } + int gravity = -1; + switch (dragEdge) { + case Left: + gravity = Gravity.LEFT; + break; + case Right: + gravity = Gravity.RIGHT; + break; + case Top: + gravity = Gravity.TOP; + break; + case Bottom: + gravity = Gravity.BOTTOM; + break; + } + if (params instanceof LayoutParams) { + ((LayoutParams) params).gravity = gravity; + } + try { + gravity = (Integer) params.getClass().getField("gravity").get(params); + } catch (Exception e) { + e.printStackTrace(); + } + + if (gravity > 0) { + gravity = GravityCompat.getAbsoluteGravity(gravity, ViewCompat.getLayoutDirection(this)); + + if ((gravity & Gravity.LEFT) == Gravity.LEFT) { + mDragEdges.put(DragEdge.Left, child); + } + if ((gravity & Gravity.RIGHT) == Gravity.RIGHT) { + mDragEdges.put(DragEdge.Right, child); + } + if ((gravity & Gravity.TOP) == Gravity.TOP) { + mDragEdges.put(DragEdge.Top, child); + } + if ((gravity & Gravity.BOTTOM) == Gravity.BOTTOM) { + mDragEdges.put(DragEdge.Bottom, child); + } + } else { + for (Map.Entry entry : mDragEdges.entrySet()) { + if (entry.getValue() == null) { + //means used the drag_edge attr, the no gravity child should be use set + mDragEdges.put(entry.getKey(), child); + break; + } + } + } + if (child.getParent() == this) { + return; + } + addView(child, 0, params); + } + +// @Override +// public void addView(View child, int index, ViewGroup.LayoutParams params) { +// if (child == null) return; +// int gravity = Gravity.NO_GRAVITY; +// try { +// gravity = (Integer) params.getClass().getField("gravity").get(params); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// if (gravity > 0) { +// gravity = GravityCompat.getAbsoluteGravity(gravity, ViewCompat.getLayoutDirection(this)); +// +// if ((gravity & Gravity.LEFT) == Gravity.LEFT) { +// mDragEdges.put(DragEdge.Left, child); +// } +// if ((gravity & Gravity.RIGHT) == Gravity.RIGHT) { +// mDragEdges.put(DragEdge.Right, child); +// } +// if ((gravity & Gravity.TOP) == Gravity.TOP) { +// mDragEdges.put(DragEdge.Top, child); +// } +// if ((gravity & Gravity.BOTTOM) == Gravity.BOTTOM) { +// mDragEdges.put(DragEdge.Bottom, child); +// } +// } else { +// for (Map.Entry entry : mDragEdges.entrySet()) { +// if (entry.getValue() == null) { +// //means used the drag_edge attr, the no gravity child should be use set +// mDragEdges.put(entry.getKey(), child); +// break; +// } +// } +// } +// if (child.getParent() == this) { +// return; +// } +// super.addView(child, index, params); +// } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + updateBottomViews(); + +// if (mOnLayoutListeners != null) for (int i = 0; i < mOnLayoutListeners.size(); i++) { +// mOnLayoutListeners.get(i).onLayout(this); +// } + } + + void layoutPullOut() { + View surfaceView = getSurfaceView(); + Rect surfaceRect = mViewBoundCache.get(surfaceView); + if (surfaceRect == null) surfaceRect = computeSurfaceLayoutArea(false); + if (surfaceView != null) { + surfaceView.layout(surfaceRect.left, surfaceRect.top, surfaceRect.right, surfaceRect.bottom); + bringChildToFront(surfaceView); + } + View currentBottomView = getCurrentBottomView(); + Rect bottomViewRect = mViewBoundCache.get(currentBottomView); + if (bottomViewRect == null) + bottomViewRect = computeBottomLayoutAreaViaSurface(PullOut, surfaceRect); + if (currentBottomView != null) { + currentBottomView.layout(bottomViewRect.left, bottomViewRect.top, bottomViewRect.right, bottomViewRect.bottom); + } + } + + void layoutLayDown() { + View surfaceView = getSurfaceView(); + Rect surfaceRect = mViewBoundCache.get(surfaceView); + if (surfaceRect == null) surfaceRect = computeSurfaceLayoutArea(false); + if (surfaceView != null) { + surfaceView.layout(surfaceRect.left, surfaceRect.top, surfaceRect.right, surfaceRect.bottom); + bringChildToFront(surfaceView); + } + View currentBottomView = getCurrentBottomView(); + Rect bottomViewRect = mViewBoundCache.get(currentBottomView); + if (bottomViewRect == null) + bottomViewRect = computeBottomLayoutAreaViaSurface(LayDown, surfaceRect); + if (currentBottomView != null) { + currentBottomView.layout(bottomViewRect.left, bottomViewRect.top, bottomViewRect.right, bottomViewRect.bottom); + } + } + + private boolean mIsBeingDragged; + + private void checkCanDrag(MotionEvent ev) { + if (mIsBeingDragged) return; + if (getOpenStatus() == Status.Middle) { + mIsBeingDragged = true; + return; + } + Status status = getOpenStatus(); + float distanceX = ev.getRawX() - sX; + float distanceY = ev.getRawY() - sY; + float angle = Math.abs(distanceY / distanceX); + angle = (float) Math.toDegrees(Math.atan(angle)); + if (getOpenStatus() == Status.Close) { + DragEdge dragEdge; + if (angle < 45) { + if (distanceX > 0 && isLeftSwipeEnabled()) { + dragEdge = DragEdge.Left; + } else if (distanceX < 0 && isRightSwipeEnabled()) { + dragEdge = DragEdge.Right; + } else return; + + } else { + if (distanceY > 0 && isTopSwipeEnabled()) { + dragEdge = DragEdge.Top; + } else if (distanceY < 0 && isBottomSwipeEnabled()) { + dragEdge = DragEdge.Bottom; + } else return; + } + setCurrentDragEdge(dragEdge); + } + + boolean doNothing = false; + if (mCurrentDragEdge == DragEdge.Right) { + boolean suitable = (status == Status.Open && distanceX > mTouchSlop) + || (status == Status.Close && distanceX < -mTouchSlop); + suitable = suitable || (status == Status.Middle); + + if (angle > 30 || !suitable) { + doNothing = true; + } + } + + if (mCurrentDragEdge == DragEdge.Left) { + boolean suitable = (status == Status.Open && distanceX < -mTouchSlop) + || (status == Status.Close && distanceX > mTouchSlop); + suitable = suitable || status == Status.Middle; + + if (angle > 30 || !suitable) { + doNothing = true; + } + } + + if (mCurrentDragEdge == DragEdge.Top) { + boolean suitable = (status == Status.Open && distanceY < -mTouchSlop) + || (status == Status.Close && distanceY > mTouchSlop); + suitable = suitable || status == Status.Middle; + + if (angle < 60 || !suitable) { + doNothing = true; + } + } + + if (mCurrentDragEdge == DragEdge.Bottom) { + boolean suitable = (status == Status.Open && distanceY > mTouchSlop) + || (status == Status.Close && distanceY < -mTouchSlop); + suitable = suitable || status == Status.Middle; + + if (angle < 60 || !suitable) { + doNothing = true; + } + } + mIsBeingDragged = !doNothing; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (!isSwipeEnabled()) { + return false; + } + if (mClickToClose && getOpenStatus() == Status.Open && isTouchOnSurface(ev)) { + return true; + } + for (SwipeDenier denier : mSwipeDeniers) { + if (denier != null && denier.shouldDenySwipe(ev)) { + return false; + } + } + + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + mDragHelper.processTouchEvent(ev); + mIsBeingDragged = false; + sX = ev.getRawX(); + sY = ev.getRawY(); + //if the swipe is in middle state(scrolling), should intercept the touch + if (getOpenStatus() == Status.Middle) { + mIsBeingDragged = true; + } + break; + case MotionEvent.ACTION_MOVE: + boolean beforeCheck = mIsBeingDragged; + checkCanDrag(ev); + if (mIsBeingDragged) { + ViewParent parent = getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); + } + } + if (!beforeCheck && mIsBeingDragged) { + //let children has one chance to catch the touch, and request the swipe not intercept + //useful when swipeLayout wrap a swipeLayout or other gestural layout + return false; + } + break; + + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: + mIsBeingDragged = false; + mDragHelper.processTouchEvent(ev); + break; + default://handle other action, such as ACTION_POINTER_DOWN/UP + mDragHelper.processTouchEvent(ev); + } + return mIsBeingDragged; + } + + private float sX = -1, sY = -1; + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (!isSwipeEnabled()) return super.onTouchEvent(event); + int action = event.getActionMasked(); + gestureDetector.onTouchEvent(event); + + switch (action) { + case MotionEvent.ACTION_DOWN: + mDragHelper.processTouchEvent(event); + sX = event.getRawX(); + sY = event.getRawY(); + return true; + + case MotionEvent.ACTION_MOVE: { + //the drag state and the direction are already judged at onInterceptTouchEvent + checkCanDrag(event); + if (mIsBeingDragged) { + getParent().requestDisallowInterceptTouchEvent(true); + mDragHelper.processTouchEvent(event); + } + break; + } + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + mIsBeingDragged = false; + mDragHelper.processTouchEvent(event); + break; + + default://handle other action, such as ACTION_POINTER_DOWN/UP + mDragHelper.processTouchEvent(event); + } + + return super.onTouchEvent(event) || mIsBeingDragged || action == MotionEvent.ACTION_DOWN; + } + + public boolean isClickToClose() { + return mClickToClose; + } + + public void setClickToClose(boolean mClickToClose) { + this.mClickToClose = mClickToClose; + } + + public void setSwipeEnabled(boolean enabled) { + mSwipeEnabled = enabled; + } + + public boolean isSwipeEnabled() { + return mSwipeEnabled; + } + + public boolean isLeftSwipeEnabled() { + View bottomView = mDragEdges.get(DragEdge.Left); + return bottomView != null && bottomView.getParent() == this + && bottomView != getSurfaceView() && mSwipesEnabled[DragEdge.Left.ordinal()]; + } + + public void setLeftSwipeEnabled(boolean leftSwipeEnabled) { + this.mSwipesEnabled[DragEdge.Left.ordinal()] = leftSwipeEnabled; + } + + public boolean isRightSwipeEnabled() { + View bottomView = mDragEdges.get(DragEdge.Right); + return bottomView != null && bottomView.getParent() == this + && bottomView != getSurfaceView() && mSwipesEnabled[DragEdge.Right.ordinal()]; + } + + public void setRightSwipeEnabled(boolean rightSwipeEnabled) { + this.mSwipesEnabled[DragEdge.Right.ordinal()] = rightSwipeEnabled; + } + + public boolean isTopSwipeEnabled() { + View bottomView = mDragEdges.get(DragEdge.Top); + return bottomView != null && bottomView.getParent() == this + && bottomView != getSurfaceView() && mSwipesEnabled[DragEdge.Top.ordinal()]; + } + + public void setTopSwipeEnabled(boolean topSwipeEnabled) { + this.mSwipesEnabled[DragEdge.Top.ordinal()] = topSwipeEnabled; + } + + public boolean isBottomSwipeEnabled() { + View bottomView = mDragEdges.get(DragEdge.Bottom); + return bottomView != null && bottomView.getParent() == this + && bottomView != getSurfaceView() && mSwipesEnabled[DragEdge.Bottom.ordinal()]; + } + + public void setBottomSwipeEnabled(boolean bottomSwipeEnabled) { + this.mSwipesEnabled[DragEdge.Bottom.ordinal()] = bottomSwipeEnabled; + } + + /*** + * Returns the percentage of revealing at which the view below should the view finish opening + * if it was already open before dragging + * + * @returns The percentage of view revealed to trigger, default value is 0.25 + */ + public float getWillOpenPercentAfterOpen() { + return mWillOpenPercentAfterOpen; + } + + /*** + * Allows to stablish at what percentage of revealing the view below should the view finish opening + * if it was already open before dragging + * + * @param willOpenPercentAfterOpen The percentage of view revealed to trigger, default value is 0.25 + */ + public void setWillOpenPercentAfterOpen(float willOpenPercentAfterOpen) { + this.mWillOpenPercentAfterOpen = willOpenPercentAfterOpen; + } + + /*** + * Returns the percentage of revealing at which the view below should the view finish opening + * if it was already closed before dragging + * + * @returns The percentage of view revealed to trigger, default value is 0.25 + */ + public float getWillOpenPercentAfterClose() { + return mWillOpenPercentAfterClose; + } + + /*** + * Allows to stablish at what percentage of revealing the view below should the view finish opening + * if it was already closed before dragging + * + * @param willOpenPercentAfterClose The percentage of view revealed to trigger, default value is 0.75 + */ + public void setWillOpenPercentAfterClose(float willOpenPercentAfterClose) { + this.mWillOpenPercentAfterClose = willOpenPercentAfterClose; + } + + private boolean insideAdapterView() { + return getAdapterView() != null; + } + + private AdapterView getAdapterView() { + ViewParent t = getParent(); + if (t instanceof AdapterView) { + return (AdapterView) t; + } + return null; + } + + private void performAdapterViewItemClick() { + if (getOpenStatus() != Status.Close) return; + ViewParent t = getParent(); + if (t instanceof AdapterView) { + AdapterView view = (AdapterView) t; + int p = view.getPositionForView(SwipeLayout.this); + if (p != AdapterView.INVALID_POSITION) { + view.performItemClick(view.getChildAt(p - view.getFirstVisiblePosition()), p, view + .getAdapter().getItemId(p)); + } + } + } + + private boolean performAdapterViewItemLongClick() { + if (getOpenStatus() != Status.Close) return false; + ViewParent t = getParent(); + if (t instanceof AdapterView) { + AdapterView view = (AdapterView) t; + int p = view.getPositionForView(SwipeLayout.this); + if (p == AdapterView.INVALID_POSITION) return false; + long vId = view.getItemIdAtPosition(p); + boolean handled = false; + try { + Method m = AbsListView.class.getDeclaredMethod("performLongPress", View.class, int.class, long.class); + m.setAccessible(true); + handled = (boolean) m.invoke(view, SwipeLayout.this, p, vId); + + } catch (Exception e) { + e.printStackTrace(); + + if (view.getOnItemLongClickListener() != null) { + handled = view.getOnItemLongClickListener().onItemLongClick(view, SwipeLayout.this, p, vId); + } + if (handled) { + view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + } + } + return handled; + } + return false; + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (insideAdapterView()) { + if (clickListener == null) { + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + performAdapterViewItemClick(); + } + }); + } + if (longClickListener == null) { + setOnLongClickListener(new OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + performAdapterViewItemLongClick(); + return true; + } + }); + } + } + } + + OnClickListener clickListener; + + @Override + public void setOnClickListener(OnClickListener l) { + super.setOnClickListener(l); + clickListener = l; + } + + OnLongClickListener longClickListener; + + @Override + public void setOnLongClickListener(OnLongClickListener l) { + super.setOnLongClickListener(l); + longClickListener = l; + } + + private Rect hitSurfaceRect; + + private boolean isTouchOnSurface(MotionEvent ev) { + View surfaceView = getSurfaceView(); + if (surfaceView == null) { + return false; + } + if (hitSurfaceRect == null) { + hitSurfaceRect = new Rect(); + } + surfaceView.getHitRect(hitSurfaceRect); + return hitSurfaceRect.contains((int) ev.getX(), (int) ev.getY()); + } + + private GestureDetector gestureDetector = new GestureDetector(getContext(), new SwipeDetector()); + + class SwipeDetector extends GestureDetector.SimpleOnGestureListener { + @Override + public boolean onSingleTapUp(MotionEvent e) { + if (mClickToClose && isTouchOnSurface(e)) { + close(); + } + return super.onSingleTapUp(e); + } + + @Override + public boolean onDoubleTap(MotionEvent e) { + if (mDoubleClickListener != null) { + View target; + View bottom = getCurrentBottomView(); + View surface = getSurfaceView(); + if (bottom != null && e.getX() > bottom.getLeft() && e.getX() < bottom.getRight() + && e.getY() > bottom.getTop() && e.getY() < bottom.getBottom()) { + target = bottom; + } else { + target = surface; + } + mDoubleClickListener.onDoubleClick(SwipeLayout.this, target == surface); + } + return true; + } + } + + /** + * set the drag distance, it will force set the bottom view's width or + * height via this value. + * + * @param max max distance in dp unit + */ + public void setDragDistance(int max) { + if (max < 0) max = 0; + mDragDistance = dp2px(max); + requestLayout(); + } + + /** + * There are 2 diffirent show mode. + * + * @param mode + */ + public void setShowMode(ShowMode mode) { + mShowMode = mode; + requestLayout(); + } + + public DragEdge getDragEdge() { + return mCurrentDragEdge; + } + + public int getDragDistance() { + return mDragDistance; + } + + public ShowMode getShowMode() { + return mShowMode; + } + + /** + * return null if there is no surface view(no children) + */ + public View getSurfaceView() { + if (getChildCount() == 0) return null; + return getChildAt(getChildCount() - 1); + } + + /** + * return null if there is no bottom view + */ + public View getCurrentBottomView() { + List bottoms = getBottomViews(); + if (mCurrentDragEdge.ordinal() < bottoms.size()) { + return bottoms.get(mCurrentDragEdge.ordinal()); + } + return null; + } + + /** + * @return all bottomViews: left, top, right, bottom (may null if the edge is not set) + */ + public List getBottomViews() { + ArrayList bottoms = new ArrayList(); + for (DragEdge dragEdge : DragEdge.values()) { + bottoms.add(mDragEdges.get(dragEdge)); + } + return bottoms; + } + + public enum Status { + Middle, + Open, + Close + } + + /** + * get the open status. + *

+ * Middle. + */ + public Status getOpenStatus() { + View surfaceView = getSurfaceView(); + if (surfaceView == null) { + return Status.Close; + } + int surfaceLeft = surfaceView.getLeft(); + int surfaceTop = surfaceView.getTop(); + if (surfaceLeft == getPaddingLeft() && surfaceTop == getPaddingTop()) return Status.Close; + + if (surfaceLeft == (getPaddingLeft() - mDragDistance) || surfaceLeft == (getPaddingLeft() + mDragDistance) + || surfaceTop == (getPaddingTop() - mDragDistance) || surfaceTop == (getPaddingTop() + mDragDistance)) + return Status.Open; + + return Status.Middle; + } + + + /** + * Process the surface release event. + * + * @param xvel xVelocity + * @param yvel yVelocity + * @param isCloseBeforeDragged the open state before drag + */ + protected void processHandRelease(float xvel, float yvel, boolean isCloseBeforeDragged) { + float minVelocity = mDragHelper.getMinVelocity(); + View surfaceView = getSurfaceView(); + DragEdge currentDragEdge = mCurrentDragEdge; + if (currentDragEdge == null || surfaceView == null) { + return; + } + float willOpenPercent = (isCloseBeforeDragged ? mWillOpenPercentAfterClose : mWillOpenPercentAfterOpen); + if (currentDragEdge == DragEdge.Left) { + if (xvel > minVelocity) open(); + else if (xvel < -minVelocity) close(); + else { + float openPercent = 1f * getSurfaceView().getLeft() / mDragDistance; + if (openPercent > willOpenPercent) open(); + else close(); + } + } else if (currentDragEdge == DragEdge.Right) { + if (xvel > minVelocity) close(); + else if (xvel < -minVelocity) open(); + else { + float openPercent = 1f * (-getSurfaceView().getLeft()) / mDragDistance; + if (openPercent > willOpenPercent) open(); + else close(); + } + } else if (currentDragEdge == DragEdge.Top) { + if (yvel > minVelocity) open(); + else if (yvel < -minVelocity) close(); + else { + float openPercent = 1f * getSurfaceView().getTop() / mDragDistance; + if (openPercent > willOpenPercent) open(); + else close(); + } + } else if (currentDragEdge == DragEdge.Bottom) { + if (yvel > minVelocity) close(); + else if (yvel < -minVelocity) open(); + else { + float openPercent = 1f * (-getSurfaceView().getTop()) / mDragDistance; + if (openPercent > willOpenPercent) open(); + else close(); + } + } + } + + /** + * smoothly open surface. + */ + public void open() { + open(true, true); + } + + public void open(boolean smooth) { + open(smooth, true); + } + + public void open(boolean smooth, boolean notify) { + View surface = getSurfaceView(), bottom = getCurrentBottomView(); + if (surface == null) { + return; + } + int dx, dy; + Rect rect = computeSurfaceLayoutArea(true); + if (smooth) { + mDragHelper.smoothSlideViewTo(surface, rect.left, rect.top); + } else { + dx = rect.left - surface.getLeft(); + dy = rect.top - surface.getTop(); + surface.layout(rect.left, rect.top, rect.right, rect.bottom); + if (getShowMode() == PullOut) { + Rect bRect = computeBottomLayoutAreaViaSurface(PullOut, rect); + if (bottom != null) { + bottom.layout(bRect.left, bRect.top, bRect.right, bRect.bottom); + } + } + if (notify) { + dispatchRevealEvent(rect.left, rect.top, rect.right, rect.bottom); + dispatchSwipeEvent(rect.left, rect.top, dx, dy); + } else { + safeBottomView(); + } + } + invalidate(); + } + + public void open(DragEdge edge) { + setCurrentDragEdge(edge); + open(true, true); + } + + public void open(boolean smooth, DragEdge edge) { + setCurrentDragEdge(edge); + open(smooth, true); + } + + public void open(boolean smooth, boolean notify, DragEdge edge) { + setCurrentDragEdge(edge); + open(smooth, notify); + } + + /** + * smoothly close surface. + */ + public void close() { + close(true, true); + } + + public void close(boolean smooth) { + close(smooth, true); + } + + /** + * close surface + * + * @param smooth smoothly or not. + * @param notify if notify all the listeners. + */ + public void close(boolean smooth, boolean notify) { + View surface = getSurfaceView(); + if (surface == null) { + return; + } + int dx, dy; + if (smooth) + mDragHelper.smoothSlideViewTo(getSurfaceView(), getPaddingLeft(), getPaddingTop()); + else { + Rect rect = computeSurfaceLayoutArea(false); + dx = rect.left - surface.getLeft(); + dy = rect.top - surface.getTop(); + surface.layout(rect.left, rect.top, rect.right, rect.bottom); + if (notify) { + dispatchRevealEvent(rect.left, rect.top, rect.right, rect.bottom); + dispatchSwipeEvent(rect.left, rect.top, dx, dy); + } else { + safeBottomView(); + } + } + invalidate(); + } + + public void toggle() { + toggle(true); + } + + public void toggle(boolean smooth) { + if (getOpenStatus() == Status.Open) + close(smooth); + else if (getOpenStatus() == Status.Close) open(smooth); + } + + + /** + * a helper function to compute the Rect area that surface will hold in. + * + * @param open open status or close status. + */ + private Rect computeSurfaceLayoutArea(boolean open) { + int l = getPaddingLeft(), t = getPaddingTop(); + if (open) { + if (mCurrentDragEdge == DragEdge.Left) + l = getPaddingLeft() + mDragDistance; + else if (mCurrentDragEdge == DragEdge.Right) + l = getPaddingLeft() - mDragDistance; + else if (mCurrentDragEdge == DragEdge.Top) + t = getPaddingTop() + mDragDistance; + else t = getPaddingTop() - mDragDistance; + } + return new Rect(l, t, l + getMeasuredWidth(), t + getMeasuredHeight()); + } + + private Rect computeBottomLayoutAreaViaSurface(ShowMode mode, Rect surfaceArea) { + Rect rect = surfaceArea; + View bottomView = getCurrentBottomView(); + + int bl = rect.left, bt = rect.top, br = rect.right, bb = rect.bottom; + if (mode == PullOut) { + if (mCurrentDragEdge == DragEdge.Left) + bl = rect.left - mDragDistance; + else if (mCurrentDragEdge == DragEdge.Right) + bl = rect.right; + else if (mCurrentDragEdge == DragEdge.Top) + bt = rect.top - mDragDistance; + else bt = rect.bottom; + + if (mCurrentDragEdge == DragEdge.Left || mCurrentDragEdge == DragEdge.Right) { + bb = rect.bottom; + br = bl + (bottomView == null ? 0 : bottomView.getMeasuredWidth()); + } else { + bb = bt + (bottomView == null ? 0 : bottomView.getMeasuredHeight()); + br = rect.right; + } + } else if (mode == LayDown) { + if (mCurrentDragEdge == DragEdge.Left) + br = bl + mDragDistance; + else if (mCurrentDragEdge == DragEdge.Right) + bl = br - mDragDistance; + else if (mCurrentDragEdge == DragEdge.Top) + bb = bt + mDragDistance; + else bt = bb - mDragDistance; + + } + return new Rect(bl, bt, br, bb); + + } + + private Rect computeBottomLayDown(DragEdge dragEdge) { + int bl = getPaddingLeft(), bt = getPaddingTop(); + int br, bb; + if (dragEdge == DragEdge.Right) { + bl = getMeasuredWidth() - mDragDistance; + } else if (dragEdge == DragEdge.Bottom) { + bt = getMeasuredHeight() - mDragDistance; + } + if (dragEdge == DragEdge.Left || dragEdge == DragEdge.Right) { + br = bl + mDragDistance; + bb = bt + getMeasuredHeight(); + } else { + br = bl + getMeasuredWidth(); + bb = bt + mDragDistance; + } + return new Rect(bl, bt, br, bb); + } + + public void setOnDoubleClickListener(DoubleClickListener doubleClickListener) { + mDoubleClickListener = doubleClickListener; + } + + public interface DoubleClickListener { + void onDoubleClick(SwipeLayout layout, boolean surface); + } + + private int dp2px(float dp) { + return (int) (dp * getContext().getResources().getDisplayMetrics().density + 0.5f); + } + + + /** + * Deprecated, use {@link #setDrag(DragEdge, View)} + */ + @Deprecated + public void setDragEdge(DragEdge dragEdge) { + clearDragEdge(); + if (getChildCount() >= 2) { + mDragEdges.put(dragEdge, getChildAt(getChildCount() - 2)); + } + setCurrentDragEdge(dragEdge); + } + + public void onViewRemoved(View child) { + for (Map.Entry entry : new HashMap(mDragEdges).entrySet()) { + if (entry.getValue() == child) { + mDragEdges.remove(entry.getKey()); + } + } + } + + public Map getDragEdgeMap() { + return mDragEdges; + } + + /** + * Deprecated, use {@link #getDragEdgeMap()} + */ + @Deprecated + public List getDragEdges() { + return new ArrayList(mDragEdges.keySet()); + } + + /** + * Deprecated, use {@link #setDrag(DragEdge, View)} + */ + @Deprecated + public void setDragEdges(List dragEdges) { + clearDragEdge(); + for (int i = 0, size = Math.min(dragEdges.size(), getChildCount() - 1); i < size; i++) { + DragEdge dragEdge = dragEdges.get(i); + mDragEdges.put(dragEdge, getChildAt(i)); + } + if (dragEdges.size() == 0 || dragEdges.contains(DefaultDragEdge)) { + setCurrentDragEdge(DefaultDragEdge); + } else { + setCurrentDragEdge(dragEdges.get(0)); + } + } + + /** + * Deprecated, use {@link #addDrag(DragEdge, View)} + */ + @Deprecated + public void setDragEdges(DragEdge... mDragEdges) { + clearDragEdge(); + setDragEdges(Arrays.asList(mDragEdges)); + } + + /** + * Deprecated, use {@link #addDrag(DragEdge, View)} + * When using multiple drag edges it's a good idea to pass the ids of the views that + * you're using for the left, right, top bottom views (-1 if you're not using a particular view) + */ + @Deprecated + public void setBottomViewIds(int leftId, int rightId, int topId, int bottomId) { + addDrag(DragEdge.Left, findViewById(leftId)); + addDrag(DragEdge.Right, findViewById(rightId)); + addDrag(DragEdge.Top, findViewById(topId)); + addDrag(DragEdge.Bottom, findViewById(bottomId)); + } + + private float getCurrentOffset() { + if (mCurrentDragEdge == null) return 0; + return mEdgeSwipesOffset[mCurrentDragEdge.ordinal()]; + } + + private void setCurrentDragEdge(DragEdge dragEdge) { + mCurrentDragEdge = dragEdge; + updateBottomViews(); + } + + private void updateBottomViews() { + View currentBottomView = getCurrentBottomView(); + if (currentBottomView != null) { + if (mCurrentDragEdge == DragEdge.Left || mCurrentDragEdge == DragEdge.Right) { + mDragDistance = currentBottomView.getMeasuredWidth() - dp2px(getCurrentOffset()); + } else { + mDragDistance = currentBottomView.getMeasuredHeight() - dp2px(getCurrentOffset()); + } + } + if (mShowMode == PullOut) { + layoutPullOut(); + } else if (mShowMode == LayDown) { + layoutLayDown(); + } + + safeBottomView(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/swipe/SwipeMode.java b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/swipe/SwipeMode.java new file mode 100644 index 0000000..882bf15 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/scene/treerecyclerview/widget/swipe/SwipeMode.java @@ -0,0 +1,5 @@ +package com.yonsz.z1.fragment.scene.treerecyclerview.widget.swipe; + +public enum SwipeMode { + Single, Multiple +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/fragment/store/StroeFragment.java b/app/src/main/java/com/yonsz/z1/fragment/store/StroeFragment.java new file mode 100644 index 0000000..b9dc7ec --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/fragment/store/StroeFragment.java @@ -0,0 +1,192 @@ +package com.yonsz.z1.fragment.store; + +import android.content.SharedPreferences; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Handler; +import android.support.annotation.Nullable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebChromeClient; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.webkit.WebViewFragment; +import android.widget.EditText; +import android.widget.ListAdapter; + +import com.yonsz.z1.R; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.tcpudp.model.Module; +import com.yonsz.z1.tcpudp.net.UdpBroadcast; +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.tcpudp.utils.Utils; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; + +import java.net.DatagramPacket; +import java.util.ArrayList; +import java.util.List; + +import static android.content.Context.MODE_PRIVATE; +import static android.content.Context.WIFI_SERVICE; + +/** + * Created by Administrator on 2017/11/3. + */ + +public class StroeFragment extends BaseFragment { + private WebView webView; + private EditText mAddressEdt; + private TitleView mTitleView; + private View view; + + //把搜索设备放在这里 + private List mModules; + private ListAdapter mAdapter; + private long lastTime; + private UdpBroadcast udpBroadcast; + private Handler mHandler; + + public static WebViewFragment newInstance() { + WebViewFragment scrollViewFragment = new WebViewFragment(); + return scrollViewFragment; + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(R.layout.fragment_stroe, container, false); + + udpBroadcast = new UdpBroadcast(Constants.UDP_PORT,"") { + + @Override + public void onReceived(List packets) { + Log.i("ApConfigActivity111", "StroeFragment onReceived()"); + mModules = decodePackets(packets); + saveDevices(mModules); + } + }; + WifiManager wifimanager; + wifimanager = (WifiManager) getActivity().getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + udpBroadcast.open(); + } + + initView(view); + return view; + } + + @Override + public void onStart() { + Log.i("NettyManager", "onStart"); + udpBroadcast.send(Utils.getCMDScanModules(getActivity())); + super.onStart(); + } + + @Override + public void onStop() { + // Log.i("NettyManager", "onStop"); + super.onStop(); + // udpBroadcast.close(); + } + + @Override + public void onDestroy() { + Log.i("NettyManager", "onStop"); + super.onDestroy(); + udpBroadcast.close(); + } + + private List decodePackets(List packets) { + + int i = 1; + Module module; + List list = new ArrayList(); + List modules = new ArrayList(); + + DECODE_PACKETS: + for (DatagramPacket packet : packets) { + + String data = new String(packet.getData(), 0, packet.getLength()); + Log.i("NettyManager", i + ": " + data); + if (data.equals(Utils.getCMDScanModules(getActivity()))) { + continue; + } + + for (String item : list) { + if (item.equals(data)) { + continue DECODE_PACKETS; + } + } + + list.add(data); + if ((module = Utils.decodeBroadcast2Module(data)) != null) { + module.setId(i); + modules.add(module); + i++; + } + } + + return modules; + } + + /** + * save modules' data to local + * + * @param modules + */ + private void saveDevices(List modules) { + + SharedPreferences preferences = getContext().getSharedPreferences("module_list", MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + + if (modules.size() > 0) { + int i = 0; + for (Module module : modules) { + editor.putInt(Constants.KEY_PRE_ID + i, module.getId()); + editor.putString(Constants.KEY_PRE_IP + i, module.getIp()); + editor.putString(Constants.KEY_PRE_MAC + i, module.getMac()); + editor.putString(Constants.KEY_PRE_MODULEID + i, module.getModuleID()); + i++; + SharedpreferencesUtil.save(module.getMac(), module.getIp()); + } + + editor.putInt(Constants.KEY_MODULE_COUNT, modules.size()); + editor.commit(); + } else { + // editor.clear().commit(); + } + } + + private void initView(View view) { + mTitleView = (TitleView) view.findViewById(R.id.title_strore); + mTitleView.setHead(R.string.store_page); + mTitleView.setHeadBackGone(); + mTitleView.setHeadFuntionGone(); + mTitleView.showBackGroud(); + + mAddressEdt = (EditText) view.findViewById(R.id.addressEdt); + view.findViewById(R.id.goBtn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + webView.loadUrl(mAddressEdt.getText().toString()); + } + }); + webView = (WebView) view.findViewById(R.id.webView); + webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setDomStorageEnabled(true); + webView.getSettings().setAllowContentAccess(true); + webView.getSettings().setAppCacheEnabled(false); + webView.getSettings().setDisplayZoomControls(true); + webView.setWebChromeClient(new WebChromeClient()); + webView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return true; + } + }); + webView.loadUrl("http://yonsz.youhaovip.com/"); + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/AddLCSafeActivity.java b/app/src/main/java/com/yonsz/z1/gateway/AddLCSafeActivity.java new file mode 100644 index 0000000..ea3b4db --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/AddLCSafeActivity.java @@ -0,0 +1,284 @@ +package com.yonsz.z1.gateway; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.lechange.demo.manager.DeviceAddActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.SAFETY_ACOUSTO_OPTIC; +import static com.yonsz.z1.net.Constans.SAFETY_DISPLACEMENT; +import static com.yonsz.z1.net.Constans.SAFETY_WIRELESS_REMOTE; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.Constans.localAddFloorId; +import static com.yonsz.z1.net.NetWorkUrl.BIND_DEVICE; + +/** + * Created by Administrator on 2019/2/26. + */ + +public class AddLCSafeActivity extends BaseActivity { + private TitleView mTitleView; + private Button startConfig; + private CheckBox selectUnnorReveal,selectUnnorReveal1; + private TextView apSmartTv; + private TextView tv_ap_smart_declare; + private String deviceType; + private String deviceModel; + private String deviceSN; + private String deviceCode; + private String parentThirdDeviceId; + private ImageView lcSafePic; + private LinearLayout ll_not_lock, ll_lock, ll_lock_declare, ll_not_lock_declare; + private TextView tv_light; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_lecheng_safe); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + private void initView() { + deviceSN = getIntent().getExtras().get("deviceSN").toString(); + parentThirdDeviceId = getIntent().getExtras().get("parentThirdDeviceId").toString(); + deviceCode = getIntent().getExtras().get("deviceCode").toString(); + deviceType = getIntent().getExtras().get("deviceType").toString(); + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + ll_not_lock = (LinearLayout) findViewById(R.id.ll_not_lock); + ll_lock = (LinearLayout) findViewById(R.id.ll_lock); + ll_lock_declare = (LinearLayout) findViewById(R.id.ll_lock_declare); + ll_not_lock_declare = (LinearLayout) findViewById(R.id.ll_not_lock_declare); + tv_light = (TextView) findViewById(R.id.tv_light); + lcSafePic = (ImageView) findViewById(R.id.pic_one); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + selectUnnorReveal1 = (CheckBox) findViewById(R.id.iv_select_unnor_reveal1); + mTitleView = (TitleView) findViewById(R.id.title_wifi_stepone); + mTitleView.setHead(R.string.add_device); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + startConfig = (Button) findViewById(R.id.bt_start_config); + startConfig.setOnClickListener(this); + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + startConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + bindDevice(); + } + }); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + selectUnnorReveal.setOnClickListener(this); + selectUnnorReveal1.setOnClickListener(this); + apSmartTv = (TextView) findViewById(R.id.tv_ap_smart_top); + tv_ap_smart_declare = (TextView) findViewById(R.id.tv_ap_smart_declare); + + switch (deviceType) { + case DOOR_LOCK_TAG: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_magnetism_dh)); + break; + case INFRARED_TAG: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_infrared_dh)); + break; + case SMOKE_TAG: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_smoke_dh)); + break; + case GATE_WAY: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_gateway_dh)); + break; + case WATER_TAG: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_water_dh)); + break; + case INTELLIGENT_DOOR_LOCK: + ll_not_lock.setVisibility(View.GONE); + tv_light.setVisibility(View.GONE); + ll_lock.setVisibility(View.VISIBLE); + ll_lock_declare.setVisibility(View.VISIBLE); + ll_not_lock_declare.setVisibility(View.GONE); + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_lock_dh)); + break; + case WIRELESS_EMERGENCY_BUTTON: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_panic_button_dh)); + break; + case INFRARED_CURTAIN_DETECTOR: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_curtain_dh)); + break; + case SAFETY_DISPLACEMENT: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_shift_dh)); + break; + case SAFETY_ACOUSTO_OPTIC: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_acousto_optic_dh)); + break; + case SAFETY_WIRELESS_REMOTE: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_remote_control_dh)); + break; + default: + break; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + startConfig.setClickable(true); + startConfig.setEnabled(true); + } else { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + } + break; + case R.id.iv_select_unnor_reveal1: + if (selectUnnorReveal1.isChecked()) { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + startConfig.setClickable(true); + startConfig.setEnabled(true); + } else { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case SEND_ADDVOICE_CONTROL_SUCCESS: + intent = new Intent(AddLCSafeActivity.this, LCSafeMatchActivity.class); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("deviceCode", deviceCode); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("parentThirdDeviceId", parentThirdDeviceId); + startActivity(intent); + finish(); + break; + case SEND_ADDVOICE_CONTROL_FAIL: + ToastUtil.show(this, (String) msg.obj); + /*intent = new Intent(AddLCSafeActivity.this, LCSafeMatchActivity.class); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("deviceCode", deviceCode); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("parentThirdDeviceId", parentThirdDeviceId); + startActivity(intent); + finish();*/ + break; + } + } + + + private void bindDevice() { + //调后台接口 + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceSN); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("code", deviceCode); + map.put("addressId", localAddAddressId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("onlySendAdd", "true"); + map.put("parentThirdDeviceId", parentThirdDeviceId); + if (!TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + if (null != getIntent().getExtras().get("floor")) { + map.put("floor", getIntent().getExtras().get("floor").toString()); + } else if (!TextUtils.isEmpty(localAddFloorId)) { + map.put("floor", localAddFloorId); + } else if (!TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + map.put("floor", SharedpreferencesUtil.get(homeListEntity.getData().get(deviceNumListPosition).getId(), "")); + } + } + netWorkUtil.requestPostByAsynewApi(BIND_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("bindDevice", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_ADDVOICE_CONTROL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEND_ADDVOICE_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_ADDVOICE_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/AddLCSafeCompleteActivity.java b/app/src/main/java/com/yonsz/z1/gateway/AddLCSafeCompleteActivity.java new file mode 100644 index 0000000..6cfd110 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/AddLCSafeCompleteActivity.java @@ -0,0 +1,508 @@ +package com.yonsz.z1.gateway; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNextDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ChooseA1AddDeviceActivity; +import com.yonsz.z1.view.TitleView; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.KUQI_PANEL; +import static com.yonsz.z1.net.Constans.SAFETY_ACOUSTO_OPTIC; +import static com.yonsz.z1.net.Constans.SAFETY_DISPLACEMENT; +import static com.yonsz.z1.net.Constans.SAFETY_WIRELESS_REMOTE; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; + +/** + * Created by Administrator on 2019/2/27. + */ + + +public class AddLCSafeCompleteActivity extends BaseActivity implements CompoundButton.OnCheckedChangeListener { + private TitleView mTitleView; + private Button nextConfig; + + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String deviceAddress = "1"; + private List condition = new ArrayList<>(); + private String addressId; + private TextView deviceName, deviceName1, tv_complete; + private ImageView cleanIv; + private ImageView deviceIcon; + private String deviceType; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_lc_success); + initView(); + initListener(); + } + + private void initView() { + deviceType = getIntent().getExtras().get("deviceType").toString(); + addressId = deviceAddress; + cleanIv = (ImageView) findViewById(R.id.iv_clean); + cleanIv.setOnClickListener(this); + deviceName = (TextView) findViewById(R.id.tv_device_name); + deviceName1 = (TextView) findViewById(R.id.tv_device_name1); + tv_complete = (TextView) findViewById(R.id.tv_complete); + deviceIcon = (ImageView) findViewById(R.id.iv_device_icon); + nextConfig = (Button) findViewById(R.id.bt_sure_config); + nextConfig.setOnClickListener(this); + mTitleView = (TitleView) findViewById(R.id.title_switcher_two); + mTitleView.setHead(R.string.add_device); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(this); + } + + switch (deviceAddress) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + + switch (deviceType) { + case DOOR_LOCK_TAG: + deviceName.setText("门磁感应器"); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete_magnetism_dh)); + break; + case INFRARED_TAG: + deviceName.setText("无线红外探测器"); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete_infrared_dh)); + break; + case SMOKE_TAG: + deviceName.setText("无线烟感探测器"); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete_smoke_dh)); + break; + case GATE_WAY: + deviceName.setText("智能报警网关"); + if (null != getIntent().getExtras().get("deviceModel") && getIntent().getExtras().get("deviceModel").toString().equals("1")) { + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete_gateway_g2)); + } else { + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete_gateway_dh)); + } + break; + case WATER_TAG: + deviceName.setText("无线水浸探测器"); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete_water_dh)); + break; + case INTELLIGENT_DOOR_LOCK: + deviceName.setText("智能门锁"); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete_lock_dh)); + break; + case WIRELESS_EMERGENCY_BUTTON: + deviceName.setText("无线紧急按钮"); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete_panic_button_dh)); + break; + case INFRARED_CURTAIN_DETECTOR: + deviceName.setText("幕帘式红外探测器"); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete_curtain_dh)); + break; + case SAFETY_DISPLACEMENT: + deviceName.setText("位移探测器"); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete__shift_dh)); + break; + case SAFETY_ACOUSTO_OPTIC: + deviceName.setText("声光报警器"); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete_acousto_optic_dh)); + break; + case SAFETY_WIRELESS_REMOTE: + deviceName.setText("无线遥控器"); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_complete_remote_control_dh)); + break; + case SWITCH_TAG: + deviceName.setText(""); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_wifi_socket_complete)); + break; + case "000": + tv_complete.setVisibility(View.GONE); + deviceName.setVisibility(View.GONE); + deviceName1.setVisibility(View.VISIBLE); + deviceName1.setText(getIntent().getExtras().get("deviceSN").toString()); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_binding)); + break; + case KUQI_PANEL: + deviceName.setText("智能触控屏"); + deviceIcon.setImageDrawable(getResources().getDrawable(R.drawable.icon_complete_touch_panel)); + break; + default: + break; + } + } + + private void modifyDevice(String addressId) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (addressId.equals("13")) { + map.put("addressId", "0"); + } else { + map.put("addressId", String.valueOf(Integer.valueOf(addressId) + 1)); + } + map.put("deviceId", getIntent().getExtras().get("deviceSN").toString()); + map.put("houseId", getIntent().getExtras().get("houseId").toString()); + map.put("deviceName", deviceName.getText().toString().trim()); + util.requestPostByAsynewApi(NetWorkUrl.MODIFY_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateBlindEntityName", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + private void initListener() { + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + if (deviceType.equals(SWITCH_TAG)) { + getAideviceList(SWITCH_TAG); + } else { + finish(); + } + break; + case R.id.iv_clean: + deviceName.setText(""); + break; + } + } + + private void getAideviceList(String deviceTypeCode) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("standardCodes", "A1-L,A2-L,D1-L,B1-L,B3-L"); + map.put("deviceType", deviceTypeCode); + util.requestGetByAsy(NetWorkUrl.DEIVCE_AIDEVICE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getAideviceList", respone); + DeviceSimpleEntity entity = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = entity; + msg.arg1 = 0; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USERDEVICES4_SIMPLEINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_BLINDENTITY_NAME_SUCCESS: + Toast.makeText(AddLCSafeCompleteActivity.this, "添加成功", Toast.LENGTH_SHORT).show(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 2000); + break; + case UPDATE_BLINDENTITY_NAME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + DeviceSimpleEntity simpleEntity = (DeviceSimpleEntity) msg.obj; + if (simpleEntity.getData().size() != 0) { + ConfirmNextDialog dialog2 = new ConfirmNextDialog(AddLCSafeCompleteActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + finish(); + break; + case 1: + Intent intent = new Intent(AddLCSafeCompleteActivity.this, ChooseA1AddDeviceActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("dataBeanList", (Serializable) simpleEntity.getData()); + intent.putExtras(bundle); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("deviceModel", "4"); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + startActivity(intent); + // finish(); + break; + } + } + }); + dialog2.setTopTxt("是否绑定语音管家"); + dialog2.setContent("绑定语音管家后能够通过语音管家,语音触发情景模式一起执行"); + dialog2.setCancelable(false); + dialog2.show(); + } else { + finish(); + } + break; + } + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + switch (id) { + case R.id.cb_position0: + if (isChecked) + addressId = "0"; + break; + case R.id.cb_position1: + if (isChecked) + addressId = "1"; + break; + case R.id.cb_position2: + if (isChecked) + addressId = "2"; + break; + case R.id.cb_position3: + if (isChecked) + addressId = "3"; + break; + case R.id.cb_position4: + if (isChecked) + addressId = "4"; + break; + case R.id.cb_position5: + if (isChecked) + addressId = "5"; + break; + case R.id.cb_position6: + if (isChecked) + addressId = "6"; + break; + case R.id.cb_position7: + if (isChecked) + addressId = "7"; + break; + case R.id.cb_position8: + if (isChecked) + addressId = "8"; + break; + case R.id.cb_position9: + if (isChecked) + addressId = "9"; + break; + case R.id.cb_position10: + if (isChecked) + addressId = "10"; + break; + case R.id.cb_position11: + if (isChecked) + addressId = "11"; + break; + case R.id.cb_position12: + if (isChecked) + addressId = "12"; + break; + case R.id.cb_position13: + if (isChecked) + addressId = "13"; + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/GatewayDetailActivity.java b/app/src/main/java/com/yonsz/z1/gateway/GatewayDetailActivity.java new file mode 100644 index 0000000..ef576ce --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/GatewayDetailActivity.java @@ -0,0 +1,332 @@ +package com.yonsz.z1.gateway; + +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.floor.ChooseRoomInFloorActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.GET_LC_DEVICE_INFO; +import static com.yonsz.z1.net.NetWorkUrl.UNBIND_DEVICE; + + +public class GatewayDetailActivity extends BaseActivity { + private TitleView mTitleView; + private TextView deleteDevice; + private TextView tv_wifi_name, tv_device_name, tv_device_version, tv_device_model, tv_device_number, tv_device_address, iv_user_modifyPw_mac; + private String deviceName, deviceModel, deviceType, deviceId, addressId; + private RelativeLayout rl_device_detail_top; + private ImageView iv_last_pic; + + public void onEventMainThread(ChooseHomeEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("1") || msg.equals("3") || msg.equals("2") || msg.equals("5")) { + + } else { + tv_device_name.setText(msg); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_gateway_detail); + initView(); + initListener(); + } + + private void initView() { + deviceName = getIntent().getExtras().get("deviceName").toString(); + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + deviceType = getIntent().getExtras().get("deviceType").toString(); + deviceId = getIntent().getExtras().get("deviceId").toString(); + addressId = getIntent().getExtras().get("addressId").toString(); + rl_device_detail_top = (RelativeLayout) findViewById(R.id.rl_device_detail_top); + iv_user_modifyPw_mac = (TextView) findViewById(R.id.iv_user_modifyPw_mac); + tv_device_name = (TextView) findViewById(R.id.tv_device_name); + tv_device_version = (TextView) findViewById(R.id.tv_device_version); + tv_device_model = (TextView) findViewById(R.id.tv_device_model); + tv_device_number = (TextView) findViewById(R.id.tv_device_number); + tv_wifi_name = (TextView) findViewById(R.id.tv_wifi_name); + deleteDevice = (TextView) findViewById(R.id.tv_delete_device); + tv_device_address = (TextView) findViewById(R.id.tv_device_address); + iv_last_pic = (ImageView) findViewById(R.id.iv_last_pic); + mTitleView = (TitleView) findViewById(R.id.title_device_detail); + mTitleView.setHead("设备详情"); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + tv_device_name.setText(deviceName); + tv_device_address.setText(AddressNameUtil.getAddressName(addressId)); + + getDeviceInfo(); + } + + private void initListener() { + deleteDevice.setOnClickListener(this); + tv_device_address.setOnClickListener(this); + iv_user_modifyPw_mac.setOnClickListener(this); + rl_device_detail_top.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_delete_device: + ConfirmDialog dialog = new ConfirmDialog(this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + unBindDevice(); + break; + } + } + }); + dialog.setContent("是否删除网关?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.tv_device_address: + Intent intent2; + if (!TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + intent2 = new Intent(this, ChooseRoomInFloorActivity.class); + intent2.putExtra("floorList", homeListEntity.getData().get(deviceNumListPosition).getFloorList()); + intent2.putExtra("houseTypeName", "房间选择"); + intent2.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent2.putExtra("ziId", ""); + intent2.putExtra("deviceType", "101"); + intent2.putExtra("deviceModel", deviceModel); + intent2.putExtra("addressId", addressId); + intent2.putExtra("deviceId", deviceId); + startActivityForResult(intent2, MODIFY_DEVICE_NAME); + } else { + intent2 = new Intent(GatewayDetailActivity.this, ModifyRoomActivity.class); + intent2.putExtra("ziId", ""); + intent2.putExtra("deviceType", deviceType); + intent2.putExtra("deviceModel", deviceModel); + intent2.putExtra("addressId", addressId); + intent2.putExtra("deviceId", deviceId); + startActivityForResult(intent2, MODIFY_DEVICE_NAME); + } + break; + case R.id.iv_user_modifyPw_mac: + ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setText(tv_device_number.getText()); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可 + cmb.getText();//获取粘贴信息 + Toast.makeText(GatewayDetailActivity.this, "复制成功!", Toast.LENGTH_SHORT).show(); + break; + case R.id.rl_device_detail_top: + RenameNameDialog dialog1 = new RenameNameDialog(GatewayDetailActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + modifyDevice(positioName); + break; + } + } + }); + dialog1.setHintName(deviceName); + dialog1.setContent("修改设备名称"); + dialog1.setMaxEms(10); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.save); + dialog1.setCancelable(false); + dialog1.show(); + break; + } + } + + private void unBindDevice() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + netWorkUtil.requestPostByAsynewApi(UNBIND_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("unBindDevice", "onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + finish(); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FIND_DEVICES_SUCCESS: + BaseVersion5Entity obj = (BaseVersion5Entity) msg.obj; + tv_wifi_name.setText(obj.getData().getWifiName()); + tv_device_version.setText(obj.getData().getVersion()); + tv_device_number.setText(obj.getData().getDeviceId()); + tv_device_model.setText(obj.getData().getThirdDeviceModel()); + if (obj.getData().getThirdDeviceModel().contains("G1")) { + iv_last_pic.setImageResource(R.drawable.icon_gateway_dh); + } + break; + case CHECK_USER_BIND_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + String obj1 = (String) msg.obj; + deviceName = obj1; + tv_device_name.setText(deviceName); + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + String addressId = data.getExtras().get("addressId").toString(); + tv_device_address.setText(AddressNameUtil.getAddressName(addressId)); + // addressId = data.getExtras().get("addressId").toString(); + } + break; + } + } + + private synchronized void getDeviceInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("deviceId", deviceId); + netWorkUtil.requestGetByAsy(GET_LC_DEVICE_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getDeviceInfo", "onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void modifyDevice(final String deviceName) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("deviceName", deviceName); + util.requestPostByAsynewApi(NetWorkUrl.MODIFY_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateBlindEntityName", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = deviceName; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/GatewayTypeActivity.java b/app/src/main/java/com/yonsz/z1/gateway/GatewayTypeActivity.java new file mode 100644 index 0000000..93c7729 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/GatewayTypeActivity.java @@ -0,0 +1,145 @@ +package com.yonsz.z1.gateway; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.floor.ChooseRoomInFloorActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.version5.ChooseRoomActivity; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.GATE_WAY; + +/** + * Created by Administrator on 2018/7/9. + */ + +public class GatewayTypeActivity extends BaseActivity { + private TitleView mTitleView; + private CheckBox cb_position0, cb_position1, cb_position2; + private Button nextConfig; + private String addNum; + private ImageView panelOneIv, panelTwoIv, panelThreeIv; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_gateway_type); + initView(); + initListener(); + } + + private void initListener() { + cb_position0.setOnClickListener(this); + cb_position1.setOnClickListener(this); + cb_position2.setOnClickListener(this); + } + + private void initView() { + cb_position0 = (CheckBox) findViewById(R.id.cb_position0); + cb_position1 = (CheckBox) findViewById(R.id.cb_position1); + cb_position2 = (CheckBox) findViewById(R.id.cb_position2); + panelOneIv = (ImageView) findViewById(R.id.iv_panel_one); + panelTwoIv = (ImageView) findViewById(R.id.iv_panel_two); + panelThreeIv = (ImageView) findViewById(R.id.iv_panel_three); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + Intent intent; + if (null != getIntent().getExtras().get("floorList") && !TextUtils.isEmpty(getIntent().getExtras().get("floorList").toString())) { + intent = new Intent(GatewayTypeActivity.this, ChooseRoomInFloorActivity.class); + intent.putExtra("floorList", getIntent().getExtras().get("floorList").toString()); + } else { + intent = new Intent(GatewayTypeActivity.this, ChooseRoomActivity.class); + } + intent.putExtra("houseTypeName", "房间选择"); + intent.putExtra("deviceType", GATE_WAY); + intent.putExtra("deviceModel", addNum); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + startActivity(intent); + } + }); + mTitleView = (TitleView) findViewById(R.id.title_light_one); + mTitleView.setHead("选择网关类型"); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_position0: + addNum = "1"; + cb_position0.setChecked(true); + cb_position1.setChecked(false); + cb_position2.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + case R.id.cb_position1: + addNum = "2"; + cb_position1.setChecked(true); + cb_position0.setChecked(false); + cb_position2.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + case R.id.cb_position2: + addNum = "1"; + cb_position1.setChecked(false); + cb_position0.setChecked(false); + cb_position2.setChecked(true); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/HandAddLcActivity.java b/app/src/main/java/com/yonsz/z1/gateway/HandAddLcActivity.java new file mode 100644 index 0000000..5a9f54a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/HandAddLcActivity.java @@ -0,0 +1,467 @@ +package com.yonsz.z1.gateway; + +import android.content.Intent; +import android.graphics.Color; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.lechange.demo.business.Business; +import com.lechange.opensdk.api.bean.CheckDeviceBindOrNot; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity4.CheckBindEntity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.device.deviceadd.ConnectWifiActivity; +import com.yonsz.z1.device.deviceadd.NoWifiConnectActicity; +import com.yonsz.z1.devicea2.safedevice.SafeDevicePositionActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.EncodingConversionTools; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.CAMERA_ISADD_FAIL; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.SAFE_DEVICE_TAG; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.net.NetWorkUrl.CAMERA_ISADD; + +public class HandAddLcActivity extends BaseActivity { + private TitleView mTitleView; + private String ziId; + private String deviceAddress; + private EditText editText, editTextCode; + private String deviceModel = "", deviceType = ""; + private Button bt_start_config; + private LinearLayout ll_code; + private TextView tv_123456; + private TextView number;//显示还剩多少字 + private int numbers = 26;//默认30 + private String textcontent = "";//保存输入30个字符 + //输入框变化 + private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + int i = s.length(); + if (i > 26) { + ToastUtil.show(getApplicationContext(), "超出限制"); + } + + if (i <= 26) { + number.setText(numbers - i + ""); + textcontent = s.toString(); + } else { + editText.setText(textcontent); + editText.setSelection(textcontent.length()); + } + /*if (i != 0) { + *//* if (getIntent().getStringExtra("content").toString().equals(editText.getText().toString().trim())) { + mTitle.setHeadFuntionTxtColor(false); + } else { + }*//* + mTitleView.setHeadFuntionTxtColor(true); + } else { + mTitleView.setHeadFuntionTxtColor(false); + }*/ + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable arg0) { + + } + }; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_hand_add_lc); + initView(); + initData(); + } + + private void initView() { + if (null != getIntent().getExtras().get("deviceModel")) { + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + } + if (null != getIntent().getExtras().get("deviceType")) { + deviceType = getIntent().getExtras().get("deviceType").toString(); + } + number = (TextView) findViewById(R.id.number); + ziId = (String) getIntent().getExtras().get("ziId"); + deviceAddress = (String) getIntent().getExtras().get("deviceAddress"); + ll_code = (LinearLayout) findViewById(R.id.ll_code); + tv_123456 = (TextView) findViewById(R.id.tv_123456); + editText = (EditText) findViewById(R.id.editText); + editTextCode = (EditText) findViewById(R.id.editText_safe_code); + bt_start_config = (Button) findViewById(R.id.bt_start_config); + mTitleView = (TitleView) findViewById(R.id.title_nickname); + mTitleView.setHead("手动输入添加"); + /*mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionTxtColor(false);*/ + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (null != editText.getText().toString().trim() && editText.getText().toString().trim().length() == 26 + && editText.getText().toString().trim().substring(0, 2).equals("01")) { + String editString = editText.getText().toString().trim(); + String makeChecksum = EncodingConversionTools.makeChecksum(editString.substring(0, editString.length() - 4)); + if (makeChecksum.toUpperCase().equals(editString.substring(editString.length() - 4, editString.length()).toUpperCase())) { +// repCheck(editString.toUpperCase()); + Intent intent = new Intent(HandAddLcActivity.this, SafeDevicePositionActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("addType", "0"); + intent.putExtra("rawCode", editText.getText().toString()); + startActivity(intent); + finish(); + } else { + ToastUtil.show(HandAddLcActivity.this, R.string.Enter_correct_code); + } + } else if (null != editText.getText().toString().trim() && editText.getText().toString().trim().length() == 15) { + // checkOnBindandremind(editText.getText().toString().trim()); + cameraIscCanAdd(editText.getText().toString().trim(), editTextCode.getText().toString().trim()); + } else { + ToastUtil.show(HandAddLcActivity.this, "请输入正确的序列号"); + } + } + + @Override + public void onFunctionText() { + + } + }); + + bt_start_config.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (null != editTextCode.getText().toString().trim() && editTextCode.getText().toString().trim().length() != 6 && ll_code.getVisibility() == View.VISIBLE) { + ToastUtil.show(HandAddLcActivity.this, "请输入正确的安全码"); + return; + } else if (null != editText.getText().toString().trim() && editText.getText().toString().trim().length() == 26 + && editText.getText().toString().trim().substring(0, 2).equals("01")) { + String editString = editText.getText().toString().trim(); + String makeChecksum = EncodingConversionTools.makeChecksum(editString.substring(0, editString.length() - 4)); + if (makeChecksum.toUpperCase().equals(editString.substring(editString.length() - 4, editString.length()).toUpperCase())) { +// repCheck(editString.toUpperCase()); + Intent intent = new Intent(HandAddLcActivity.this, SafeDevicePositionActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("addType", "0"); + intent.putExtra("rawCode", editText.getText().toString()); + startActivity(intent); + finish(); + } else { + ToastUtil.show(HandAddLcActivity.this, R.string.Enter_correct_code); + } + } else if (null != editText.getText().toString().trim() && editText.getText().toString().trim().length() == 15) { + // checkOnBindandremind(editText.getText().toString().trim()); + cameraIscCanAdd(editText.getText().toString().trim(), editTextCode.getText().toString().trim()); + } else { + ToastUtil.show(HandAddLcActivity.this, "请输入正确的序列号"); + } + } + }); + + + switch (deviceType) { + case SAFE_DEVICE_TAG: + case DOOR_LOCK_TAG: + case INFRARED_TAG: + case SMOKE_TAG: + case GAS_TAG: + case WATER_TAG: + if (deviceModel.equals("0")) { + ll_code.setVisibility(View.GONE); + tv_123456.setVisibility(View.GONE); + } + break; + } + } + + private void cameraIscCanAdd(final String deviceSN, final String deviceCode) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (null != SharedpreferencesUtil.get(Constans.HOUSEID, "")) { + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + } else { + return; + } + map.put("deviceId", deviceSN); + if (null != getIntent().getExtras().get("deviceModel")) { + map.put("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + map.put("deviceType", getIntent().getExtras().get("deviceType").toString()); + netWorkUtil.requestGetByAsy(CAMERA_ISADD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cameraIscCanAdd", "onSuccess()" + respone); + CheckBindEntity obj = JSON.parseObject(respone, CheckBindEntity.class); + if (1 == obj.getFlag()) { + WifiManager wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + if (getIntent().getExtras().get("from").toString().equals(GATE_WAY)) { + + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(HandAddLcActivity.this, ConnectWifiActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", GATE_WAY); + intent.putExtra("deviceSN", deviceSN); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceCode", editTextCode.getText().toString().trim()); + startActivity(intent); + } else { + Intent intent = new Intent(HandAddLcActivity.this, NoWifiConnectActicity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("from", GATE_WAY); + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceCode", editTextCode.getText().toString().trim()); + startActivity(intent); + } + } else { + switch (getIntent().getExtras().get("deviceType").toString()) { + case SAFE_DEVICE_TAG: + case DOOR_LOCK_TAG: + case INFRARED_TAG: + case SMOKE_TAG: + case GAS_TAG: + case WATER_TAG: + case INTELLIGENT_DOOR_LOCK: + case WIRELESS_EMERGENCY_BUTTON: + case INFRARED_CURTAIN_DETECTOR: + Intent intent1 = new Intent(HandAddLcActivity.this, AddLCSafeActivity.class); + intent1.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent1.putExtra("from", "HandAddLcActivity"); + intent1.putExtra("deviceSN", deviceSN); + intent1.putExtra("deviceCode", deviceCode); + intent1.putExtra("deviceType", deviceType); + intent1.putExtra("deviceModel", deviceModel); + if (null != getIntent().getExtras().get("parentThirdDeviceId")) { + intent1.putExtra("parentThirdDeviceId", getIntent().getExtras().get("parentThirdDeviceId").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent1.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + startActivity(intent1); + break; + default: + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(HandAddLcActivity.this, ConnectWifiActivity.class); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("deviceCode", editTextCode.getText().toString().trim()); + intent.putExtra("from", "HandAddCodeActivity"); + startActivity(intent); + } else { + Intent intent = new Intent(HandAddLcActivity.this, NoWifiConnectActicity.class); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("from", "HandAddCodeActivity"); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("deviceCode", editTextCode.getText().toString().trim()); + startActivity(intent); + } + break; + } + } + } else { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(CAMERA_ISADD_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /** + * 无线配对校验 + */ + public void checkOnBindandremind(final String deviceSN) { + Business.getInstance().checkBindOrNot(deviceSN, + new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + Business.RetObject retObject = (Business.RetObject) msg.obj; + if (msg.what == 0) { + CheckDeviceBindOrNot.Response resp = (CheckDeviceBindOrNot.Response) retObject.resp; + if (!resp.data.isBind) { + WifiManager wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + if (getIntent().getExtras().get("from").toString().equals(GATE_WAY)) { + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(HandAddLcActivity.this, ConnectWifiActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", GATE_WAY); + intent.putExtra("deviceSN", deviceSN); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceCode", editTextCode.getText().toString().trim()); + startActivity(intent); + } else { + Intent intent = new Intent(HandAddLcActivity.this, NoWifiConnectActicity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("from", GATE_WAY); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceCode", editTextCode.getText().toString().trim()); + startActivity(intent); + } + } else { + if (wifimanager.isWifiEnabled()) { + Intent intent = new Intent(HandAddLcActivity.this, ConnectWifiActivity.class); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("deviceCode", editTextCode.getText().toString().trim()); + intent.putExtra("from", "HandAddCodeActivity"); + startActivity(intent); + } else { + Intent intent = new Intent(HandAddLcActivity.this, NoWifiConnectActicity.class); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + intent.putExtra("from", "HandAddCodeActivity"); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("deviceCode", editTextCode.getText().toString().trim()); + startActivity(intent); + } + } + } else if (resp.data.isBind && resp.data.isMine) + Toast.makeText(HandAddLcActivity.this, getString(R.string.toast_adddevice_already_binded_by_self), Toast.LENGTH_SHORT).show(); + else + Toast.makeText(HandAddLcActivity.this, getString(R.string.toast_adddevice_already_binded_by_others), Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(HandAddLcActivity.this, retObject.mMsg, Toast.LENGTH_SHORT).show(); + } + } + }); + } + + private void repCheck(String rawCode) { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("rawCode", rawCode); + netWorkUtil.requestPostByAsynew(NetWorkUrl.REP_CHECK, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("repCheck", "ShareDeviceActivity onSuccess()" + respone); + SafeVoiceEntity obj = JSON.parseObject(respone, SafeVoiceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_ADDVOICE_CONTROL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEND_ADDVOICE_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_ADDVOICE_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void initData() { + numbers = 26; + editText.addTextChangedListener(textWatcher); + number.setVisibility(View.VISIBLE); + number.setText(26 + ""); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SEND_ADDVOICE_CONTROL_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case SEND_ADDVOICE_CONTROL_SUCCESS: + Intent intent = new Intent(HandAddLcActivity.this, SafeDevicePositionActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("addType", "0"); + intent.putExtra("rawCode", editText.getText().toString()); + startActivity(intent); + finish(); + break; + case CAMERA_ISADD_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/KuQiPanelFragment.java b/app/src/main/java/com/yonsz/z1/gateway/KuQiPanelFragment.java new file mode 100644 index 0000000..986d7bf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/KuQiPanelFragment.java @@ -0,0 +1,414 @@ +package com.yonsz.z1.gateway; + +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.createfamily.floor.ChooseRoomInFloorActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.fragment.SafeDeviceFragment; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.version5.SyncEquipmentActivity; +import com.yonsz.z1.view.TitleView; + +import java.lang.ref.WeakReference; +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.DELLIGHT_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.DELLIGHT_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.GET_LC_DEVICE_INFO; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_GETDETAIL; +import static com.yonsz.z1.net.NetWorkUrl.UNBIND_DEVICE; + + +public class KuQiPanelFragment extends BaseFragment implements View.OnClickListener { + private View fragView; + private UIHandle mHandler; + private DeviceEntityV4.DataBean.DevicesBean devicesBean; + + private TitleView mTitleView; + private TextView deleteDevice; + private TextView tv_wifi_name, tv_device_name, tv_device_version, tv_device_model, tv_device_number, tv_device_address, iv_user_modifyPw_mac; + private String deviceName, deviceModel, deviceType, deviceId, addressId; + private RelativeLayout rl_device_detail_top, rl_device_synchro; + private ImageView iv_last_pic; + + public void onEventMainThread(ChooseHomeEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("1") || msg.equals("3") || msg.equals("2") || msg.equals("5")) { + + } else { + tv_device_name.setText(msg); + } + } + + public static KuQiPanelFragment getInstance(DeviceEntityV4.DataBean.DevicesBean devicesBean) { + KuQiPanelFragment fragment = new KuQiPanelFragment(); + fragment.devicesBean = devicesBean; + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.activity_kuqi_detail, null); + initView(fragView); + initListener(); + return fragView; + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + + private void initView(View fragView) { + deviceName = devicesBean.getDeviceName(); + deviceModel = devicesBean.getDeviceModel(); + deviceType = devicesBean.getDeviceType(); + deviceId = devicesBean.getId(); + addressId = devicesBean.getAddressId(); + rl_device_detail_top = (RelativeLayout) fragView.findViewById(R.id.rl_device_detail_top); + rl_device_synchro = (RelativeLayout) fragView.findViewById(R.id.rl_device_synchro); + iv_user_modifyPw_mac = (TextView) fragView.findViewById(R.id.iv_user_modifyPw_mac); + tv_device_name = (TextView) fragView.findViewById(R.id.tv_device_name); + tv_device_version = (TextView) fragView.findViewById(R.id.tv_device_version); + tv_device_model = (TextView) fragView.findViewById(R.id.tv_device_model); + tv_device_number = (TextView) fragView.findViewById(R.id.tv_device_number); + tv_wifi_name = (TextView) fragView.findViewById(R.id.tv_wifi_name); + deleteDevice = (TextView) fragView.findViewById(R.id.tv_delete_device); + tv_device_address = (TextView) fragView.findViewById(R.id.tv_device_address); + iv_last_pic = (ImageView) fragView.findViewById(R.id.iv_last_pic); + mTitleView = (TitleView) fragView.findViewById(R.id.title_device_detail); + mTitleView.setHead("设备详情"); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + getActivity().finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + tv_device_name.setText(deviceName); + tv_device_address.setText(AddressNameUtil.getAddressName(addressId)); + + subsetGetDetail(); + } + + private void initListener() { + deleteDevice.setOnClickListener(this); + tv_device_address.setOnClickListener(this); + iv_user_modifyPw_mac.setOnClickListener(this); + rl_device_detail_top.setOnClickListener(this); + rl_device_synchro.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_delete_device: + ConfirmDialog dialog = new ConfirmDialog(getContext(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + subsetDelete(); + break; + } + } + }); + dialog.setContent("是否删除设备?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.tv_device_address: + Intent intent2; + intent2 = new Intent(getContext(), ModifyRoomActivity.class); + intent2.putExtra("ziId", ""); + intent2.putExtra("deviceType", deviceType); + intent2.putExtra("deviceModel", deviceModel); + intent2.putExtra("addressId", addressId); + intent2.putExtra("deviceId", deviceId); + startActivityForResult(intent2, MODIFY_DEVICE_NAME); + break; + case R.id.rl_device_detail_top: + RenameNameDialog dialog1 = new RenameNameDialog(getContext(), new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + subsetModify(positioName); + break; + } + } + }); + dialog1.setHintName(deviceName); + dialog1.setContent("修改设备名称"); + dialog1.setMaxEms(10); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.save); + dialog1.setCancelable(false); + dialog1.show(); + break; + case R.id.rl_device_synchro: + Intent intent = new Intent(getContext(), SyncEquipmentActivity.class); + intent.putExtra("subtype", devicesBean.getSubType()); + intent.putExtra("deviceId", deviceId); + intent.putExtra("deviceAddress", addressId); + intent.putExtra("deviceModel", devicesBean.getDeviceModel()); + intent.putExtra("ziId", ""); + intent.putExtra("deviceName", devicesBean.getDeviceName()); + intent.putExtra("deviceType", deviceType); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + break; + } + } + + private void subsetDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); +// map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELLIGHT_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FIND_DEVICES_SUCCESS: + BaseVersion5Entity obj = (BaseVersion5Entity) msg.obj; + tv_wifi_name.setText(obj.getData().getWifiName()); + tv_device_version.setText(obj.getData().getVersion()); + tv_device_number.setText(obj.getData().getDeviceId()); + tv_device_model.setText(obj.getData().getThirdDeviceModel()); + if (obj.getData().getThirdDeviceModel().contains("G1")) { + iv_last_pic.setImageResource(R.drawable.icon_gateway_dh); + } + break; + case SELECT_SAFETY_DETAIL_SUCCESS: + SafeVoiceEntity safeVoiceEntity = (SafeVoiceEntity) msg.obj; +// tv_device_version.setText(safeVoiceEntity.getData().getTarget().getProviderType()); + tv_device_number.setText(safeVoiceEntity.getData().getSn()); + break; + case CHECK_USER_BIND_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + case DELLIGHT_ENTITY_FAIL: + case SELECT_SAFETY_DETAIL_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + String obj1 = (String) msg.obj; + deviceName = obj1; + tv_device_name.setText(deviceName); + break; + case DELLIGHT_ENTITY_SUCCESS: + ToastUtil.show(getContext(), R.string.Delete_successful); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }, 1000); + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + String addressId = data.getExtras().get("addressId").toString(); + tv_device_address.setText(AddressNameUtil.getAddressName(addressId)); + // addressId = data.getExtras().get("addressId").toString(); + } + break; + } + } + + private void subsetGetDetail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); +// map.put("ziId", ziId); + netWorkUtil.requestGetByAsy(SUBSET_GETDETAIL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("subsetGetDetail", "onSuccess()" + respone); + SafeVoiceEntity obj = JSON.parseObject(respone, SafeVoiceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetModify(String deviceName) { + // initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); + map.put("ziId", "wifi_virtual_gateway"); + if (!TextUtils.isEmpty(deviceName)) { + map.put("name", deviceName); + } + util.requestPostByAsyBody(NetWorkUrl.SUBSET_MODIFY, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetModify", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + devicesBean.setDeviceName(deviceName); + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = deviceName; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(KuQiPanelFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + KuQiPanelFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/LCSafeDeviceFragment.java b/app/src/main/java/com/yonsz/z1/gateway/LCSafeDeviceFragment.java new file mode 100644 index 0000000..dfdb16e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/LCSafeDeviceFragment.java @@ -0,0 +1,907 @@ +package com.yonsz.z1.gateway; + +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEvent; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.version5.model.ModelBindActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.lang.ref.WeakReference; +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.ADD_SAFETY_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.DELLIGHT_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.DEL_SAFETY_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.DEL_SAFETY_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.MODEL_REAPEAT; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.SAFETY_ACOUSTO_OPTIC; +import static com.yonsz.z1.net.Constans.SAFETY_DISPLACEMENT; +import static com.yonsz.z1.net.Constans.SAFETY_WIRELESS_REMOTE; +import static com.yonsz.z1.net.Constans.SAFE_BIG_IMG; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_UPDATEVOICE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.SEND_UPDATEVOICE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.net.NetWorkUrl.GET_LC_DEVICE_INFO; +import static com.yonsz.z1.net.NetWorkUrl.SET_APALARM_STATUS; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_GETDETAIL; +import static com.yonsz.z1.net.NetWorkUrl.UNBIND_DEVICE; + +/** + * Created by Administrator on 2018/8/8. + */ + +public class LCSafeDeviceFragment extends BaseFragment implements View.OnClickListener { + private View fragView; + private UIHandle mHandler; + private DeviceEntityV4.DataBean.DevicesBean devicesBean; + + private TitleView mTitleView; + private String deviceType; + private ImageView safeImage; + private TextView safeTypeName, safeTypeNameM; + private TextView deleteTv; + private String id, deviceId; + private String targetId = ""; + private String ziId; + private String deviceInfrared; + private String addressName; + private String addressId; + private TextView safePositionTv; + private RelativeLayout safePositionRL, panelNameRl; + private CheckBox mCheckBox; + private TextView devicePosition, deviceName; + private RelativeLayout devicePowerRl, deviceDefenceRl, safeModelRl, keyManagementRl, unlockRecordRl, temporaryKeyRl, deviceOwnerRl, deviceSafeRl, deviceStorageRl; + private TextView localStageTv, defenceTv; + private LoadingDialog mLoadingDialog; + private boolean isDelete = false; + private TextView tv_device_power, tv_safe_model; + private String modelId = "", modelName = ""; + private int modelDelay = -1; + private TextView tv_device_version, tv_device_model, tv_device_number, iv_user_modifyPw_mac; + private SafeVoiceEntity voiceEntity; + private boolean isSeteModel = false; + private String autoCloseAfterTrigger = "true"; + + public static LCSafeDeviceFragment getInstance(DeviceEntityV4.DataBean.DevicesBean devicesBean) { + LCSafeDeviceFragment fragment = new LCSafeDeviceFragment(); + fragment.devicesBean = devicesBean; + return fragment; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.activity_lc_safe_detail, null); + initView(fragView); + initListener(); + return fragView; + } + + @Override + public void onResume() { + super.onResume(); + // selectSafetyDetail(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + public void onEventMainThread(SafeVoiceEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + } + + public void onEventMainThread(EventBusEntity event) { + subsetGetDetail(); + } + + private void initView(View fragView) { + // devicesBean = JSON.parseObject(getArguments().get("DATA").toString(), DeviceEntityV4.DataBean.DevicesBean.class); + // devicesBean = (DeviceEntityV4.DataBean.DevicesBean) getArguments().get("DATA"); + deviceType = devicesBean.getDeviceType(); + id = devicesBean.getId(); + ziId = devicesBean.getZiId(); + deviceInfrared = devicesBean.getDeviceInfrared(); + addressId = devicesBean.getAddressId(); + addressName = AddressNameUtil.getAddressName(addressId); + iv_user_modifyPw_mac = (TextView) fragView.findViewById(R.id.iv_user_modifyPw_mac); + tv_device_version = (TextView) fragView.findViewById(R.id.tv_device_version); + tv_device_model = (TextView) fragView.findViewById(R.id.tv_device_model); + tv_device_number = (TextView) fragView.findViewById(R.id.tv_device_number); + tv_device_power = (TextView) fragView.findViewById(R.id.tv_device_power); + localStageTv = (TextView) fragView.findViewById(R.id.tv_local_stage); + defenceTv = (TextView) fragView.findViewById(R.id.tv_defence); + devicePosition = (TextView) fragView.findViewById(R.id.tv_device_position); + deviceName = (TextView) fragView.findViewById(R.id.tv_device_name); + mCheckBox = (CheckBox) fragView.findViewById(R.id.cb_device_defence); + safePositionTv = (TextView) fragView.findViewById(R.id.tv_safe_position); + deviceOwnerRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_owner); + deviceSafeRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_safe); + deviceStorageRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_storage); + safePositionRL = (RelativeLayout) fragView.findViewById(R.id.rl_safe_position); + panelNameRl = (RelativeLayout) fragView.findViewById(R.id.rl_panel_name); + devicePowerRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_power); + deviceDefenceRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_defence); + safeModelRl = (RelativeLayout) fragView.findViewById(R.id.rl_safe_model); + keyManagementRl = (RelativeLayout) fragView.findViewById(R.id.rl_key_management); + unlockRecordRl = (RelativeLayout) fragView.findViewById(R.id.rl_unlock_record); + temporaryKeyRl = (RelativeLayout) fragView.findViewById(R.id.rl_temporary_key); + tv_safe_model = (TextView) fragView.findViewById(R.id.tv_safe_model); + deleteTv = (TextView) fragView.findViewById(R.id.btn_exit); + safeImage = (ImageView) fragView.findViewById(R.id.iv_safe_image); + safeTypeName = (TextView) fragView.findViewById(R.id.iv_safe_name); + safeTypeNameM = (TextView) fragView.findViewById(R.id.tv_panel_name); + mTitleView = (TitleView) fragView.findViewById(R.id.title_safe_detail); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + getActivity().finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + // devicePosition.setText(devicesBean.getAddressName()); + // deviceName.setText(getArguments().get("deviceName").toString()); + switch (deviceType) { + case DOOR_LOCK_TAG: + mTitleView.setHead("门磁感应器"); + safeTypeName.setText("门磁感应器"); + safeImage.setImageResource(R.drawable.pic_magnetism_dh); + break; + case INFRARED_TAG: + mTitleView.setHead("无线红外探测器"); + safeTypeName.setText("无线红外探测器"); + safeImage.setImageResource(R.drawable.pic_infrared_dh); + break; + case SMOKE_TAG: + mTitleView.setHead("无线烟感探测器"); + safeTypeName.setText("无线烟感探测器"); + safeImage.setImageResource(R.drawable.pic_smoke_dh); + devicePowerRl.setVisibility(View.GONE); + deviceDefenceRl.setVisibility(View.GONE); + break; + case GAS_TAG: + safeTypeName.setText(R.string.gas_warn); + safeImage.setImageResource(SAFE_BIG_IMG[1]); + devicePowerRl.setVisibility(View.GONE); + deviceDefenceRl.setVisibility(View.GONE); + break; + case WATER_TAG: + mTitleView.setHead("无线水浸探测器"); + safeTypeName.setText("无线水浸探测器"); + safeImage.setImageResource(R.drawable.pic_water_immersion_dh); + deviceDefenceRl.setVisibility(View.GONE); + break; + case INTELLIGENT_DOOR_LOCK: + isSeteModel = true; + mTitleView.setHead("智能门锁"); + safeTypeName.setText("智能门锁"); + safeImage.setImageResource(R.drawable.pic_lock_dh); + devicePowerRl.setVisibility(View.VISIBLE); + deviceDefenceRl.setVisibility(View.GONE); + safeModelRl.setVisibility(View.VISIBLE); + // keyManagementRl.setVisibility(View.VISIBLE); + unlockRecordRl.setVisibility(View.VISIBLE); + temporaryKeyRl.setVisibility(View.VISIBLE); + subsetGetDetail(); + break; + case WIRELESS_EMERGENCY_BUTTON: + if (devicesBean.getDeviceModel().equals("1")) { + mTitleView.setHead("紧急按钮"); + safeTypeName.setText("紧急求助按钮"); + safeImage.setImageResource(R.drawable.pic_sos); + deviceDefenceRl.setVisibility(View.VISIBLE); + deviceOwnerRl.setVisibility(View.GONE); + deviceSafeRl.setVisibility(View.GONE); + deviceStorageRl.setVisibility(View.GONE); + subsetGetDetail(); + } else { + mTitleView.setHead("无线紧急按钮"); + safeTypeName.setText("无线紧急按钮"); + safeImage.setImageResource(R.drawable.pic_panic_button_dh); + deviceDefenceRl.setVisibility(View.GONE); + } + break; + case INFRARED_CURTAIN_DETECTOR: + mTitleView.setHead("幕帘式红外探测器"); + safeTypeName.setText("幕帘式红外探测器"); + safeImage.setImageResource(R.drawable.pic_curtain_dh); + break; + case SAFETY_DISPLACEMENT: + mTitleView.setHead("位移探测器"); + safeTypeName.setText("位移探测器"); + safeImage.setImageResource(R.drawable.pic_shift_dh_1); + break; + case SAFETY_ACOUSTO_OPTIC: + mTitleView.setHead("声光报警器"); + safeTypeName.setText("无线声光报警器"); + safeImage.setImageResource(R.drawable.pic_acousto_optic_dh_1); + break; + case SAFETY_WIRELESS_REMOTE: + mTitleView.setHead("无线遥控器"); + safeTypeName.setText("无线遥控器"); + safeImage.setImageResource(R.drawable.pic_remote_control_dh_1); + deviceDefenceRl.setVisibility(View.GONE); + break; + } + safePositionTv.setText(addressName); + + if (null != devicesBean.getDeviceName()) { + mTitleView.setHead(devicesBean.getDeviceName()); + safeTypeName.setText(devicesBean.getDeviceName()); + safeTypeNameM.setText(devicesBean.getDeviceName()); + } + + getDeviceInfo(); + } + + private void initListener() { + deleteTv.setOnClickListener(this); + safePositionRL.setOnClickListener(this); + panelNameRl.setOnClickListener(this); + mCheckBox.setOnClickListener(this); + iv_user_modifyPw_mac.setOnClickListener(this); + safeModelRl.setOnClickListener(this); + keyManagementRl.setOnClickListener(this); + unlockRecordRl.setOnClickListener(this); + temporaryKeyRl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.btn_exit: + ConfirmDialog dialog = new ConfirmDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + isDelete = true; +// subsetDelete(); + if (deviceType.equals(WIRELESS_EMERGENCY_BUTTON) && devicesBean.getDeviceModel().equals("1")) { + subsetDelete(); + } else { + unBindDevice(); + } + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.rl_safe_position: + intent = new Intent(getContext(), ModifyRoomActivity.class); + intent.putExtra("ziId", ""); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", devicesBean.getDeviceModel()); + intent.putExtra("addressId", addressId); + intent.putExtra("deviceId", id); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + break; + case R.id.cb_device_defence: + DeviceControlActivity.safeDefenceType = deviceType; + isDelete = false; + if (mCheckBox.isChecked()) { + mCheckBox.setChecked(false); + subseSetVoice("1"); + /*if (isSeteModel) { + } else { + setApAlarmStatus("1"); + }*/ + } else { + mCheckBox.setChecked(true); + subseSetVoice("0"); + /*if (isSeteModel) { + } else { + setApAlarmStatus("0"); + }*/ + } + break; + case R.id.iv_user_modifyPw_mac: + ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setText(tv_device_number.getText()); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可 + cmb.getText();//获取粘贴信息 + Toast.makeText(getContext(), "复制成功!", Toast.LENGTH_SHORT).show(); + break; + case R.id.rl_safe_model: + intent = new Intent(getContext(), ModelBindActivity.class); + intent.putExtra("modelId", modelId); + intent.putExtra("modelDelay", modelDelay); + intent.putExtra("modelName", modelName); + intent.putExtra("deviceId", devicesBean.getDeviceId()); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", devicesBean.getDeviceModel()); + intent.putExtra("autoCloseAfterTrigger", autoCloseAfterTrigger); + startActivityForResult(intent, MODEL_REAPEAT); + break; + case R.id.rl_temporary_key: + intent = new Intent(getContext(), TemporaryKeyActivity.class); + if (null != voiceEntity.getData() && null != voiceEntity.getData().getThirdInfo()) { + intent.putExtra("deviceId", voiceEntity.getData().getThirdInfo().getDeviceId()); + } else { + return; + } + if (null != voiceEntity && null != voiceEntity.getData() && null != voiceEntity.getData().getThirdInfo().getAddition()) { + intent.putExtra("expireData", voiceEntity.getData().getThirdInfo().getAddition().getExpireData()); + intent.putExtra("isExpire", voiceEntity.getData().getThirdInfo().getAddition().getIsExpire()); + intent.putExtra("securityCode", voiceEntity.getData().getThirdInfo().getAddition().getResidueNum()); + intent.putExtra("snapKey", voiceEntity.getData().getThirdInfo().getAddition().getSnapKey()); + } else { + intent.putExtra("isExpire", "false"); + } + startActivity(intent); + break; + case R.id.rl_unlock_record: + intent = new Intent(getContext(), UnlockRecordActivity.class); + if (null != voiceEntity.getData() && null != voiceEntity.getData().getThirdInfo()) { + intent.putExtra("deviceId", voiceEntity.getData().getThirdInfo().getDeviceId()); + } else { + return; + } + startActivity(intent); + break; + case R.id.rl_key_management: + break; + case R.id.rl_panel_name: + subsetModifyName(); + break; + } + } + + private void subsetModifyName() { + //修改名字 + ConfirmNameDialog dialog1 = new ConfirmNameDialog(getContext(), new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + subsetModify(positioName); + break; + } + } + }); + dialog1.setMaxEms(12); + dialog1.setOldName(mTitleView.getHead()); + dialog1.setContent("修改设备名称"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + } + + private void subsetModify(String deviceName) { + // initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", devicesBean.getDeviceType()); + map.put("ziId", ziId); + if (!TextUtils.isEmpty(deviceName)) { + map.put("name", deviceName); + } + util.requestPostByAsyBody(NetWorkUrl.SUBSET_MODIFY, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetModify", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + devicesBean.setDeviceName(deviceName); + Message msg = mHandler.obtainMessage(MODIFY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(MODIFY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(MODIFY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(getContext()); + mLoadingDialog.show(); + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case DEL_SAFETY_ENTITY_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(getContext(), R.string.Delete_successful); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }, 1000); + break; + case SEND_UPDATEVOICE_CONTROL_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + String obj1 = (String) msg.obj; + if (obj1.equals("1")) { + mCheckBox.setChecked(true); + mCheckBox.setVisibility(View.VISIBLE); + if (isSeteModel) { + localStageTv.setText("场景联动开"); + } else { + localStageTv.setText(R.string.defence_stage); + } + } else { + mCheckBox.setChecked(false); + mCheckBox.setVisibility(View.VISIBLE); + if (isSeteModel) { + localStageTv.setText("场景联动关"); + } else { + localStageTv.setText(R.string.defence_back_stage); + } + } + break; + case ADD_SAFETY_ENTITY_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + if (!mCheckBox.isChecked()) { + mCheckBox.setChecked(true); + if (isSeteModel) { + localStageTv.setText("场景联动开"); + } else { + localStageTv.setText(R.string.defence_stage); + } + ToastUtil.show(getContext(), R.string.Open_up_success); + } else { + mCheckBox.setChecked(false); + if (isSeteModel) { + localStageTv.setText("场景联动关"); + } else { + localStageTv.setText(R.string.defence_back_stage); + } + ToastUtil.show(getContext(), R.string.Close_off_success); + } + break; + case FIND_DEVICES_SUCCESS: + BaseVersion5Entity obj = (BaseVersion5Entity) msg.obj; + tv_device_version.setText(obj.getData().getApVersion()); + tv_device_number.setText(obj.getData().getDeviceId()); + tv_device_model.setText(obj.getData().getApModel()); + + deviceName.setText(obj.getData().getParentDeviceName()); + devicePosition.setText(AddressNameUtil.getAddressName(obj.getData().getParentDeviceAddressId())); + if (obj.getData().getOpenFlag().equals("1")) { + mCheckBox.setChecked(true); + mCheckBox.setVisibility(View.VISIBLE); + if (isSeteModel) { + localStageTv.setText("场景联动开"); + } else { + localStageTv.setText(R.string.defence_stage); + } + } else { + mCheckBox.setChecked(false); + mCheckBox.setVisibility(View.VISIBLE); + if (isSeteModel) { + localStageTv.setText("场景联动关"); + } else { + localStageTv.setText(R.string.defence_back_stage); + } + } + if (null != obj.getData().getElectric()) { + tv_device_power.setText(obj.getData().getElectric() + "%"); + } + break; + case SELECT_SAFETY_DETAIL_SUCCESS: + voiceEntity = (SafeVoiceEntity) msg.obj; + targetId = voiceEntity.getData().getTarget().getId(); + if (null != voiceEntity.getData().getModeTrigger()) { + if (!voiceEntity.getData().getModeTrigger().getAutoCloseAfterTrigger().isEmpty()) { + autoCloseAfterTrigger = voiceEntity.getData().getModeTrigger().getAutoCloseAfterTrigger(); + } + deviceDefenceRl.setVisibility(View.VISIBLE); + isSeteModel = true; + defenceTv.setText("场景联动:"); + modelId = voiceEntity.getData().getModeTrigger().getModeId(); + modelDelay = voiceEntity.getData().getModeTrigger().getValidTimeAfter(); + modelName = voiceEntity.getData().getModeTrigger().getModeName(); + tv_safe_model.setText(modelName); + } else { + if (deviceType.equals(WIRELESS_EMERGENCY_BUTTON) && devicesBean.getDeviceModel().equals("1")) { + if (null != voiceEntity.getData().getAiDevice()) { + deviceName.setText(voiceEntity.getData().getAiDevice().getName()); + devicePosition.setText(AddressNameUtil.getAddressName(voiceEntity.getData().getAiDevice().getAddressId())); + } + + deviceDefenceRl.setVisibility(View.VISIBLE); + modelName = ""; + modelDelay = 0; + tv_safe_model.setText(" 设置您需要联动的场景模式"); + isSeteModel = false; + defenceTv.setText("布防:"); + if (voiceEntity.getData().getTarget().getVoiceFlag().equals("1")) { + mCheckBox.setChecked(true); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText(R.string.defence_stage); + } else { + mCheckBox.setChecked(false); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText(R.string.defence_back_stage); + } + } else { + deviceDefenceRl.setVisibility(View.GONE); + if (deviceType.equals(INTELLIGENT_DOOR_LOCK)) { + isSeteModel = true; + } else { + isSeteModel = false; + } + defenceTv.setText("布防:"); + modelName = ""; + modelDelay = 0; + tv_safe_model.setText(" 设置您需要联动的场景模式"); + } + } + /*if (null != voiceEntity.getData().getAiDevice()) { + deviceName.setText(voiceEntity.getData().getAiDevice().getName()); + devicePosition.setText(AddressNameUtil.getAddressName(voiceEntity.getData().getAiDevice().getAddressId())); + }*/ + break; + case CHECK_USER_BIND_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + case SEND_UPDATEVOICE_CONTROL_FAIL: +// case FIND_DEVICES_FAIL: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(getContext(), (String) msg.obj); + break; + + case DELLIGHT_ENTITY_SUCCESS: + ToastUtil.show(getContext(), R.string.Delete_successful); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }, 1000); + break; + case MODIFY_NAME_SUCCESS: + mTitleView.setHead(devicesBean.getDeviceName()); + safeTypeName.setText(devicesBean.getDeviceName()); + safeTypeNameM.setText(devicesBean.getDeviceName()); + break; + case MODIFY_NAME_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_ADDRESS_RESULT: + if (data != null && data.getExtras().get("data") != null) { + safePositionTv.setText((String) data.getExtras().get("data")); + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + String addressId = data.getExtras().get("addressId").toString(); + safePositionTv.setText(AddressNameUtil.getAddressName(addressId)); + // addressId = data.getExtras().get("addressId").toString(); + } + break; + } + } + + private synchronized void getDeviceInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("deviceId", id); + netWorkUtil.requestGetByAsy(GET_LC_DEVICE_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getDeviceInfo", "onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subseSetVoice(final String flag) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getDeviceId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); + map.put("voiceFlag", flag); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_SETVOICE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subseSetVoice", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_SUCCESS); + msg.obj = flag; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void setApAlarmStatus(final String openFlag) { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("openFlag", openFlag); + netWorkUtil.requestPostByAsynewApi(SET_APALARM_STATUS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("setApAlarmStatus", "onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_SUCCESS); + msg.obj = openFlag; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void unBindDevice() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + netWorkUtil.requestPostByAsynewApi(UNBIND_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("unBindDevice", "onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + getActivity().finish(); + } else { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetGetDetail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getDeviceId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + netWorkUtil.requestGetByAsy(SUBSET_GETDETAIL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("subsetGetDetail", "onSuccess()" + respone); + SafeVoiceEntity obj = JSON.parseObject(respone, SafeVoiceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getDeviceId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELLIGHT_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(LCSafeDeviceFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + LCSafeDeviceFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/LCSafeMatchActivity.java b/app/src/main/java/com/yonsz/z1/gateway/LCSafeMatchActivity.java new file mode 100644 index 0000000..5a63a6e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/LCSafeMatchActivity.java @@ -0,0 +1,292 @@ +package com.yonsz.z1.gateway; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; + +import com.alibaba.fastjson.JSON; +import com.lechange.demo.yonsz.TimeOutActivity; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.SAFETY_ACOUSTO_OPTIC; +import static com.yonsz.z1.net.Constans.SAFETY_DISPLACEMENT; +import static com.yonsz.z1.net.Constans.SAFETY_WIRELESS_REMOTE; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.SEND_ADDVOICE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.Constans.localAddAddressId; +import static com.yonsz.z1.net.Constans.localAddFloorId; +import static com.yonsz.z1.net.NetWorkUrl.BIND_DEVICE; + +/** + * Created by Administrator on 2019/2/26. + */ + +public class LCSafeMatchActivity extends BaseActivity { + private TitleView mTitleView; + private CheckBox selectUnnorReveal; + private String deviceType; + private String deviceModel; + private ImageView lcSafePic; + private StateButton mStateButton; + private int sec = 120; + private String deviceSN; + private String deviceCode; + private String parentThirdDeviceId; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_lecheng_safe_match); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + private void initView() { + deviceSN = getIntent().getExtras().get("deviceSN").toString(); + parentThirdDeviceId = getIntent().getExtras().get("parentThirdDeviceId").toString(); + deviceCode = getIntent().getExtras().get("deviceCode").toString(); + deviceType = getIntent().getExtras().get("deviceType").toString(); + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + mStateButton = (StateButton) findViewById(R.id.bt_sec); + lcSafePic = (ImageView) findViewById(R.id.pic_one); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + mTitleView = (TitleView) findViewById(R.id.title_wifi_stepone); + mTitleView.setHead(R.string.add_device); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (sec > 0) { + showIsFinishThis(); + } else { + finish(); + } + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + selectUnnorReveal.setOnClickListener(this); + + switch (deviceType) { + case DOOR_LOCK_TAG: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_matching_magnetism_dh)); + break; + case INFRARED_TAG: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_matching_infrared_dh)); + break; + case SMOKE_TAG: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_matching_smoke_dh)); + break; + case GATE_WAY: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_gateway_dh)); + break; + case WATER_TAG: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_matching_water_dh)); + break; + case INTELLIGENT_DOOR_LOCK: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_matching_gate_lock_dh)); + break; + case WIRELESS_EMERGENCY_BUTTON: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_matching_panic_button_dh)); + break; + case INFRARED_CURTAIN_DETECTOR: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_matching_curtain_dh)); + break; + case SAFETY_DISPLACEMENT: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_shift_dh)); + break; + case SAFETY_ACOUSTO_OPTIC: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_acousto_optic_dh)); + break; + case SAFETY_WIRELESS_REMOTE: + lcSafePic.setImageDrawable(getResources().getDrawable(R.drawable.pic_remote_control_dh)); + break; + default: + break; + } + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + + @Override + public void onBackPressed() { + if (sec > 0) { + showIsFinishThis(); + } else { + finish(); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_SEC: + if (sec > 1 && sec < 121) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else if (sec <= 1) { + bindDevice(); + } + break; + case SEND_ADDVOICE_CONTROL_SUCCESS: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(LCSafeMatchActivity.this, AddLCSafeCompleteActivity.class); + intent.putExtra("deviceSN", deviceSN); + intent.putExtra("deviceCode", deviceCode); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + finish(); + break; + case SEND_ADDVOICE_CONTROL_FAIL: +// ToastUtil.show(this, (String) msg.obj); + gotoTimeOutActivity(); + break; + } + } + + + private void bindDevice() { + //调后台接口 + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceSN); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("code", deviceCode); + map.put("addressId", localAddAddressId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("onlySendAdd", "false"); + map.put("parentThirdDeviceId", parentThirdDeviceId); + if (!TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + if (null != getIntent().getExtras().get("floor")) { + map.put("floor", getIntent().getExtras().get("floor").toString()); + } else if (!TextUtils.isEmpty(localAddFloorId)) { + map.put("floor", localAddFloorId); + } else if (!TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + map.put("floor", SharedpreferencesUtil.get(homeListEntity.getData().get(deviceNumListPosition).getId(), "")); + } + } + netWorkUtil.requestPostByAsynewApi(BIND_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("bindDevice", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_ADDVOICE_CONTROL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SEND_ADDVOICE_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SEND_ADDVOICE_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void showIsFinishThis() { + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + EventBus.getDefault().post( + new EventBusEntity("关闭")); + sec = 121; + finish(); + break; + } + } + }); + dialog.setContent("您还未完成配置,如果退出,您将可能重新开始配置流程"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void gotoTimeOutActivity() { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent1 = new Intent(LCSafeMatchActivity.this, TimeOutActivity.class); + intent1.putExtra("deviceSN", deviceSN); + intent1.putExtra("deviceCode", deviceCode); + intent1.putExtra("deviceType", deviceType); + intent1.putExtra("deviceModel", deviceModel); + intent1.putExtra("houseId", ""); + intent1.putExtra("parentThirdDeviceId", parentThirdDeviceId); + intent1.putExtra("from", "LCSafeMatchActivity"); + startActivity(intent1); + finish(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/LockLogAdapter.java b/app/src/main/java/com/yonsz/z1/gateway/LockLogAdapter.java new file mode 100644 index 0000000..3418480 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/LockLogAdapter.java @@ -0,0 +1,146 @@ +package com.yonsz.z1.gateway; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity5.LockLogEntity; +import com.yonsz.z1.utils.AutoLinerLayoutManager; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.List; + +/** + * Created by Administrator on 2017/9/1. + */ +public class LockLogAdapter extends RecyclerView.Adapter { + private List> mDatasRercord; + private Context mContext; + + public LockLogAdapter(Context mContext, List> mDatasRercord) { + this.mDatasRercord = mDatasRercord; + this.mContext = mContext; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_device_log, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDatasRercord != null ? mDatasRercord.size() : 0; + } + + private String getWeek(String pTime) { + String Week = "星期"; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + if (c.get(Calendar.DAY_OF_WEEK) == 1) { + Week += "天"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 2) { + Week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 3) { + Week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 4) { + Week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 5) { + Week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 6) { + Week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 7) { + Week += "六"; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return Week; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView tv_log_data, tv_log_data_month; + private TextView tv_log_week; + private RecyclerView mLogRecyclerView; + private RelativeLayout rootView; + + public MessageViewHolder(View itemView) { + super(itemView); + tv_log_data = (TextView) itemView.findViewById(R.id.tv_log_data); + tv_log_data_month = (TextView) itemView.findViewById(R.id.tv_log_data_month); + tv_log_week = (TextView) itemView.findViewById(R.id.tv_log_week); + mLogRecyclerView = (RecyclerView) itemView.findViewById(R.id.rc_device_log); + mLogRecyclerView.setLayoutManager(new AutoLinerLayoutManager(mContext)); + } + + public void setViews(final int position) { + LockLogEntity.DataBean.RecordsBean entity = mDatasRercord.get(position).get(0); + String createDate = entity.getTime().substring(0, 10); + tv_log_data.setText(createDate.substring(8, 10)); + String month = createDate.substring(5, 7) + "-"; + /* switch (createDate.substring(5, 7)) { + case "01": + month = "一月"; + break; + case "02": + month = "二月"; + break; + case "03": + month = "三月"; + break; + case "04": + month = "四月"; + break; + case "05": + month = "五月"; + break; + case "06": + month = "六月"; + break; + case "07": + month = "七月"; + break; + case "08": + month = "八月"; + break; + case "09": + month = "九月"; + break; + case "10": + month = "十月"; + break; + case "11": + month = "十一月"; + break; + case "12": + month = "十二月"; + break; + }*/ + tv_log_data_month.setText(month); + tv_log_week.setText(getWeek(entity.getTime().substring(0, 10))); + LockLogDetailAdapter adapter = new LockLogDetailAdapter(mContext, mDatasRercord.get(position)); + mLogRecyclerView.setAdapter(adapter); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/LockLogDetailAdapter.java b/app/src/main/java/com/yonsz/z1/gateway/LockLogDetailAdapter.java new file mode 100644 index 0000000..7c7086c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/LockLogDetailAdapter.java @@ -0,0 +1,65 @@ +package com.yonsz.z1.gateway; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity5.LockLogEntity; + +import java.util.List; + +/** + * Created by Administrator on 2017/9/1. + */ +public class LockLogDetailAdapter extends RecyclerView.Adapter { + private List mDatasRercord; + private Context mContext; + + public LockLogDetailAdapter(Context mContext, List mDatasRercord) { + this.mDatasRercord = mDatasRercord; + this.mContext = mContext; + } + + @Override + public LockLogDetailAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_device_detail_log, + parent, false); + return new LockLogDetailAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(LockLogDetailAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDatasRercord != null ? mDatasRercord.size() : 0; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView tv_log_record; + private TextView tv_log_time; + private View mViewLine; + + public MessageViewHolder(View itemView) { + super(itemView); + tv_log_record = (TextView) itemView.findViewById(R.id.tv_log_record); + tv_log_time = (TextView) itemView.findViewById(R.id.tv_log_time); + mViewLine = (View) itemView.findViewById(R.id.line); + } + + public void setViews(final int position) { + tv_log_record.setText(mDatasRercord.get(position).getText()); + tv_log_time.setText(mDatasRercord.get(position).getTime().substring(11, 16)); + /*if (position == mDatasRercord.size()) { + mViewLine.setVisibility(View.GONE); + }*/ + } + } + +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/SwoitLockFragment.java b/app/src/main/java/com/yonsz/z1/gateway/SwoitLockFragment.java new file mode 100644 index 0000000..b0e235a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/SwoitLockFragment.java @@ -0,0 +1,908 @@ +package com.yonsz.z1.gateway; + +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.lechange.demo.common.DatePicker; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEvent; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.version5.model.ModelBindActivity; +import com.yonsz.z1.version5.model.ModelBindTypeActivity; +import com.yonsz.z1.view.TextViewVertical; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.lang.ref.WeakReference; +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.ADD_SAFETY_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.DELLIGHT_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.DEL_SAFETY_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.MODEL_REAPEAT; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.SEND_UPDATEVOICE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.SEND_UPDATEVOICE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.net.NetWorkUrl.GET_LC_DEVICE_INFO; +import static com.yonsz.z1.net.NetWorkUrl.SET_ALARM_NOTIFYSWITCH; +import static com.yonsz.z1.net.NetWorkUrl.SET_APALARM_STATUS; +import static com.yonsz.z1.net.NetWorkUrl.SET_CALL_NOTIFYSWITCH; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_GETDETAIL; +import static com.yonsz.z1.net.NetWorkUrl.UNBIND_DEVICE; + +/** + * Created by Administrator on 2018/8/8. + */ + +public class SwoitLockFragment extends BaseFragment implements View.OnClickListener { + private View fragView; + private UIHandle mHandler; + private DeviceEntityV4.DataBean.DevicesBean devicesBean; + + private TitleView mTitleView; + private String deviceType; + private ImageView safeImage; + private TextView safeTypeName; + private TextView deleteTv; + private String id, deviceId; + private String targetId = ""; + private String ziId; + private String deviceInfrared; + private String addressName; + private String addressId; + private TextView safePositionTv; + private RelativeLayout safePositionRL; + private CheckBox mCheckBox; + private TextView devicePosition, deviceName; + private RelativeLayout devicePowerRl, deviceDefenceRl, safeModelRl, keyManagementRl, unlockRecordRl, temporaryKeyRl, deviceOwnerRl, panelPostionRl; + private TextView localStageTv, defenceTv; + private LoadingDialog mLoadingDialog; + private boolean isDelete = false; + private TextView tv_device_power, tv_safe_model; + private String modelId = "", modelName = "", lockModelId = "", lockModelName = ""; + private int modelDelay = -1, lockModelDelay = -1; + private TextView tv_device_version, tv_device_model, tv_device_number; + private SafeVoiceEntity voiceEntity; + private boolean isSeteModel = true; + private String autoCloseAfterTrigger = "true", lockAutoCloseAfterTrigger = "false"; + private CheckBox doorbellCb, opendoorCb, alarmCb; + private TextView panelName; + + public static SwoitLockFragment getInstance(DeviceEntityV4.DataBean.DevicesBean devicesBean) { + SwoitLockFragment fragment = new SwoitLockFragment(); + fragment.devicesBean = devicesBean; + return fragment; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.activity_swoit_lock, null); + initView(fragView); + initListener(); + return fragView; + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + public void onEventMainThread(SafeVoiceEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + } + + public void onEventMainThread(EventBusEntity event) { + subsetGetDetail(); + } + + private void initView(View fragView) { + // devicesBean = JSON.parseObject(getArguments().get("DATA").toString(), DeviceEntityV4.DataBean.DevicesBean.class); + // devicesBean = (DeviceEntityV4.DataBean.DevicesBean) getArguments().get("DATA"); + deviceType = devicesBean.getDeviceType(); + id = devicesBean.getId(); + ziId = devicesBean.getZiId(); + deviceInfrared = devicesBean.getDeviceInfrared(); + addressId = devicesBean.getAddressId(); + addressName = AddressNameUtil.getAddressName(addressId); + tv_device_version = (TextView) fragView.findViewById(R.id.tv_device_version); + tv_device_model = (TextView) fragView.findViewById(R.id.tv_device_model); + tv_device_number = (TextView) fragView.findViewById(R.id.tv_device_number); + tv_device_power = (TextView) fragView.findViewById(R.id.tv_device_power); + localStageTv = (TextView) fragView.findViewById(R.id.tv_local_stage); + defenceTv = (TextView) fragView.findViewById(R.id.tv_defence); + devicePosition = (TextView) fragView.findViewById(R.id.tv_device_position); + deviceName = (TextView) fragView.findViewById(R.id.tv_device_name); + mCheckBox = (CheckBox) fragView.findViewById(R.id.cb_device_defence); + safePositionTv = (TextView) fragView.findViewById(R.id.tv_safe_position); + deviceOwnerRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_owner); + safePositionRL = (RelativeLayout) fragView.findViewById(R.id.rl_safe_position); + devicePowerRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_power); + deviceDefenceRl = (RelativeLayout) fragView.findViewById(R.id.rl_device_defence); + safeModelRl = (RelativeLayout) fragView.findViewById(R.id.rl_safe_model); + keyManagementRl = (RelativeLayout) fragView.findViewById(R.id.rl_key_management); + unlockRecordRl = (RelativeLayout) fragView.findViewById(R.id.rl_unlock_record); + temporaryKeyRl = (RelativeLayout) fragView.findViewById(R.id.rl_temporary_key); + tv_safe_model = (TextView) fragView.findViewById(R.id.tv_safe_model); + deleteTv = (TextView) fragView.findViewById(R.id.btn_exit); + safeImage = (ImageView) fragView.findViewById(R.id.iv_safe_image); + safeTypeName = (TextView) fragView.findViewById(R.id.iv_safe_name); + doorbellCb = (CheckBox) fragView.findViewById(R.id.cb_doorbell); + opendoorCb = (CheckBox) fragView.findViewById(R.id.cb_open_door); + alarmCb = (CheckBox) fragView.findViewById(R.id.cb_alarm); + panelPostionRl = (RelativeLayout) fragView.findViewById(R.id.rl_panel_position); + panelName = (TextView) fragView.findViewById(R.id.tv_panel_position); + mTitleView = (TitleView) fragView.findViewById(R.id.title_safe_detail); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + getActivity().finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (deviceType) { + case INTELLIGENT_DOOR_LOCK: + isSeteModel = true; + mTitleView.setHead(devicesBean.getDeviceName()); + safeTypeName.setText(devicesBean.getDeviceName()); + panelName.setText(devicesBean.getDeviceName()); + safeImage.setImageResource(R.drawable.pic_lock_k2m); + subsetGetDetail(); + break; + } + safePositionTv.setText(addressName); + } + + private void initListener() { + deleteTv.setOnClickListener(this); + safePositionRL.setOnClickListener(this); + mCheckBox.setOnClickListener(this); + safeModelRl.setOnClickListener(this); + unlockRecordRl.setOnClickListener(this); + temporaryKeyRl.setOnClickListener(this); + doorbellCb.setOnClickListener(this); + opendoorCb.setOnClickListener(this); + alarmCb.setOnClickListener(this); + panelPostionRl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.btn_exit: + ConfirmDialog dialog = new ConfirmDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + isDelete = true; + subsetDelete(); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.rl_safe_position: + intent = new Intent(getContext(), ModifyRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", devicesBean.getDeviceModel()); + intent.putExtra("addressId", addressId); + intent.putExtra("deviceId", devicesBean.getDeviceId()); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + break; + case R.id.cb_device_defence: + DeviceControlActivity.safeDefenceType = deviceType; + isDelete = false; + if (mCheckBox.isChecked()) { + mCheckBox.setChecked(false); + subseSetVoice("1"); + } else { + mCheckBox.setChecked(true); + subseSetVoice("0"); + } + break; + case R.id.cb_doorbell: + if (doorbellCb.isChecked()) { + doorbellCb.setChecked(false); + setCallNotifySwitch("1"); + } else { + doorbellCb.setChecked(true); + setCallNotifySwitch("0"); + } + break; + case R.id.cb_open_door: + isDelete = false; + if (opendoorCb.isChecked()) { + opendoorCb.setChecked(false); + setUnlockNotifySwitch("1"); + } else { + opendoorCb.setChecked(true); + setUnlockNotifySwitch("0"); + + } + break; + case R.id.cb_alarm: + isDelete = false; + if (alarmCb.isChecked()) { + alarmCb.setChecked(false); + setAlarmNotifySwitch("1"); + } else { + alarmCb.setChecked(true); + setAlarmNotifySwitch("0"); + } + break; + case R.id.iv_user_modifyPw_mac: + ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setText(tv_device_number.getText()); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可 + cmb.getText();//获取粘贴信息 + Toast.makeText(getContext(), "复制成功!", Toast.LENGTH_SHORT).show(); + break; + case R.id.rl_safe_model: + intent = new Intent(getContext(), ModelBindTypeActivity.class); + intent.putExtra("modelId", modelId); + intent.putExtra("modelDelay", modelDelay); + intent.putExtra("modelName", modelName); + intent.putExtra("autoCloseAfterTrigger", autoCloseAfterTrigger); + + intent.putExtra("lockModelId", lockModelId); + intent.putExtra("lockModelName", lockModelName); + intent.putExtra("lockModelDelay", lockModelDelay); + intent.putExtra("lockAutoCloseAfterTrigger", lockAutoCloseAfterTrigger); + + intent.putExtra("deviceId", devicesBean.getDeviceId()); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", devicesBean.getDeviceModel()); + startActivityForResult(intent, MODEL_REAPEAT); + break; + case R.id.rl_temporary_key: + intent = new Intent(getContext(), SwoitTemporaryKeyActivity.class); + intent.putExtra("deviceId", devicesBean.getDeviceId()); + intent.putExtra("ziId", ziId); + /*if (null != voiceEntity && null != voiceEntity.getData() && null != voiceEntity.getData().getThirdInfo().getAddition()) { + intent.putExtra("expireData", voiceEntity.getData().getThirdInfo().getAddition().getExpireData()); + intent.putExtra("isExpire", voiceEntity.getData().getThirdInfo().getAddition().getIsExpire()); + intent.putExtra("securityCode", voiceEntity.getData().getThirdInfo().getAddition().getResidueNum()); + intent.putExtra("snapKey", voiceEntity.getData().getThirdInfo().getAddition().getSnapKey()); + } else { + intent.putExtra("isExpire", "false"); + }*/ + intent.putExtra("isExpire", "false"); + startActivity(intent); + break; + case R.id.rl_unlock_record: + intent = new Intent(getContext(), UnlockRecordActivity.class); + if (null != voiceEntity.getData() && null != voiceEntity.getData().getTarget()) { + intent.putExtra("deviceId", voiceEntity.getData().getTarget().getId()); + intent.putExtra("deviceModel", voiceEntity.getData().getTarget().getDeviceModel()); + intent.putExtra("ziId", voiceEntity.getData().getAiDevice().getZiId()); + } else { + return; + } + startActivity(intent); + break; + case R.id.rl_key_management: + break; + case R.id.rl_panel_position: + subsetModifyName(); + break; + } + } + + private void subsetModifyName() { + //修改名字 + ConfirmNameDialog dialog1 = new ConfirmNameDialog(getContext(), new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + subsetModify(positioName); + break; + } + } + }); + dialog1.setMaxEms(12); + dialog1.setOldName(mTitleView.getHead()); + dialog1.setContent("修改设备名称"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + } + + private void subsetModify(String deviceName) { + // initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getDeviceId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", devicesBean.getDeviceType()); + map.put("ziId", ziId); + if (!TextUtils.isEmpty(deviceName)) { + map.put("name", deviceName); + } + util.requestPostByAsyBody(NetWorkUrl.SUBSET_MODIFY, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetModify", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + devicesBean.setDeviceName(deviceName); + Message msg = mHandler.obtainMessage(MODIFY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(MODIFY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(MODIFY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(getContext()); + mLoadingDialog.show(); + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case DEL_SAFETY_ENTITY_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(getContext(), R.string.Delete_successful); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }, 1000); + break; + case SEND_UPDATEVOICE_CONTROL_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + String obj1 = (String) msg.obj; + if (obj1.equals("1")) { + mCheckBox.setChecked(true); + mCheckBox.setVisibility(View.VISIBLE); + if (isSeteModel) { + localStageTv.setText("场景联动开"); + } else { + localStageTv.setText(R.string.defence_stage); + } + } else { + mCheckBox.setChecked(false); + mCheckBox.setVisibility(View.VISIBLE); + if (isSeteModel) { + localStageTv.setText("场景联动关"); + } else { + localStageTv.setText(R.string.defence_back_stage); + } + } + break; + case ADD_SAFETY_ENTITY_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + if (!mCheckBox.isChecked()) { + mCheckBox.setChecked(true); + if (isSeteModel) { + localStageTv.setText("场景联动开"); + } else { + localStageTv.setText(R.string.defence_stage); + } + ToastUtil.show(getContext(), R.string.Open_up_success); + } else { + mCheckBox.setChecked(false); + if (isSeteModel) { + localStageTv.setText("场景联动关"); + } else { + localStageTv.setText(R.string.defence_back_stage); + } + ToastUtil.show(getContext(), R.string.Close_off_success); + } + break; + case SELECT_SAFETY_DETAIL_SUCCESS: + voiceEntity = (SafeVoiceEntity) msg.obj; + tv_device_model.setText(voiceEntity.getData().getApModel()); + deviceName.setText(voiceEntity.getData().getAiDevice().getName()); + devicePosition.setText(AddressNameUtil.getAddressName(voiceEntity.getData().getAiDevice().getAddressId())); + targetId = voiceEntity.getData().getTarget().getId(); + if (null != voiceEntity.getData().getModeTrigger()) { + if (!voiceEntity.getData().getModeTrigger().getAutoCloseAfterTrigger().isEmpty()) { + autoCloseAfterTrigger = voiceEntity.getData().getModeTrigger().getAutoCloseAfterTrigger(); + } + deviceDefenceRl.setVisibility(View.VISIBLE); + isSeteModel = true; + defenceTv.setText("场景联动:"); + modelId = voiceEntity.getData().getModeTrigger().getModeId(); + modelDelay = voiceEntity.getData().getModeTrigger().getValidTimeAfter(); + modelName = voiceEntity.getData().getModeTrigger().getModeName(); + tv_safe_model.setText(modelName); + if (null != voiceEntity.getData().getTarget()) { + if (voiceEntity.getData().getTarget().isModeTriggerFlag()) { + mCheckBox.setChecked(true); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText("场景联动开"); + } else { + mCheckBox.setChecked(false); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText("场景联动关"); + } + } + } else { + deviceDefenceRl.setVisibility(View.GONE); + if (deviceType.equals(INTELLIGENT_DOOR_LOCK)) { + isSeteModel = true; + } else { + isSeteModel = false; + } + modelName = ""; + modelDelay = 0; + tv_safe_model.setText(""); + } + if (null != voiceEntity.getData().getLockModeTrigger()) { + if (!voiceEntity.getData().getLockModeTrigger().getAutoCloseAfterTrigger().isEmpty()) { + lockAutoCloseAfterTrigger = voiceEntity.getData().getLockModeTrigger().getAutoCloseAfterTrigger(); + } + deviceDefenceRl.setVisibility(View.VISIBLE); + isSeteModel = true; + defenceTv.setText("场景联动:"); + lockModelId = voiceEntity.getData().getLockModeTrigger().getModeId(); + lockModelDelay = voiceEntity.getData().getLockModeTrigger().getValidTimeAfter(); + lockModelName = voiceEntity.getData().getLockModeTrigger().getModeName(); + tv_safe_model.setText(""); + if (null != voiceEntity.getData().getTarget()) { + if (voiceEntity.getData().getTarget().isModeTriggerFlag()) { + mCheckBox.setChecked(true); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText("场景联动开"); + } else { + mCheckBox.setChecked(false); + mCheckBox.setVisibility(View.VISIBLE); + localStageTv.setText("场景联动关"); + } + } + } else { + deviceDefenceRl.setVisibility(View.GONE); + if (deviceType.equals(INTELLIGENT_DOOR_LOCK)) { + isSeteModel = true; + } else { + isSeteModel = false; + } + lockModelName = ""; + lockModelDelay = 0; + tv_safe_model.setText(""); + } + if (null != voiceEntity.getData().getNotifySwitch()) { + if (voiceEntity.getData().getNotifySwitch().getUnlockNotifySwitch().equals("1")) { + opendoorCb.setChecked(true); + } else { + opendoorCb.setChecked(false); + } + if (voiceEntity.getData().getNotifySwitch().getCallNotifySwitch().equals("1")) { + doorbellCb.setChecked(true); + } else { + doorbellCb.setChecked(false); + } + if (voiceEntity.getData().getNotifySwitch().getAlarmNotifySwitch().equals("1")) { + alarmCb.setChecked(true); + } else { + alarmCb.setChecked(false); + } + } + break; + case UPDATE_MODEL_CONTROL_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + String obj2 = (String) msg.obj; + if (obj2.equals("1")) { + opendoorCb.setChecked(true); + } else { + opendoorCb.setChecked(false); + } + break; + case UPDATE_MODEL_BASIC_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + String obj3 = (String) msg.obj; + if (obj3.equals("1")) { + doorbellCb.setChecked(true); + } else { + doorbellCb.setChecked(false); + } + break; + case UPDATE_MODEL_TIME_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + String obj4 = (String) msg.obj; + if (obj4.equals("1")) { + alarmCb.setChecked(true); + } else { + alarmCb.setChecked(false); + } + break; + case CHECK_USER_BIND_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + case SEND_UPDATEVOICE_CONTROL_FAIL: +// case FIND_DEVICES_FAIL: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(getContext(), (String) msg.obj); + break; + + case DELLIGHT_ENTITY_SUCCESS: + ToastUtil.show(getContext(), R.string.Delete_successful); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }, 1000); + break; + case MODIFY_NAME_SUCCESS: + mTitleView.setHead(devicesBean.getDeviceName()); + safeTypeName.setText(devicesBean.getDeviceName()); + panelName.setText(devicesBean.getDeviceName()); + break; + case MODIFY_NAME_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } + + private void setUnlockNotifySwitch(final String flag) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getDeviceId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); + map.put("unlockNotifySwitch", flag); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SET_UNLOCK_NOTIFYSWITCH, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subseSetVoice", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_CONTROL_SUCCESS); + msg.obj = flag; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void setCallNotifySwitch(final String flag) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getDeviceId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); + map.put("callNotifySwitch", flag); + map.put("ziId", ziId); + util.requestPostByAsyBody(SET_CALL_NOTIFYSWITCH, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subseSetVoice", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_SUCCESS); + msg.obj = flag; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void setAlarmNotifySwitch(final String flag) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getDeviceId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); + map.put("alarmNotifySwitch", flag); + map.put("ziId", ziId); + util.requestPostByAsyBody(SET_ALARM_NOTIFYSWITCH, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subseSetVoice", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_SUCCESS); + msg.obj = flag; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_ADDRESS_RESULT: + if (data != null && data.getExtras().get("data") != null) { + safePositionTv.setText((String) data.getExtras().get("data")); + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + String addressId = data.getExtras().get("addressId").toString(); + safePositionTv.setText(AddressNameUtil.getAddressName(addressId)); + // addressId = data.getExtras().get("addressId").toString(); + } + break; + } + } + + private void subseSetVoice(final String flag) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getDeviceId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); + map.put("modeTriggerFlag", flag); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_SETMODETRIGGERFLAG, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subseSetVoice", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SEND_UPDATEVOICE_CONTROL_SUCCESS); + msg.obj = flag; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetGetDetail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getDeviceId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + netWorkUtil.requestGetByAsy(SUBSET_GETDETAIL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("subsetGetDetail", "onSuccess()" + respone); + SafeVoiceEntity obj = JSON.parseObject(respone, SafeVoiceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getDeviceId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", deviceType); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELLIGHT_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(SwoitLockFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + SwoitLockFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/SwoitTemporaryKeyActivity.java b/app/src/main/java/com/yonsz/z1/gateway/SwoitTemporaryKeyActivity.java new file mode 100644 index 0000000..ccd389c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/SwoitTemporaryKeyActivity.java @@ -0,0 +1,187 @@ +package com.yonsz.z1.gateway; + +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.format.DateUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.database.entity.entity5.LockKeyEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DateUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.tv.ChannelChangeBindAdapter; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.NetWorkUrl.GET_DEVICE_SNAPKEY; +import static com.yonsz.z1.net.NetWorkUrl.GET_DOORLOCK_SNAPKEY; + +/** + * Created by Administrator on 2019/7/29. + */ + +public class SwoitTemporaryKeyActivity extends BaseActivity { + private TitleView mTitleView; + private String deviceId = ""; + private TextView temporaryKeyTv, temporaryKeyCopyTv, tv_get_code; + private RecyclerView rc_temp_key; + private SwoitTemporayKeyAdapter mAdapter; + private String dataList; + private EditText et_admin; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_swoit_tempoary_key); + initView(); + } + + private void initView() { + deviceId = getIntent().getExtras().get("deviceId").toString(); + et_admin = (EditText) findViewById(R.id.et_admin); + rc_temp_key = (RecyclerView) findViewById(R.id.rc_temp_key); + temporaryKeyTv = (TextView) findViewById(R.id.tv_temp_key); + temporaryKeyCopyTv = (TextView) findViewById(R.id.tv_temporary_key_copy); + tv_get_code = (TextView) findViewById(R.id.tv_get_code); + mTitleView = (TitleView) findViewById(R.id.title_temporary_key); + mTitleView.clearBackGroud(); + mTitleView.setHead("临时密钥"); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + + temporaryKeyCopyTv.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setText(dataList); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可 + cmb.getText();//获取粘贴信息 + Toast.makeText(SwoitTemporaryKeyActivity.this, "复制成功!", Toast.LENGTH_SHORT).show(); + } + }); + + tv_get_code.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (et_admin.getText().toString().isEmpty()) { + ToastUtil.show(SwoitTemporaryKeyActivity.this, "请输入门锁管理密码"); + } else { + getDeviceSnapKey(et_admin.getText().toString()); + } + } + }); + + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(this); + manager.setOrientation(LinearLayoutManager.HORIZONTAL); + rc_temp_key.setLayoutManager(manager); + mAdapter = new SwoitTemporayKeyAdapter(this, dataList, false); + rc_temp_key.setAdapter(mAdapter); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FIND_DEVICES_SUCCESS: + LockKeyEntity lockKeyEntity = (LockKeyEntity) msg.obj; + dataList = lockKeyEntity.getData().getSnapKey(); + mAdapter.setIsEdit(dataList); + temporaryKeyCopyTv.setVisibility(View.VISIBLE); + temporaryKeyTv.setText("有效时间10分钟,请尽快使用"); +// mAdapter.notifyDataSetChanged(); + break; + case FIND_DEVICES_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private synchronized void getDeviceSnapKey(String adminKey) { + long timecurrentTimeMillis = System.currentTimeMillis(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", "2"); + map.put("deviceType", INTELLIGENT_DOOR_LOCK); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("effectTime", String.valueOf(timecurrentTimeMillis / 1000)); + map.put("adminKey", adminKey); + netWorkUtil.requestGetByAsy(GET_DOORLOCK_SNAPKEY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getDeviceSnapKey", "onSuccess()" + respone); + LockKeyEntity obj = JSON.parseObject(respone, LockKeyEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_DEVICE_NAME: + + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/SwoitTemporayKeyAdapter.java b/app/src/main/java/com/yonsz/z1/gateway/SwoitTemporayKeyAdapter.java new file mode 100644 index 0000000..1599a8d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/SwoitTemporayKeyAdapter.java @@ -0,0 +1,86 @@ +package com.yonsz.z1.gateway; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.listener.OnRecyclerListener; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + + +public class SwoitTemporayKeyAdapter extends RecyclerView.Adapter { + private String mDataBeans; + private Context mContext; + private boolean isEdit; + private OnRecyclerListener mOnItemClickListener; + + + public SwoitTemporayKeyAdapter(Context context, String mDataBeans, boolean isEdit) { + this.mDataBeans = mDataBeans; + this.mContext = context; + this.isEdit = isEdit; + } + + public void setIsEdit(String mDataBeans) { + this.mDataBeans = mDataBeans; + this.notifyDataSetChanged(); + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_temporay_key, parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(holder, position); + } + + @Override + public int getItemCount() { + return mDataBeans != null ? mDataBeans.length() : 10; + } + + public void setmOnItemClickListener(OnRecyclerListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.tv_channel_key) + TextView mTvChannelKey; + @BindView(R.id.root) + RelativeLayout root; + + public MessageViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final RecyclerView.ViewHolder holder, final int position) { + if (null != mDataBeans && !mDataBeans.isEmpty()) { + mTvChannelKey.setText(mDataBeans.substring(position, position + 1)); + } else { + mTvChannelKey.setText(""); + } + root.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/TemporaryKeyActivity.java b/app/src/main/java/com/yonsz/z1/gateway/TemporaryKeyActivity.java new file mode 100644 index 0000000..16f2c74 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/TemporaryKeyActivity.java @@ -0,0 +1,130 @@ +package com.yonsz.z1.gateway; + +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; + +/** + * Created by Administrator on 2019/7/29. + */ + +public class TemporaryKeyActivity extends BaseActivity { + private TitleView mTitleView; + private String deviceId = "", expireData = "", securityCode = "", snapKey = ""; + private boolean isExpire = true; + private LinearLayout havePasswordLl; + private TextView temporaryKeyTv, temporaryKeyCopyTv, temporaryKeyTimeTv, temporaryKeyUseTv; + private Button completeBt; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tempoary_key); + initView(); + } + + private void initView() { + if (null != getIntent().getExtras().get("isExpire")) { + isExpire = Boolean.valueOf(getIntent().getExtras().get("isExpire").toString()); + } + deviceId = getIntent().getExtras().get("deviceId").toString(); + havePasswordLl = (LinearLayout) findViewById(R.id.ll_have_password); + temporaryKeyTv = (TextView) findViewById(R.id.tv_temporary_key); + temporaryKeyCopyTv = (TextView) findViewById(R.id.tv_temporary_key_copy); + temporaryKeyTimeTv = (TextView) findViewById(R.id.tv_temporary_key_time); + temporaryKeyUseTv = (TextView) findViewById(R.id.tv_temporary_key_use); + completeBt = (Button) findViewById(R.id.bt_complete); + mTitleView = (TitleView) findViewById(R.id.title_temporary_key); + mTitleView.clearBackGroud(); + mTitleView.setHead("临时密钥"); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + if (!isExpire && !securityCode.equals("0")) { +// expireData = getIntent().getExtras().get("expireData").toString(); +// securityCode = getIntent().getExtras().get("securityCode").toString(); +// snapKey = getIntent().getExtras().get("snapKey").toString(); + havePasswordLl.setVisibility(View.VISIBLE); + temporaryKeyTv.setText(snapKey); + temporaryKeyTimeTv.setText(expireData); + temporaryKeyTimeTv.setText(expireData); + temporaryKeyUseTv.setText(securityCode + "次"); + } else { + havePasswordLl.setVisibility(View.GONE); + } + + temporaryKeyCopyTv.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setText(temporaryKeyTv.getText()); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可 + cmb.getText();//获取粘贴信息 + Toast.makeText(TemporaryKeyActivity.this, "复制成功!", Toast.LENGTH_SHORT).show(); + } + }); + completeBt.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent = new Intent(TemporaryKeyActivity.this, TemporaryKeySetActivity.class); + intent.putExtra("deviceId", deviceId); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("snapKey") != null) { + snapKey = data.getExtras().get("snapKey").toString().trim(); + expireData = data.getExtras().get("expireDate").toString().trim(); + securityCode = data.getExtras().get("securityCode").toString().trim(); + havePasswordLl.setVisibility(View.VISIBLE); + temporaryKeyTv.setText(snapKey); + temporaryKeyTimeTv.setText(expireData); + temporaryKeyTimeTv.setText(expireData); + temporaryKeyUseTv.setText(securityCode + "次"); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/TemporaryKeySetActivity.java b/app/src/main/java/com/yonsz/z1/gateway/TemporaryKeySetActivity.java new file mode 100644 index 0000000..10f395b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/TemporaryKeySetActivity.java @@ -0,0 +1,246 @@ +package com.yonsz.z1.gateway; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.bigkoo.pickerview.OptionsPickerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity5.LockKeyEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DateTimeUitl; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.GET_DEVICE_SNAPKEY; + +/** + * Created by Administrator on 2019/7/29. + */ + +public class TemporaryKeySetActivity extends BaseActivity { + private TitleView mTitleView; + private String deviceId = ""; + private Button completeBt; + private RelativeLayout repeatTimeRl, timeSetRl; + private TextView timeSetTv, onceTimeTv; + private LoadingDialog mLoadingDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tempoary_key_set); + initView(); + } + + private void initView() { + deviceId = getIntent().getExtras().get("deviceId").toString(); + repeatTimeRl = (RelativeLayout) findViewById(R.id.rl_repeat_time); + onceTimeTv = (TextView) findViewById(R.id.tv_once_time); + timeSetRl = (RelativeLayout) findViewById(R.id.rl_time_set); + timeSetTv = (TextView) findViewById(R.id.tv_time_set); + completeBt = (Button) findViewById(R.id.bt_complete); + repeatTimeRl.setOnClickListener(this); + timeSetRl.setOnClickListener(this); + completeBt.setOnClickListener(this); + mTitleView = (TitleView) findViewById(R.id.title_temporary_key); + mTitleView.clearBackGroud(); + mTitleView.setHead("设置临时密钥"); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_complete: + getDeviceSnapKey(); + break; + case R.id.rl_time_set: + setTime1(timeSetTv); + break; + case R.id.rl_repeat_time: + setTime(onceTimeTv); + break; + } + } + + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private synchronized void getDeviceSnapKey() { + if (onceTimeTv.getText().toString().isEmpty()) { + ToastUtil.show(this, "请设置截止时间"); + return; + } + if (timeSetTv.getText().toString().isEmpty()) { + ToastUtil.show(this, "请设置使用次数"); + return; + } + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("expirationDate", onceTimeTv.getText().toString()); + map.put("deviceId", deviceId); + map.put("number", timeSetTv.getText().toString().substring(0, timeSetTv.getText().toString().length() - 1)); + netWorkUtil.requestGetByAsy(GET_DEVICE_SNAPKEY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getDeviceSnapKey", "onSuccess()" + respone); + LockKeyEntity obj = JSON.parseObject(respone, LockKeyEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private void setTime(final TextView textView) { + final List options1Items = new ArrayList<>(); + options1Items.clear(); + options1Items.add(getString(R.string.time_5m)); + options1Items.add(getString(R.string.time_10m)); + options1Items.add(getString(R.string.time_15m)); + options1Items.add(getString(R.string.time_30m)); + options1Items.add("45分钟"); + options1Items.add("1小时"); + options1Items.add("2小时"); + options1Items.add("3小时"); + options1Items.add("5小时"); + options1Items.add("8小时"); + options1Items.add("12小时"); + options1Items.add("24小时"); + OptionsPickerView pvOptions = new OptionsPickerView.Builder(TemporaryKeySetActivity.this, new OptionsPickerView.OnOptionsSelectListener() { + @Override + public void onOptionsSelect(int options1, int option2, int options3, View v) { + //返回的分别是三个级别的选中位置 + String s = options1Items.get(options1); + textView.setVisibility(View.VISIBLE); + long currentTimeMillis = System.currentTimeMillis() / 1000; + long substring = Integer.parseInt(s.substring(0, s.length() - 2)); + if (s.contains("分钟")) { + currentTimeMillis += (substring * 60); + } else if (s.contains("小时")) { + currentTimeMillis += (substring * 3600); + } + textView.setText(DateTimeUitl.toTimeFullString(currentTimeMillis)); + } + }) + .setTextColorCenter(Color.BLACK)//设置选中项的颜色 + .build(); + pvOptions.setPicker(options1Items); + pvOptions.show(); + } + + private void setTime1(final TextView textView) { + final List options1Items = new ArrayList<>(); + options1Items.clear(); + options1Items.add("1次"); + options1Items.add("2次"); + options1Items.add("3次"); + options1Items.add("4次"); + options1Items.add("5次"); + options1Items.add("6次"); + options1Items.add("7次"); + options1Items.add("8次"); + options1Items.add("9次"); + options1Items.add("10次"); + OptionsPickerView pvOptions = new OptionsPickerView.Builder(TemporaryKeySetActivity.this, new OptionsPickerView.OnOptionsSelectListener() { + @Override + public void onOptionsSelect(int options1, int option2, int options3, View v) { + //返回的分别是三个级别的选中位置 + String s = options1Items.get(options1); + textView.setVisibility(View.VISIBLE); + textView.setText(s); + } + }) + .setTextColorCenter(Color.BLACK)//设置选中项的颜色 + .build(); + pvOptions.setPicker(options1Items); + pvOptions.show(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FIND_DEVICES_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + LockKeyEntity obj = (LockKeyEntity) msg.obj; + Intent intent = new Intent(TemporaryKeySetActivity.this, TemporaryKeyActivity.class); + intent.putExtra("snapKey", obj.getData().getSnapKey()); + intent.putExtra("expireDate", obj.getData().getExpireDate()); + intent.putExtra("securityCode", timeSetTv.getText().toString().substring(0, timeSetTv.getText().toString().length() - 1)); + setResult(MODIFY_DEVICE_NAME, intent); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + break; + case FIND_DEVICES_FAIL: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/gateway/UnlockRecordActivity.java b/app/src/main/java/com/yonsz/z1/gateway/UnlockRecordActivity.java new file mode 100644 index 0000000..8893b30 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/gateway/UnlockRecordActivity.java @@ -0,0 +1,331 @@ +package com.yonsz.z1.gateway; + +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entity5.LockLogEntity; +import com.yonsz.z1.listener.OnRecyclerLoadDataListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.mydevice.DeviceLogEntity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LoadMoreRecyclerView; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_FAIL; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.FIND_DOORLOCK_RECORDS; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_DOORLOCK_RECORDS; + +/** + * Created by Administrator on 2018/6/4. + */ + +public class UnlockRecordActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout mNoRecord; + private int DATA_TYPE; + private LoadingDialog mLoadingDialog; + private boolean isRefresh; + private boolean isLoadMore; + private int page = 1; + private List mDatas; + private List> mDatasRercord = new ArrayList<>(); + private LoadMoreRecyclerView mLogRecycler; + private LockLogAdapter mLogAdapter; + private RelativeLayout ll_no_record; + + /** + * json 转 List + */ + private List jsonToList(String jsonString, Class clazz) { + @SuppressWarnings("unchecked") + List ts = (List) JSONArray.parseArray(jsonString, clazz); + return ts; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_state_log); + initView(); + initListener(); + DATA_TYPE = Constans.REFRESH_DATA; + initLoadDialog(); + loadListViewData(page); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_LOG_SUCCESS: + if (mLoadingDialog != null && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + int arg1 = msg.arg1; + if (msg.obj != null && page <= arg1) { + ll_no_record.setVisibility(View.GONE); + onSuccess((List) msg.obj); + } else { + if (page == 1) { + ll_no_record.setVisibility(View.VISIBLE); + } else { + Toast.makeText(this, "我是有底线的", Toast.LENGTH_LONG).show(); + } + } + break; + case GET_LOG_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case TRUNCATE_LISTINFO_SUCCESS: + mDatasRercord.clear(); + mLogAdapter.notifyDataSetChanged(); + break; + case TRUNCATE_LISTINFO_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void loadListViewData(int page) { + //当有网络的时候 + if (DensityUtil.isNetworkConnected(this)) { + if (null != getIntent().getExtras().get("deviceModel")) { + subsetDoorLockRecords(page); + } else { + findDoorLockRecords(page); + } + } + } + + + private void initView() { + ll_no_record = (RelativeLayout) findViewById(R.id.ll_no_record); + mTitleView = (TitleView) findViewById(R.id.title_unlock_record); + mTitleView.clearBackGroud(); + mTitleView.setHead("开锁记录"); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mLogRecycler = (LoadMoreRecyclerView) findViewById(R.id.log_recyclerview); + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(this); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mLogRecycler.setLayoutManager(manager); + mDatas = new ArrayList<>(); + mLogAdapter = new LockLogAdapter(this, mDatasRercord); + mNoRecord = (RelativeLayout) findViewById(R.id.ll_no_record); + mLogRecycler.setAdapter(mLogAdapter); + mLogRecycler.setOnLoadDataListener(new OnRecyclerLoadDataListener() { + @Override + public void onLoadMore() { + if (!isLoadMore) { + isLoadMore = true; + page++; + DATA_TYPE = Constans.MORE_DATA; + if (null != getIntent().getExtras().get("deviceModel")) { + subsetDoorLockRecords(page); + } else { + findDoorLockRecords(page); + } + } + } + }); + } + + private void initListener() { + + + } + + private synchronized void findDoorLockRecords(final int page) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("pageNo", "" + page); + // map.put("pageSize", "5"); + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + netWorkUtil.requestGetByAsy(FIND_DOORLOCK_RECORDS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("findDoorLockRecords", "onSuccess()" + respone); + LockLogEntity obj = JSON.parseObject(respone, LockLogEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_LOG_SUCCESS); + msg.obj = obj.getData().getRecords(); + msg.arg1 = obj.getData().getPages(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private synchronized void subsetDoorLockRecords(final int page) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("pageNo", "" + page); + map.put("pageSize", "20"); + map.put("deviceType", INTELLIGENT_DOOR_LOCK); + map.put("deviceModel", "2"); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + netWorkUtil.requestGetByAsy(SUBSET_DOORLOCK_RECORDS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("findDoorLockRecords", "onSuccess()" + respone); + LockLogEntity obj = JSON.parseObject(respone, LockLogEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_LOG_SUCCESS); + msg.obj = obj.getData().getRecords(); + msg.arg1 = obj.getData().getPages(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void onSuccess(List logEntities) { + //世界上最傻逼的操作 + for (int j = 0; j < mDatasRercord.size(); j++) { + for (int f = 0; f < logEntities.size(); f++) { + if (mDatasRercord.get(j).contains(logEntities.get(f))) { + logEntities.remove(logEntities.get(f)); + } + } + } + if (logEntities.size() > 0) { + String createDate = logEntities.get(0).getTime().substring(0, 10); + if (mDatasRercord.size() == 0 || (mDatasRercord.get(0) != null && logEntities != null && logEntities.size() > 0 && !logEntities.get(0).getId().equals(mDatasRercord.get(0).get(0).getId()))) { + if (DATA_TYPE == Constans.REFRESH_DATA) { + isRefresh = false; + mDatas = new ArrayList<>(); + mDatasRercord.clear(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getTime().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getTime().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + if (mDatas.size() == logEntities.size()) { + mDatasRercord.add(mDatas); + } else if (i == logEntities.size() - 1) { + mDatasRercord.add(mDatas); + } + } + } else { + isLoadMore = false; + if (mDatas != null && mDatas.get(mDatas.size() - 1).getTime().substring(0, 10).equals(createDate)) { + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getTime().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getTime().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } else { + mDatas = new ArrayList<>(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getTime().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getTime().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } + if (mDatasRercord.size() >= 2) { + if (mDatasRercord.get(0).get(0).getTime() == mDatasRercord.get(1).get(0).getTime()) { + mDatasRercord.remove(1); + } + if (mDatasRercord.get(mDatasRercord.size() - 1).get(0).getTime() == mDatasRercord.get(mDatasRercord.size() - 2).get(0).getTime()) { + mDatasRercord.remove(mDatasRercord.size() - 1); + } + } + } + mLogAdapter.notifyDataSetChanged(); + } else { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + isRefresh = false; + isLoadMore = false; + DATA_TYPE = -1; + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/AMapUtil.java b/app/src/main/java/com/yonsz/z1/homemanage/AMapUtil.java new file mode 100644 index 0000000..989faec --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/AMapUtil.java @@ -0,0 +1,111 @@ +package com.yonsz.z1.homemanage; + +import android.text.Html; +import android.text.Spanned; +import android.widget.EditText; + +import com.amap.api.maps2d.model.LatLng; +import com.amap.api.services.core.LatLonPoint; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * Created by Administrator on 2018/9/12. + */ + +public class AMapUtil { + public static final String HtmlBlack = "#000000"; + public static final String HtmlGray = "#808080"; + + /** + * 判断edittext是否null + */ + public static String checkEditText(EditText editText) { + if (editText != null && editText.getText() != null + && !(editText.getText().toString().trim().equals(""))) { + return editText.getText().toString().trim(); + } else { + return ""; + } + } + + public static Spanned stringToSpan(String src) { + return src == null ? null : Html.fromHtml(src.replace("\n", "
")); + } + + public static String colorFont(String src, String color) { + StringBuffer strBuf = new StringBuffer(); + + strBuf.append("").append(src) + .append(""); + return strBuf.toString(); + } + + public static String makeHtmlNewLine() { + return "
"; + } + + public static String makeHtmlSpace(int number) { + final String space = " "; + StringBuilder result = new StringBuilder(); + for (int i = 0; i < number; i++) { + result.append(space); + } + return result.toString(); + } + + public static boolean IsEmptyOrNullString(String s) { + return (s == null) || (s.trim().length() == 0); + } + + /** + * 把LatLng对象转化为LatLonPoint对象 + */ + public static LatLonPoint convertToLatLonPoint(LatLng latlon) { + return new LatLonPoint(latlon.latitude, latlon.longitude); + } + + /** + * 把LatLonPoint对象转化为LatLon对象 + */ + public static LatLng convertToLatLng(LatLonPoint latLonPoint) { + return new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude()); + } + + /** + * 把集合体的LatLonPoint转化为集合体的LatLng + */ + public static ArrayList convertArrList(List shapes) { + ArrayList lineShapes = new ArrayList(); + for (LatLonPoint point : shapes) { + LatLng latLngTemp = AMapUtil.convertToLatLng(point); + lineShapes.add(latLngTemp); + } + return lineShapes; + } + + /** + * long类型时间格式化 + */ + public static String convertToTime(long time) { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(time); + return df.format(date); + } + + public static String getFriendlyTime(int second) { + if (second > 3600) { + int hour = second / 3600; + int miniate = (second % 3600) / 60; + return hour + "小时" + miniate + "分钟"; + } + if (second >= 60) { + int miniate = second / 60; + return miniate + "分钟"; + } + return second + "秒"; + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/CheckPermissionsActivity.java b/app/src/main/java/com/yonsz/z1/homemanage/CheckPermissionsActivity.java new file mode 100644 index 0000000..ca160de --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/CheckPermissionsActivity.java @@ -0,0 +1,206 @@ +/** + * + */ +package com.yonsz.z1.homemanage; + +import android.Manifest; +import android.annotation.TargetApi; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Build; +import android.os.Message; +import android.provider.Settings; +import android.view.KeyEvent; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +/** + * 继承了Activity,实现Android6.0的运行时权限检测 + * 需要进行运行时权限检测的Activity可以继承这个类 + * + * @创建时间:2016年5月27日 下午3:01:31 + * @项目名称: AMapLocationDemo + * @author hongming.wang + * @文件名称:PermissionsChecker.java + * @类型名称:PermissionsChecker + * @since 2.5.0 + */ +public class CheckPermissionsActivity extends BaseActivity { + /** + * 需要进行检测的权限数组 + */ + protected String[] needPermissions = { + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE + }; + + private static final int PERMISSON_REQUESTCODE = 0; + + /** + * 判断是否需要检测,防止不停的弹框 + */ + private boolean isNeedCheck = true; + + @Override + public void callBackUiThread(Message msg) { + + } + + @Override + public void onResume() { + super.onResume(); + if (Build.VERSION.SDK_INT >= 23 + && getApplicationInfo().targetSdkVersion >= 23) { + if (isNeedCheck) { + checkPermissions(needPermissions); + } + } + } + + /** + * + * @param permissions + * @since 2.5.0 + * + */ + private void checkPermissions(String... permissions) { + try { + if (Build.VERSION.SDK_INT >= 23 + && getApplicationInfo().targetSdkVersion >= 23) { + List needRequestPermissonList = findDeniedPermissions(permissions); + if (null != needRequestPermissonList + && needRequestPermissonList.size() > 0) { + String[] array = needRequestPermissonList.toArray(new String[needRequestPermissonList.size()]); + Method method = getClass().getMethod("requestPermissions", new Class[]{String[].class, + int.class}); + + method.invoke(this, array, PERMISSON_REQUESTCODE); + } + } + } catch (Throwable e) { + } + } + + /** + * 获取权限集中需要申请权限的列表 + * + * @param permissions + * @return + * @since 2.5.0 + * + */ + private List findDeniedPermissions(String[] permissions) { + List needRequestPermissonList = new ArrayList(); + if (Build.VERSION.SDK_INT >= 23 + && getApplicationInfo().targetSdkVersion >= 23){ + try { + for (String perm : permissions) { + Method checkSelfMethod = getClass().getMethod("checkSelfPermission", String.class); + Method shouldShowRequestPermissionRationaleMethod = getClass().getMethod("shouldShowRequestPermissionRationale", + String.class); + if ((Integer)checkSelfMethod.invoke(this, perm) != PackageManager.PERMISSION_GRANTED + || (Boolean)shouldShowRequestPermissionRationaleMethod.invoke(this, perm)) { + needRequestPermissonList.add(perm); + } + } + } catch (Throwable e) { + + } + } + return needRequestPermissonList; + } + + /** + * 检测是否所有的权限都已经授权 + * @param grantResults + * @return + * @since 2.5.0 + * + */ + private boolean verifyPermissions(int[] grantResults) { + for (int result : grantResults) { + if (result != PackageManager.PERMISSION_GRANTED) { + return false; + } + } + return true; + } + + @TargetApi(23) + public void onRequestPermissionsResult(int requestCode, + String[] permissions, int[] paramArrayOfInt) { + if (requestCode == PERMISSON_REQUESTCODE) { + if (!verifyPermissions(paramArrayOfInt)) { + showMissingPermissionDialog(); + isNeedCheck = false; + } + } + } + + /** + * 显示提示信息 + * + * @since 2.5.0 + * + */ + private void showMissingPermissionDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.notifyTitle); + builder.setMessage(R.string.notifyMsg); + + // 拒绝, 退出应用 + builder.setNegativeButton(R.string.cancel, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + finish(); + } + }); + + builder.setPositiveButton(R.string.settings, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startAppSettings(); + } + }); + + builder.setCancelable(false); + + builder.show(); + } + + /** + * 启动应用的设置 + * + * @since 2.5.0 + * + */ + private void startAppSettings() { + Intent intent = new Intent( + Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + intent.setData(Uri.parse("package:" + getPackageName())); + startActivity(intent); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(keyCode == KeyEvent.KEYCODE_BACK){ + this.finish(); + return true; + } + return super.onKeyDown(keyCode, event); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/Const.java b/app/src/main/java/com/yonsz/z1/homemanage/Const.java new file mode 100644 index 0000000..3bf4f33 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/Const.java @@ -0,0 +1,27 @@ +package com.yonsz.z1.homemanage; + +import android.graphics.Color; + +/** + * @since 3.3.0 + * Created by hongming.wang on 2016/12/19. + */ + +public class Const { + /** + * 地图中绘制多边形、圆形的边界颜色 + * @since 3.3.0 + */ + public static final int STROKE_COLOR = Color.argb(180, 63, 145, 252); + /** + * 地图中绘制多边形、圆形的填充颜色 + * @since 3.3.0 + */ + public static final int FILL_COLOR = Color.argb(163, 118, 212, 243); + + /** + * 地图中绘制多边形、圆形的边框宽度 + * @since 3.3.0 + */ + public static final float STROKE_WIDTH = 5F; +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/DeviceMoveFamilyActivity.java b/app/src/main/java/com/yonsz/z1/homemanage/DeviceMoveFamilyActivity.java new file mode 100644 index 0000000..1352f89 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/DeviceMoveFamilyActivity.java @@ -0,0 +1,193 @@ +package com.yonsz.z1.homemanage; + +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import android.widget.Button; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.MOVE_DEVICE_FAIL; +import static com.yonsz.z1.net.Constans.MOVE_DEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_SUCCESS; + +/** + * Created by Administrator on 2018/9/12. + */ + +public class DeviceMoveFamilyActivity extends BaseActivity { + private TitleView mTitleView; + private RecyclerView homeManagerRv; + private List homeList; + private HomeMoveAdapter mHomeMoveAdapter; + private int currrentPosition = -1; + private Button mSureButton; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_move_famliy); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + queryHouses(); + } + + private void initView() { + homeList = new ArrayList<>(); + homeManagerRv = (RecyclerView) findViewById(R.id.rv_home_manage); + mSureButton = (Button) findViewById(R.id.button_move_complete); + mTitleView = (TitleView) findViewById(R.id.title_move_family); + mTitleView.setHead("场所列表"); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mHomeMoveAdapter = new HomeMoveAdapter(this, homeList); + RecyclerViewNoBugLinearLayoutManager manage1 = new RecyclerViewNoBugLinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + homeManagerRv.setHasFixedSize(true); + homeManagerRv.setLayoutManager(manage1); + homeManagerRv.setAdapter(mHomeMoveAdapter); + + mHomeMoveAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + currrentPosition = position; + } + }); + + mSureButton.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (currrentPosition != -1) { + moveDevice(); + } else { + ToastUtil.show(DeviceMoveFamilyActivity.this, "请选择一个家庭"); + } + } + }); + } + + private void moveDevice() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("houseId", homeList.get(currrentPosition).getId()); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.MOVE_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("moveDevice", "SolidVersionActivity onSuccess()" + respone); + DeviceSimpleEntity obj = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(MOVE_DEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(MOVE_DEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(MOVE_DEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case QUERY_HOUSES_SUCCESS: + HomeListEntity homeListEntity = (HomeListEntity) msg.obj; + homeList.clear(); + homeList.addAll(homeListEntity.getData()); + mHomeMoveAdapter.notifyDataSetChanged(); + break; + case MOVE_DEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case MOVE_DEVICE_SUCCESS: + ToastUtil.show(this, R.string.Turn_out_success); + // queryHouses(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + break; + } + } + + private void queryHouses() { + HashMap map = new HashMap<>(); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.QUERY_HOUSES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryHouses", "UpdatePwActivity onSuccess()" + respone); + HomeListEntity obj = JSON.parseObject(respone, HomeListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/DeviceNumberActivity.java b/app/src/main/java/com/yonsz/z1/homemanage/DeviceNumberActivity.java new file mode 100644 index 0000000..72955f7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/DeviceNumberActivity.java @@ -0,0 +1,144 @@ +package com.yonsz.z1.homemanage; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; + +/** + * Created by Administrator on 2018/9/12. + */ + +public class DeviceNumberActivity extends BaseActivity { + private TitleView mTitleView; + private TextView deviceNumberTv; + private RecyclerView deviceNumberRv; + private HomeNumberAdapter mHomeNumberAdapter; + private List dataBeanList; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_number); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + getUserDevices4SimpleInfo(); + } + + private void initView() { + dataBeanList = new ArrayList<>(); + deviceNumberTv = (TextView) findViewById(R.id.tv_device_number); + deviceNumberRv = (RecyclerView) findViewById(R.id.rv_device_number); + mTitleView = (TitleView) findViewById(R.id.title_device_number); + mTitleView.setHead("设备数量"); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + + mHomeNumberAdapter = new HomeNumberAdapter(this, dataBeanList); + LinearLayoutManager manage1 = new LinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + deviceNumberRv.setHasFixedSize(true); + deviceNumberRv.setLayoutManager(manage1); + deviceNumberRv.setAdapter(mHomeNumberAdapter); + + mHomeNumberAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + Intent intent = new Intent(DeviceNumberActivity.this, DeviceMoveFamilyActivity.class); + intent.putExtra("ziId", dataBeanList.get(position).getZiId()); + startActivity(intent); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + DeviceSimpleEntity simpleEntity = (DeviceSimpleEntity) msg.obj; + dataBeanList.clear(); + if (null != simpleEntity.getData()) { + deviceNumberTv.setText("已有" + simpleEntity.getData().size() + "台设备"); + dataBeanList.addAll(simpleEntity.getData()); + mHomeNumberAdapter.notifyDataSetChanged(); + } else { + deviceNumberTv.setText("已有0台设备"); + } + break; + } + } + + + private void getUserDevices4SimpleInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", getIntent().getExtras().get("id").toString()); + netWorkUtil.requestPostByAsynew(NetWorkUrl.GET_USERDEVICES4_SIMPLEINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getUserDevices4", "SolidVersionActivity onSuccess()" + respone); + DeviceSimpleEntity obj = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/GeoFence_Round_Activity.java b/app/src/main/java/com/yonsz/z1/homemanage/GeoFence_Round_Activity.java new file mode 100644 index 0000000..8b9a5c9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/GeoFence_Round_Activity.java @@ -0,0 +1,594 @@ +package com.yonsz.z1.homemanage; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.amap.api.fence.GeoFence; +import com.amap.api.fence.GeoFenceClient; +import com.amap.api.fence.GeoFenceListener; +import com.amap.api.location.AMapLocation; +import com.amap.api.location.AMapLocationClient; +import com.amap.api.location.AMapLocationClientOption; +import com.amap.api.location.AMapLocationClientOption.AMapLocationMode; +import com.amap.api.location.AMapLocationListener; +import com.amap.api.location.DPoint; +import com.amap.api.maps.AMap; +import com.amap.api.maps.AMap.OnMapClickListener; +import com.amap.api.maps.CameraUpdateFactory; +import com.amap.api.maps.LocationSource; +import com.amap.api.maps.MapView; +import com.amap.api.maps.model.BitmapDescriptor; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.CircleOptions; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.LatLngBounds; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.MyLocationStyle; +import com.amap.api.maps.model.PolygonOptions; +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * 圆形地理围栏 + * + * @author hongming.wang + * @since 3.2.0 + */ +public class GeoFence_Round_Activity extends CheckPermissionsActivity + implements + OnClickListener, + GeoFenceListener, + OnMapClickListener, + LocationSource, + AMapLocationListener, + OnCheckedChangeListener { + + // 地理围栏的广播action + private static final String GEOFENCE_BROADCAST_ACTION = "com.example.geofence.round"; + Object lock = new Object(); + List fenceList = new ArrayList(); + private View lyOption; + private TextView tvGuide; + private TextView tvResult; + private EditText etCustomId; + private EditText etRadius; + private CheckBox cbAlertIn; + private CheckBox cbAlertOut; + private CheckBox cbAldertStated; + private Button btAddFence; + private Button btOption; + /** + * 用于显示当前的位置 + *

+ * 示例中是为了显示当前的位置,在实际使用中,单独的地理围栏可以不使用定位接口 + *

+ */ + private AMapLocationClient mlocationClient; + private OnLocationChangedListener mListener; + private AMapLocationClientOption mLocationOption; + private MapView mMapView; + private AMap mAMap; + // 中心点坐标 + private LatLng centerLatLng = null; + // 中心点marker + private Marker centerMarker; + private BitmapDescriptor ICON_YELLOW = BitmapDescriptorFactory + .defaultMarker(BitmapDescriptorFactory.HUE_YELLOW); + private BitmapDescriptor ICON_RED = BitmapDescriptorFactory + .defaultMarker(BitmapDescriptorFactory.HUE_RED); + private MarkerOptions markerOption = null; + private List markerList = new ArrayList(); + // 当前的坐标点集合,主要用于进行地图的可视区域的缩放 + private LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); + // 地理围栏客户端 + private GeoFenceClient fenceClient = null; + // 要创建的围栏半径 + private float fenceRadius = 0.0F; + // 触发地理围栏的行为,默认为进入提醒 + private int activatesAction = GeoFenceClient.GEOFENCE_IN; + // 记录已经添加成功的围栏 + private HashMap fenceMap = new HashMap(); + Handler handler = new Handler() { + public void handleMessage(Message msg) { + switch (msg.what) { + case 0: + StringBuffer sb = new StringBuffer(); + sb.append("添加围栏成功"); + String customId = (String) msg.obj; + if (!TextUtils.isEmpty(customId)) { + sb.append("customId: ").append(customId); + } + Toast.makeText(getApplicationContext(), sb.toString(), + Toast.LENGTH_SHORT).show(); + drawFence2Map(); + break; + case 1: + int errorCode = msg.arg1; + Toast.makeText(getApplicationContext(), + "添加围栏失败 " + errorCode, Toast.LENGTH_SHORT).show(); + break; + case 2: + String statusStr = (String) msg.obj; + tvResult.setVisibility(View.VISIBLE); + tvResult.append(statusStr + "\n"); + break; + default: + break; + } + } + }; + /** + * 接收触发围栏后的广播,当添加围栏成功之后,会立即对所有围栏状态进行一次侦测,如果当前状态与用户设置的触发行为相符将会立即触发一次围栏广播; + * 只有当触发围栏之后才会收到广播,对于同一触发行为只会发送一次广播不会重复发送,除非位置和围栏的关系再次发生了改变。 + */ + private BroadcastReceiver mGeoFenceReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + // 接收广播 + if (intent.getAction().equals(GEOFENCE_BROADCAST_ACTION)) { + Bundle bundle = intent.getExtras(); + String customId = bundle + .getString(GeoFence.BUNDLE_KEY_CUSTOMID); + String fenceId = bundle.getString(GeoFence.BUNDLE_KEY_FENCEID); + //status标识的是当前的围栏状态,不是围栏行为 + int status = bundle.getInt(GeoFence.BUNDLE_KEY_FENCESTATUS); + StringBuffer sb = new StringBuffer(); + switch (status) { + case GeoFence.STATUS_LOCFAIL: + sb.append("定位失败"); + break; + case GeoFence.STATUS_IN: + sb.append("进入围栏 "); + break; + case GeoFence.STATUS_OUT: + sb.append("离开围栏 "); + break; + case GeoFence.STATUS_STAYED: + sb.append("停留在围栏内 "); + break; + default: + break; + } + if (status != GeoFence.STATUS_LOCFAIL) { + if (!TextUtils.isEmpty(customId)) { + sb.append(" customId: " + customId); + } + sb.append(" fenceId: " + fenceId); + } + String str = sb.toString(); + Message msg = Message.obtain(); + msg.obj = str; + msg.what = 2; + handler.sendMessage(msg); + } + } + }; + + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_geofence_new); + setTitle(R.string.roundGeoFence); + // 初始化地理围栏 + fenceClient = new GeoFenceClient(getApplicationContext()); + + lyOption = findViewById(R.id.ly_option); + btAddFence = (Button) findViewById(R.id.bt_addFence); + btOption = (Button) findViewById(R.id.bt_option); + tvGuide = (TextView) findViewById(R.id.tv_guide); + etCustomId = (EditText) findViewById(R.id.et_customId); + etRadius = (EditText) findViewById(R.id.et_radius); + + cbAlertIn = (CheckBox) findViewById(R.id.cb_alertIn); + cbAlertOut = (CheckBox) findViewById(R.id.cb_alertOut); + cbAldertStated = (CheckBox) findViewById(R.id.cb_alertStated); + + tvResult = (TextView) findViewById(R.id.tv_result); + tvResult.setVisibility(View.GONE); + mMapView = (MapView) findViewById(R.id.map); + mMapView.onCreate(savedInstanceState); + markerOption = new MarkerOptions().draggable(true); + init(); + } + + void init() { + if (mAMap == null) { + mAMap = mMapView.getMap(); + mAMap.getUiSettings().setRotateGesturesEnabled(false); + mAMap.moveCamera(CameraUpdateFactory.zoomBy(6)); + setUpMap(); + } + + btOption.setVisibility(View.VISIBLE); + btOption.setText(getString(R.string.hideOption)); + resetView_round(); + + btAddFence.setOnClickListener(this); + btOption.setOnClickListener(this); + cbAlertIn.setOnCheckedChangeListener(this); + cbAlertOut.setOnCheckedChangeListener(this); + cbAldertStated.setOnCheckedChangeListener(this); + + IntentFilter filter = new IntentFilter(); + filter.addAction(GEOFENCE_BROADCAST_ACTION); + registerReceiver(mGeoFenceReceiver, filter); + + /** + * 创建pendingIntent + */ + fenceClient.createPendingIntent(GEOFENCE_BROADCAST_ACTION); + fenceClient.setGeoFenceListener(this); + /** + * 设置地理围栏的触发行为,默认为进入 + */ + fenceClient.setActivateAction(GeoFenceClient.GEOFENCE_IN); + } + + /** + * 设置一些amap的属性 + */ + private void setUpMap() { + mAMap.setOnMapClickListener(this); + mAMap.setLocationSource(this);// 设置定位监听 + mAMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示 + // 自定义系统定位蓝点 + MyLocationStyle myLocationStyle = new MyLocationStyle(); + // 自定义定位蓝点图标 + myLocationStyle.myLocationIcon( + BitmapDescriptorFactory.fromResource(R.drawable.gps_point)); + // 自定义精度范围的圆形边框颜色 + myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0)); + // 自定义精度范围的圆形边框宽度 + myLocationStyle.strokeWidth(0); + // 设置圆形的填充颜色 + myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0)); + // 将自定义的 myLocationStyle 对象添加到地图上 + mAMap.setMyLocationStyle(myLocationStyle); + mAMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false + // 设置定位的类型为定位模式 ,可以由定位、跟随或地图根据面向方向旋转几种 + mAMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE); + } + + /** + * 方法必须重写 + */ + @Override + public void onResume() { + super.onResume(); + mMapView.onResume(); + } + + /** + * 方法必须重写 + */ + @Override + public void onPause() { + super.onPause(); + mMapView.onPause(); + deactivate(); + } + + /** + * 方法必须重写 + */ + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mMapView.onSaveInstanceState(outState); + } + + /** + * 方法必须重写 + */ + @Override + protected void onDestroy() { + super.onDestroy(); + mMapView.onDestroy(); + try { + unregisterReceiver(mGeoFenceReceiver); + } catch (Throwable e) { + } + + if (null != fenceClient) { + fenceClient.removeGeoFence(); + } + if (null != mlocationClient) { + mlocationClient.onDestroy(); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_addFence: + addFence(); + break; + case R.id.bt_option: + if (btOption.getText().toString() + .equals(getString(R.string.showOption))) { + lyOption.setVisibility(View.VISIBLE); + btOption.setText(getString(R.string.hideOption)); + } else { + lyOption.setVisibility(View.GONE); + btOption.setText(getString(R.string.showOption)); + } + break; + default: + break; + } + } + + private void drawFence(GeoFence fence) { + switch (fence.getType()) { + case GeoFence.TYPE_ROUND: + case GeoFence.TYPE_AMAPPOI: + drawCircle(fence); + break; + case GeoFence.TYPE_POLYGON: + case GeoFence.TYPE_DISTRICT: + drawPolygon(fence); + break; + default: + break; + } + + // // 设置所有maker显示在当前可视区域地图中 + // LatLngBounds bounds = boundsBuilder.build(); + // mAMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 150)); + + removeMarkers(); + } + + private void drawCircle(GeoFence fence) { + LatLng center = new LatLng(fence.getCenter().getLatitude(), + fence.getCenter().getLongitude()); + // 绘制一个圆形 + mAMap.addCircle(new CircleOptions().center(center) + .radius(fence.getRadius()).strokeColor(Const.STROKE_COLOR) + .fillColor(Const.FILL_COLOR).strokeWidth(Const.STROKE_WIDTH)); + boundsBuilder.include(center); + } + + private void drawPolygon(GeoFence fence) { + final List> pointList = fence.getPointList(); + if (null == pointList || pointList.isEmpty()) { + return; + } + for (List subList : pointList) { + List lst = new ArrayList(); + + PolygonOptions polygonOption = new PolygonOptions(); + for (DPoint point : subList) { + lst.add(new LatLng(point.getLatitude(), point.getLongitude())); + boundsBuilder.include( + new LatLng(point.getLatitude(), point.getLongitude())); + } + polygonOption.addAll(lst); + + polygonOption.strokeColor(Const.STROKE_COLOR) + .fillColor(Const.FILL_COLOR).strokeWidth(Const.STROKE_WIDTH); + mAMap.addPolygon(polygonOption); + } + } + + void drawFence2Map() { + new Thread() { + @Override + public void run() { + try { + synchronized (lock) { + if (null == fenceList || fenceList.isEmpty()) { + return; + } + for (GeoFence fence : fenceList) { + if (fenceMap.containsKey(fence.getFenceId())) { + continue; + } + drawFence(fence); + fenceMap.put(fence.getFenceId(), fence); + } + } + } catch (Throwable e) { + + } + } + }.start(); + } + + @Override + public void onGeoFenceCreateFinished(final List geoFenceList, + int errorCode, String customId) { + Message msg = Message.obtain(); + if (errorCode == GeoFence.ADDGEOFENCE_SUCCESS) { + fenceList.addAll(geoFenceList); + msg.obj = customId; + msg.what = 0; + } else { + msg.arg1 = errorCode; + msg.what = 1; + } + handler.sendMessage(msg); + } + + @Override + public void onMapClick(LatLng latLng) { + markerOption.icon(ICON_YELLOW); + centerLatLng = latLng; + addCenterMarker(centerLatLng); + tvGuide.setBackgroundColor(getResources().getColor(R.color.z1_999999)); + tvGuide.setText("选中的坐标:" + centerLatLng.longitude + "," + + centerLatLng.latitude); + } + + /** + * 定位成功后回调函数 + */ + @Override + public void onLocationChanged(AMapLocation amapLocation) { + if (mListener != null && amapLocation != null) { + if (amapLocation != null && amapLocation.getErrorCode() == 0) { + tvResult.setVisibility(View.GONE); + mListener.onLocationChanged(amapLocation);// 显示系统小蓝点 + } else { + String errText = "定位失败," + amapLocation.getErrorCode() + ": " + + amapLocation.getErrorInfo(); + Log.e("AmapErr", errText); + tvResult.setVisibility(View.VISIBLE); + tvResult.setText(errText); + } + } + } + + /** + * 激活定位 + */ + @Override + public void activate(OnLocationChangedListener listener) { + mListener = listener; + if (mlocationClient == null) { + mlocationClient = new AMapLocationClient(this); + mLocationOption = new AMapLocationClientOption(); + // 设置定位监听 + mlocationClient.setLocationListener(this); + // 设置为高精度定位模式 + mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); + // 只是为了获取当前位置,所以设置为单次定位 + mLocationOption.setOnceLocation(true); + // 设置定位参数 + mlocationClient.setLocationOption(mLocationOption); + mlocationClient.startLocation(); + } + } + + /** + * 停止定位 + */ + @Override + public void deactivate() { + mListener = null; + if (mlocationClient != null) { + mlocationClient.stopLocation(); + mlocationClient.onDestroy(); + } + mlocationClient = null; + } + + private void addCenterMarker(LatLng latlng) { + if (null == centerMarker) { + centerMarker = mAMap.addMarker(markerOption); + } + centerMarker.setPosition(latlng); + markerList.add(centerMarker); + } + + private void removeMarkers() { + if (null != centerMarker) { + centerMarker.remove(); + centerMarker = null; + } + if (null != markerList && markerList.size() > 0) { + for (Marker marker : markerList) { + marker.remove(); + } + markerList.clear(); + } + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + switch (buttonView.getId()) { + case R.id.cb_alertIn: + if (isChecked) { + activatesAction |= GeoFenceClient.GEOFENCE_IN; + } else { + activatesAction = activatesAction + & (GeoFenceClient.GEOFENCE_OUT + | GeoFenceClient.GEOFENCE_STAYED); + } + break; + case R.id.cb_alertOut: + if (isChecked) { + activatesAction |= GeoFenceClient.GEOFENCE_OUT; + } else { + activatesAction = activatesAction + & (GeoFenceClient.GEOFENCE_IN + | GeoFenceClient.GEOFENCE_STAYED); + } + break; + case R.id.cb_alertStated: + if (isChecked) { + activatesAction |= GeoFenceClient.GEOFENCE_STAYED; + } else { + activatesAction = activatesAction + & (GeoFenceClient.GEOFENCE_IN + | GeoFenceClient.GEOFENCE_OUT); + } + break; + default: + break; + } + if (null != fenceClient) { + fenceClient.setActivateAction(activatesAction); + } + } + + private void resetView_round() { + etRadius.setHint("围栏半径"); + etRadius.setVisibility(View.VISIBLE); + tvGuide.setBackgroundColor(getResources().getColor(R.color.z1_ff0000)); + tvGuide.setText("请点击地图选择围栏的中心点"); + tvGuide.setVisibility(View.VISIBLE); + } + + /** + * 添加围栏 + * + * @author hongming.wang + * @since 3.2.0 + */ + private void addFence() { + addRoundFence(); + } + + /** + * 添加圆形围栏 + * + * @author hongming.wang + * @since 3.2.0 + */ + private void addRoundFence() { + String customId = etCustomId.getText().toString(); + String radiusStr = etRadius.getText().toString(); + if (null == centerLatLng + || TextUtils.isEmpty(radiusStr)) { + Toast.makeText(getApplicationContext(), "参数不全", Toast.LENGTH_SHORT) + .show(); + return; + } + + DPoint centerPoint = new DPoint(centerLatLng.latitude, + centerLatLng.longitude); + fenceRadius = Float.parseFloat(radiusStr); + fenceClient.addGeoFence(centerPoint, fenceRadius, customId); + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/HomeGroupActivity.java b/app/src/main/java/com/yonsz/z1/homemanage/HomeGroupActivity.java new file mode 100644 index 0000000..26eaa5e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/HomeGroupActivity.java @@ -0,0 +1,576 @@ +package com.yonsz.z1.homemanage; + +import android.Manifest; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.qw.soul.permission.SoulPermission; +import com.qw.soul.permission.bean.Permission; +import com.qw.soul.permission.callbcak.CheckRequestPermissionListener; +import com.yanzhenjie.recyclerview.swipe.SwipeItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuBridge; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItem; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ModifyDeviceEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.HomeGroupEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.PhoneAreaActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.mydevice.PhoneAdressActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.KeyboardUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.VerificationUtils; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.io.IOException; +import java.util.HashMap; + +import okhttp3.Response; +import okhttp3.ResponseBody; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.login.register.RegisterActivity.getRandomString; +import static com.yonsz.z1.net.Constans.DEL_ERROR_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.DEL_ERROR_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_PHONE_AREA; +import static com.yonsz.z1.net.Constans.GET_PHONE_NUMBER; +import static com.yonsz.z1.net.Constans.QUERY_SHARE_LIST_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_SHARE_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.SHARE_DEVICE_FAIL; +import static com.yonsz.z1.net.Constans.SHARE_DEVICE_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.DEL_SHARER_HOUSE; +import static com.yonsz.z1.net.NetWorkUrl.PIC_CODE; + +/** + * Created by Administrator on 2018/9/12. + */ + +public class HomeGroupActivity extends BaseActivity implements SwipeItemClickListener { + private EditText editText, editTextCode;//输入文本框 + private TextView number;//显示还剩多少字 + private int numbers = 11;//默认30 + private String textcontent = "";//保存输入30个字符 + private TitleView mTitle; + private Button addBt, addPhoneBt; + private SwipeMenuRecyclerView myShareListView; + private HomeGroupAdapter mAdapter; + private HomeGroupEntity entity1; + private HomeGroupEntity.DataBean mObjEntity; + private int isOwner; + private ImageView renovateIv, renovateRefresh; + private RelativeLayout rl_isOwner; + private LinearLayout phoneAreaLl; + private TextView phoneArea; + //输入框变化 + private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + int i = s.length(); + if (i > 11) { + ToastUtil.show(getApplicationContext(), "超过11字符"); + } + + if (i <= 11) { + number.setText(numbers - i + ""); + textcontent = s.toString(); + } else { + editText.setText(textcontent); + editText.setSelection(textcontent.length()); + } + + if (i != 0) { + addBt.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + addBt.setEnabled(true); + } else { + addBt.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + addBt.setEnabled(false); + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable arg0) { + + } + }; + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.y70); + + // 1. MATCH_PARENT 自适应高度,保持和Item一样高; + // 2. 指定具体的高,比如80; + // 3. WRAP_CONTENT,自身高度,不推荐; + int height = getResources().getDimensionPixelSize(R.dimen.y70); + // int height = ViewGroup.LayoutParams.MATCH_PARENT; + // 添加右侧的,如果不添加,则右侧不会出现菜单。 + { + SwipeMenuItem deleteItem = new SwipeMenuItem(HomeGroupActivity.this) + .setBackground(R.color.z1_ff0120) + .setText(R.string.delete) + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + if (isOwner == 1) { + swipeRightMenu.addMenuItem(deleteItem);// 添加菜单到右侧。 + } + } + } + }; + /** + * RecyclerView的Item的Menu点击监听。 + */ + private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() { + @Override + public void onItemClick(SwipeMenuBridge menuBridge) { + menuBridge.closeMenu(); + + int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。 + final int adapterPosition = menuBridge.getAdapterPosition(); // RecyclerView的Item的position。 + int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。 + + if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) { + switch (menuPosition) { + case 0: + if (entity1.getData().get(adapterPosition).getLoginName().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + ToastUtil.show(HomeGroupActivity.this, "不能删除自己的家庭"); + return; + } + ConfirmDialog dialog = new ConfirmDialog(HomeGroupActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + //取消分享 + delSharerHouse(adapterPosition); + break; + } + } + }); + dialog.setContent("删除后,该成员将失去该家的所有权限?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + } + } + } + }; + private LoadingDialog mLoadingDialog; + private String randomString = ""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); + setContentView(R.layout.activity_home_group); + initView(); + initData(); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + View view = getCurrentFocus(); + KeyboardUtil.hideKeyboard(ev, view, HomeGroupActivity.this);//调用方法判断是否需要隐藏键盘 + break; + + default: + break; + } + return super.dispatchTouchEvent(ev); + } + + private void initView() { + phoneAreaLl = (LinearLayout) findViewById(R.id.ll_phone_area); + phoneArea = (TextView) findViewById(R.id.tv_phone_area); + isOwner = (int) getIntent().getExtras().get("isOwner"); + rl_isOwner = (RelativeLayout) findViewById(R.id.rl_isOwner); + renovateIv = (ImageView) findViewById(R.id.iv_renovate); + renovateRefresh = (ImageView) findViewById(R.id.iv_renovate_refresh); + myShareListView = (SwipeMenuRecyclerView) findViewById(R.id.my_share_list); + addBt = (Button) findViewById(R.id.bt_share_add); + addPhoneBt = (Button) findViewById(R.id.bt_share_add_phone); + number = (TextView) findViewById(R.id.number); + editText = (EditText) findViewById(R.id.editText); + mTitle = (TitleView) findViewById(R.id.title_home_group); + editTextCode = (EditText) findViewById(R.id.editText_code); + mTitle.setHead(R.string.home_group); + mTitle.clearBackGroud(); + mTitle.setHeadColor(Color.BLACK); + mTitle.setBackFuntion(R.drawable.icon_nav_back_black); + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + } + + @Override + public void onFunctionText() { + + } + }); + textcontent = editText.getText().toString(); + addBt.setOnClickListener(this); + phoneAreaLl.setOnClickListener(this); + addBt.setEnabled(false); + addPhoneBt.setOnClickListener(this); + renovateRefresh.setOnClickListener(this); + + if (isOwner != 1) { + rl_isOwner.setVisibility(View.GONE); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_share_add: + if (VerificationUtils.checkPhoneNumber(editText.getText().toString().trim(), phoneArea.getText().toString())) { + if (editText.getText().toString().trim().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + ToastUtil.show(HomeGroupActivity.this, R.string.phone_to_myself); + } else { + shareHouse(); + } + } else { + ToastUtil.show(HomeGroupActivity.this, R.string.phone_error); + } + break; + case R.id.bt_share_add_phone: + SoulPermission.getInstance().checkAndRequestPermission(Manifest.permission.READ_CONTACTS, + new CheckRequestPermissionListener() { + @Override + public void onPermissionOk(Permission permission) { + Intent intent = new Intent(HomeGroupActivity.this, PhoneAdressActivity.class); + intent.putExtra("id", getIntent().getExtras().get("id").toString()); + intent.putExtra("tag", "2"); + startActivityForResult(intent, GET_PHONE_NUMBER); + } + + @Override + public void onPermissionDenied(Permission permission) { + // see CheckPermissionWithRationaleAdapter + /*if (permission.shouldRationale()) { + Toast.makeText(HomeGroupActivity.this, permission.toString() + + " \n you should show a explain for user then retry ", Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(HomeGroupActivity.this, permission.toString() + + " \n is refused you can not do next things", Toast.LENGTH_SHORT).show(); + }*/ + } + }); + break; + case R.id.iv_renovate_refresh: + picValidateCode(); + break; + case R.id.ll_phone_area: + Intent intent1 = new Intent(HomeGroupActivity.this, PhoneAreaActivity.class); + intent1.putExtra("type", "shareHome"); + startActivityForResult(intent1, GET_PHONE_AREA); + break; + } + } + + private void queryHouseMember() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", getIntent().getExtras().get("id").toString()); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.QUERY_HOUSE_MEMBER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + HomeGroupEntity obj = JSON.parseObject(respone, HomeGroupEntity.class); + Log.i("queryHouseMember", "HomeGroupActivity onSuccess()" + respone); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_SHARE_LIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_SHARE_LIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_SHARE_LIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void shareHouse() { + String phoneCode = phoneArea.getText().toString(); + String userId = editText.getText().toString().trim(); + String codeTrim = editTextCode.getText().toString().trim(); + if (TextUtils.isEmpty(userId)) { + ToastUtil.show(this, R.string.nickname_null); + return; + } + if (TextUtils.isEmpty(codeTrim)) { + ToastUtil.show(this, R.string.code_null); + return; + } + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + map.put("toPhone", userId); + map.put("houseId", getIntent().getExtras().get("id").toString()); + map.put("code", codeTrim); + map.put("randomStr", randomString); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.SHARE_HOUSE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("shareHouse", "HomeGroupActivity onSuccess()" + respone); + ModifyDeviceEntity obj = JSON.parseObject(respone, ModifyDeviceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SHARE_DEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SHARE_DEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SHARE_DEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initData() { + numbers = 11; + editText.addTextChangedListener(textWatcher); + number.setVisibility(View.GONE); + number.setText(11 + ""); + // queryShareList(); + } + + @Override + public void onResume() { + super.onResume(); + queryHouseMember(); + picValidateCode(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SHARE_DEVICE_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ModifyDeviceEntity entity = (ModifyDeviceEntity) msg.obj; + ToastUtil.show(this, entity.getMsg()); + queryHouseMember(); + break; + case SHARE_DEVICE_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case QUERY_SHARE_LIST_SUCCESS: + entity1 = new HomeGroupEntity(); + entity1 = (HomeGroupEntity) msg.obj; + if (entity1 != null && entity1.getData() != null) { + if (entity1.getData().size() != 0) { + mAdapter = new HomeGroupAdapter(entity1.getData(), this); + // myShareListView.setAdapter(mAdapter); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + myShareListView.setVisibility(View.VISIBLE); + myShareListView.setHasFixedSize(true); + myShareListView.setLayoutManager(manage); + myShareListView.setSwipeMenuCreator(swipeMenuCreator); + myShareListView.setSwipeMenuItemClickListener(mMenuItemClickListener); + myShareListView.setAdapter(mAdapter); + myShareListView.setSwipeItemClickListener(this); + } + } else { + myShareListView.setVisibility(View.GONE); + } + break; + case QUERY_SHARE_LIST_FAIL: + break; + case DEL_ERROR_STUDY_SUCCESS: + queryHouseMember(); + break; + } + } + + private void delSharerHouse(int adapterPosition) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", getIntent().getExtras().get("id").toString()); + map.put("partnerId", entity1.getData().get(adapterPosition).getUserId()); + netWorkUtil.requestPostByAsynewApi(DEL_SHARER_HOUSE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("delSharerHouse", "HomeGroupActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onItemClick(View itemView, int position) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void picValidateCode() { + randomString = getRandomString(8); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("randomStr", randomString); + netWorkUtil.requestGetByAsy(PIC_CODE, map, new NetWorkUtil.ReqCallBackOta() { + @Override + public void onSuccess(Response respone) { + ResponseBody body = respone.body(); + try { + byte[] bytes = body.bytes(); + final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + runOnUiThread(new Runnable() { + @Override + public void run() { + renovateIv.setImageBitmap(bitmap); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void onFail(String message) { + + } + }); + } + + /*private void picValidateCode() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestPostByAsyCode(PIC_VALIDATE_CODE, map, new NetWorkUtil.ReqCallBackOta() { + @Override + public void onSuccess(Response respone) { + ResponseBody body = respone.body(); + try { + byte[] bytes = body.bytes(); + final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + runOnUiThread(new Runnable() { + @Override + public void run() { + renovateIv.setImageBitmap(bitmap); + } + }); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void onFail(String message) { + + } + }); + }*/ + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case GET_PHONE_NUMBER: + if (data != null && data.getExtras().get("phoneNumber") != null) { + editText.setText(data.getExtras().get("phoneNumber").toString()); + } + break; + case GET_PHONE_AREA: + if (data != null && data.getExtras().get("phoneArea") != null) { + phoneArea.setText(data.getExtras().get("phoneArea").toString()); + } + break; + } + + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/HomeGroupAdapter.java b/app/src/main/java/com/yonsz/z1/homemanage/HomeGroupAdapter.java new file mode 100644 index 0000000..a9b3a66 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/HomeGroupAdapter.java @@ -0,0 +1,73 @@ +package com.yonsz.z1.homemanage; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity4.HomeGroupEntity; + +import java.util.List; + +/** + * Created by Administrator on 2017/7/26. + */ + +public class HomeGroupAdapter extends RecyclerView.Adapter { + private List mDatas; + private Context mContext; + + public HomeGroupAdapter(List datas, Context context) { + mDatas = datas; + mContext = context; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_share_group1, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public int getItemCount() { + return mDatas.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView phone; + private ImageView imgV; + private TextView state; + + + public MessageViewHolder(View view) { + super(view); + phone = (TextView) itemView.findViewById(R.id.phone); + imgV = (ImageView) itemView.findViewById(R.id.image); + state = (TextView) itemView.findViewById(R.id.state); + } + + public void setViews(final int position) { + phone.setText(mDatas.get(position).getLoginName()); + if (mDatas.get(position).getIsOwner() == 1) { + state.setText(R.string.master); + } else { + state.setText(R.string.member); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/HomeManageActivity.java b/app/src/main/java/com/yonsz/z1/homemanage/HomeManageActivity.java new file mode 100644 index 0000000..d1a603e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/HomeManageActivity.java @@ -0,0 +1,336 @@ +package com.yonsz.z1.homemanage; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.RelativeLayout; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.CreateFamilyActivity; +import com.yonsz.z1.database.entity.entity4.FamilyInfoEntity; +import com.yonsz.z1.database.entity.entity4.HomeDetailEntity; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.QUERY_FAMILY_INFO_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_FAMILY_INFO_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_SUCCESS; + +/** + * Created by Administrator on 2018/9/11. + */ + +public class HomeManageActivity extends BaseActivity { + private TitleView mTitleView; + private RecyclerView homeManagerRv; + private CheckBox autoChangeHomeCb; + private List homeList; + private HomeManageAdapter mHomeManageAdapter; + private RelativeLayout bulidNewHomeRl; + private LoadingDialog mLoadingDialog; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_home_manage); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + queryHouses(); + queryFamilyInfo(); + } + + private void initView() { + homeList = new ArrayList<>(); + bulidNewHomeRl = (RelativeLayout) findViewById(R.id.rl_new_build_home); + autoChangeHomeCb = (CheckBox) findViewById(R.id.cb_auto_change_home); + homeManagerRv = (RecyclerView) findViewById(R.id.rv_home_manage); + mTitleView = (TitleView) findViewById(R.id.title_home_manage); + mTitleView.setHead(R.string.home_manage); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + autoChangeHomeCb.setOnClickListener(this); + bulidNewHomeRl.setOnClickListener(this); + + mHomeManageAdapter = new HomeManageAdapter(this, homeList); + RecyclerViewNoBugLinearLayoutManager manage1 = new RecyclerViewNoBugLinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + homeManagerRv.setHasFixedSize(true); + homeManagerRv.setLayoutManager(manage1); + homeManagerRv.setAdapter(mHomeManageAdapter); + + mHomeManageAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + Intent intent = new Intent(HomeManageActivity.this, MyNewHomeActivity.class); + intent.putExtra("id", homeList.get(position).getId()); + intent.putExtra("name", homeList.get(position).getName()); + intent.putExtra("isOwner", homeList.get(position).getIsOwner()); + startActivity(intent); + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_auto_change_home: + if (autoChangeHomeCb.isChecked()) { + saveAppSetting(true); + } else { + saveAppSetting(false); + } + break; + case R.id.rl_new_build_home: + if (AppIdUtil.isBaseZhiKong()) { + Intent intent = new Intent(HomeManageActivity.this, CreateFamilyActivity.class); + intent.putExtra("from", "HomeManageActivity"); + startActivity(intent); + } else { + showModifyPop(); + } + break; + } + } + + public void showModifyPop() { + RenameNameDialog dialog = new RenameNameDialog(HomeManageActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + ToastUtil.show(HomeManageActivity.this, "房间名不能为空"); + return; + } + // createOrUpdateHouse(positioName); + addHouse(positioName); + break; + } + } + }); + dialog.setMaxEms(12); + dialog.setHintName(""); + dialog.setContent(R.string.Enter_home_name); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.Establish); + dialog.setCancelable(false); + dialog.show(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case QUERY_HOUSES_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + HomeListEntity homeListEntity = (HomeListEntity) msg.obj; + homeList.clear(); + homeList.addAll(homeListEntity.getData()); + mHomeManageAdapter.notifyDataSetChanged(); + break; + case CREATE_ORUPDATE_HOUSE_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + queryHouses(); + break; + case CREATE_ORUPDATE_HOUSE_FAIL: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case QUERY_FAMILY_INFO_SUCCESS: + FamilyInfoEntity obj = (FamilyInfoEntity) msg.obj; + autoChangeHomeCb.setChecked(obj.getData().isAutoSwitchHouseFlag()); + break; + case GET_USER_SESSION_NULL: + NettyHandlerUtil.closeCtx(); + ToastUtil.show(this, "用户在其他手机登陆"); + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + SharedpreferencesUtil.save(Constans.TOKENID, ""); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(HomeManageActivity.this, LoginActivity.class); + startActivity(intent); + finish(); + } + }, 1000); + break; + } + } + + private void addHouse(String name) { + initLoadDialog(); + HomeDetailEntity.DataBean homeDetailEntity = new HomeDetailEntity.DataBean(); + homeDetailEntity.setName(name); + homeDetailEntity.setHouseCategory(1); + String body = JSONObject.toJSONString(homeDetailEntity); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestPostByAsyBody(NetWorkUrl.HOUSE_ADDHOUSE, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addHouse", "ShareDeviceActivity onSuccess()" + respone); + HomeDetailEntity obj = JSON.parseObject(respone, HomeDetailEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void queryHouses() { + HashMap map = new HashMap<>(); + map.put("autoCreate", "0"); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.QUERY_HOUSES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryHouses", "UpdatePwActivity onSuccess()" + respone); + HomeListEntity obj = JSON.parseObject(respone, HomeListEntity.class); + if (-401 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USER_SESSION_NULL); + mHandler.sendMessage(msg); + } else if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void queryFamilyInfo() { + HashMap map = new HashMap<>(); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynewApi(NetWorkUrl.QUERY_FAMILY_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryFamilyInfo", "UpdatePwActivity onSuccess()" + respone); + FamilyInfoEntity obj = JSON.parseObject(respone, FamilyInfoEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_FAMILY_INFO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_FAMILY_INFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_FAMILY_INFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private void saveAppSetting(boolean isAuto) { + HashMap map = new HashMap<>(); + map.put("autoSwitchHouse", isAuto + ""); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynewApi(NetWorkUrl.SAVE_APP_SETTING, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("saveAppSetting", "UpdatePwActivity onSuccess()" + respone); + } + + @Override + public void onFail(String message) { + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/HomeManageAdapter.java b/app/src/main/java/com/yonsz/z1/homemanage/HomeManageAdapter.java new file mode 100644 index 0000000..58734bc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/HomeManageAdapter.java @@ -0,0 +1,89 @@ +package com.yonsz.z1.homemanage; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2018/9/11. + */ + +public class HomeManageAdapter extends RecyclerView.Adapter { + private List mObjEntity; + private Context mContext; + private OnRecyclerClickListener mOnItemClickListener; + + public HomeManageAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_manage, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView homeName; + private TextView isOwner; + private RelativeLayout root_relativelayout; + private View line; + + public MessageViewHolder(View view) { + super(view); + homeName = (TextView) view.findViewById(R.id.tv_home_name); + isOwner = (TextView) view.findViewById(R.id.tv_is_owner); + root_relativelayout = (RelativeLayout) view.findViewById(R.id.root); + line = (View) view.findViewById(R.id.view_line); + } + + public void setViews(final int position) { + homeName.setText(mObjEntity.get(position).getName()); + if (mObjEntity.get(position).getIsOwner() == 1) { + isOwner.setText(R.string.master); + } else { + isOwner.setText(R.string.member); + } + /*if (position == mObjEntity.size() - 1) { + line.setVisibility(View.GONE); + }*/ + + root_relativelayout.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/HomeMoveAdapter.java b/app/src/main/java/com/yonsz/z1/homemanage/HomeMoveAdapter.java new file mode 100644 index 0000000..19c2399 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/HomeMoveAdapter.java @@ -0,0 +1,106 @@ +package com.yonsz.z1.homemanage; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; + +import java.util.HashMap; +import java.util.List; + +/** + * Created by Administrator on 2018/9/11. + */ + +public class HomeMoveAdapter extends RecyclerView.Adapter { + private List mObjEntity; + private Context mContext; + private OnRecyclerClickListener mOnItemClickListener; + private HashMap states = new HashMap<>();//用于记录每个RadioButton的状态,并保证只可选一个 + + public HomeMoveAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_move, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView homeName; + private TextView tv_detail_position; + private RelativeLayout root_relativelayout; + private View line; + private ImageView homeChooseCb; + + public MessageViewHolder(View view) { + super(view); + homeChooseCb = (ImageView) view.findViewById(R.id.cb_home_choose); + homeName = (TextView) view.findViewById(R.id.tv_home_name); + tv_detail_position = (TextView) view.findViewById(R.id.tv_detail_position); + root_relativelayout = (RelativeLayout) view.findViewById(R.id.root); + line = (View) view.findViewById(R.id.view_line); + } + + public void setViews(final int position) { + homeName.setText(mObjEntity.get(position).getName()); + tv_detail_position.setText(mObjEntity.get(position).getDetailPlace()); + root_relativelayout.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + //重置,确保最多只有一项被选中 + for (String key : states.keySet()) { + states.put(key, false); + } + homeChooseCb.setVisibility(View.VISIBLE); + states.put(String.valueOf(position), true); + HomeMoveAdapter.this.notifyDataSetChanged(); + mOnItemClickListener.onClick(v, position); + } + } + }); + boolean res = false; + if (states.get(String.valueOf(position)) == null || states.get(String.valueOf(position)) == false) { + res = false; + states.put(String.valueOf(position), false); + } else { + res = true; + } + + if (res) { + homeChooseCb.setVisibility(View.VISIBLE); + } else { + homeChooseCb.setVisibility(View.GONE); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/HomeNumberAdapter.java b/app/src/main/java/com/yonsz/z1/homemanage/HomeNumberAdapter.java new file mode 100644 index 0000000..8efbb1f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/HomeNumberAdapter.java @@ -0,0 +1,151 @@ +package com.yonsz.z1.homemanage; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2018/9/12. + */ + +public class HomeNumberAdapter extends RecyclerView.Adapter { + private List mObjEntity; + private Context mContext; + private OnRecyclerClickListener mOnItemClickListener; + + public HomeNumberAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + @Override + public HomeNumberAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_number, + parent, false); + return new HomeNumberAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(HomeNumberAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView homeName; + private TextView homePosition; + private TextView homeMoveOut; + private ImageView iv_device_pic; + private RelativeLayout root_relativelayout; + private View line; + + public MessageViewHolder(View view) { + super(view); + homeName = (TextView) view.findViewById(R.id.tv_home_name); + homePosition = (TextView) view.findViewById(R.id.tv_home_position); + homeMoveOut = (TextView) view.findViewById(R.id.tv_move_out); + root_relativelayout = (RelativeLayout) view.findViewById(R.id.root); + iv_device_pic = (ImageView) view.findViewById(R.id.iv_device_pic); + line = (View) view.findViewById(R.id.view_line); + } + + public void setViews(final int position) { + homeName.setText(mObjEntity.get(position).getZiName()); + if (mObjEntity.get(position).getDeviceVersion().equals("2")) { + iv_device_pic.setImageResource(R.drawable.pic_a2); + } else if (mObjEntity.get(position).getConnectFlag().equals("0")) { + iv_device_pic.setImageResource(R.drawable.pic_a1); + } else { + iv_device_pic.setImageResource(R.drawable.pic_z1_online); + } + if (mObjEntity.get(position).getStandardCode().equals("D1-L")) { + iv_device_pic.setImageResource(R.drawable.pic_d1_online); + } + if (mObjEntity.get(position).getStandardCode().equals("YK1")) { + iv_device_pic.setImageResource(R.drawable.icon_device_yk1); + } + if (mObjEntity.get(position).getStandardCode().contains("B3")) { + iv_device_pic.setImageResource(R.drawable.icon_b3); + } + if (mObjEntity.get(position).getStandardCode().contains("B4")) { + iv_device_pic.setImageResource(R.drawable.icon_b4); + } + if (mObjEntity.get(position).getStandardCode().contains("Y5")) { + iv_device_pic.setImageResource(R.drawable.icon_y5); + } + switch (mObjEntity.get(position).getAddressId()) { + case "1": + homePosition.setText(R.string.keting); + break; + case "2": + homePosition.setText(R.string.zhuwo); + break; + case "3": + homePosition.setText(R.string.ciwo); + break; + case "4": + homePosition.setText(R.string.ertongfang); + break; + case "5": + homePosition.setText(R.string.shufang); + break; + case "6": + homePosition.setText(R.string.chufang); + break; + case "7": + homePosition.setText(R.string.canting); + break; + case "8": + homePosition.setText(R.string.yangtai); + break; + case "9": + homePosition.setText("门口"); + break; + case "10": + homePosition.setText(R.string.weishengjian); + break; + case "11": + homePosition.setText(R.string.xishoujian); + break; + case "12": + homePosition.setText("公司"); + break; + case "13": + homePosition.setText("车库"); + break; + case "0": + homePosition.setText(R.string.qita); + break; + } + homeMoveOut.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/HomePositionActivity.java b/app/src/main/java/com/yonsz/z1/homemanage/HomePositionActivity.java new file mode 100644 index 0000000..a3c9d36 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/HomePositionActivity.java @@ -0,0 +1,857 @@ +package com.yonsz.z1.homemanage; + +import android.content.Intent; +import android.graphics.BitmapFactory; +import android.graphics.Point; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import android.view.animation.Interpolator; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.amap.api.location.AMapLocation; +import com.amap.api.location.AMapLocationClient; +import com.amap.api.location.AMapLocationClientOption; +import com.amap.api.location.AMapLocationListener; +import com.amap.api.maps.AMap; +import com.amap.api.maps.CameraUpdateFactory; +import com.amap.api.maps.MapView; +import com.amap.api.maps.UiSettings; +import com.amap.api.maps.model.BitmapDescriptor; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.CameraPosition; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.LatLngBounds; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.animation.Animation; +import com.amap.api.maps.model.animation.TranslateAnimation; +import com.amap.api.services.core.AMapException; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.core.PoiItem; +import com.amap.api.services.core.SuggestionCity; +import com.amap.api.services.poisearch.PoiResult; +import com.amap.api.services.poisearch.PoiSearch; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity4.HomeDetailEntity; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_SUCCESS; +import static com.yonsz.z1.net.Constans.MAP_RESULT; +import static com.yonsz.z1.utils.DensityUtil.dip2px; + +/** + * Created by Administrator on 2018/9/17. + */ + +public class HomePositionActivity extends CheckPermissionsActivity implements + AMap.OnMapClickListener, + AMap.OnInfoWindowClickListener, + AMap.InfoWindowAdapter, + AMap.OnMarkerClickListener, + PoiSearch.OnPoiSearchListener { + Marker screenMarker = null; + private TitleView mTitleView; + private AMapLocationClient locationClient = null; + private AMapLocationClientOption locationOption = null; + private MapView mapview; + private AMap mAMap; + private PoiResult poiResult; // poi返回的结果 + private int currentPage = 0;// 当前页面,从0开始计数 + private PoiSearch.Query query;// Poi查询条件类 + private LatLonPoint lp;// 116.472995,39.993743 + private Marker locationMarker; // 选择的点 + private Marker detailMarker; + private Marker mlastMarker; + private PoiSearch poiSearch; + private myPoiOverlay poiOverlay;// poi图层 + private List poiItems;// poi数据 + private RelativeLayout mPoiDetail; + private TextView mPoiName, mPoiAddress; + private String keyWord = ""; + private EditText mSearchText; + private int[] markers = {R.drawable.poi_marker_1, + R.drawable.poi_marker_2, + R.drawable.poi_marker_3, + R.drawable.poi_marker_4, + R.drawable.poi_marker_5, + R.drawable.poi_marker_6, + R.drawable.poi_marker_7, + R.drawable.poi_marker_8, + R.drawable.poi_marker_9, + R.drawable.poi_marker_10 + }; + private LoadingDialog mLoadingDialog; + private double latitude; + private double longitude; + private double latitudeLocation; + private double longitudeLocation; + private String place; + private UiSettings mUiSettings; + private boolean isFirstLoc = true; + /** + * 定位监听 + */ + AMapLocationListener locationListener = new AMapLocationListener() { + @Override + public void onLocationChanged(AMapLocation location) { + if (null != location) { + StringBuffer sb = new StringBuffer(); + //errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明 + if (location.getErrorCode() == 0) { + sb.append("定位成功" + "\n"); + sb.append("定位类型: " + location.getLocationType() + "\n"); + sb.append("经 度 : " + location.getLongitude() + "\n"); + sb.append("纬 度 : " + location.getLatitude() + "\n"); + sb.append("精 度 : " + location.getAccuracy() + "米" + "\n"); + sb.append("市 : " + location.getCity() + "\n"); + sb.append("城市编码 : " + location.getCityCode() + "\n"); + sb.append("区 : " + location.getDistrict() + "\n"); + sb.append("区域 码 : " + location.getAdCode() + "\n"); + sb.append("地 址 : " + location.getAddress() + "\n"); + sb.append("兴趣点 : " + location.getPoiName() + "\n"); + //定位完成的时间 + // sb.append("定位时间: " + Utils.formatUTC(location.getTime(), "yyyy-MM-dd HH:mm:ss") + "\n"); + if (!getIntent().getExtras().get("latitude").toString().equals("0.0") && isFirstLoc) { + isFirstLoc = false; + latitude = (double) getIntent().getExtras().get("latitude"); + longitude = (double) getIntent().getExtras().get("longitude"); + place = getIntent().getExtras().get("place").toString(); + /*HomeListEntity.DataBean dataBean = new HomeListEntity.DataBean(); + dataBean.setName(place); + homeList.add(0, dataBean);*/ + } else { + latitude = location.getLatitude(); + longitude = location.getLongitude(); + place = location.getPoiName(); + } + latitudeLocation = location.getLatitude(); + longitudeLocation = location.getLongitude(); + lp = new LatLonPoint(latitude, longitude); + init(); + } else { + //定位失败 + sb.append("定位失败" + "\n"); + sb.append("错误码:" + location.getErrorCode() + "\n"); + sb.append("错误信息:" + location.getErrorInfo() + "\n"); + sb.append("错误描述:" + location.getLocationDetail() + "\n"); + } + } else { + // tvResult.setText("定位失败,loc is null"); + } + } + }; + private ImageView iv_map_search; + private RecyclerView pointPositionRv; + private HomeMoveAdapter mHomeMoveAdapter; + private List homeList; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_home_position); + //初始化定位 + initLocation(); + mapview = (MapView) findViewById(R.id.mapView); + mapview.onCreate(savedInstanceState); + initView(); + } + + private void initView() { + iv_map_search = (ImageView) findViewById(R.id.iv_map_search); + homeList = new ArrayList<>(); + pointPositionRv = (RecyclerView) findViewById(R.id.rv_point_position); + mPoiDetail = (RelativeLayout) findViewById(R.id.poi_detail); + mTitleView = (TitleView) findViewById(R.id.title_home_position); + mTitleView.setHead("场所的位置"); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { +// createOrUpdateHouse(); + addHouse(); + } + + @Override + public void onFunctionText() { + + } + }); + + mHomeMoveAdapter = new HomeMoveAdapter(this, homeList); + RecyclerViewNoBugLinearLayoutManager manage1 = new RecyclerViewNoBugLinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + pointPositionRv.setHasFixedSize(true); + pointPositionRv.setLayoutManager(manage1); + pointPositionRv.setAdapter(mHomeMoveAdapter); + + mHomeMoveAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + place = homeList.get(position).getName(); + latitude = homeList.get(position).getLat(); + longitude = homeList.get(position).getLon(); + // Toast.makeText(HomePositionActivity.this, homeList.get(position).getName(), Toast.LENGTH_SHORT).show(); + } + }); + + /*if (getIntent().getExtras().get()) { + + }*/ + iv_map_search.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + locationClient.startLocation(); + } + }); + } + + /** + * 初始化AMap对象 + */ + private void init() { + if (mAMap == null) { + mAMap = mapview.getMap(); + mAMap.setOnMapClickListener(this); + mAMap.setOnMarkerClickListener(this); + mAMap.setOnInfoWindowClickListener(this); + mAMap.setInfoWindowAdapter(this); + RelativeLayout searchButton = (RelativeLayout) findViewById(R.id.btn_search); + searchButton.setOnClickListener(this); + locationMarker = mAMap.addMarker(new MarkerOptions() + .anchor(0.5f, 0.5f) + .icon(BitmapDescriptorFactory + .fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.point4))) + .position(new LatLng(latitudeLocation, longitudeLocation))); + locationMarker.showInfoWindow(); + mUiSettings = mAMap.getUiSettings(); + mUiSettings.setScaleControlsEnabled(true); + mUiSettings.setZoomControlsEnabled(false); + } + setup(); + mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lp.getLatitude(), lp.getLongitude()), 15)); + doSearchQuery(); + } + + private void setup() { + mPoiDetail.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // Intent intent = new Intent(PoiSearchActivity.this, + // SearchDetailActivity.class); + // intent.putExtra("poiitem", mPoi); + // startActivity(intent); +// createOrUpdateHouse(); + addHouse(); + } + }); + mPoiName = (TextView) findViewById(R.id.poi_name); + mPoiAddress = (TextView) findViewById(R.id.poi_address); + mSearchText = (EditText) findViewById(R.id.input_edittext); + mSearchText.setOnClickListener(this); + + mAMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() { + @Override + public void onMapLoaded() { + addMarkersToMap(); + } + }); + + // 设置可视范围变化时的回调的接口方法 + mAMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() { + @Override + public void onCameraChange(CameraPosition position) { + + } + + @Override + public void onCameraChangeFinish(CameraPosition postion) { + //屏幕中心的Marker跳动 + startJumpAnimation(); + } + }); + } + + /** + * 在地图上添加marker + */ + private void addMarkersToMap() { + addMarkerInScreenCenter(); + } + + /** + * 在屏幕中心添加一个Marker + */ + private void addMarkerInScreenCenter() { + LatLng latLng = mAMap.getCameraPosition().target; + Point screenPosition = mAMap.getProjection().toScreenLocation(latLng); + screenMarker = mAMap.addMarker(new MarkerOptions() + .anchor(0.5f, 0.5f) + .icon(BitmapDescriptorFactory.fromResource(R.drawable.purple_pin))); + //设置Marker在屏幕上,不跟随地图移动 + screenMarker.setPositionByPixels(screenPosition.x, screenPosition.y); + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void addHouse() { + initLoadDialog(); + HomeDetailEntity.DataBean homeDetailEntity = new HomeDetailEntity.DataBean(); + homeDetailEntity.setId(getIntent().getExtras().get("id").toString()); +// homeDetailEntity.setName(getIntent().getExtras().get("name").toString()); + homeDetailEntity.setHouseCategory((int) getIntent().getExtras().get("houseCategory")); + homeDetailEntity.setHouseTypeCode(getIntent().getExtras().get("houseTypeCode").toString()); + homeDetailEntity.setFloorList(getIntent().getExtras().get("floorList").toString()); + homeDetailEntity.setPlace(place); + homeDetailEntity.setLon(longitude); + homeDetailEntity.setLat(latitude); + String body = JSONObject.toJSONString(homeDetailEntity); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestPostByAsyBody(NetWorkUrl.HOUSE_ADDHOUSE, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addHouse", "ShareDeviceActivity onSuccess()" + respone); + HomeDetailEntity obj = JSON.parseObject(respone, HomeDetailEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /** + * 方法必须重写 + */ + @Override + public void onResume() { + super.onResume(); + mapview.onResume(); + whetherToShowDetailInfo(false); + } + + /** + * 方法必须重写 + */ + @Override + public void onPause() { + super.onPause(); + mapview.onPause(); + } + + /** + * 方法必须重写 + */ + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mapview.onSaveInstanceState(outState); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CREATE_ORUPDATE_HOUSE_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + finish(); + break; + case CREATE_ORUPDATE_HOUSE_FAIL: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + /** + * 初始化定位 + * + * @author hongming.wang + * @since 2.8.0 + */ + private void initLocation() { + //初始化client + locationClient = new AMapLocationClient(this.getApplicationContext()); + locationOption = getDefaultOption(); + //设置定位参数 + locationClient.setLocationOption(locationOption); + // 设置定位监听 + locationClient.setLocationListener(locationListener); + //启动定位 + locationClient.startLocation(); + } + + /** + * 默认的定位参数 + * + * @author hongming.wang + * @since 2.8.0 + */ + private AMapLocationClientOption getDefaultOption() { + AMapLocationClientOption mOption = new AMapLocationClientOption(); + mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式 + mOption.setGpsFirst(false);//可选,设置是否gps优先,只在高精度模式下有效。默认关闭 + mOption.setHttpTimeOut(30000);//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效 + mOption.setInterval(2000);//可选,设置定位间隔。默认为2秒 + mOption.setNeedAddress(true);//可选,设置是否返回逆地理地址信息。默认是true + mOption.setOnceLocation(true);//可选,设置是否单次定位。默认是false + mOption.setOnceLocationLatest(false);//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用 + AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP + mOption.setSensorEnable(false);//可选,设置是否使用传感器。默认是false + mOption.setWifiScan(true); //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差 + mOption.setLocationCacheEnable(true); //可选,设置是否使用缓存定位,默认为true + mOption.setGeoLanguage(AMapLocationClientOption.GeoLanguage.DEFAULT);//可选,设置逆地理信息的语言,默认值为默认语言(根据所在地区选择语言) + return mOption; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapview.onDestroy(); + destroyLocation(); + } + + /** + * 销毁定位 + * + * @author hongming.wang + * @since 2.8.0 + */ + private void destroyLocation() { + if (null != locationClient) { + /** + * 如果AMapLocationClient是在当前Activity实例化的, + * 在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy + */ + locationClient.onDestroy(); + locationClient = null; + locationOption = null; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_search: + // doSearchQuery(); + Intent intent = new Intent(HomePositionActivity.this, PoiKeywordSearchActivity.class); + // startActivity(intent); + intent.putExtra("id", getIntent().getExtras().get("id").toString()); + startActivityForResult(intent, MAP_RESULT); + break; + case R.id.poi_detail: + break; + case R.id.input_edittext: + break; + default: + break; + } + } + + /** + * 开始进行poi搜索 + */ + /** + * 开始进行poi搜索 + */ + protected void doSearchQuery() { + keyWord = mSearchText.getText().toString().trim(); + currentPage = 0; + query = new PoiSearch.Query("", "地名地址信息|商务住宅|公司企业|餐饮服务", "");// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国) + query.setPageSize(10);// 设置每页最多返回多少条poiitem + query.setPageNum(currentPage);// 设置查第一页 + + if (lp != null) { + poiSearch = new PoiSearch(this, query); + poiSearch.setOnPoiSearchListener(this); + poiSearch.setBound(new PoiSearch.SearchBound(lp, 1000, true));// + // 设置搜索区域为以lp点为圆心,其周围5000米范围 + poiSearch.searchPOIAsyn();// 异步搜索 + } + } + + private void whetherToShowDetailInfo(boolean isToShow) { + if (isToShow) { + mPoiDetail.setVisibility(View.VISIBLE); + } else { + mPoiDetail.setVisibility(View.GONE); + } + } + + @Override + public View getInfoWindow(Marker marker) { + return null; + } + + @Override + public View getInfoContents(Marker marker) { + return null; + } + + @Override + public void onInfoWindowClick(Marker marker) { + + } + + @Override + public void onMapClick(LatLng latLng) { + whetherToShowDetailInfo(false); + if (mlastMarker != null) { + resetlastmarker(); + } + } + + /** + * poi没有搜索到数据,返回一些推荐城市的信息 + */ + private void showSuggestCity(List cities) { + String infomation = "推荐城市\n"; + for (int i = 0; i < cities.size(); i++) { + infomation += "城市名称:" + cities.get(i).getCityName() + "城市区号:" + + cities.get(i).getCityCode() + "城市编码:" + + cities.get(i).getAdCode() + "\n"; + } + ToastUtil.show(this, infomation); + + } + + @Override + public boolean onMarkerClick(Marker marker) { + if (marker.getObject() != null) { + whetherToShowDetailInfo(true); + try { + PoiItem mCurrentPoi = (PoiItem) marker.getObject(); + if (mlastMarker == null) { + mlastMarker = marker; + } else { + // 将之前被点击的marker置为原来的状态 + resetlastmarker(); + mlastMarker = marker; + } + detailMarker = marker; + detailMarker.setIcon(BitmapDescriptorFactory + .fromBitmap(BitmapFactory.decodeResource( + getResources(), + R.drawable.poi_marker_pressed))); + + setPoiItemDisplayContent(mCurrentPoi); + } catch (Exception e) { + // TODO: handle exception + } + } else { + whetherToShowDetailInfo(false); + resetlastmarker(); + } + + + return true; + } + + // 将之前被点击的marker置为原来的状态 + private void resetlastmarker() { + int index = poiOverlay.getPoiIndex(mlastMarker); + if (index < 10) { + mlastMarker.setIcon(BitmapDescriptorFactory + .fromBitmap(BitmapFactory.decodeResource( + getResources(), + markers[index]))); + } else { + mlastMarker.setIcon(BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(getResources(), R.drawable.marker_other_highlight))); + } + mlastMarker = null; + } + + + private void setPoiItemDisplayContent(final PoiItem mCurrentPoi) { + mPoiName.setText(mCurrentPoi.getTitle()); + mPoiAddress.setText(mCurrentPoi.getSnippet() + mCurrentPoi.getDistance()); + LatLonPoint latLonPoint = mCurrentPoi.getLatLonPoint(); + place = mCurrentPoi.getTitle(); + latitude = latLonPoint.getLatitude(); + longitude = latLonPoint.getLongitude(); + } + + @Override + public void onPoiSearched(PoiResult result, int rcode) { + if (rcode == AMapException.CODE_AMAP_SUCCESS) { + if (result != null && result.getQuery() != null) {// 搜索poi的结果 + if (result.getQuery().equals(query)) {// 是否是同一条 + poiResult = result; + poiItems = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始 + List suggestionCities = poiResult + .getSearchSuggestionCitys();// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息 + if (poiItems != null && poiItems.size() > 0) { + homeList.clear(); + /*if(place.equals(getIntent().getExtras().get("place").toString())) { + HomeListEntity.DataBean dataBean = new HomeListEntity.DataBean(); + dataBean.setName(place); + homeList.add(dataBean); + }*/ + for (int i = 0; i < poiItems.size(); i++) { + if (i == 0) { + place = poiItems.get(i).getTitle(); + } + HomeListEntity.DataBean dataBean = new HomeListEntity.DataBean(); + dataBean.setName(poiItems.get(i).getTitle()); + dataBean.setLon(poiItems.get(i).getLatLonPoint().getLongitude()); + dataBean.setLat(poiItems.get(i).getLatLonPoint().getLatitude()); + dataBean.setDetailPlace(poiItems.get(i).getProvinceName() + poiItems.get(i).getCityName() + poiItems.get(i).getAdName() + poiItems.get(i).getBusinessArea()); + homeList.add(dataBean); + } + mHomeMoveAdapter.notifyDataSetChanged(); + } else if (suggestionCities != null + && suggestionCities.size() > 0) { + showSuggestCity(suggestionCities); + } else { + ToastUtil.show(HomePositionActivity.this, R.string.no_result); + } + } + } else { + ToastUtil + .show(HomePositionActivity.this, R.string.no_result); + } + } else { + ToastUtil.show(this.getApplicationContext(), rcode); + } + } + + @Override + public void onPoiItemSearched(PoiItem arg0, int arg1) { + // TODO Auto-generated method stub + } + + /** + * 屏幕中心marker 跳动 + */ + public void startJumpAnimation() { + + if (screenMarker != null) { + //根据屏幕距离计算需要移动的目标点 + final LatLng latLng = screenMarker.getPosition(); + latitude = latLng.latitude; + longitude = latLng.longitude; + lp = new LatLonPoint(latitude, longitude); + Point point = mAMap.getProjection().toScreenLocation(latLng); + point.y -= dip2px(this, 125); + LatLng target = mAMap.getProjection() + .fromScreenLocation(point); + //使用TranslateAnimation,填写一个需要移动的目标点 + Animation animation = new TranslateAnimation(target); + animation.setInterpolator(new Interpolator() { + @Override + public float getInterpolation(float input) { + // 模拟重加速度的interpolator + if (input <= 0.5) { + return (float) (0.5f - 2 * (0.5 - input) * (0.5 - input)); + } else { + return (float) (0.5f - Math.sqrt((input - 0.5f) * (1.5f - input))); + } + } + }); + //整个移动所需要的时间 + animation.setDuration(600); + //设置动画 + screenMarker.setAnimation(animation); + //开始动画 + screenMarker.startAnimation(); + + doSearchQuery(); + } else { + Log.e("amap", "screenMarker is null"); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MAP_RESULT: + if (data != null && data.getExtras().get("name") != null) { + latitude = (double) data.getExtras().get("lat"); + longitude = (double) data.getExtras().get("lon"); + place = data.getExtras().get("name").toString(); + lp = new LatLonPoint(latitude, longitude); + init(); + } + break; + } + } + + /** + * 自定义PoiOverlay + */ + + private class myPoiOverlay { + private AMap mamap; + private List mPois; + private ArrayList mPoiMarks = new ArrayList(); + + public myPoiOverlay(AMap amap, List pois) { + mamap = amap; + mPois = pois; + } + + /** + * 添加Marker到地图中。 + * + * @since V2.1.0 + */ + public void addToMap() { + if (mPois != null) { + int size = mPois.size(); + for (int i = 0; i < size; i++) { + Marker marker = mamap.addMarker(getMarkerOptions(i)); + PoiItem item = mPois.get(i); + marker.setObject(item); + mPoiMarks.add(marker); + } + } + } + + /** + * 去掉PoiOverlay上所有的Marker。 + * + * @since V2.1.0 + */ + public void removeFromMap() { + for (Marker mark : mPoiMarks) { + mark.remove(); + } + } + + /** + * 移动镜头到当前的视角。 + * + * @since V2.1.0 + */ + public void zoomToSpan() { + if (mPois != null && mPois.size() > 0) { + if (mamap == null) + return; + LatLngBounds bounds = getLatLngBounds(); + mamap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100)); + } + } + + private LatLngBounds getLatLngBounds() { + LatLngBounds.Builder b = LatLngBounds.builder(); + if (mPois != null) { + int size = mPois.size(); + for (int i = 0; i < size; i++) { + b.include(new LatLng(mPois.get(i).getLatLonPoint().getLatitude(), + mPois.get(i).getLatLonPoint().getLongitude())); + } + } + return b.build(); + } + + private MarkerOptions getMarkerOptions(int index) { + return new MarkerOptions() + .position( + new LatLng(mPois.get(index).getLatLonPoint() + .getLatitude(), mPois.get(index) + .getLatLonPoint().getLongitude())) + .title(getTitle(index)).snippet(getSnippet(index)) + .icon(getBitmapDescriptor(index)); + } + + protected String getTitle(int index) { + return mPois.get(index).getTitle(); + } + + protected String getSnippet(int index) { + return mPois.get(index).getSnippet(); + } + + /** + * 从marker中得到poi在list的位置。 + * + * @param marker 一个标记的对象。 + * @return 返回该marker对应的poi在list的位置。 + * @since V2.1.0 + */ + public int getPoiIndex(Marker marker) { + for (int i = 0; i < mPoiMarks.size(); i++) { + if (mPoiMarks.get(i).equals(marker)) { + return i; + } + } + return -1; + } + + /** + * 返回第index的poi的信息。 + * + * @param index 第几个poi。 + * @return poi的信息。poi对象详见搜索服务模块的基础核心包(com.amap.api.services.core)中的类 PoiItem。 + * @since V2.1.0 + */ + public PoiItem getPoiItem(int index) { + if (index < 0 || index >= mPois.size()) { + return null; + } + return mPois.get(index); + } + + protected BitmapDescriptor getBitmapDescriptor(int arg0) { + if (arg0 < 10) { + BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(getResources(), markers[arg0])); + return icon; + } else { + BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(getResources(), R.drawable.marker_other_highlight)); + return icon; + } + } + } + +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/HomeTransferActivity.java b/app/src/main/java/com/yonsz/z1/homemanage/HomeTransferActivity.java new file mode 100644 index 0000000..1abe5c2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/HomeTransferActivity.java @@ -0,0 +1,569 @@ +package com.yonsz.z1.homemanage; + +import android.Manifest; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.qw.soul.permission.SoulPermission; +import com.qw.soul.permission.bean.Permission; +import com.qw.soul.permission.callbcak.CheckRequestPermissionListener; +import com.yanzhenjie.recyclerview.swipe.SwipeItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuBridge; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItem; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.ModifyDeviceEntity; +import com.yonsz.z1.database.entity.ResponeEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.HomeGroupEntity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.PhoneAreaActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.mydevice.PhoneAdressActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.KeyboardUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.VerificationUtils; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.io.IOException; +import java.util.HashMap; + +import de.greenrobot.event.EventBus; +import okhttp3.Response; +import okhttp3.ResponseBody; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.login.register.RegisterActivity.getRandomString; +import static com.yonsz.z1.net.Constans.DEL_ERROR_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.DEL_ERROR_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_CODE_FAIL; +import static com.yonsz.z1.net.Constans.GET_CODE_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_PHONE_AREA; +import static com.yonsz.z1.net.Constans.GET_PHONE_NUMBER; +import static com.yonsz.z1.net.Constans.SHARE_DEVICE_FAIL; +import static com.yonsz.z1.net.Constans.SHARE_DEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.NetWorkUrl.DEL_SHARER_HOUSE; +import static com.yonsz.z1.net.NetWorkUrl.PIC_CODE; + +/** + * Created by Administrator on 2018/9/12. + */ + +public class HomeTransferActivity extends BaseActivity implements SwipeItemClickListener { + private EditText editText, editTextCode, edit_code;//输入文本框 + private TextView number;//显示还剩多少字 + private int numbers = 11;//默认30 + private String textcontent = "";//保存输入30个字符 + private TitleView mTitle; + private Button addBt; + private HomeGroupAdapter mAdapter; + private HomeGroupEntity entity1; + private HomeGroupEntity.DataBean mObjEntity; + private int isOwner; + private ImageView renovateIv, renovateRefresh; + private RelativeLayout rl_isOwner; + private LinearLayout phoneAreaLl; + private TextView phoneArea; + private TextView mGetCode; + private CheckBox selectUnnorReveal; + + //输入框变化 + private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + int i = s.length(); + if (i > 11) { + ToastUtil.show(getApplicationContext(), "超过11字符"); + } + + if (i <= 11) { + number.setText(numbers - i + ""); + textcontent = s.toString(); + } else { + editText.setText(textcontent); + editText.setSelection(textcontent.length()); + } + + if (i != 0) { + addBt.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + addBt.setEnabled(true); + } else { + addBt.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + addBt.setEnabled(false); + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable arg0) { + + } + }; + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.y70); + + // 1. MATCH_PARENT 自适应高度,保持和Item一样高; + // 2. 指定具体的高,比如80; + // 3. WRAP_CONTENT,自身高度,不推荐; + int height = getResources().getDimensionPixelSize(R.dimen.y70); + // int height = ViewGroup.LayoutParams.MATCH_PARENT; + // 添加右侧的,如果不添加,则右侧不会出现菜单。 + { + SwipeMenuItem deleteItem = new SwipeMenuItem(HomeTransferActivity.this) + .setBackground(R.color.z1_ff0120) + .setText(R.string.delete) + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + if (isOwner == 1) { + swipeRightMenu.addMenuItem(deleteItem);// 添加菜单到右侧。 + } + } + } + }; + /** + * RecyclerView的Item的Menu点击监听。 + */ + private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() { + @Override + public void onItemClick(SwipeMenuBridge menuBridge) { + menuBridge.closeMenu(); + + int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。 + final int adapterPosition = menuBridge.getAdapterPosition(); // RecyclerView的Item的position。 + int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。 + + if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) { + switch (menuPosition) { + case 0: + if (entity1.getData().get(adapterPosition).getLoginName().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + ToastUtil.show(HomeTransferActivity.this, "不能删除自己的家庭"); + return; + } + ConfirmDialog dialog = new ConfirmDialog(HomeTransferActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + //取消分享 + delSharerHouse(adapterPosition); + break; + } + } + }); + dialog.setContent("删除后,该成员将失去该家的所有权限?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + } + } + } + }; + private LoadingDialog mLoadingDialog; + private String randomString = ""; + private int sec = 60; + private String isDelShared = "true"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); + setContentView(R.layout.activity_home_transfer); + initView(); + initData(); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + View view = getCurrentFocus(); + KeyboardUtil.hideKeyboard(ev, view, HomeTransferActivity.this);//调用方法判断是否需要隐藏键盘 + break; + + default: + break; + } + return super.dispatchTouchEvent(ev); + } + + private void initView() { + phoneAreaLl = (LinearLayout) findViewById(R.id.ll_phone_area); + phoneArea = (TextView) findViewById(R.id.tv_phone_area); + mGetCode = (TextView) findViewById(R.id.tv_getcode); + isOwner = (int) getIntent().getExtras().get("isOwner"); + rl_isOwner = (RelativeLayout) findViewById(R.id.rl_isOwner); + renovateIv = (ImageView) findViewById(R.id.iv_renovate); + renovateRefresh = (ImageView) findViewById(R.id.iv_renovate_refresh); + addBt = (Button) findViewById(R.id.bt_share_add); + number = (TextView) findViewById(R.id.number); + editText = (EditText) findViewById(R.id.editText); + mTitle = (TitleView) findViewById(R.id.title_home_group); + editTextCode = (EditText) findViewById(R.id.editText_code); + edit_code = (EditText) findViewById(R.id.edit_code); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + mTitle.setHead("场所转让"); + mTitle.clearBackGroud(); + mTitle.setHeadColor(Color.BLACK); + mTitle.setBackFuntion(R.drawable.icon_nav_back_black); + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + } + + @Override + public void onFunctionText() { + + } + }); + textcontent = editText.getText().toString(); + addBt.setOnClickListener(this); + phoneAreaLl.setOnClickListener(this); + addBt.setEnabled(false); + renovateRefresh.setOnClickListener(this); + mGetCode.setOnClickListener(this); + selectUnnorReveal.setOnClickListener(this); + + if (isOwner != 1) { + rl_isOwner.setVisibility(View.GONE); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_share_add: + if (VerificationUtils.checkPhoneNumber(editText.getText().toString().trim(), phoneArea.getText().toString())) { + if (editText.getText().toString().trim().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + ToastUtil.show(HomeTransferActivity.this, "用户不能转移给同一个手机号"); + } else { + shareHouse(); + } + } else { + ToastUtil.show(HomeTransferActivity.this, R.string.phone_error); + } + break; + case R.id.iv_renovate_refresh: + picValidateCode(); + break; + case R.id.ll_phone_area: + Intent intent1 = new Intent(HomeTransferActivity.this, PhoneAreaActivity.class); + intent1.putExtra("type", "shareHome"); + startActivityForResult(intent1, GET_PHONE_AREA); + break; + case R.id.tv_getcode: + getCode(); + break; + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + isDelShared = "true"; + } else { + isDelShared = "false"; + } + break; + } + } + + private void getCode() { + String codeTrim = editTextCode.getText().toString().trim(); + if (TextUtils.isEmpty(codeTrim)) { + ToastUtil.show(this, "请输入图片验证码"); + return; + } + initLoadDialog(); + String phoneCode = phoneArea.getText().toString(); + HashMap map = new HashMap<>(); + map.put("appId", DifferConstans.APPID_S); + map.put("code", codeTrim); + map.put("mobile", editText.getText().toString()); + map.put("randomStr", randomString); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.GET_MSMCODE, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("getCode", "UpdatePwActivity onSuccess()" + respone); + ResponeEntity obj = JSON.parseObject(respone, ResponeEntity.class); + if (1 == obj.getFlag()) { + mHandler.sendEmptyMessage(GET_CODE_SUCCESS); + } else { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void shareHouse() { + String phoneCode = phoneArea.getText().toString(); + String userId = editText.getText().toString().trim(); + String codeTrim = edit_code.getText().toString().trim(); + if (TextUtils.isEmpty(userId)) { + ToastUtil.show(this, R.string.nickname_null); + return; + } + if (TextUtils.isEmpty(codeTrim)) { + ToastUtil.show(this, R.string.code_null); + return; + } + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + map.put("toPhone", userId); + map.put("houseId", getIntent().getExtras().get("id").toString()); + map.put("code", codeTrim); + map.put("isDelShared", isDelShared); + map.put("randomStr", randomString); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.HOUSE_TRANSFER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("shareHouse", "HomeGroupActivity onSuccess()" + respone); + ModifyDeviceEntity obj = JSON.parseObject(respone, ModifyDeviceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SHARE_DEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SHARE_DEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SHARE_DEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initData() { + numbers = 11; + editText.addTextChangedListener(textWatcher); + number.setVisibility(View.GONE); + number.setText(11 + ""); + // queryShareList(); + } + + @Override + public void onResume() { + super.onResume(); + picValidateCode(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SHARE_DEVICE_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ModifyDeviceEntity entity = (ModifyDeviceEntity) msg.obj; + ToastUtil.show(this, "转移成功"); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 2000); + break; + case SHARE_DEVICE_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case DEL_ERROR_STUDY_SUCCESS: + break; + case GET_CODE_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, R.string.notice_sms); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mGetCode.setEnabled(false); + mGetCode.setText(getResources().getString(R.string.sec, sec)); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + break; + case GET_CODE_FAIL: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + picValidateCode(); + ToastUtil.show(this, (String) msg.obj != null ? ((String) msg.obj) : + getResources().getString(R.string.sms_fail)); + break; + case UPDATE_SEC: + if (sec > 2) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mGetCode.setText(getResources().getString(R.string.sec, sec - 1)); + } else { + mGetCode.setText(R.string.get_code); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + mGetCode.setEnabled(true); + sec = 60; + } + break; + } + } + + private void delSharerHouse(int adapterPosition) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", entity1.getData().get(adapterPosition).getId()); + map.put("partnerId", entity1.getData().get(adapterPosition).getUserId()); + netWorkUtil.requestPostByAsynewApi(DEL_SHARER_HOUSE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("delSharerHouse", "HomeGroupActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onItemClick(View itemView, int position) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void picValidateCode() { + randomString = getRandomString(8); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("randomStr", randomString); + netWorkUtil.requestGetByAsy(PIC_CODE, map, new NetWorkUtil.ReqCallBackOta() { + @Override + public void onSuccess(Response respone) { + ResponseBody body = respone.body(); + try { + byte[] bytes = body.bytes(); + final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + runOnUiThread(new Runnable() { + @Override + public void run() { + renovateIv.setImageBitmap(bitmap); + } + }); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void onFail(String message) { + + } + }); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case GET_PHONE_NUMBER: + if (data != null && data.getExtras().get("phoneNumber") != null) { + editText.setText(data.getExtras().get("phoneNumber").toString()); + } + break; + case GET_PHONE_AREA: + if (data != null && data.getExtras().get("phoneArea") != null) { + phoneArea.setText(data.getExtras().get("phoneArea").toString()); + } + break; + } + + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/ModelDetailActivity.java b/app/src/main/java/com/yonsz/z1/homemanage/ModelDetailActivity.java new file mode 100644 index 0000000..63531f8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/ModelDetailActivity.java @@ -0,0 +1,672 @@ +package com.yonsz.z1.homemanage; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entitya2.AddModelEntity; +import com.yonsz.z1.database.entity.entitya2.DeviceAllEntity; +import com.yonsz.z1.database.entity.entitya2.ModelOpenEntity; +import com.yonsz.z1.database.entity.entitya2.ModelSetEntity; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.device.DeviceExpandableListView; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.model.ModelSetAdapter; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.SwitchView; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.id.tv_che_dan; +import static com.yonsz.z1.net.Constans.BATCH_UPDATE_MODEL_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.BATCH_UPDATE_MODEL_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.MODEL_REAPEAT; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.BATCH_UPDATE_MODEL_CONTROL; +import static com.yonsz.z1.net.NetWorkUrl.QUERY_MODEL_DETAIL; +import static com.yonsz.z1.net.NetWorkUrl.SELECT_MODEL_TIME; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_BASIC; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_TIME; +import static com.yonsz.z1.new433.light.LightNewActivity.removeDuplicate; + +/** + * Created by Administrator on 2018/9/13. + */ + +public class ModelDetailActivity extends BaseActivity { + private TitleView mTitleView; + private LoadingDialog mLoadingDialog; + private int model; + private TextView modelNameTv, modelDeclareTv; + private CheckBox modelOpenCb; + private SwitchView timeOpenCb; + private DeviceExpandableListView mListView; + private ModelSetAdapter mModelSetAdapter; + private List mObjEntity; + private TextView tvDeclare; + private TextView tv_1; + private RelativeLayout mainDeclare; + private RelativeLayout noDeviceRl; + private RelativeLayout topDecalre; + private String respone; + private List mChildData = new ArrayList<>(); + private List> mDatas = new ArrayList<>(); + private String ziId; + private String isHaveDevice; + private String houseId; + private TextView onceTimeTv, timeSetTv; + private String repeatTime = "", setTime = ""; + private RelativeLayout rl_time_set; + private String timeId = ""; + private String modelId = ""; + private String setId; + private String deviceModel = ""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_model_detail); + initView(); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + public void onResume() { + super.onResume(); + queryModelDetail(); + selectModelTime(); + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.title_model_detail); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + timeId = getIntent().getExtras().get("modelId").toString(); + modelId = getIntent().getExtras().get("modelId1").toString(); + model = Integer.parseInt(getIntent().getExtras().get("model").toString()); + isHaveDevice = (String) getIntent().getExtras().get("isHaveDevice"); + houseId = (String) getIntent().getExtras().get("houseId"); + repeatTime = (String) getIntent().getExtras().get("repeatTime"); + setTime = (String) getIntent().getExtras().get("setTime"); + rl_time_set = (RelativeLayout) findViewById(R.id.rl_time_set); + rl_time_set.setOnClickListener(this); + onceTimeTv = (TextView) findViewById(R.id.tv_repeat_time); + timeSetTv = (TextView) findViewById(R.id.tv_time_set); + modelNameTv = (TextView) findViewById(R.id.tv_model_name); + modelDeclareTv = (TextView) findViewById(R.id.tv_model_declare); + tvDeclare = (TextView) findViewById(tv_che_dan); + tv_1 = (TextView) findViewById(R.id.tv_1); + topDecalre = (RelativeLayout) findViewById(R.id.rl_declare); + mainDeclare = (RelativeLayout) findViewById(R.id.rl_text_declare); + noDeviceRl = (RelativeLayout) findViewById(R.id.rl_text_declare_no_device); + modelOpenCb = (CheckBox) findViewById(R.id.cb_model_open); + timeOpenCb = (SwitchView) findViewById(R.id.stv_third); + modelOpenCb.setOnClickListener(this); + timeOpenCb.setOnClickListener(this); + + + switch (model) { + case 1: + mTitleView.setHead(R.string.in_home_model); + modelNameTv.setText(R.string.in_home_model); + modelDeclareTv.setText(R.string.You_can_turn_on_1); + tvDeclare.setText(R.string.At_home_mode); + tv_1.setText(R.string.click_in_home); + break; + case 2: + mTitleView.setHead(R.string.out_home_model); + modelNameTv.setText(R.string.out_home_model); + modelDeclareTv.setText(R.string.You_can_turn_on_2); + tvDeclare.setText(R.string.Out_home_mode); + tv_1.setText(R.string.click_out_home); + break; + case 3: + mTitleView.setHead(R.string.in_bed_model); + modelNameTv.setText(R.string.in_bed_model); + modelDeclareTv.setText(R.string.You_can_turn_on_3); + tvDeclare.setText(R.string.Sleep_mode); + tv_1.setText(R.string.click_in_bed); + break; + case 4: + mTitleView.setHead(R.string.out_bed_model); + modelNameTv.setText(R.string.out_bed_model); + modelDeclareTv.setText(R.string.You_can_turn_on_4); + tvDeclare.setText(R.string.Wake_up_mode); + tv_1.setText(R.string.click_out_bed); + break; + default: + String modelName = getIntent().getExtras().get("houseModelName").toString(); + mTitleView.setHead(modelName); + modelNameTv.setText(modelName); + tvDeclare.setText("触发“" + modelName + "”后,执行以下动作"); + tv_1.setText("触发“" + modelName + "”后,所要"); + break; + } + mListView = (DeviceExpandableListView) findViewById(R.id.expandablelist); + mObjEntity = new ArrayList<>(); + + setTopTime(); + /*if (isHaveDevice.equals("1")) { + timeOpenCb.setOpened((Boolean) getIntent().getExtras().get("isCheckBoxOpen")); + } else { + timeOpenCb.setOpened(false); + modelOpenCb.setEnabled(false); + noDeviceRl.setVisibility(View.VISIBLE); + }*/ + } + + private void setTopTime() { + if (!TextUtils.isEmpty(repeatTime) && repeatTime.length() > 16) { + onceTimeTv.setText(repeatTime.substring(0, 16) + "..."); + } else { + onceTimeTv.setText(repeatTime); + } + timeSetTv.setText(setTime); + } + + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rl_time_set: + Intent intent = new Intent(ModelDetailActivity.this, TimeSetting4Activity.class); + intent.putExtra("model", model); + intent.putExtra("isAdd", (boolean) getIntent().getExtras().get("isAdd")); + intent.putExtra("modelId", timeId); + intent.putExtra("houseId", houseId); + intent.putExtra("execType", ""); + startActivityForResult(intent, MODEL_REAPEAT); + break; + case R.id.stv_third: + if (timeOpenCb.isOpened()) { + updateModelTime(timeId, 1); + } else { + updateModelTime(timeId, 0); + } + break; + case R.id.cb_model_open: + if (modelOpenCb.isChecked()) { + updateModelBasic("1"); + } else { + updateModelBasic("0"); + } + break; + } + } + + private void updateModelTime(String id, int openFlag) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", id); + map.put("houseId", houseId); + map.put("openFlag", String.valueOf(openFlag)); + netWorkUtil.requestPostByAsynewApi(UPDATE_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelTime", "ShareDeviceActivity onSuccess()" + respone); + AddModelEntity obj = JSON.parseObject(respone, AddModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECT_MODEL_DETAIL_SUCCESS: + if (null != msg.obj) { + if (isHaveDevice.equals("1")) { + ModelSetEntity modelSetEntity = (ModelSetEntity) msg.obj; + if (null != modelSetEntity.getData()) { + if (String.valueOf(modelSetEntity.getData().getFlag()).equals("1")) { + modelOpenCb.setChecked(true); + } else { + modelOpenCb.setChecked(false); + } + setViewData(modelSetEntity); + } + } else { + + } + } else { + + } + break; + case UPDATE_MODEL_CONTROL_SUCCESS: + // queryModelDetail(); + String modelOpenEntity = (String) msg.obj; + int arg11 = msg.arg1; + for (int i = 0; i < mObjEntity.size(); i++) { + if (mObjEntity.get(i).getConndeviceId().equals(modelOpenEntity)) { + mObjEntity.get(i).setCmdType(String.valueOf(arg11)); + } + } + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + break; + case UPDATE_MODEL_CONTROL_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(ModelDetailActivity.this, (String) msg.obj); + break; + case BATCH_UPDATE_MODEL_CONTROL_SUCCESS: + // queryModelDetail(); + String id = (String) msg.obj; + int arg1 = msg.arg1; + for (int i = 0; i < mObjEntity.size(); i++) { + if (arg1 == 1) { + if (mObjEntity.get(i).getConndeviceId().equals(id)) { + mObjEntity.get(i).setOpenFlag(arg1); + mObjEntity.get(i).setId(setId); + } + } else { + if (mObjEntity.get(i).getConndeviceId().equals(id)) { + mObjEntity.get(i).setOpenFlag(arg1); + } + } + } + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + break; + case BATCH_UPDATE_MODEL_CONTROL_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + break; + case UPDATE_MODEL_BASIC_SUCCESS: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ModelOpenEntity obj = (ModelOpenEntity) msg.obj; + if (null != obj.getObj()) { + if (obj.getObj().getFlag() == 1) { + mListView.setVisibility(View.VISIBLE); + mainDeclare.setVisibility(View.GONE); + topDecalre.setVisibility(View.VISIBLE); + rl_time_set.setVisibility(View.VISIBLE); + queryModelDetail(); + selectModelTime(); + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + rl_time_set.setVisibility(View.GONE); + } + } + break; + case UPDATE_MODEL_BASIC_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(ModelDetailActivity.this, (String) msg.obj); + break; + case SELECT_MODEL_TIME_SUCCESS: + TimeSetEntity timeSetEntity = (TimeSetEntity) msg.obj; + if (timeSetEntity.getObj().size() > 0) { + setTime = timeSetEntity.getObj().get(0).getExecTime(); + repeatTime = setWeek(timeSetEntity.getObj().get(0), onceTimeTv); + if (timeSetEntity.getObj().get(0).getOpenFlag() == 0) { + timeOpenCb.setOpened(false); + } else { + timeOpenCb.setOpened(true); + } + timeId = timeSetEntity.getObj().get(0).getId(); + setTopTime(); + } else { + timeOpenCb.setOpened(false); + } + break; + } + } + + private String setWeek(TimeSetEntity.ObjEntity objEntity, TextView weekTv) { + if (objEntity.getOnceFlag() == 0) { + if (objEntity.getWeekNum1() != null) { + String str = ""; + if (objEntity.getWeekNum1().equals("1")) { + str += getString(R.string.Monday); + } else { + } + if (objEntity.getWeekNum2().equals("1")) { + str += getString(R.string.Tuesday); + } else { + } + if (objEntity.getWeekNum3().equals("1")) { + str += getString(R.string.Wednesday); + } else { + } + if (objEntity.getWeekNum4().equals("1")) { + str += getString(R.string.Thursday); + } else { + } + if (objEntity.getWeekNum5().equals("1")) { + str += getString(R.string.Friday); + } else { + } + if (objEntity.getWeekNum6().equals("1")) { + str += getString(R.string.Saturday); + } else { + } + if (objEntity.getWeekNum7().equals("1")) { + str += getString(R.string.Sunday); + } else { + } + return str; + } + } else { + return getString(R.string.once_time); + } + return ""; + } + + private void setViewData(final ModelSetEntity modelSetEntity) { + mObjEntity.clear(); + mObjEntity.addAll(modelSetEntity.getData().getControlList()); + convertList(mObjEntity); + if (String.valueOf(modelSetEntity.getData().getFlag()).equals("1")) { + if (mObjEntity != null) { + mListView.setVisibility(View.VISIBLE); + mainDeclare.setVisibility(View.GONE); + topDecalre.setVisibility(View.VISIBLE); + rl_time_set.setVisibility(View.VISIBLE); + mModelSetAdapter = new ModelSetAdapter(getBaseContext(), mObjEntity); + mListView.setAdapter(mModelSetAdapter); + for (int i = 0; i < mModelSetAdapter.getGroupCount(); i++) { + mListView.expandGroup(i); + } + mModelSetAdapter.setmOnExpandItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id) { + switch (i) { + case 0: + deviceModel = mDatas.get(parentPosition).get(childPosition).getDeviceModel(); + if (j == 0) { + //删除 + batchUpdateModelControl("0", id, mDatas.get(parentPosition).get(childPosition).getConndeviceId()); + } else { + //添加 + batchUpdateModelControl("1", id, mDatas.get(parentPosition).get(childPosition).getConndeviceId()); + } + break; + case 1: + //开关 + if (j == 0) { + updateModelControl(mDatas.get(parentPosition).get(childPosition).getId(), "1", mDatas.get(parentPosition).get(childPosition).getConndeviceId().toString()); + } else { + updateModelControl(mDatas.get(parentPosition).get(childPosition).getId(), "0", mDatas.get(parentPosition).get(childPosition).getConndeviceId().toString()); + } + break; + } + } + }); + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + rl_time_set.setVisibility(View.GONE); + } + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + rl_time_set.setVisibility(View.GONE); + } + } + + private void batchUpdateModelControl(final String tag, final String id, final String realId) { + /* initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("modelType", String.valueOf(model)); + map.put("deviceModel", deviceModel); + map.put("houseId", houseId); + if (tag.equals("1")) { + map.put("addList", id); + } else { + map.put("delList", id); + } + map.put("modelId", modelId); + netWorkUtil.requestPostByAsynew(BATCH_UPDATE_MODEL_CONTROL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("batchUpdateModelControl", "ShareDeviceActivity onSuccess()" + respone); + DeviceAllEntity obj = JSON.parseObject(respone, DeviceAllEntity.class); + if (1 == obj.getFlag()) { + if (tag.equals("1")) { + for (int i = 0; i < obj.getObj().size(); i++) { + if (obj.getObj().get(i).getConndeviceId().equals(realId)) { + setId = obj.getObj().get(i).getId(); + } + } + } + Message msg = mHandler.obtainMessage(BATCH_UPDATE_MODEL_CONTROL_SUCCESS); + msg.obj = realId; + msg.arg1 = Integer.parseInt(tag); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(BATCH_UPDATE_MODEL_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(BATCH_UPDATE_MODEL_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void updateModelControl(final String controlId, final String cmdType, final String controlId1) { + + } + + private List> convertList(List mObjEntity) { + if (mObjEntity != null && mObjEntity.size() > 0) { + List mChildData = null; + ziId = mObjEntity.get(0).getZiId().toString(); + List ziIdStrings = new ArrayList<>(); + for (int i = 0; i < mObjEntity.size(); i++) { + ziIdStrings.add(mObjEntity.get(i).getZiId()); + } + List list = removeDuplicate(ziIdStrings); + mDatas.clear(); + for (int i = 0; i < list.size(); i++) { + mChildData = new ArrayList<>(); + for (int j = 0; j < mObjEntity.size(); j++) { + if (mObjEntity.get(j).getZiId().equals(list.get(i))) { + mChildData.add(mObjEntity.get(j)); + } + } + mDatas.add(mChildData); + } + } + return mDatas; + } + + private void queryModelDetail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", houseId); + map.put("modelType", String.valueOf(model)); + map.put("modelId", modelId); + netWorkUtil.requestGetByAsy(QUERY_MODEL_DETAIL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone1) { + respone = respone1; + ToastUtil.i("queryModelDetail", respone); + ModelSetEntity obj = JSON.parseObject(respone, ModelSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_DETAIL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_DETAIL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_DETAIL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void updateModelBasic(String flag) { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + map.put("modelType", String.valueOf(model)); + map.put("flag", flag); + map.put("houseId", houseId); + map.put("modelId", modelId); + map.put("modelName", modelNameTv.getText().toString()); + netWorkUtil.requestPostByAsynewApi(UPDATE_MODEL_BASIC, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelBasic", "ShareDeviceActivity onSuccess()" + respone); + ModelOpenEntity obj = JSON.parseObject(respone, ModelOpenEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void selectModelTime() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", houseId); + map.put("modelType", String.valueOf(model)); + map.put("modelId", modelId); + netWorkUtil.requestGetByAsy(SELECT_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectModelTime", "ShareDeviceActivity onSuccess()" + respone); + TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODEL_REAPEAT: + if (data != null && data.getExtras().get("repeatTime") != null) { + if (!TextUtils.isEmpty(data.getExtras().get("repeatTime").toString().trim())) { + repeatTime = data.getExtras().get("repeatTime").toString().trim(); + } else { + repeatTime = getString(R.string.once_time); + } + } + + if (data != null && data.getExtras().get("setTime") != null) { + if (!TextUtils.isEmpty(data.getExtras().get("setTime").toString().trim())) { + setTime = data.getExtras().get("setTime").toString().trim(); + } else { + setTime = ""; + } + } + setTopTime(); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/MyNewHomeActivity.java b/app/src/main/java/com/yonsz/z1/homemanage/MyNewHomeActivity.java new file mode 100644 index 0000000..8eedebb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/MyNewHomeActivity.java @@ -0,0 +1,511 @@ +package com.yonsz.z1.homemanage; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.os.Message; +import android.support.annotation.RequiresApi; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.ChooseRoomTypeActivity; +import com.yonsz.z1.createfamily.floor.ChooseFloorRoomActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity4.ChangePicEntity; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity4.HomeDetailEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.ImageLoaderUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.ChangeBgPicActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_SUCCESS; +import static com.yonsz.z1.net.Constans.DEL_HOUSE_FAIL; +import static com.yonsz.z1.net.Constans.DEL_HOUSE_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_HOUSE_INFO_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_HOUSE_INFO_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; + +/** + * Created by Administrator on 2018/9/11. + */ + +public class MyNewHomeActivity extends BaseActivity { + private TitleView mTitleView; + private LoadingDialog mLoadingDialog; + private String id; + private String name; + private HomeDetailEntity homeDetailEntity; + private TextView homeNameTv, homeAreaTv, homepositionTv, homeNumberTv; + private RelativeLayout homeNameRl, homeAreaRl, homepositionRl, homeNumberRl, homeManagerRl, houseTypeRl, homeTransferRl; + private ImageView homePicIv; + private RelativeLayout deleteHomeRl, homeGroupRl, homePicRl, rl_pic; + private boolean isSetMainBgPic = true; + private TextView tv_house_type, tv_home_manager; + private boolean isVirtual = false; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_my_new_home); + initView(); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + public void onEventMainThread(ChangePicEntity event) { + String msg = event.getMsg(); + Log.e("nettyU", msg); + // SharedpreferencesUtil.save(Constans.MAIN_BG_URL, msg); + setMainBgPic(msg); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("关闭")) { + finish(); + } + } + + private void setMainBgPic(String msg) { + isSetMainBgPic = false; + switch (msg) { + case "1": + homePicIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_wallpaper01)); + break; + case "2": + homePicIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_wallpaper02)); + break; + case "3": + homePicIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_wallpaper03)); + break; + case "4": + homePicIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_wallpaper04)); + break; + default: + ImageLoaderUtil util = new ImageLoaderUtil(); + util.setImageUrl(msg, homePicIv); + break; + } + } + + private void initView() { + id = getIntent().getExtras().get("id").toString(); + name = getIntent().getExtras().get("name").toString(); + + + tv_house_type = (TextView) findViewById(R.id.tv_house_type); + tv_home_manager = (TextView) findViewById(R.id.tv_home_manager); + homeNameTv = (TextView) findViewById(R.id.tv_home_name_hehe); + homeAreaTv = (TextView) findViewById(R.id.tv_home_area); + homepositionTv = (TextView) findViewById(R.id.tv_home_position); + homeNumberTv = (TextView) findViewById(R.id.tv_home_number); + + homeNameRl = (RelativeLayout) findViewById(R.id.rl_home_name); + homeAreaRl = (RelativeLayout) findViewById(R.id.rl_home_area); + homepositionRl = (RelativeLayout) findViewById(R.id.rl_home_position); + homeNumberRl = (RelativeLayout) findViewById(R.id.rl_home_number); + homePicRl = (RelativeLayout) findViewById(R.id.rl_home_pic); + rl_pic = (RelativeLayout) findViewById(R.id.rl_pic); + homePicIv = (ImageView) findViewById(R.id.iv_home_pic_hehe); + deleteHomeRl = (RelativeLayout) findViewById(R.id.rl_delete_home); + homeGroupRl = (RelativeLayout) findViewById(R.id.rl_home_group); + homeManagerRl = (RelativeLayout) findViewById(R.id.rl_home_manager); + homeTransferRl = (RelativeLayout) findViewById(R.id.rl_home_transfer); + houseTypeRl = (RelativeLayout) findViewById(R.id.rl_house_type); + + homeNameRl.setOnClickListener(this); + homeAreaRl.setOnClickListener(this); + homepositionRl.setOnClickListener(this); + homeNumberRl.setOnClickListener(this); + homePicRl.setOnClickListener(this); + deleteHomeRl.setOnClickListener(this); + homeGroupRl.setOnClickListener(this); + homeManagerRl.setOnClickListener(this); + homeTransferRl.setOnClickListener(this); + + mTitleView = (TitleView) findViewById(R.id.title_my_new_home); + mTitleView.setHead(name); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (!AppIdUtil.isBaseZhiKong()) { + homeManagerRl.setVisibility(View.GONE); + houseTypeRl.setVisibility(View.GONE); + } + if (AppIdUtil.isWork()) { + tv_home_manager.setText("办公区域管理"); + } + if ((int) getIntent().getExtras().get("isOwner") == 1) { + homeTransferRl.setVisibility(View.VISIBLE); + } else { + homeTransferRl.setVisibility(View.GONE); + } + + if (AppIdUtil.isChuangWei()) { + homePicRl.setVisibility(View.GONE); + rl_pic.setVisibility(View.GONE); + } + } + + @Override + public void onResume() { + super.onResume(); + queryHouseInfo(); + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_home_group: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + } else { + intent = new Intent(MyNewHomeActivity.this, HomeGroupActivity.class); + intent.putExtra("id", id); + intent.putExtra("isOwner", (int) getIntent().getExtras().get("isOwner")); + startActivity(intent); + } + break; + case R.id.rl_home_transfer: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + } else { + intent = new Intent(MyNewHomeActivity.this, HomeTransferActivity.class); + intent.putExtra("id", id); + intent.putExtra("isOwner", (int) getIntent().getExtras().get("isOwner")); + startActivity(intent); + } + break; + case R.id.rl_home_name: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + } else { + showModifyPop("name"); + } + break; + case R.id.rl_home_area: + showModifyPop("area"); + break; + case R.id.rl_home_position: + intent = new Intent(MyNewHomeActivity.this, HomePositionActivity.class); + intent.putExtra("id", id); + intent.putExtra("houseCategory", homeDetailEntity.getData().getHouseCategory()); + intent.putExtra("name", homeDetailEntity.getData().getName()); + intent.putExtra("houseTypeCode", homeDetailEntity.getData().getHouseTypeCode()); + intent.putExtra("floorList", homeDetailEntity.getData().getFloorList()); + intent.putExtra("latitude", homeDetailEntity.getData().getLat()); + intent.putExtra("longitude", homeDetailEntity.getData().getLon()); + intent.putExtra("place", homeDetailEntity.getData().getPlace()); + startActivity(intent); + break; + case R.id.rl_home_number: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + } else { + intent = new Intent(MyNewHomeActivity.this, DeviceNumberActivity.class); + intent.putExtra("id", id); + startActivity(intent); + } + break; + case R.id.rl_delete_home: + ConfirmDialog dialog = new ConfirmDialog(MyNewHomeActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + //删除 + delHouse(); + break; + } + } + }); + dialog.setContent("删除场所后,所有已设置过的信息将被清除,是否确认删除?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.delete); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.rl_home_pic: + intent = new Intent(MyNewHomeActivity.this, ChangeBgPicActivity.class); + intent.putExtra("id", id); + startActivity(intent); + break; + case R.id.rl_home_manager: + if (TextUtils.isEmpty(homeDetailEntity.getData().getFloorList())) { + intent = new Intent(MyNewHomeActivity.this, ChooseRoomTypeActivity.class); + } else { + intent = new Intent(MyNewHomeActivity.this, ChooseFloorRoomActivity.class); + intent.putExtra("floorList", homeDetailEntity.getData().getFloorList()); + } + intent.putExtra("houseTypeCode", homeDetailEntity.getData().getHouseTypeCode()); + if (homeDetailEntity.getData().getHouseCategory() == 3 || homeListEntity.getData().get(deviceNumListPosition).getHouseCategory() == 5) { + intent.putExtra("houseTypeName", "办公区域"); + } else { + intent.putExtra("houseTypeName", "房间设置"); + } + intent.putExtra("houseName", name); + intent.putExtra("houseId", id); + intent.putExtra("houseCategory", homeListEntity.getData().get(deviceNumListPosition).getHouseCategory()); + startActivity(intent); + break; + } + } + + public void showModifyPop(final String tag) { + RenameNameDialog dialog = new RenameNameDialog(MyNewHomeActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + /*HomeDetailEntity.DataBean homeDetailEntity = new HomeDetailEntity.DataBean(); + homeDetailEntity.setId(id);*/ + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + if (tag.equals("name")) { + homeDetailEntity.getData().setName(positioName); + } else { + homeDetailEntity.getData().setName(null); + homeDetailEntity.getData().setArea(positioName); + } + String body = JSONObject.toJSONString(homeDetailEntity.getData()); + addHouse(body, tag); + // createOrUpdateHouse(positioName, tag); + break; + } + } + }); + if (tag.equals("name")) { + dialog.setOldName(name); + dialog.setContent(R.string.Set_family_name); + dialog.setMaxEms(16); + } else { + dialog.setHintName(""); + dialog.setContent(R.string.Housing_area); + dialog.setMaxEms(10); + dialog.setInsertType(); + } + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + } + + private void addHouse(String body, String tag) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestPostByAsyBody(NetWorkUrl.HOUSE_ADDHOUSE, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addHouse", "ShareDeviceActivity onSuccess()" + respone); + HomeDetailEntity obj = JSON.parseObject(respone, HomeDetailEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CREATE_ORUPDATE_HOUSE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case QUERY_HOUSE_INFO_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + homeDetailEntity = (HomeDetailEntity) msg.obj; + if (null != homeDetailEntity.getData()) { + isVirtual = homeDetailEntity.getData().isVirtual(); + setViewDate(homeDetailEntity.getData()); + } + break; + case QUERY_HOUSE_INFO_FAIL: + case DEL_HOUSE_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case DEL_HOUSE_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + EventBus.getDefault().post( + new ChooseHomeEvent("3")); + finish(); + } + }, 1000); + break; + case CREATE_ORUPDATE_HOUSE_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + queryHouseInfo(); + break; + case CREATE_ORUPDATE_HOUSE_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void setViewDate(HomeDetailEntity.DataBean data) { + if (!TextUtils.isEmpty(data.getArea())) { + homeAreaTv.setText(data.getArea() + "㎡"); + } else { + homeAreaTv.setText("0.0㎡"); + } + if (data.getHouseCategory() == 1) { + tv_house_type.setText(data.getHouseTypeName()); + } else if (data.getHouseCategory() == 3 || homeListEntity.getData().get(deviceNumListPosition).getHouseCategory() == 5) { + tv_house_type.setText("办公/写字楼"); + } else { + tv_house_type.setText("别墅"); + } + homepositionTv.setText(data.getPlace()); + homeNumberTv.setText(data.getDeviceCount() + "个设备"); + + if (!TextUtils.isEmpty(data.getPicUrl()) && isSetMainBgPic) { + // ImageLoader.getInstance().displayImage(data.getPicUrl(), homePicIv, UniKongApp.getHiApp().getImageLoaderOption()); + ImageLoaderUtil util = new ImageLoaderUtil(); + util.setImageUrl(data.getPicUrl(), homePicIv); + } + mTitleView.setHead(data.getName()); + homeNameTv.setText(data.getName()); + + if (homeDetailEntity.getData().getHouseCategory() == 3) { + tv_home_manager.setText("区域管理"); + } + } + + private void delHouse() { + initLoadDialog(); + HashMap map = new HashMap<>(); + map.put("id", id); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynewApi(NetWorkUrl.DEL_HOUSE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("delHouse", "UpdatePwActivity onSuccess()" + respone); + HomeDetailEntity obj = JSON.parseObject(respone, HomeDetailEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DEL_HOUSE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DEL_HOUSE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DEL_HOUSE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void queryHouseInfo() { + initLoadDialog(); + HashMap map = new HashMap<>(); + map.put("id", id); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynewApi(NetWorkUrl.QUERY_HOUSE_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryHouseInfo", "UpdatePwActivity onSuccess()" + respone); + HomeDetailEntity obj = JSON.parseObject(respone, HomeDetailEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_HOUSE_INFO_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_HOUSE_INFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_HOUSE_INFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/PoiKeywordSearchActivity.java b/app/src/main/java/com/yonsz/z1/homemanage/PoiKeywordSearchActivity.java new file mode 100644 index 0000000..ec84cd5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/PoiKeywordSearchActivity.java @@ -0,0 +1,438 @@ +package com.yonsz.z1.homemanage; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.amap.api.maps2d.AMap.InfoWindowAdapter; +import com.amap.api.maps2d.AMap.OnMarkerClickListener; +import com.amap.api.maps2d.model.Marker; +import com.amap.api.services.core.AMapException; +import com.amap.api.services.core.PoiItem; +import com.amap.api.services.core.SuggestionCity; +import com.amap.api.services.help.Inputtips; +import com.amap.api.services.help.Inputtips.InputtipsListener; +import com.amap.api.services.help.InputtipsQuery; +import com.amap.api.services.help.Tip; +import com.amap.api.services.poisearch.PoiResult; +import com.amap.api.services.poisearch.PoiSearch; +import com.amap.api.services.poisearch.PoiSearch.OnPoiSearchListener; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entity4.HomeDetailEntity; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_ORUPDATE_HOUSE_SUCCESS; +import static com.yonsz.z1.net.Constans.MAP_RESULT; + +/** + * AMapV1地图中简单介绍poisearch搜索 + */ +public class PoiKeywordSearchActivity extends BaseActivity implements + OnMarkerClickListener, InfoWindowAdapter, TextWatcher, + OnPoiSearchListener, OnClickListener, InputtipsListener { + // private AMap aMap; + private EditText searchText;// 输入搜索关键字 + private ImageView cleanPhoneIv; + private String keyWord = "";// 要输入的poi搜索关键字 + private ProgressDialog progDialog = null;// 搜索时进度条 + private EditText editCity;// 要输入的城市名字或者城市区号 + private PoiResult poiResult; // poi返回的结果 + private int currentPage = 0;// 当前页面,从0开始计数 + private PoiSearch.Query query;// Poi查询条件类 + private PoiSearch poiSearch;// POI搜索 + + private RecyclerView pointPositionRv; + private TextView tv_no_result; + private HomeMoveAdapter mHomeMoveAdapter; + private List homeList; + private TitleView mTitleView; + //输入框变化 + private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable arg0) { + keyWord = AMapUtil.checkEditText(searchText); + /*if ("".equals(keyWord)) { + // ToastUtil.show(PoiKeywordSearchActivity.this, "请输入搜索关键字"); + return; + } else { + doSearchQuery(); + }*/ + doSearchQuery(); + + if (!TextUtils.isEmpty(keyWord) && cleanPhoneIv.getVisibility() == View.GONE) { + cleanPhoneIv.setVisibility(View.VISIBLE); + } else if (TextUtils.isEmpty(keyWord)) { + cleanPhoneIv.setVisibility(View.GONE); + } + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.poikeywordsearch_activity); + init(); + } + + /** + * 初始化AMap对象 + */ + private void init() { + /*if (aMap == null) { + aMap = ((SupportMapFragment) getSupportFragmentManager() + .findFragmentById(R.id.map)).getMap(); + }*/ + setUpMap(); + } + + /** + * 设置页面监听 + */ + private void setUpMap() { + homeList = new ArrayList<>(); + pointPositionRv = (RecyclerView) findViewById(R.id.rv_point_position); + tv_no_result = (TextView) findViewById(R.id.tv_no_result); + TextView searButton = (TextView) findViewById(R.id.searchButton); + searButton.setOnClickListener(this); + searchText = (EditText) findViewById(R.id.keyWord); + cleanPhoneIv = (ImageView) findViewById(R.id.iv_clean_phone); + cleanPhoneIv.setOnClickListener(this); + searchText.addTextChangedListener(textWatcher); + // Button nextButton = (Button) findViewById(R.id.nextButton); + // nextButton.setOnClickListener(this); + // searchText.addTextChangedListener(this);// 添加文本输入框监听事件 + // editCity = (EditText) findViewById(R.id.city); + mTitleView = (TitleView) findViewById(R.id.title_map_search); + mTitleView.setHead("场所的位置"); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + mHomeMoveAdapter = new HomeMoveAdapter(this, homeList); + RecyclerViewNoBugLinearLayoutManager manage1 = new RecyclerViewNoBugLinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + pointPositionRv.setHasFixedSize(true); + pointPositionRv.setLayoutManager(manage1); + pointPositionRv.setAdapter(mHomeMoveAdapter); + + mHomeMoveAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + // createOrUpdateHouse(position); + Intent intent = new Intent(PoiKeywordSearchActivity.this, HomePositionActivity.class); + intent.putExtra("name", homeList.get(position).getName()); + intent.putExtra("lon", homeList.get(position).getLon()); + intent.putExtra("lat", homeList.get(position).getLat()); + setResult(MAP_RESULT, intent); + finish(); + // Toast.makeText(PoiKeywordSearchActivity.this, position + "", Toast.LENGTH_SHORT).show(); + } + }); + /*aMap.setOnMarkerClickListener(this);// 添加点击marker监听事件 + aMap.setInfoWindowAdapter(this);// 添加显示infowindow监听事件*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CREATE_ORUPDATE_HOUSE_SUCCESS: + HomeDetailEntity homeDetailEntity = (HomeDetailEntity) msg.obj; + Intent intent = new Intent(PoiKeywordSearchActivity.this, HomePositionActivity.class); + intent.putExtra("name", homeDetailEntity.getData().getName()); + intent.putExtra("lon", homeDetailEntity.getData().getLon()); + intent.putExtra("lat", homeDetailEntity.getData().getLat()); + setResult(MAP_RESULT, intent); + finish(); + break; + } + } + + /** + * 点击搜索按钮 + */ + public void searchButton() { + keyWord = AMapUtil.checkEditText(searchText); + if ("".equals(keyWord)) { + ToastUtil.show(PoiKeywordSearchActivity.this, R.string.Enter_key_number); + return; + } else { + doSearchQuery(); + } + } + + /** + * 点击下一页按钮 + */ + public void nextButton() { + if (query != null && poiSearch != null && poiResult != null) { + if (poiResult.getPageCount() - 1 > currentPage) { + currentPage++; + query.setPageNum(currentPage);// 设置查后一页 + poiSearch.searchPOIAsyn(); + } else { + ToastUtil.show(PoiKeywordSearchActivity.this, + R.string.no_result); + } + } + } + + /** + * 显示进度框 + */ + private void showProgressDialog() { + if (progDialog == null) + progDialog = new ProgressDialog(this); + progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); + progDialog.setIndeterminate(false); + progDialog.setCancelable(false); + progDialog.setMessage("正在搜索:\n" + keyWord); + progDialog.show(); + } + + /** + * 隐藏进度框 + */ + private void dissmissProgressDialog() { + if (progDialog != null) { + progDialog.dismiss(); + } + } + + /** + * 开始进行poi搜索 + */ + protected void doSearchQuery() { + showProgressDialog();// 显示进度框 + currentPage = 0; + query = new PoiSearch.Query(keyWord, "市|地名地址信息|商务住宅|公司企业", "");// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国) + query.setPageSize(20);// 设置每页最多返回多少条poiitem + query.setPageNum(currentPage);// 设置查第一页 + query.setCityLimit(true); + + poiSearch = new PoiSearch(this, query); + poiSearch.setOnPoiSearchListener(this); + poiSearch.searchPOIAsyn(); + } + + @Override + public boolean onMarkerClick(Marker marker) { + marker.showInfoWindow(); + return false; + } + + @Override + public View getInfoContents(Marker marker) { + return null; + } + + @Override + public View getInfoWindow(final Marker marker) { + View view = getLayoutInflater().inflate(R.layout.poikeywordsearch_uri, null); + TextView title = (TextView) view.findViewById(R.id.title); + title.setText(marker.getTitle()); + + TextView snippet = (TextView) view.findViewById(R.id.snippet); + snippet.setText(marker.getSnippet()); + return view; + } + + /** + * poi没有搜索到数据,返回一些推荐城市的信息 + */ + private void showSuggestCity(List cities) { + String infomation = "推荐城市\n"; + for (int i = 0; i < cities.size(); i++) { + infomation += "城市名称:" + cities.get(i).getCityName() + "城市区号:" + + cities.get(i).getCityCode() + "城市编码:" + + cities.get(i).getAdCode() + "\n"; + } + ToastUtil.show(PoiKeywordSearchActivity.this, infomation); + + } + + @Override + public void afterTextChanged(Editable s) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + String newText = s.toString().trim(); + if (!AMapUtil.IsEmptyOrNullString(newText)) { + InputtipsQuery inputquery = new InputtipsQuery(newText, editCity.getText().toString()); + Inputtips inputTips = new Inputtips(PoiKeywordSearchActivity.this, inputquery); + inputTips.setInputtipsListener(this); + inputTips.requestInputtipsAsyn(); + } + } + + + /** + * POI信息查询回调方法 + */ + @Override + public void onPoiSearched(PoiResult result, int rCode) { + dissmissProgressDialog();// 隐藏对话框 + if (rCode == AMapException.CODE_AMAP_SUCCESS) { + if (result != null && result.getQuery() != null) {// 搜索poi的结果 + pointPositionRv.setVisibility(View.VISIBLE); + tv_no_result.setVisibility(View.GONE); + if (result.getQuery().equals(query)) {// 是否是同一条 + poiResult = result; + // 取得搜索到的poiitems有多少页 + List poiItems = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始 + List suggestionCities = poiResult + .getSearchSuggestionCitys();// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息 + + if (poiItems != null && poiItems.size() > 0) { + homeList.clear(); + for (int i = 0; i < poiItems.size(); i++) { + HomeListEntity.DataBean dataBean = new HomeListEntity.DataBean(); + dataBean.setName(poiItems.get(i).getTitle()); + dataBean.setLat(poiItems.get(i).getLatLonPoint().getLatitude()); + dataBean.setLon(poiItems.get(i).getLatLonPoint().getLongitude()); + dataBean.setDetailPlace(poiItems.get(i).getProvinceName() + poiItems.get(i).getCityName() + poiItems.get(i).getAdName() + poiItems.get(i).getBusinessArea()); + homeList.add(dataBean); + } + mHomeMoveAdapter.notifyDataSetChanged(); + /*aMap.clear();// 清理之前的图标 + PoiOverlay poiOverlay = new PoiOverlay(aMap, poiItems); + poiOverlay.removeFromMap(); + poiOverlay.addToMap(); + poiOverlay.zoomToSpan();*/ + } else if (suggestionCities != null && suggestionCities.size() > 0) { + // showSuggestCity(suggestionCities); + showNoResult(); + } else { + // ToastUtil.show(PoiKeywordSearchActivity.this, R.string.no_result); + showNoResult(); + } + } + } else { + showNoResult(); + // ToastUtil.show(PoiKeywordSearchActivity.this, R.string.no_result); + } + } else { + showNoResult(); + // ToastUtil.show(PoiKeywordSearchActivity.this, rCode); + } + + } + + private void showNoResult() { + pointPositionRv.setVisibility(View.GONE); + tv_no_result.setVisibility(View.VISIBLE); + } + + @Override + public void onPoiItemSearched(PoiItem item, int rCode) { + // TODO Auto-generated method stub + + } + + /** + * Button点击事件回调方法 + */ + @Override + public void onClick(View v) { + switch (v.getId()) { + /** + * 点击搜索按钮 + */ + case R.id.searchButton: + searchButton(); + break; + /** + * 点击下一页按钮 + */ + /*case R.id.nextButton: + nextButton(); + break;*/ + case R.id.iv_clean_phone: + searchText.setText(""); + break; + default: + break; + } + } + + + @Override + public void onGetInputtips(List tipList, int rCode) { + /*if (rCode == AMapException.CODE_AMAP_SUCCESS) {// 正确返回 + List listString = new ArrayList(); + for (int i = 0; i < tipList.size(); i++) { + listString.add(tipList.get(i).getName()); + } + ArrayAdapter aAdapter = new ArrayAdapter( + getApplicationContext(), + R.layout.route_inputs, listString); + searchText.setAdapter(aAdapter); + aAdapter.notifyDataSetChanged(); + } else { + ToastUtil.show(PoiKeywordSearchActivity.this, rCode); + }*/ + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/TimeSetting4Activity.java b/app/src/main/java/com/yonsz/z1/homemanage/TimeSetting4Activity.java new file mode 100644 index 0000000..e304354 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/TimeSetting4Activity.java @@ -0,0 +1,456 @@ +package com.yonsz.z1.homemanage; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.bigkoo.pickerview.TimePickerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entitya2.AddModelEntity; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.model.ReapetTimeActivity; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.ADD_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.ADD_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.MODEL_REAPEAT; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.SURE_BUTTON; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.ADD_MODEL_TIME; +import static com.yonsz.z1.net.NetWorkUrl.SELECT_MODEL_TIME; +import static com.yonsz.z1.net.NetWorkUrl.TIMEMANAGER_UPDATESCENETIME; + +/** + * Created by Administrator on 2018/9/13. + */ + +public class TimeSetting4Activity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout modelSelectRl, repeatTimeRl, timeSetRl; + private TextView timeSetTv, onceTimeTv; + private String modelType, execType; + private boolean isModify = false; + private String useId; + private TimeSetEntity.DataBean mObjEntity; + private String week = ""; + private LoadingDialog mLoadingDialog; + private String houseId; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_time_setting4); + initView(); + } + + @Override + public void onBackPressed() { + if (isModify) { + Intent intent = new Intent(TimeSetting4Activity.this, ModelDetailActivity.class); + intent.putExtra("setTime", timeSetTv.getText()); + intent.putExtra("repeatTime", onceTimeTv.getText()); + setResult(MODEL_REAPEAT, intent); + } + finish(); + } + + private void initView() { + modelType = getIntent().getExtras().get("model").toString(); + houseId = getIntent().getExtras().get("houseId").toString(); + execType = getIntent().getExtras().get("execType").toString(); + mTitleView = (TitleView) findViewById(R.id.title_time_set); + mTitleView.setHead(R.string.set_time); + mTitleView.setHeadFuntionTxt(R.string.ok); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (isModify) { + Intent intent = new Intent(TimeSetting4Activity.this, ModelDetailActivity.class); + intent.putExtra("setTime", timeSetTv.getText()); + intent.putExtra("repeatTime", onceTimeTv.getText()); + setResult(MODEL_REAPEAT, intent); + } + finish(); + } + + @Override + public void onFunction() { + isModify = true; + if ((Boolean) getIntent().getExtras().get("isAdd") && !TextUtils.isEmpty(getIntent().getExtras().get("modelId").toString())) { + updateModelTime(); + } else { + addModelTime(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + modelSelectRl = (RelativeLayout) findViewById(R.id.rl_model_select); + repeatTimeRl = (RelativeLayout) findViewById(R.id.rl_repeat_time); + onceTimeTv = (TextView) findViewById(R.id.tv_once_time); + timeSetRl = (RelativeLayout) findViewById(R.id.rl_time_set); + timeSetTv = (TextView) findViewById(R.id.tv_time_set); + modelSelectRl.setOnClickListener(this); + repeatTimeRl.setOnClickListener(this); + timeSetRl.setOnClickListener(this); + + // selectModelTime(); + mObjEntity = (TimeSetEntity.DataBean) getIntent().getSerializableExtra("mObjEntity"); + setViewDate(mObjEntity); + } + + public void setViewDate(TimeSetEntity.DataBean mObjEntity) { + if (mObjEntity != null) { + timeSetTv.setText(mObjEntity.getExecTime().toString()); + modelType = mObjEntity.getModelType().toString(); + + if (mObjEntity.getOnceFlag() == 0) { + String str = ""; + if (mObjEntity.getWeekNum1().equals("1")) { + str += getString(R.string.Monday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum2().equals("1")) { + str += getString(R.string.Tuesday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum3().equals("1")) { + str += getString(R.string.Wednesday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum4().equals("1")) { + str += getString(R.string.Thursday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum5().equals("1")) { + str += getString(R.string.Friday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum6().equals("1")) { + str += getString(R.string.Saturday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum7().equals("1")) { + str += getString(R.string.Sunday); + week += "1"; + } else { + week += "0"; + } + onceTimeTv.setText(str); + } else { + onceTimeTv.setText(getString(R.string.once_time)); + } + } + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_model_select: + /*intent = new Intent(TimeSetting4Activity.this, ModelSelectActivity.class); + intent.putExtra("modelNow", modelSelectTv.getText().toString().trim()); + startActivityForResult(intent, MODEL_SELECT);*/ + break; + case R.id.rl_repeat_time: + intent = new Intent(TimeSetting4Activity.this, ReapetTimeActivity.class); + if (week.length() == 7) { + intent.putExtra("repeatTime", week); + } + startActivityForResult(intent, MODEL_REAPEAT); + break; + case R.id.rl_time_set: + setTime(timeSetTv); + break; + } + } + + private void setTime(final TextView textView) { + TimePickerView pvTime = new TimePickerView.Builder(TimeSetting4Activity.this, new TimePickerView.OnTimeSelectListener() { + @Override + public void onTimeSelect(Date date, View v) {//选中事件回调 + textView.setText(getTime(date)); + // updateOnceTimer(id, "1", textView); + } + })//年月日时分秒 的显示与否,不设置则默认全部显示 + .setType(new boolean[]{false, false, false, true, true, false}) + .setLabel("", "", "", getString(R.string.hour), getString(R.string.Minute), "") + .isCenterLabel(false) + .setDividerColor(Color.DKGRAY) + .setContentSize(21) + .setBackgroundId(0x00FFFFFF) //设置外部遮罩颜色 + .setDecorView(null) + .build(); + pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。 + pvTime.show(); + } + + private String getTime(Date date) {//可根据需要自行截取数据显示 + SimpleDateFormat format = new SimpleDateFormat("HH:mm"); + return format.format(date); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_MODEL_TIME_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + AddModelEntity addModelEntity = (AddModelEntity) msg.obj; + // ToastUtil.show(TimeSetting4Activity.this, addModelEntity.getMsg().toString()); + if (isModify) { + Intent intent = new Intent(TimeSetting4Activity.this, ModelDetailActivity.class); + intent.putExtra("setTime", timeSetTv.getText()); + intent.putExtra("repeatTime", onceTimeTv.getText()); + setResult(MODEL_REAPEAT, intent); + } + finish(); + /*mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000);*/ + break; + case ADD_MODEL_TIME_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(TimeSetting4Activity.this, (String) msg.obj); + break; + case UPDATE_MODEL_TIME_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + AddModelEntity addModelEntity1 = (AddModelEntity) msg.obj; + // ToastUtil.show(TimeSetting4Activity.this, addModelEntity1.getMsg().toString()); + if (isModify) { + Intent intent = new Intent(TimeSetting4Activity.this, ModelDetailActivity.class); + intent.putExtra("setTime", timeSetTv.getText()); + intent.putExtra("repeatTime", onceTimeTv.getText()); + setResult(MODEL_REAPEAT, intent); + } + finish(); + /*mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000);*/ + break; + case UPDATE_MODEL_TIME_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(TimeSetting4Activity.this, (String) msg.obj); + break; + case SELECT_MODEL_TIME_SUCCESS: + /*TimeSetEntity timeSetEntity = (TimeSetEntity) msg.obj; + List mDatas = timeSetEntity.getObj(); + for (int i = 0; i < mDatas.size(); i++) { + if (mDatas.get(i).getModelType().equals(modelType)) { + mObjEntity = mDatas.get(i); + } + } + setViewDate(mObjEntity);*/ + break; + case SURE_BUTTON: + if ((Boolean) getIntent().getExtras().get("isAdd")) { + updateModelTime(); + } else { + addModelTime(); + } + break; + } + } + + public void updateModelTime() { + if (timeSetTv.getText().toString().isEmpty()) { + ToastUtil.show(this, "时间设置不能为空"); + return; + } + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", getIntent().getExtras().get("timeId").toString()); + if (modelType != null) { + map.put("modelType", modelType); + } else { + map.put("modelType", "1"); + } + map.put("execTime", timeSetTv.getText().toString()); + if (onceTimeTv.getText().toString().equals(getString(R.string.once_time))) { + map.put("onceFlag", "1"); + } else { + map.put("week", week); + map.put("onceFlag", "0"); + } + map.put("houseId", houseId); + netWorkUtil.requestPostByAsynewApi(TIMEMANAGER_UPDATESCENETIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelTime", "ShareDeviceActivity onSuccess()" + respone); + AddModelEntity obj = JSON.parseObject(respone, AddModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + + public void addModelTime() { + if (timeSetTv.getText().toString().isEmpty()) { + ToastUtil.show(this, "时间设置不能为空"); + return; + } + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("modelId", getIntent().getExtras().get("modelId").toString()); + if (modelType != null) { + map.put("modelType", modelType); + } else { + map.put("modelType", "1"); + } + map.put("execTime", timeSetTv.getText().toString()); + if (onceTimeTv.getText().toString().equals(getString(R.string.once_time))) { + map.put("onceFlag", "1"); + map.put("week", ""); + } else { + map.put("week", week); + map.put("onceFlag", "0"); + } + map.put("houseId", houseId); + if (execType.equals("group")) { + map.put("groupId", getIntent().getExtras().get("groupId").toString()); + } else if (execType.equals("single")) { + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + } + netWorkUtil.requestPostByAsynewApi(ADD_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addModelTime", "ShareDeviceActivity onSuccess()" + respone); + AddModelEntity obj = JSON.parseObject(respone, AddModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODEL_REAPEAT: + if (data != null && data.getExtras().get("modelRepeat") != null) { + if (!TextUtils.isEmpty(data.getExtras().get("modelRepeat").toString().trim())) { + onceTimeTv.setText(data.getExtras().get("modelRepeat").toString().trim()); + week = data.getExtras().get("week").toString().trim(); + } else { + onceTimeTv.setText(getString(R.string.once_time)); + week = "0000000"; + } + } + break; + } + } + + private void selectModelTime() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", houseId); + map.put("modelType", modelType); + netWorkUtil.requestGetByAsy(SELECT_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectModelTime", "ShareDeviceActivity onSuccess()" + respone); + TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/TimeSetting5Activity.java b/app/src/main/java/com/yonsz/z1/homemanage/TimeSetting5Activity.java new file mode 100644 index 0000000..b0799ed --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/TimeSetting5Activity.java @@ -0,0 +1,450 @@ +package com.yonsz.z1.homemanage; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.bigkoo.pickerview.TimePickerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entitya2.AddModelEntity; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.model.ReapetTimeActivity; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.ADD_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.ADD_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.MODEL_REAPEAT; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.SURE_BUTTON; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.ADD_MODEL_TIME; +import static com.yonsz.z1.net.NetWorkUrl.SELECT_MODEL_TIME; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_TIME; + +/** + * Created by Administrator on 2018/9/13. + */ + +public class TimeSetting5Activity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout modelSelectRl, repeatTimeRl, timeSetRl; + private TextView timeSetTv, onceTimeTv; + private String modelType; + private int model; + private boolean isModify = false; + private String useId; + private TimeSetEntity.ObjEntity mObjEntity; + private String week = ""; + private LoadingDialog mLoadingDialog; + private String houseId; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_time_setting4); + initView(); + } + + @Override + public void onBackPressed() { + if (isModify) { + Intent intent = new Intent(TimeSetting5Activity.this, ModelDetailActivity.class); + intent.putExtra("setTime", timeSetTv.getText()); + intent.putExtra("repeatTime", onceTimeTv.getText()); + setResult(MODEL_REAPEAT, intent); + } + finish(); + } + + private void initView() { + model = (int) getIntent().getExtras().get("model"); + modelType = String.valueOf(model); + houseId = getIntent().getExtras().get("houseId").toString(); + mTitleView = (TitleView) findViewById(R.id.title_time_set); + mTitleView.setHead(R.string.set_time); + mTitleView.setHeadFuntionTxt(R.string.ok); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (isModify) { + Intent intent = new Intent(TimeSetting5Activity.this, ModelDetailActivity.class); + intent.putExtra("setTime", timeSetTv.getText()); + intent.putExtra("repeatTime", onceTimeTv.getText()); + setResult(MODEL_REAPEAT, intent); + } + finish(); + } + + @Override + public void onFunction() { + isModify = true; + if ((Boolean) getIntent().getExtras().get("isAdd") && !TextUtils.isEmpty(getIntent().getExtras().get("modelId").toString())) { + updateModelTime(); + } else { + addModelTime(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + modelSelectRl = (RelativeLayout) findViewById(R.id.rl_model_select); + repeatTimeRl = (RelativeLayout) findViewById(R.id.rl_repeat_time); + onceTimeTv = (TextView) findViewById(R.id.tv_once_time); + timeSetRl = (RelativeLayout) findViewById(R.id.rl_time_set); + timeSetTv = (TextView) findViewById(R.id.tv_time_set); + modelSelectRl.setOnClickListener(this); + repeatTimeRl.setOnClickListener(this); + timeSetRl.setOnClickListener(this); + + selectModelTime(); + } + + public void setViewDate(TimeSetEntity.ObjEntity mObjEntity) { + if (mObjEntity != null) { + timeSetTv.setText(mObjEntity.getExecTime().toString()); + modelType = mObjEntity.getModelType().toString(); + + if (mObjEntity.getOnceFlag() == 0) { + String str = ""; + if (mObjEntity.getWeekNum1().equals("1")) { + str += getString(R.string.Monday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum2().equals("1")) { + str += getString(R.string.Tuesday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum3().equals("1")) { + str += getString(R.string.Wednesday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum4().equals("1")) { + str += getString(R.string.Thursday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum5().equals("1")) { + str += getString(R.string.Friday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum6().equals("1")) { + str += getString(R.string.Saturday); + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum7().equals("1")) { + str += getString(R.string.Sunday); + week += "1"; + } else { + week += "0"; + } + onceTimeTv.setText(str); + } else { + onceTimeTv.setText(getString(R.string.once_time)); + } + } + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_model_select: + /*intent = new Intent(TimeSetting5Activity.this, ModelSelectActivity.class); + intent.putExtra("modelNow", modelSelectTv.getText().toString().trim()); + startActivityForResult(intent, MODEL_SELECT);*/ + break; + case R.id.rl_repeat_time: + intent = new Intent(TimeSetting5Activity.this, ReapetTimeActivity.class); + if (week.length() == 7) { + intent.putExtra("repeatTime", week); + } + startActivityForResult(intent, MODEL_REAPEAT); + break; + case R.id.rl_time_set: + setTime(timeSetTv); + break; + } + } + + private void setTime(final TextView textView) { + TimePickerView pvTime = new TimePickerView.Builder(TimeSetting5Activity.this, new TimePickerView.OnTimeSelectListener() { + @Override + public void onTimeSelect(Date date, View v) {//选中事件回调 + textView.setText(getTime(date)); + // updateOnceTimer(id, "1", textView); + } + })//年月日时分秒 的显示与否,不设置则默认全部显示 + .setType(new boolean[]{false, false, false, true, true, false}) + .setLabel("", "", "", getString(R.string.hour), getString(R.string.Minute), "") + .isCenterLabel(false) + .setDividerColor(Color.DKGRAY) + .setContentSize(21) + .setBackgroundId(0x00FFFFFF) //设置外部遮罩颜色 + .setDecorView(null) + .build(); + pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。 + pvTime.show(); + } + + private String getTime(Date date) {//可根据需要自行截取数据显示 + SimpleDateFormat format = new SimpleDateFormat("HH:mm"); + return format.format(date); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_MODEL_TIME_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + AddModelEntity addModelEntity = (AddModelEntity) msg.obj; + // ToastUtil.show(TimeSetting5Activity.this, addModelEntity.getMsg().toString()); + if (isModify) { + Intent intent = new Intent(TimeSetting5Activity.this, ModelDetailActivity.class); + intent.putExtra("setTime", timeSetTv.getText()); + intent.putExtra("repeatTime", onceTimeTv.getText()); + setResult(MODEL_REAPEAT, intent); + } + finish(); + /*mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000);*/ + break; + case ADD_MODEL_TIME_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(TimeSetting5Activity.this, (String) msg.obj); + break; + case UPDATE_MODEL_TIME_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + AddModelEntity addModelEntity1 = (AddModelEntity) msg.obj; + // ToastUtil.show(TimeSetting5Activity.this, addModelEntity1.getMsg().toString()); + if (isModify) { + Intent intent = new Intent(TimeSetting5Activity.this, ModelDetailActivity.class); + intent.putExtra("setTime", timeSetTv.getText()); + intent.putExtra("repeatTime", onceTimeTv.getText()); + setResult(MODEL_REAPEAT, intent); + } + finish(); + /*mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000);*/ + break; + case UPDATE_MODEL_TIME_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(TimeSetting5Activity.this, (String) msg.obj); + break; + case SELECT_MODEL_TIME_SUCCESS: + TimeSetEntity timeSetEntity = (TimeSetEntity) msg.obj; + List mDatas = timeSetEntity.getObj(); + for (int i = 0; i < mDatas.size(); i++) { + if (mDatas.get(i).getModelType().equals(modelType) && mDatas.get(i).getModelId().equals(getIntent().getExtras().get("nullmodelId").toString())) { + mObjEntity = mDatas.get(i); + } + } + setViewDate(mObjEntity); + break; + case SURE_BUTTON: + if ((Boolean) getIntent().getExtras().get("isAdd")) { + updateModelTime(); + } else { + addModelTime(); + } + break; + } + } + + public void updateModelTime() { + if (timeSetTv.getText().toString().isEmpty()) { + ToastUtil.show(this, "时间设置不能为空"); + return; + } + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", getIntent().getExtras().get("modelId").toString()); + if (modelType != null) { + map.put("modelType", modelType); + } else { + map.put("modelType", "1"); + } + map.put("execTime", timeSetTv.getText().toString()); + if (onceTimeTv.getText().toString().equals(getString(R.string.once_time))) { + map.put("onceFlag", "1"); + } else { + map.put("week", week); + map.put("onceFlag", "0"); + } + map.put("houseId", houseId); + netWorkUtil.requestPostByAsynewApi(UPDATE_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelTime", "ShareDeviceActivity onSuccess()" + respone); + AddModelEntity obj = JSON.parseObject(respone, AddModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + + public void addModelTime() { + if (timeSetTv.getText().toString().isEmpty()) { + ToastUtil.show(this, "时间设置不能为空"); + return; + } + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("modelId", getIntent().getExtras().get("nullmodelId").toString()); + if (modelType != null) { + map.put("modelType", modelType); + } else { + map.put("modelType", "1"); + } + map.put("execTime", timeSetTv.getText().toString()); + if (onceTimeTv.getText().toString().equals(getString(R.string.once_time))) { + map.put("onceFlag", "1"); + } else { + map.put("week", week); + map.put("onceFlag", "0"); + } + map.put("houseId", houseId); + netWorkUtil.requestPostByAsynewApi(ADD_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addModelTime", "ShareDeviceActivity onSuccess()" + respone); + AddModelEntity obj = JSON.parseObject(respone, AddModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODEL_REAPEAT: + if (data != null && data.getExtras().get("modelRepeat") != null) { + if (!TextUtils.isEmpty(data.getExtras().get("modelRepeat").toString().trim())) { + onceTimeTv.setText(data.getExtras().get("modelRepeat").toString().trim()); + week = data.getExtras().get("week").toString().trim(); + } else { + onceTimeTv.setText(getString(R.string.once_time)); + week = "0000000"; + } + } + break; + } + } + + private void selectModelTime() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", houseId); + map.put("modelType", String.valueOf(model)); + netWorkUtil.requestGetByAsy(SELECT_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectModelTime", "ShareDeviceActivity onSuccess()" + respone); + TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/homemanage/UploadBigBgService.java b/app/src/main/java/com/yonsz/z1/homemanage/UploadBigBgService.java new file mode 100644 index 0000000..28dcf45 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/homemanage/UploadBigBgService.java @@ -0,0 +1,75 @@ +package com.yonsz.z1.homemanage; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.support.annotation.Nullable; +import android.util.Log; + +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.util.List; + +/** + * Created by Administrator on 2017/2/11 0011. + */ + +public class UploadBigBgService extends Service { + + private static final String TAG = "uploadImg"; + + @Override + public void onCreate() { + Log.i(TAG, "ExampleService-onCreate"); + super.onCreate(); + } + + @Override + public void onStart(Intent intent, int startId) { + Log.i(TAG, "ExampleService-onStart"); + super.onStart(intent, startId); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.i(TAG, "onStartCommand: start"); + List files = (List) intent.getExtras().get("data"); + Log.i("gaojie", "UploadHeadIconService onStartCommand()" + files.size() + "---" + files.get(0).toString()); + String id = intent.getStringExtra("parentId"); + if (files != null && files.size() > 0) { + startUpload(files, id); + } + return super.onStartCommand(intent, flags, startId); + } + + private void startUpload(List files, String parentId) { + StringBuffer url = new StringBuffer(); + url.append(NetWorkUrl.UPLOAD_HOUSE_PIC); + url.append("houseId=" + parentId); + url.append("&housePicFile"); + url.append("&tokenId=" + SharedpreferencesUtil.get(Constans.TOKENID, "null")); + url.append("&session=" + SharedpreferencesUtil.get(Constans.SEESSIONID, "null")); + NetWorkUtil.instans().uploadImg(files, url.toString(), "2", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("startUpload", "UploadHeadIconService onSuccess()" + "123456789次" + respone); + stopSelf(); + } + + @Override + public void onFail(String message) { + Log.i("startUpload", "UploadHeadIconService onSuccess()" + "1234次" + message); + stopSelf(); + } + }); + } + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/yonsz/z1/listener/NoDoubleClickListener.java b/app/src/main/java/com/yonsz/z1/listener/NoDoubleClickListener.java new file mode 100644 index 0000000..f54497b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/NoDoubleClickListener.java @@ -0,0 +1,30 @@ +package com.yonsz.z1.listener; + +import android.view.View; + +import java.util.Calendar; + +/** + * Created by Administrator on 2018/4/12. + */ + +public abstract class NoDoubleClickListener implements View.OnClickListener { + + //每隔5000点击一次 MIN_CLICK_DELAY_TIME 为设置的间隔单位是毫秒 + public static final int MIN_CLICK_DELAY_TIME = 2000; + private long lastClickTime = 0; + + @Override + public void onClick(View v) { + long currentTime = Calendar.getInstance().getTimeInMillis(); + if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) { + lastClickTime = currentTime; + onNoDoubleClick(v); + } + } + + protected void onNoDoubleClick(View v) { + + } +} + diff --git a/app/src/main/java/com/yonsz/z1/listener/OnDialogDismissListener.java b/app/src/main/java/com/yonsz/z1/listener/OnDialogDismissListener.java new file mode 100644 index 0000000..f94618f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnDialogDismissListener.java @@ -0,0 +1,6 @@ +package com.yonsz.z1.listener; + + +public interface OnDialogDismissListener { + public void onReSet(); +} diff --git a/app/src/main/java/com/yonsz/z1/listener/OnDialogItemClickListener.java b/app/src/main/java/com/yonsz/z1/listener/OnDialogItemClickListener.java new file mode 100644 index 0000000..248d3d6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnDialogItemClickListener.java @@ -0,0 +1,13 @@ +package com.yonsz.z1.listener; + +/** + * Created by Administrator on 2017/1/4 0004. + */ + +public interface OnDialogItemClickListener +{ + public void onSure(); + public void onCancel(); + public void onData(float data); + // public void onData(String data); +} diff --git a/app/src/main/java/com/yonsz/z1/listener/OnDragUpListener.java b/app/src/main/java/com/yonsz/z1/listener/OnDragUpListener.java new file mode 100644 index 0000000..3465279 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnDragUpListener.java @@ -0,0 +1,11 @@ +package com.yonsz.z1.listener; + +import android.view.View; + +/** + * Created by Administrator on 2017/6/21. + */ + +public interface OnDragUpListener { + public void onDragUp(View view, int dragDirection, int oriTop, int oriBottom); +} diff --git a/app/src/main/java/com/yonsz/z1/listener/OnExbandItemClickListener.java b/app/src/main/java/com/yonsz/z1/listener/OnExbandItemClickListener.java new file mode 100644 index 0000000..2949d55 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnExbandItemClickListener.java @@ -0,0 +1,11 @@ +package com.yonsz.z1.listener; + +import android.view.View; + +/** + * Created by Administrator on 2017/6/21. + */ + +public interface OnExbandItemClickListener { + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id); +} diff --git a/app/src/main/java/com/yonsz/z1/listener/OnRecyclerClickListener.java b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerClickListener.java new file mode 100644 index 0000000..25d724c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerClickListener.java @@ -0,0 +1,11 @@ +package com.yonsz.z1.listener; + +import android.view.View; + +/** + * Created by Administrator on 2017/1/5 0005. + */ + +public interface OnRecyclerClickListener { + public void onClick(View view, int position); +} diff --git a/app/src/main/java/com/yonsz/z1/listener/OnRecyclerItemClickListener.java b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerItemClickListener.java new file mode 100644 index 0000000..35c93ab --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerItemClickListener.java @@ -0,0 +1,14 @@ +package com.yonsz.z1.listener; + +import android.view.View; + +import java.util.List; + +/** + * Created by Administrator on 2017/1/5 0005. + */ + +public interface OnRecyclerItemClickListener { + public void onClick(View view, int position, List photos, int i); + public void onLongClick(View view, int position); +} diff --git a/app/src/main/java/com/yonsz/z1/listener/OnRecyclerListener.java b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerListener.java new file mode 100644 index 0000000..e26ec90 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerListener.java @@ -0,0 +1,14 @@ +package com.yonsz.z1.listener; + +import android.support.v7.widget.RecyclerView; +import android.view.View; + +/** + * Created by Administrator on 2017/1/5 0005. + */ + +public interface OnRecyclerListener { + public void onClick(View view, int position); + + public void onLongClick(RecyclerView.ViewHolder viewHolder, int position); +} diff --git a/app/src/main/java/com/yonsz/z1/listener/OnRecyclerLoadDataListener.java b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerLoadDataListener.java new file mode 100644 index 0000000..e95995d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerLoadDataListener.java @@ -0,0 +1,9 @@ +package com.yonsz.z1.listener; + +/** + * Created by Administrator on 2017/1/15 0015. + */ + +public interface OnRecyclerLoadDataListener { + public void onLoadMore(); +} diff --git a/app/src/main/java/com/yonsz/z1/listener/OnRecyclerNameClickListener.java b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerNameClickListener.java new file mode 100644 index 0000000..9539a58 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerNameClickListener.java @@ -0,0 +1,11 @@ +package com.yonsz.z1.listener; + +import android.view.View; + +/** + * Created by Administrator on 2017/1/5 0005. + */ + +public interface OnRecyclerNameClickListener { + public void onClick(View view, String key); +} diff --git a/app/src/main/java/com/yonsz/z1/listener/OnRecyclerScrollListener.java b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerScrollListener.java new file mode 100644 index 0000000..bbdcb8c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerScrollListener.java @@ -0,0 +1,9 @@ +package com.yonsz.z1.listener; + +/** + * Created by Administrator on 2017/1/5 0005. + */ + +public interface OnRecyclerScrollListener { + public void onScroll(int position); +} diff --git a/app/src/main/java/com/yonsz/z1/listener/OnRecyclerTypeClickListener.java b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerTypeClickListener.java new file mode 100644 index 0000000..356d25e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnRecyclerTypeClickListener.java @@ -0,0 +1,14 @@ +package com.yonsz.z1.listener; + +import android.support.v7.widget.RecyclerView; +import android.view.View; + +/** + * Created by Administrator on 2017/1/5 0005. + */ + +public interface OnRecyclerTypeClickListener { + public void onClick(View view, int position, int i); + + public void onLongClick(RecyclerView.ViewHolder viewHolder, int position); +} diff --git a/app/src/main/java/com/yonsz/z1/listener/OnTitleItemClickListener.java b/app/src/main/java/com/yonsz/z1/listener/OnTitleItemClickListener.java new file mode 100644 index 0000000..3aa5a8a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/listener/OnTitleItemClickListener.java @@ -0,0 +1,11 @@ +package com.yonsz.z1.listener; + +/** + * Created by Administrator on 2016/11/27 0027. + */ + +public interface OnTitleItemClickListener { + public void onBack(); + public void onFunction(); + public void onFunctionText(); +} diff --git a/app/src/main/java/com/yonsz/z1/login/AdinfoActivity.java b/app/src/main/java/com/yonsz/z1/login/AdinfoActivity.java new file mode 100644 index 0000000..f882052 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/login/AdinfoActivity.java @@ -0,0 +1,76 @@ +package com.yonsz.z1.login; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.version4.MainActivity4; + +/** + * Created by Administrator on 2019/1/8. + */ + +public class AdinfoActivity extends BaseActivity { + private final static int FLAG_TO_MAIN = 1004; + private ImageView adInfoIv; + private int sec = 3; + private TextView mStateButton; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ad_info); + initView(); + } + + private void initView() { + mStateButton = (TextView) findViewById(R.id.bt_sec); + adInfoIv = (ImageView) findViewById(R.id.ad_info_iv); + if (SharedpreferencesUtil.get(Constans.ADIMAGEURL, "").toString() != null) { + ImageLoader.getInstance().displayImage(SharedpreferencesUtil.get(Constans.ADIMAGEURL, "").toString(), adInfoIv, UniKongApp.getHiApp().getImageLoaderOption()); + } + mHandler.sendEmptyMessageDelayed(FLAG_TO_MAIN, 1000); + mStateButton.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (!TextUtils.isEmpty(SharedpreferencesUtil.get(Constans.SEESSIONID, ""))) { + startActivity(new Intent(getApplicationContext(), MainActivity4.class)); + } else { + startActivity(new Intent(getApplicationContext(), LoginActivity.class)); + } + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FLAG_TO_MAIN: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(FLAG_TO_MAIN, 1000); + mStateButton.setText("跳过" + " " + sec); + } else { + if (!TextUtils.isEmpty(SharedpreferencesUtil.get(Constans.SEESSIONID, ""))) { + startActivity(new Intent(getApplicationContext(), MainActivity4.class)); + } else { + startActivity(new Intent(getApplicationContext(), LoginActivity.class)); + } + finish(); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/login/GuidePageFragment.java b/app/src/main/java/com/yonsz/z1/login/GuidePageFragment.java new file mode 100644 index 0000000..a7957fa --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/login/GuidePageFragment.java @@ -0,0 +1,62 @@ +package com.yonsz.z1.login; + +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +/** + * Created by Administrator on 2017/9/6. + */ + +public class GuidePageFragment extends Fragment { + private View view; + private ImageView imageview; + private TextView textView; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + view = View.inflate(getActivity(), R.layout.guide_page_fragment, null); + InitView(); + return view; + } + + private void InitView() { + imageview = (ImageView) view.findViewById(R.id.imageView); + textView = (TextView) view.findViewById(R.id.textView); + + int image = getArguments().getInt("image"); + boolean last = getArguments().getBoolean("last"); + // ImageLoaderUtil.ImageLoaderHome("drawable://" + image, imageview, image); + imageview.setImageResource(image); + + if (last) { + textView.setVisibility(View.VISIBLE); + } + textView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + SharedpreferencesUtil.save(Constans.ISOVER, true); + SharedpreferencesUtil.save(Constans.VOICE, true); + SharedpreferencesUtil.save(Constans.ISBIND, true); + startActivity(new Intent(getActivity(), LoginActivity.class)); + getActivity().finish(); + } + }); + } + + @Override + public void onDestroy() { + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/login/GuiderActivity.java b/app/src/main/java/com/yonsz/z1/login/GuiderActivity.java new file mode 100644 index 0000000..5bb4e1f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/login/GuiderActivity.java @@ -0,0 +1,99 @@ +package com.yonsz.z1.login; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.view.ViewPager; +import android.view.KeyEvent; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; + +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2017/8/28. + */ + +public class GuiderActivity extends FragmentActivity { + + private static final int[] pics = {R.drawable.pic_guidepage1, R.drawable.pic_guidepage2, R.drawable.pic_guidepage3}; + private ViewPager vp; + private List views; + private ImageView[] dots; + //记录当前选中位置 + private int currentIndex; //记录当前选中位置 + // private LinearLayout ll ;//点的管理者 + private int lastState = 0;//记录滑动状态; + private int last = 0;//记录滑动的位置 + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 + this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN);//去掉信息栏 + setContentView(R.layout.activity_guider); + InitView(); + setData(); + } + + private void setData() { + GuidePageFragment f1 = new GuidePageFragment(); + GuidePageFragment f2 = new GuidePageFragment(); + GuidePageFragment f3 = new GuidePageFragment(); + views.add(f1); + views.add(f2); + views.add(f3); + Bundle b1 = new Bundle(); + b1.putInt("image", pics[0]); + b1.putBoolean("last", false); + f1.setArguments(b1); + + Bundle b2 = new Bundle(); + b2.putInt("image", pics[1]); + b2.putBoolean("last", false); + f2.setArguments(b2); + + Bundle b3 = new Bundle(); + b3.putInt("image", pics[2]); + b3.putBoolean("last", true); + f3.setArguments(b3); + + + FragmentManager manager = this.getSupportFragmentManager(); + GuiderPagerAdapter adapter = new GuiderPagerAdapter(manager, views); + vp.setAdapter(adapter); + // vp.setOnPageChangeListener(this); + // initDots(); + } + + private void InitView() { + views = new ArrayList<>(); + vp = (ViewPager) findViewById(R.id.viewPager); + // ll = (LinearLayout) findViewById(R.id.ll); + } + + /** + * 返回无效 + * + * @param keyCode + * @param event + * @return + */ + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + // TODO Auto-generated method stub + switch (keyCode) { + case KeyEvent.KEYCODE_BACK: + return true; + + } + return super.onKeyUp(keyCode, event); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/login/GuiderPagerAdapter.java b/app/src/main/java/com/yonsz/z1/login/GuiderPagerAdapter.java new file mode 100644 index 0000000..8319a6d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/login/GuiderPagerAdapter.java @@ -0,0 +1,37 @@ +package com.yonsz.z1.login; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.view.ViewGroup; + +import java.util.List; + +/** + * Created by Administrator on 2017/8/28. + */ + +public class GuiderPagerAdapter extends FragmentPagerAdapter { + private List views; + + public GuiderPagerAdapter(FragmentManager manager, List views) { + super(manager); + this.views = views; + } + + @Override + public Fragment getItem(int position) { + return views.get(position); + } + + @Override + public int getCount() { + return views.size(); + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + // TODO Auto-generated method stub + super.destroyItem(container, position, object); + } +} diff --git a/app/src/main/java/com/yonsz/z1/login/OnLastGuiderListener.java b/app/src/main/java/com/yonsz/z1/login/OnLastGuiderListener.java new file mode 100644 index 0000000..a24532a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/login/OnLastGuiderListener.java @@ -0,0 +1,9 @@ +package com.yonsz.z1.login; + +/** + * Created by Administrator on 2017/8/28. + */ + +public interface OnLastGuiderListener { + public void onCallBack(); +} diff --git a/app/src/main/java/com/yonsz/z1/login/PhoneAreaActivity.java b/app/src/main/java/com/yonsz/z1/login/PhoneAreaActivity.java new file mode 100644 index 0000000..0f2bb3b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/login/PhoneAreaActivity.java @@ -0,0 +1,296 @@ +package com.yonsz.z1.login; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AreaEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.homemanage.HomeGroupActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.forgetpw.ForgetPWActivity; +import com.yonsz.z1.login.login.SortAreaAdapter; +import com.yonsz.z1.login.register.RegisterActivity; +import com.yonsz.z1.mine.mydevice.ShareDeviceActivity; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.devicelist.CharacterParser; +import com.yonsz.z1.version4.devicelist.ClearEditText; +import com.yonsz.z1.version4.devicelist.PinyinComparator; +import com.yonsz.z1.version4.devicelist.SortModel; +import com.yonsz.z1.view.SideAreaBar; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.difference.DifferConstans.APPID_S; +import static com.yonsz.z1.difference.DifferConstans.APPSECRET_S; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.GET_PHONE_AREA; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_BRAND_SUCCESS; + + +/** + * Created by Administrator on 2018/8/22. + */ + +public class PhoneAreaActivity extends BaseActivity { + private TitleView mTitleView; + private List stringList; + private EditText searchEt; + private ListView sortListView; + private SideAreaBar sideBar; + private TextView dialog; + private SortAreaAdapter adapter; + private ClearEditText mClearEditText; + private String rid; + private String deviceType; + /** + * 汉字转换成拼音的类 + */ + private CharacterParser characterParser; + private List SourceDateList = new ArrayList<>(); + /** + * 根据拼音来排列ListView里面的数据类 + */ + private PinyinComparator pinyinComparator; + private List filterDateList; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_brand_area); + initView(); + if (DensityUtil.isNetworkConnected(getActivity())) { + getTelAreaCodes(); + } + } + + private void getTelAreaCodes() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("appId", APPID_S); + map.put("appSecret", APPSECRET_S); + util.requestPostByAsynewApi(NetWorkUrl.GET_TELAREA_CODES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("getTelAreaCodes", "onSuccess: " + respone); + AreaEntity entity = JSON.parseObject(respone, AreaEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Log.i("getTelAreaCodes", "onSuccess: " + message); + Message msg = mHandler.obtainMessage(QUERY_DEVICE_BRAND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + private void initView() { + searchEt = (EditText) findViewById(R.id.et_search); + stringList = new ArrayList<>(); + mTitleView = (TitleView) findViewById(R.id.title_brand_list); + mTitleView.setHead("选择国家和地区"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + //实例化汉字转拼音类 + characterParser = CharacterParser.getInstance(); + pinyinComparator = new PinyinComparator(); + sideBar = (SideAreaBar) findViewById(R.id.sidrbar); + dialog = (TextView) findViewById(R.id.dialog); + sideBar.setTextView(dialog); + //设置右侧触摸监听 + sideBar.setOnTouchingLetterChangedListener(new SideAreaBar.OnTouchingLetterChangedListener() { + + @Override + public void onTouchingLetterChanged(String s) { + //该字母首次出现的位置 + int position = adapter.getPositionForSection(s.charAt(0)); + if (position != -1) { + sortListView.setSelection(position); + } + } + }); + sortListView = (ListView) findViewById(R.id.country_lvcountry); + sortListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent; + if (getIntent().getExtras().get("type").toString().equals("login")) { + intent = new Intent(PhoneAreaActivity.this, LoginActivity.class); + } else if (getIntent().getExtras().get("type").toString().equals("register")) { + intent = new Intent(PhoneAreaActivity.this, RegisterActivity.class); + } else if (getIntent().getExtras().get("type").toString().equals("forgetPw")) { + intent = new Intent(PhoneAreaActivity.this, ForgetPWActivity.class); + } else if (getIntent().getExtras().get("type").toString().equals("shareDevice")) { + intent = new Intent(PhoneAreaActivity.this, ShareDeviceActivity.class); + } else if (getIntent().getExtras().get("type").toString().equals("shareHome")) { + intent = new Intent(PhoneAreaActivity.this, HomeGroupActivity.class); + } else { + intent = new Intent(PhoneAreaActivity.this, LoginActivity.class); + } + if (null != filterDateList && filterDateList.size() != 0) { + intent.putExtra("phoneArea", filterDateList.get(position).getName() + " " + "+" + filterDateList.get(position).getId()); + } else { + intent.putExtra("phoneArea", SourceDateList.get(position).getName() + " " + "+" + SourceDateList.get(position).getId()); + } + + setResult(GET_PHONE_AREA, intent); + finish(); + } + }); + + adapter = new SortAreaAdapter(this, SourceDateList); + sortListView.setAdapter(adapter); + + mClearEditText = (ClearEditText) findViewById(R.id.et_search); + //根据输入框输入值的改变来过滤搜索 + mClearEditText.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + //当输入框里面的值为空,更新为原来的列表,否则为过滤数据列表 + filterData(s.toString()); + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case QUERY_DEVICE_BRAND_FAIL: + + break; + case QUERY_DEVICE_BRAND_SUCCESS: + AreaEntity entity2 = (AreaEntity) msg.obj; + stringList = entity2.getData(); + if (null != stringList && stringList.size() != 0) { + SourceDateList.clear(); + SourceDateList.addAll(filledData(stringList)); + // 根据a-z进行排序源数据 + Collections.sort(SourceDateList, pinyinComparator); + adapter.notifyDataSetChanged(); + } + break; + } + } + + /** + * 为ListView填充数据 + * + * @param date + * @return + */ + private List filledData(List date) { + List mSortList = new ArrayList(); + if (date.size() != 0) { + for (int i = 0; i < date.size(); i++) { + SortModel sortModel = new SortModel(); + sortModel.setName(date.get(i).getCountryName()); + sortModel.setId(date.get(i).getAreaCode()); + //汉字转换成拼音 + String pinyin = characterParser.getSelling(date.get(i).getCountryName()); + String sortString = pinyin.substring(0, 1).toUpperCase(); + // 正则表达式,判断首字母是否是英文字母 + if (date.get(i).getCommonFlag().equals("1")) { + sortModel.setSortLetters("常用"); + } else { + sortModel.setSortLetters(sortString.toUpperCase()); + } + mSortList.add(sortModel); + } + } else { + + } + return mSortList; + } + + /** + * 根据输入框中的值来过滤数据并更新ListView + * + * @param filterStr + */ + private void filterData(String filterStr) { + filterDateList = new ArrayList(); + + if (TextUtils.isEmpty(filterStr)) { + filterDateList = SourceDateList; + } else { + filterDateList.clear(); + for (SortModel sortModel : SourceDateList) { + String name = sortModel.getName(); + if (name.indexOf(filterStr.toString()) != -1 || characterParser.getSelling(name).startsWith(filterStr.toString())) { + filterDateList.add(sortModel); + } + } + } + + // 根据a-z进行排序 + Collections.sort(filterDateList, pinyinComparator); + adapter.updateListView(filterDateList); + } +} diff --git a/app/src/main/java/com/yonsz/z1/login/forgetpw/ForgetPWActivity.java b/app/src/main/java/com/yonsz/z1/login/forgetpw/ForgetPWActivity.java new file mode 100644 index 0000000..d5e0656 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/login/forgetpw/ForgetPWActivity.java @@ -0,0 +1,418 @@ +package com.yonsz.z1.login.forgetpw; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ResponeEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.PhoneAreaActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.KeyboardUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.VerificationUtils; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import okhttp3.Response; +import okhttp3.ResponseBody; + +import static com.yonsz.z1.login.register.RegisterActivity.getRandomString; +import static com.yonsz.z1.net.Constans.CHECK_USER_CODE_SUCCESS; +import static com.yonsz.z1.net.Constans.CHECK_USER_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_CODE_FAIL; +import static com.yonsz.z1.net.Constans.GET_CODE_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_PHONE_AREA; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.NetWorkUrl.PIC_CODE; + +/** + * Created by Administrator on 2017/5/26. + */ +public class ForgetPWActivity extends BaseActivity { + private EditText mUserPhone; + private EditText mUserCode, editTextCode; + private TextView mGetCode; + private int sec = 60; + private TitleView mTitleView; + private Button btNext; + private LinearLayout phoneAreaLl; + private TextView phoneArea; + private ImageView renovateIv, renovateRefresh; + private String randomString = ""; + private LoadingDialog mLoadingDialog; + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + View view = getCurrentFocus(); + KeyboardUtil.hideKeyboard(ev, view, ForgetPWActivity.this);//调用方法判断是否需要隐藏键盘 + break; + + default: + break; + } + return super.dispatchTouchEvent(ev); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_forgetpw); + initView(); + initListener(); + } + + @Override + public void onResume() { + super.onResume(); + picValidateCode(); + } + + + private void initView() { + editTextCode = (EditText) findViewById(R.id.editText_code); + renovateIv = (ImageView) findViewById(R.id.iv_renovate); + renovateRefresh = (ImageView) findViewById(R.id.iv_renovate_refresh); + renovateRefresh.setOnClickListener(this); + phoneArea = (TextView) findViewById(R.id.tv_phone_area); + phoneAreaLl = (LinearLayout) findViewById(R.id.ll_phone_area); + mUserPhone = (EditText) findViewById(R.id.edit_username); + mUserCode = (EditText) findViewById(R.id.edit_code); + mGetCode = (TextView) findViewById(R.id.tv_getcode); + btNext = (Button) findViewById(R.id.bt_forgetpw_next); + btNext.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mTitleView = (TitleView) findViewById(R.id.title_forgetpw); + mTitleView.setHead(R.string.phone_vertify); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (!SharedpreferencesUtil.get(Constans.PHONEAREA, "").isEmpty()) { + phoneArea.setText(SharedpreferencesUtil.get(Constans.PHONEAREA, "")); + } + + if (null != getIntent().getExtras().get("tag") && getIntent().getExtras().get("tag").equals("PersonCenterActivity")) { + mUserPhone.setText(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + mUserPhone.setEnabled(false); + mUserPhone.setFocusable(false); + } + } + + private void initListener() { + phoneAreaLl.setOnClickListener(this); + btNext.setOnClickListener(this); + mGetCode.setOnClickListener(this); + mUserCode.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + int i = s.length(); + if (i != 0) { + btNext.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + } else { + btNext.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + } + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_forgetpw_next: + checkUserCode(mUserPhone.getText().toString().trim(), mUserCode.getText().toString()); + break; + case R.id.tv_getcode: + if (VerificationUtils.checkPhoneNumber(mUserPhone.getText().toString().trim(), phoneArea.getText().toString())) { + //检验手机号是否被注册 + checkUserName(mUserPhone.getText().toString()); + } else { + if (TextUtils.isEmpty(mUserPhone.getText().toString().trim())) { + ToastUtil.show(this, R.string.phone_error_null); + } else { + ToastUtil.show(this, R.string.phone_error); + } + } +// getCode(); + break; + case R.id.ll_phone_area: + if (null != getIntent().getExtras().get("tag") && getIntent().getExtras().get("tag").equals("PersonCenterActivity")) { + return; + } + Intent intent1 = new Intent(ForgetPWActivity.this, PhoneAreaActivity.class); + intent1.putExtra("type", "forgetPw"); + startActivityForResult(intent1, GET_PHONE_AREA); + break; + case R.id.iv_renovate_refresh: + picValidateCode(); + break; + } + } + + //检验用户名是否被注册 + private void checkUserName(String userName) { + String phoneCode = phoneArea.getText().toString(); + HashMap map = new HashMap<>(); + map.put("appId", DifferConstans.APPID_S); + map.put("username", userName); + map.put("userType", "3"); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + NetWorkUtil net = NetWorkUtil.instans(); + // Log.i("gaojieTAG", "UpdatePwActivity checkUserName()" + NetWorkUrl.CHECK_USER_NAME + map); + net.requestPostByAsynewApi(NetWorkUrl.CHECK_USER_ISREGISTERED, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("gaojie", "checkUserName onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CHECK_USER_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void picValidateCode() { + randomString = getRandomString(8); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("randomStr", randomString); + netWorkUtil.requestGetByAsy(PIC_CODE, map, new NetWorkUtil.ReqCallBackOta() { + @Override + public void onSuccess(Response respone) { + ResponseBody body = respone.body(); + try { + byte[] bytes = body.bytes(); + final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + runOnUiThread(new Runnable() { + @Override + public void run() { + renovateIv.setImageBitmap(bitmap); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void onFail(String message) { + + } + }); + } + + //检验验证码 + private void checkUserCode(String userName, String userCode) { + String phoneCode = phoneArea.getText().toString(); + if (!VerificationUtils.checkPhoneNumber(userName, phoneCode)) { + ToastUtil.show(this, R.string.phone_error); + return; + } + HashMap map = new HashMap<>(); + map.put("mobile", userName); + map.put("code", userCode); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + NetWorkUtil net = NetWorkUtil.instans(); + Log.i("gaojieTAG", "UpdatePwActivity checkUserCode()" + NetWorkUrl.CHECK_USER_CODE + map); + net.requestPostByAsynewApi(NetWorkUrl.CHECK_USER_CODE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("gaojie", "checkUserCode onSuccess()" + respone); + ResponeEntity obj = JSON.parseObject(respone, ResponeEntity.class); + if (1 == obj.getFlag()) { + mHandler.sendEmptyMessage(CHECK_USER_CODE_SUCCESS); + } else { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getCode() { + String codeTrim = editTextCode.getText().toString().trim(); + if (TextUtils.isEmpty(codeTrim)) { + ToastUtil.show(this, "请输入图片验证码"); + return; + } + String phoneCode = phoneArea.getText().toString(); + if (!VerificationUtils.checkPhoneNumber(mUserPhone.getText().toString(), phoneCode)) { + ToastUtil.show(this, R.string.phone_error); + return; + } + initLoadDialog(); + HashMap map = new HashMap<>(); + map.put("appId", DifferConstans.APPID_S); + map.put("code", codeTrim); + map.put("mobile", mUserPhone.getText().toString()); + map.put("randomStr", randomString); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.GET_MSMCODE, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("UPdatePw", "onSuccess: " + respone); + ResponeEntity obj = JSON.parseObject(respone, ResponeEntity.class); + if (1 == obj.getFlag()) { + mHandler.sendEmptyMessage(GET_CODE_SUCCESS); + } else { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_CODE_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, R.string.notice_sms); + // mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_27_50)); + // mSure.setClickable(true); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mGetCode.setEnabled(false); + mGetCode.setText(getResources().getString(R.string.sec, sec)); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + break; + case GET_CODE_FAIL: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + picValidateCode(); + ToastUtil.show(this, (String) msg.obj != null ? ((String) msg.obj) : + getResources().getString(R.string.sms_fail)); + break; + case UPDATE_SEC: + if (sec > 2) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mGetCode.setText(getResources().getString(R.string.sec, sec - 1)); + } else { + mGetCode.setText(R.string.get_code); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + mGetCode.setEnabled(true); + sec = 60; + } + break; + case CHECK_USER_CODE_SUCCESS: + Intent intent = new Intent(ForgetPWActivity.this, SetPassWordActivity.class); + intent.putExtra("mUserPhone", mUserPhone.getText().toString().trim()); + intent.putExtra("mUserCode", mUserCode.getText().toString()); + intent.putExtra("phoneArea", phoneArea.getText().toString()); + if (null != getIntent().getExtras().get("tag") && getIntent().getExtras().get("tag").equals("PersonCenterActivity")) { + intent.putExtra("tag", "PersonCenterActivity"); + } else { + intent.putExtra("tag", "LoginActivity"); + } + startActivity(intent); + finish(); + break; + case CHECK_USER_NAME_SUCCESS: + SimpleEntty obj = (SimpleEntty) msg.obj; + if (obj.getData().equals("true")) { + getCode(); + } else { + ToastUtil.show(this, "用户名未注册"); + } + break; + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case GET_PHONE_AREA: + if (data != null && data.getExtras().get("phoneArea") != null) { + phoneArea.setText(data.getExtras().get("phoneArea").toString()); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/login/forgetpw/SetPassWordActivity.java b/app/src/main/java/com/yonsz/z1/login/forgetpw/SetPassWordActivity.java new file mode 100644 index 0000000..d213362 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/login/forgetpw/SetPassWordActivity.java @@ -0,0 +1,315 @@ +package com.yonsz.z1.login.forgetpw; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ResponeEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.MainActivity4; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.LOGIN_FAIL; +import static com.yonsz.z1.net.Constans.LOGIN_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_PW_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_PW_SUCCESS; + +/** + * Created by Administrator on 2017/6/14. + */ + +public class SetPassWordActivity extends BaseActivity { + private TitleView mTitleView; + private EditText mUserPass; + private EditText mUserPassTwice; + private Button bt_sure; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_set_password); + initView(); + initListener(); + } + + + private void initView() { + mUserPass = (EditText) findViewById(R.id.edit_userpass); + mUserPassTwice = (EditText) findViewById(R.id.edit_pw_twice); + bt_sure = (Button) findViewById(R.id.bt_sure); + bt_sure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mTitleView = (TitleView) findViewById(R.id.title_set_pw); + mTitleView.setHead(R.string.set_pw); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void initListener() { + bt_sure.setOnClickListener(this); + mUserPass.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (TextUtils.isEmpty(mUserPass.getText()) || TextUtils.isEmpty(mUserPassTwice.getText())) { + bt_sure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + bt_sure.setEnabled(false); + } else { + bt_sure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + bt_sure.setEnabled(true); + } + if (s.toString().contains(" ")) { + String[] str = s.toString().split(" "); + String str1 = ""; + for (int j = 0; j < str.length; j++) { + str1 += str[j]; + } + mUserPass.setText(str1); + mUserPass.setSelection(start); + } + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().isEmpty()) + return; + /*if (!s.toString().matches("[A-Za-z0-9]+")) { + String temp = s.toString(); + ToastUtil.show(SetPassWordActivity.this, "请输入数字或字母"); + s.delete(temp.length() - 1, temp.length()); + mUserPass.setSelection(s.length()); + }*/ + } + }); + + mUserPassTwice.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (TextUtils.isEmpty(mUserPassTwice.getText()) || TextUtils.isEmpty(mUserPass.getText())) { + bt_sure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + bt_sure.setEnabled(false); + } else { + bt_sure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + bt_sure.setEnabled(true); + } + if (s.toString().contains(" ")) { + String[] str = s.toString().split(" "); + String str1 = ""; + for (int j = 0; j < str.length; j++) { + str1 += str[j]; + } + mUserPassTwice.setText(str1); + mUserPassTwice.setSelection(start); + } + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().isEmpty()) + return; + /*if (!s.toString().matches("[A-Za-z0-9]+")) { + String temp = s.toString(); + ToastUtil.show(SetPassWordActivity.this, "请输入数字或字母"); + s.delete(temp.length() - 1, temp.length()); + mUserPassTwice.setSelection(s.length()); + }*/ + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure: + if (TextUtils.isEmpty(mUserPass.getText().toString()) || mUserPass.getText().toString().length() < 6) { + ToastUtil.show(this, R.string.password_error_6); + } else if (TextUtils.isEmpty(mUserPassTwice.getText().toString()) || mUserPassTwice.getText().toString().length() < 6) { + ToastUtil.show(this, R.string.password_error_6); + } else if (!mUserPass.getText().toString().equals(mUserPassTwice.getText().toString())) { + ToastUtil.show(this, R.string.login_new_different); + } else { + findbackPw(); + } + break; + } + } + + private void findbackPw() { + String mUserPhone = null; + String mUserCode = null; + String phoneCode = getIntent().getExtras().get("phoneArea").toString(); + if (getIntent().getExtras().get("mUserPhone") != null) { + mUserPhone = getIntent().getExtras().get("mUserPhone").toString(); + } + if (getIntent().getExtras().get("mUserCode") != null) { + mUserCode = getIntent().getExtras().get("mUserCode").toString(); + } + HashMap map = new HashMap<>(); + if (mUserCode != null && mUserCode != null) { + map.put("checkCode", mUserCode); + map.put("username", mUserPhone); + } + map.put("appId", DifferConstans.APPID_S); + map.put("newPassword", mUserPass.getText().toString()); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + map.put("userType", "3"); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynewApi(NetWorkUrl.FORGET_PASS_WORD, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("UPdatePw", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + mHandler.sendEmptyMessage(UPDATE_PW_SUCCESS); + } else { + Message msg = mHandler.obtainMessage(UPDATE_PW_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_PW_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //注册成功直接登录 + private void login() { + String name = getIntent().getExtras().get("mUserPhone").toString(); + String phoneCode = getIntent().getExtras().get("phoneArea").toString(); + String password = mUserPassTwice.getText().toString().trim(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("appId", DifferConstans.APPID_S); + map.put("mobile", name); + map.put("password", password); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + map.put("mobileLogin", "true"); + map.put("clientType", "1"); + + util.requestPostByAsynewApi(NetWorkUrl.LOGIN_URL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ResponeEntity entity = JSON.parseObject(respone, ResponeEntity.class); + Log.i("login111", "onSuccess: " + respone); + if (entity.getFlag() == 1) { + Message msg = mHandler.obtainMessage(LOGIN_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + + } else { + Message msg = mHandler.obtainMessage(LOGIN_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(LOGIN_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_PW_SUCCESS: + ToastUtil.show(this, R.string.modify_success); + mUserPass.postDelayed(new Runnable() { + @Override + public void run() { + if (null != getIntent().getExtras().get("tag") && getIntent().getExtras().get("tag").equals("PersonCenterActivity")) { + //返回登录页面 + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + SharedpreferencesUtil.save(Constans.TOKENID, ""); + SharedpreferencesUtil.save(Constans.PASSWORD, ""); + SharedpreferencesUtil.save(Constans.MAIN_BG_URL, ""); + NettyHandlerUtil.closeCtx(); + Intent intent = new Intent(SetPassWordActivity.this, LoginActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } else { + login(); + } + } + }, 1000); + break; + case UPDATE_PW_FAIL: + ToastUtil.show(this, (String) msg.obj != null ? ((String) msg.obj) : + getResources().getString(R.string.update_fail)); + break; + case LOGIN_SUCCESS: + ResponeEntity entity1 = (ResponeEntity) msg.obj; + /*SharedpreferencesUtil.save(Constans.USERPHONE, entity1.getObj().getLogininfo().getLoginName()); + SharedpreferencesUtil.save(Constans.SEESSIONID, entity1.getObj().getLogininfo().getSessionId()); + SharedpreferencesUtil.save(Constans.USERID, entity1.getObj().getUser().getId()); + SharedpreferencesUtil.save(Constans.USERNAME, entity1.getObj().getUser().getName()); + SharedpreferencesUtil.save(Constans.PASSWORD, mUserPass.getText().toString());*/ + + SharedpreferencesUtil.save(Constans.SEESSIONID, entity1.getData().getSession()); + SharedpreferencesUtil.save(Constans.USERID, entity1.getData().getUserId()); + SharedpreferencesUtil.save(Constans.USERPHONE, getIntent().getExtras().get("mUserPhone").toString()); + SharedpreferencesUtil.save(Constans.PASSWORD, mUserPass.getText().toString()); + + startActivity(new Intent(this, MainActivity4.class)); + finish(); + break; + case LOGIN_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/login/login/SortAreaAdapter.java b/app/src/main/java/com/yonsz/z1/login/login/SortAreaAdapter.java new file mode 100644 index 0000000..e74ffc4 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/login/login/SortAreaAdapter.java @@ -0,0 +1,129 @@ +package com.yonsz.z1.login.login; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.SectionIndexer; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.version4.devicelist.SortModel; + +import java.util.List; + +public class SortAreaAdapter extends BaseAdapter implements SectionIndexer { + + private List list = null; + + private Context mContext; + + public SortAreaAdapter(Context mContext, List list) { + this.mContext = mContext; + this.list = list; + } + + public void updateListView(List list) { + this.list = list; + notifyDataSetChanged(); + } + + + @Override + public int getCount() { + return list != null ? list.size() : 0; + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + ViewHolder viewHolder = null; + final SortModel mContent = list.get(position); + if (convertView == null) { + viewHolder = new ViewHolder(); + convertView = LayoutInflater.from(mContext).inflate(R.layout.item_area_list, null); + viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.title); + viewHolder.tvLetter = (TextView) convertView.findViewById(R.id.catalog); + viewHolder.areaCode = (TextView) convertView.findViewById(R.id.tv_area_code); + convertView.setTag(viewHolder); + } else { + viewHolder = (ViewHolder) convertView.getTag(); + } + //根据position获取分类的首字母的Char ascii值 + int section = getSectionForPosition(position); + //如果当前位置等于该分类首字母的Char的位置 ,则认为是第一次出现 + if (position == getPositionForSection(section)) { + viewHolder.tvLetter.setVisibility(View.VISIBLE); + viewHolder.tvLetter.setText(mContent.getSortLetters()); + } else { + viewHolder.tvLetter.setVisibility(View.GONE); + } + viewHolder.tvTitle.setText(this.list.get(position).getName()); + viewHolder.areaCode.setText("+" + this.list.get(position).getId()); + return convertView; + } + + @Override + public Object[] getSections() { + return null; + } + + /** + * 根据分类的首字母的Char ascii值获取其第一次出现该首字母的位置 + */ + @Override + public int getPositionForSection(int sectionIndex) { + for (int i = 0; i < getCount(); i++) { + String sortStr = list.get(i).getSortLetters(); + char firstChar = sortStr.toUpperCase().charAt(0); + if (firstChar == sectionIndex) { + return i; + } + } + + return -1; + } + + /** + * 根据ListView的当前位置获取分类的首字母的Char ascii值 + */ + @Override + public int getSectionForPosition(int position) { + return list.get(position).getSortLetters().charAt(0); + } + + /** + * 提取英文的首字母,非英文字母用#代替。 + * + * @param str + * @return + */ + private String getAlpha(String str) { + String sortStr = str.trim().substring(0, 1).toUpperCase(); + // ������ʽ���ж�����ĸ�Ƿ���Ӣ����ĸ + if (sortStr.matches("[A-Z]")) { + return sortStr; + } else { + return "#"; + } + } + + final static class ViewHolder { + TextView tvLetter; + TextView tvTitle; + TextView areaCode; + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/login/register/RegisterActivity.java b/app/src/main/java/com/yonsz/z1/login/register/RegisterActivity.java new file mode 100644 index 0000000..9954977 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/login/register/RegisterActivity.java @@ -0,0 +1,588 @@ +package com.yonsz.z1.login.register; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.NewRecordEntity; +import com.yonsz.z1.database.entity.RegisterEntity; +import com.yonsz.z1.database.entity.ResponeEntity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.fragment.person.WebViewActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.PhoneAreaActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.KeyboardUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.VerificationUtils; +import com.yonsz.z1.version4.MainActivity4; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; +import java.util.Random; + +import okhttp3.Response; +import okhttp3.ResponseBody; + +import static com.yonsz.z1.net.Constans.ADD_PERSONINFO_FAIL; +import static com.yonsz.z1.net.Constans.ADD_PERSONINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.CHECK_USER_CODE_SUCCESS; +import static com.yonsz.z1.net.Constans.CHECK_USER_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_CODE_FAIL; +import static com.yonsz.z1.net.Constans.GET_CODE_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_PHONE_AREA; +import static com.yonsz.z1.net.Constans.LOGIN_FAIL; +import static com.yonsz.z1.net.Constans.LOGIN_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_PW_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_PW_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.NetWorkUrl.PIC_CODE; + +/** + * Created by Administrator on 2017/5/26. + */ + +public class RegisterActivity extends BaseActivity { + private TitleView mTitleView; + private LoadingDialog mLoadingDialog; + private EditText mUserPhone; + private EditText mUserCode; + private EditText mUserPass, editTextCode; + private TextView mGetCode; + private Button mSure; + private int sec = 60; + private TextView conpyRightTv; + private CheckBox selectUnnorReveal; + private LinearLayout phoneAreaLl; + private TextView phoneArea; + private ImageView renovateIv, renovateRefresh; + private String randomString = ""; + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + //length用户要求产生字符串的长度 + public static String getRandomString(int length) { + String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + Random random = new Random(); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < length; i++) { + int number = random.nextInt(62); + sb.append(str.charAt(number)); + } + return sb.toString(); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + View view = getCurrentFocus(); + KeyboardUtil.hideKeyboard(ev, view, RegisterActivity.this);//调用方法判断是否需要隐藏键盘 + break; + + default: + break; + } + return super.dispatchTouchEvent(ev); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_register); + initView(); + initListener(); + } + + @Override + public void onResume() { + super.onResume(); + picValidateCode(); + } + + private void initView() { + editTextCode = (EditText) findViewById(R.id.editText_code); + renovateIv = (ImageView) findViewById(R.id.iv_renovate); + renovateRefresh = (ImageView) findViewById(R.id.iv_renovate_refresh); + renovateRefresh.setOnClickListener(this); + phoneArea = (TextView) findViewById(R.id.tv_phone_area); + phoneAreaLl = (LinearLayout) findViewById(R.id.ll_phone_area); + mTitleView = (TitleView) findViewById(R.id.title_register); + mTitleView.setHead(R.string.register_); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (!SharedpreferencesUtil.get(Constans.PHONEAREA, "").isEmpty()) { + phoneArea.setText(SharedpreferencesUtil.get(Constans.PHONEAREA, "")); + } + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + mLoadingDialog = new LoadingDialog(this); + mUserPhone = (EditText) findViewById(R.id.edit_username); + mUserCode = (EditText) findViewById(R.id.edit_code); + mUserPass = (EditText) findViewById(R.id.edit_pw); + mGetCode = (TextView) findViewById(R.id.tv_getcode); + conpyRightTv = (TextView) findViewById(R.id.tv_copyright_statement); + mSure = (Button) findViewById(R.id.bt_sure); + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mSure.setEnabled(false); + // mSure.setOnClickListener(this); + mGetCode.setOnClickListener(this); + conpyRightTv.setOnClickListener(this); + mLoadingDialog = new LoadingDialog(this); + + mUserPass.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (s.toString().isEmpty() || TextUtils.isEmpty(mUserPhone.getText().toString()) || TextUtils.isEmpty(mUserCode.getText().toString()) || !selectUnnorReveal.isChecked()) { + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mSure.setClickable(false); + mSure.setEnabled(false); + } else { + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + mSure.setClickable(true); + mSure.setEnabled(true); + } + if (s.toString().contains(" ")) { + String[] str = s.toString().split(" "); + String str1 = ""; + for (int j = 0; j < str.length; j++) { + str1 += str[j]; + } + mUserPass.setText(str1); + mUserPass.setSelection(start); + } + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().isEmpty()) + return; + } + }); + + mSure.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (!VerificationUtils.checkPhoneNumber(mUserPhone.getText().toString().trim(), phoneArea.getText().toString())) { + ToastUtil.show(RegisterActivity.this, R.string.phone_error); + } else if (TextUtils.isEmpty(mUserCode.getText().toString())) { + ToastUtil.show(RegisterActivity.this, R.string.code_null); + } else if (TextUtils.isEmpty(mUserPass.getText().toString()) || mUserPass.getText().toString().length() < 6) { + ToastUtil.show(RegisterActivity.this, R.string.password_error_6); + } else if (!selectUnnorReveal.isChecked()) { + ToastUtil.show(RegisterActivity.this, "需要勾选版权声明"); + } else { + updatePassword(); + } + } + }); + } + + private void initListener() { + selectUnnorReveal.setOnClickListener(this); + phoneAreaLl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_getcode: + getCode(); + break; + /*case R.id.bt_sure: + if (!VerificationUtils.isMobile(mUserPhone.getText().toString().trim())) { + ToastUtil.show(this, R.string.phone_error); + } else if (TextUtils.isEmpty(mUserCode.getText().toString())) { + ToastUtil.show(this, R.string.code_null); + } else if (TextUtils.isEmpty(mUserPass.getText().toString()) || mUserPass.getText().toString().length() < 6) { + ToastUtil.show(this, R.string.password_error_6); + } else { + updatePassword(); + } + break;*/ + case R.id.tv_copyright_statement: + Intent intent = new Intent(RegisterActivity.this, WebViewActivity.class); + intent.putExtra("platform", "register"); + startActivity(intent); + break; + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked() && !TextUtils.isEmpty(mUserPass.getText().toString()) && !TextUtils.isEmpty(mUserCode.getText().toString()) && !TextUtils.isEmpty(mUserPhone.getText().toString())) { + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + mSure.setClickable(true); + mSure.setEnabled(true); + } else { + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mSure.setClickable(false); + mSure.setEnabled(false); + } + break; + case R.id.ll_phone_area: + Intent intent1 = new Intent(RegisterActivity.this, PhoneAreaActivity.class); + intent1.putExtra("type", "register"); + startActivityForResult(intent1, GET_PHONE_AREA); + break; + case R.id.iv_renovate_refresh: + picValidateCode(); + break; + } + } + + private void picValidateCode() { + randomString = getRandomString(8); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("randomStr", randomString); + netWorkUtil.requestGetByAsy(PIC_CODE, map, new NetWorkUtil.ReqCallBackOta() { + @Override + public void onSuccess(Response respone) { + ResponseBody body = respone.body(); + try { + byte[] bytes = body.bytes(); + final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + runOnUiThread(new Runnable() { + @Override + public void run() { + renovateIv.setImageBitmap(bitmap); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void onFail(String message) { + + } + }); + } + + //2.注册账号 + private void updatePassword() { + String userName = mUserPhone.getText().toString(); + String userCode = mUserCode.getText().toString(); + if (userCode != null && userName != null) { + // checkUserCode(userName, userCode); + updatePassword1(); + } + } + + private void updatePassword1() { + String phoneCode = phoneArea.getText().toString(); + String body = "{\"appId\":\"" + DifferConstans.APPID_S + "\",\"loginName\":\"" + mUserPhone.getText().toString() + "\",\"password\":\"" + mUserPass.getText().toString() + "\",\"telAreaCode\":\"" + phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length()) + "\"}"; + HashMap map = new HashMap<>(); + map.put("smsCode", mUserCode.getText().toString()); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsyBody(NetWorkUrl.REGIST_URL, map, body, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("gaojie", "UpdatePwActivity onSuccess()" + respone + "注册成功"); + RegisterEntity obj = JSON.parseObject(respone, RegisterEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_PW_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_PW_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Log.i("gaojie", "UpdatePwActivity onFail()" + "注册失败"); + Message msg = mHandler.obtainMessage(UPDATE_PW_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //检验是否是手机号 + private void getCode() { + if (VerificationUtils.checkPhoneNumber(mUserPhone.getText().toString().trim(), phoneArea.getText().toString())) { + //检验手机号是否被注册 + checkUserName(mUserPhone.getText().toString()); + } else { + if (TextUtils.isEmpty(mUserPhone.getText().toString().trim())) { + ToastUtil.show(this, R.string.phone_error_null); + } else { + ToastUtil.show(this, R.string.phone_error); + } + } + + } + + private void getCode1() { + String codeTrim = editTextCode.getText().toString().trim(); + if (TextUtils.isEmpty(codeTrim)) { + ToastUtil.show(this, "请输入图片验证码"); + return; + } + String phoneCode = phoneArea.getText().toString(); + initLoadDialog(); + HashMap map = new HashMap<>(); + map.put("appId", DifferConstans.APPID_S); + map.put("code", codeTrim); + map.put("mobile", mUserPhone.getText().toString()); + // map.put("codeType", "forgetpwd"); + map.put("randomStr", randomString); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.GET_MSMCODE, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("gaojie", "UpdatePwActivity onSuccess()" + respone); + ResponeEntity obj = JSON.parseObject(respone, ResponeEntity.class); + if (1 == obj.getFlag()) { + mHandler.sendEmptyMessage(GET_CODE_SUCCESS); + } else { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //检验用户名是否被注册 + private void checkUserName(String userName) { + String phoneCode = phoneArea.getText().toString(); + HashMap map = new HashMap<>(); + map.put("appId", DifferConstans.APPID_S); + map.put("username", userName); + map.put("userType", "3"); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + NetWorkUtil net = NetWorkUtil.instans(); + // Log.i("gaojieTAG", "UpdatePwActivity checkUserName()" + NetWorkUrl.CHECK_USER_NAME + map); + net.requestPostByAsynewApi(NetWorkUrl.CHECK_USER_NAME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("gaojie", "checkUserName onSuccess()" + respone); + ResponeEntity obj = JSON.parseObject(respone, ResponeEntity.class); + if (1 == obj.getFlag()) { + mHandler.sendEmptyMessage(CHECK_USER_NAME_SUCCESS); + } else { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + mLoadingDialog.dismiss(); + switch (msg.what) { + case GET_CODE_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, R.string.notice_sms); + // mGetCodeCount.setVisibility(View.VISIBLE); + // mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_27_50)); + // mSure.setEnabled(false); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mGetCode.setEnabled(false); + mGetCode.setText(getResources().getString(R.string.sec, sec)); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + break; + case GET_CODE_FAIL: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + picValidateCode(); + ToastUtil.show(this, (String) msg.obj != null ? ((String) msg.obj) : + getResources().getString(R.string.sms_fail)); + break; + case UPDATE_PW_SUCCESS: + ToastUtil.show(this, R.string.update_success); + RegisterEntity entity = (RegisterEntity) msg.obj; + /*SharedpreferencesUtil.save(Constans.USERPHONE, entity.getObj().getLoginName()); + SharedpreferencesUtil.save(Constans.SEESSIONID, entity.getObj().getId()); + SharedpreferencesUtil.save(Constans.USERNAME, entity.getObj().getLoginName());*/ + mUserPass.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(); + intent.putExtra("checkCode", mUserCode.getText().toString()); + login(); + /*if (isUpdatePw) { + // startActivity(new Intent(UpdatePwActivity.this, ModifyPwActivity.class)); + } else { + // startActivity(new Intent(UpdatePwActivity.this, RegisterActivity.class)); + //这里直接记录账号个密码就登录进去了 + login(); + //登陆后 + }*/ + } + }, 1000); + break; + case UPDATE_PW_FAIL: + ToastUtil.show(this, (String) msg.obj != null ? ((String) msg.obj) : + getResources().getString(R.string.update_fail)); + break; + case UPDATE_SEC: + if (sec > 2) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mGetCode.setText(getResources().getString(R.string.sec, sec - 1)); + } else { + mGetCode.setText(R.string.get_code); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + mGetCode.setEnabled(true); + sec = 60; + } + break; + case CHECK_USER_NAME_SUCCESS: + getCode1(); + break; + case CHECK_USER_CODE_SUCCESS: + // updatePassword1(); + break; + case LOGIN_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case LOGIN_SUCCESS: + ResponeEntity entity1 = (ResponeEntity) msg.obj; + SharedpreferencesUtil.save(Constans.SEESSIONID, entity1.getData().getSession()); + SharedpreferencesUtil.save(Constans.USERID, entity1.getData().getUserId()); + SharedpreferencesUtil.save(Constans.USERPHONE, mUserPhone.getText().toString()); + SharedpreferencesUtil.save(Constans.PASSWORD, mUserPass.getText().toString()); + // SharedpreferencesUtil.save(Constans.USERNAME, entity1.getObj().getUser().getName()); + boolean isSetting = TextUtils.isEmpty(SharedpreferencesUtil. + get(SharedpreferencesUtil.get(Constans.USERID, ""), "")); + startActivity(new Intent(this, MainActivity4.class)); + finish(); +// saveUserInfo(); + break; + case ADD_PERSONINFO_SUCCESS: + // NewRecordEntity.ObjBean entity2 = (NewRecordEntity.ObjBean) msg.obj; + // SharedpreferencesUtil.save(Constans.USERID, entity2.getUser().getId()); + startActivity(new Intent(this, MainActivity4.class)); + finish(); + break; + case ADD_PERSONINFO_FAIL: + break; + } + } + + + //注册成功直接登录 + private void login() { + String name = mUserPhone.getText().toString().trim(); + String phoneCode = phoneArea.getText().toString().trim(); + String password = mUserPass.getText().toString().trim(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("appId", DifferConstans.APPID_S); + map.put("mobile", name); + map.put("password", password); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + map.put("mobileLogin", "true"); + map.put("clientType", "1"); + + mLoadingDialog.show(); + util.requestPostByAsynewApi(NetWorkUrl.LOGIN_URL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ResponeEntity entity = JSON.parseObject(respone, ResponeEntity.class); + Log.i("login111", "onSuccess: " + respone); + if (entity.getFlag() == 1) { + Message msg = mHandler.obtainMessage(LOGIN_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + + } else { + Message msg = mHandler.obtainMessage(LOGIN_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(LOGIN_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //默认设置用户信息 + private void saveUserInfo() { + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case GET_PHONE_AREA: + if (data != null && data.getExtras().get("phoneArea") != null) { + phoneArea.setText(data.getExtras().get("phoneArea").toString()); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/login/register/WxRegisterActivity.java b/app/src/main/java/com/yonsz/z1/login/register/WxRegisterActivity.java new file mode 100644 index 0000000..5a2668d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/login/register/WxRegisterActivity.java @@ -0,0 +1,474 @@ +package com.yonsz.z1.login.register; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.RegisterEntity; +import com.yonsz.z1.database.entity.ResponeEntity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.fragment.person.WebViewActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.PhoneAreaActivity; +import com.yonsz.z1.mine.personcenter.PersonCenterActivity; +import com.yonsz.z1.mine.personcenter.PhoneCheckAndModifyActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.VerificationUtils; +import com.yonsz.z1.version4.MainActivity4; +import com.yonsz.z1.view.CircleImageView; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import okhttp3.Response; +import okhttp3.ResponseBody; + +import static com.yonsz.z1.login.register.RegisterActivity.getRandomString; +import static com.yonsz.z1.net.Constans.ADD_PERSONINFO_FAIL; +import static com.yonsz.z1.net.Constans.ADD_PERSONINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.CHECK_USER_CODE_SUCCESS; +import static com.yonsz.z1.net.Constans.CHECK_USER_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_CODE_FAIL; +import static com.yonsz.z1.net.Constans.GET_CODE_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_PHONE_AREA; +import static com.yonsz.z1.net.Constans.LOGIN_FAIL; +import static com.yonsz.z1.net.Constans.NICKNAME_RESULT; +import static com.yonsz.z1.net.Constans.UPDATE_PW_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_PW_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.Constans.WX_LOGIN_FAIL; +import static com.yonsz.z1.net.Constans.WX_LOGIN_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.PIC_CODE; + +/** + * Created by Administrator on 2017/5/26. + */ + +public class WxRegisterActivity extends BaseActivity { + private TitleView mTitleView; + private LoadingDialog mLoadingDialog; + private EditText mUserPhone; + private EditText mUserCode, editTextCode; + private TextView mGetCode; + private Button mSure; + private int sec = 60; + private TextView conpyRightTv; + private CheckBox selectUnnorReveal; + private CircleImageView civ_personl; + private TextView wxUserNameTv, phoneArea; + private ImageView renovateIv, renovateRefresh; + private String randomString = ""; + private LinearLayout phoneAreaLl; + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_wx_register); + initView(); + initListener(); + } + + @Override + public void onResume() { + super.onResume(); + picValidateCode(); + } + + private void initView() { + phoneArea = (TextView) findViewById(R.id.tv_phone_area); + phoneAreaLl = (LinearLayout) findViewById(R.id.ll_phone_area); + editTextCode = (EditText) findViewById(R.id.editText_code); + renovateIv = (ImageView) findViewById(R.id.iv_renovate); + renovateRefresh = (ImageView) findViewById(R.id.iv_renovate_refresh); + renovateRefresh.setOnClickListener(this); + mTitleView = (TitleView) findViewById(R.id.title_register); + mTitleView.setHead("绑定手机"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + wxUserNameTv = (TextView) findViewById(R.id.tv_user); + civ_personl = (CircleImageView) findViewById(R.id.civ_personl); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + mLoadingDialog = new LoadingDialog(this); + mUserPhone = (EditText) findViewById(R.id.edit_username); + mUserCode = (EditText) findViewById(R.id.edit_code); + mGetCode = (TextView) findViewById(R.id.tv_getcode); + conpyRightTv = (TextView) findViewById(R.id.tv_copyright_statement); + mSure = (Button) findViewById(R.id.bt_sure); + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mSure.setEnabled(false); + mSure.setOnClickListener(this); + mGetCode.setOnClickListener(this); + conpyRightTv.setOnClickListener(this); + phoneAreaLl.setOnClickListener(this); + mLoadingDialog = new LoadingDialog(this); + + wxUserNameTv.setText(getIntent().getExtras().get("userName").toString()); + if (SharedpreferencesUtil.get(Constans.USERICON, "").toString() != null) { + ImageLoader.getInstance().displayImage(getIntent().getExtras().get("headUrl").toString(), civ_personl, UniKongApp.getHiApp().getImageLoaderOption()); + } + + mUserPhone.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (s.toString().isEmpty() || TextUtils.isEmpty(mUserPhone.getText().toString()) || TextUtils.isEmpty(mUserCode.getText().toString()) || !selectUnnorReveal.isChecked()) { + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mSure.setClickable(false); + mSure.setEnabled(false); + } else { + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + mSure.setClickable(true); + mSure.setEnabled(true); + } + if (s.toString().contains(" ")) { + String[] str = s.toString().split(" "); + String str1 = ""; + for (int j = 0; j < str.length; j++) { + str1 += str[j]; + } + mUserCode.setText(str1); + mUserCode.setSelection(start); + } + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().isEmpty()) + return; + } + }); + + + mUserCode.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (s.toString().isEmpty() || TextUtils.isEmpty(mUserPhone.getText().toString()) || TextUtils.isEmpty(mUserCode.getText().toString()) || !selectUnnorReveal.isChecked()) { + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mSure.setClickable(false); + mSure.setEnabled(false); + } else { + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + mSure.setClickable(true); + mSure.setEnabled(true); + } + if (s.toString().contains(" ")) { + String[] str = s.toString().split(" "); + String str1 = ""; + for (int j = 0; j < str.length; j++) { + str1 += str[j]; + } + mUserCode.setText(str1); + mUserCode.setSelection(start); + } + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().isEmpty()) + return; + } + }); + + } + + private void initListener() { + selectUnnorReveal.setOnClickListener(this); + } + + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_getcode: + getCode1(); + break; + case R.id.bt_sure: + if (!VerificationUtils.checkPhoneNumber(mUserPhone.getText().toString().trim(), phoneArea.getText().toString())) { + ToastUtil.show(this, R.string.phone_error); + } else if (TextUtils.isEmpty(mUserCode.getText().toString())) { + ToastUtil.show(this, R.string.code_null); + } else if (!selectUnnorReveal.isChecked()) { + ToastUtil.show(this, "需要勾选版权声明"); + } else { + //微信注册 + quickRegist(); + // updatePassword(); + } + break; + case R.id.tv_copyright_statement: + Intent intent = new Intent(WxRegisterActivity.this, WebViewActivity.class); + intent.putExtra("platform", "register"); + startActivity(intent); + break; + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked() && !TextUtils.isEmpty(mUserCode.getText().toString()) && !TextUtils.isEmpty(mUserPhone.getText().toString())) { + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + mSure.setClickable(true); + mSure.setEnabled(true); + } else { + mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mSure.setClickable(false); + mSure.setEnabled(false); + } + break; + case R.id.iv_renovate_refresh: + picValidateCode(); + break; + case R.id.ll_phone_area: + Intent intent1 = new Intent(WxRegisterActivity.this, PhoneAreaActivity.class); + intent1.putExtra("type", "register"); + startActivityForResult(intent1, GET_PHONE_AREA); + break; + } + } + + private void picValidateCode() { + randomString = getRandomString(8); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("randomStr", randomString); + netWorkUtil.requestGetByAsy(PIC_CODE, map, new NetWorkUtil.ReqCallBackOta() { + @Override + public void onSuccess(Response respone) { + ResponseBody body = respone.body(); + try { + byte[] bytes = body.bytes(); + final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + runOnUiThread(new Runnable() { + @Override + public void run() { + renovateIv.setImageBitmap(bitmap); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void onFail(String message) { + + } + }); + } + + //微信注册 + private void quickRegist() { + String phoneCode = phoneArea.getText().toString(); + String telAreaCode = phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length()); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("telAreaCode", telAreaCode); + map.put("appId", DifferConstans.APPID_S); + map.put("checkCode", mUserCode.getText().toString()); + map.put("username", mUserPhone.getText().toString()); + map.put("nickName", getIntent().getExtras().get("userName").toString()); + map.put("headUrl", getIntent().getExtras().get("headUrl").toString()); + map.put("wxId", getIntent().getExtras().get("wxId").toString()); + util.requestPostByAsynewApi(NetWorkUrl.WX_QUICK_REGIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("quickRegist", "onSuccess: " + respone); + ResponeEntity entity = JSON.parseObject(respone, ResponeEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(WX_LOGIN_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(WX_LOGIN_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(LOGIN_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getCode1() { + String codeTrim = editTextCode.getText().toString().trim(); + if (TextUtils.isEmpty(codeTrim)) { + ToastUtil.show(this, "请输入图片验证码"); + return; + } + initLoadDialog(); + String phoneCode = phoneArea.getText().toString(); + String telAreaCode = phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length()); + HashMap map = new HashMap<>(); + map.put("appId", DifferConstans.APPID_S); + map.put("code", codeTrim); + map.put("mobile", mUserPhone.getText().toString()); + map.put("randomStr", randomString); + map.put("telAreaCode", telAreaCode); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.GET_MSMCODE, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("getCode1", "UpdatePwActivity onSuccess()" + respone); + ResponeEntity obj = JSON.parseObject(respone, ResponeEntity.class); + if (1 == obj.getFlag()) { + mHandler.sendEmptyMessage(GET_CODE_SUCCESS); + } else { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + @Override + public void callBackUiThread(Message msg) { + mLoadingDialog.dismiss(); + switch (msg.what) { + case GET_CODE_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, R.string.notice_sms); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mGetCode.setEnabled(false); + mGetCode.setText(getResources().getString(R.string.sec, sec)); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + break; + case GET_CODE_FAIL: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + picValidateCode(); + ToastUtil.show(this, (String) msg.obj != null ? ((String) msg.obj) : + getResources().getString(R.string.sms_fail)); + break; + case UPDATE_PW_SUCCESS: + ToastUtil.show(this, R.string.update_success); + RegisterEntity entity = (RegisterEntity) msg.obj; + SharedpreferencesUtil.save(Constans.USERPHONE, entity.getObj().getLoginName()); + SharedpreferencesUtil.save(Constans.SEESSIONID, entity.getObj().getId()); + SharedpreferencesUtil.save(Constans.USERNAME, entity.getObj().getLoginName()); + break; + case UPDATE_PW_FAIL: + ToastUtil.show(this, (String) msg.obj != null ? ((String) msg.obj) : + getResources().getString(R.string.update_fail)); + break; + case UPDATE_SEC: + if (sec > 2) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mGetCode.setText(getResources().getString(R.string.sec, sec - 1)); + } else { + mGetCode.setText(R.string.get_code); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + mGetCode.setEnabled(true); + sec = 60; + } + break; + case CHECK_USER_NAME_SUCCESS: + getCode1(); + break; + case CHECK_USER_CODE_SUCCESS: + // updatePassword1(); + break; + case ADD_PERSONINFO_SUCCESS: + startActivity(new Intent(this, MainActivity4.class)); + finish(); + break; + case ADD_PERSONINFO_FAIL: + break; + case WX_LOGIN_SUCCESS: + Intent intent; + ResponeEntity wxLoginEntity = (ResponeEntity) msg.obj; + Toast.makeText(WxRegisterActivity.this, "登录成功", Toast.LENGTH_SHORT).show(); + SharedpreferencesUtil.save(Constans.SEESSIONID, wxLoginEntity.getData().getSession()); + SharedpreferencesUtil.save(Constans.USERID, wxLoginEntity.getData().getUserId()); + if (null != getIntent().getExtras() && null != getIntent().getExtras().get("tag")) { + intent = new Intent(WxRegisterActivity.this, PersonCenterActivity.class); + startActivity(intent); + } else { + intent = new Intent(WxRegisterActivity.this, MainActivity4.class); + startActivity(intent); + } + finish(); + break; + case WX_LOGIN_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case GET_PHONE_AREA: + if (data != null && data.getExtras().get("phoneArea") != null) { + phoneArea.setText(data.getExtras().get("phoneArea").toString()); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/PersonalActivity.java b/app/src/main/java/com/yonsz/z1/mine/PersonalActivity.java new file mode 100644 index 0000000..d4e441b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/PersonalActivity.java @@ -0,0 +1,329 @@ +package com.yonsz.z1.mine; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ResponeEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.mine.aboutversion.AboutVersionActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.feedback.FeedBackActivity; +import com.yonsz.z1.mine.messagecenter.MssageCenterActivity; +import com.yonsz.z1.mine.mydevice.MyDeviceActivity; +import com.yonsz.z1.mine.personcenter.PersonCenterActivity; +import com.yonsz.z1.mine.sevicecenter.SeviceCenterActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppGenerUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.CircleImageView; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.activity.MainActivity.msgViewNum; +import static com.yonsz.z1.activity.MainActivity.versionId; +import static com.yonsz.z1.net.Constans.GET_USER_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.GET_USER_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.NICKNAME_RESULT; +import static com.yonsz.z1.net.NetWorkUrl.SERVER_URL_PHOTO; + +/** + * Created by Administrator on 2017/5/16. + */ + +public class PersonalActivity extends BaseActivity { + private TitleView mTitle; + private CircleImageView mUserIcon; + private TextView mUsername; + private RelativeLayout mydeviceRl, serviceCenterRl, messageCenterRl, aboutVersionRl, feedBackRl; + private String userId; + private ResponeEntity.Obj mMine; + private Button mExit; + private int iconTag = 0; + private TextView redCircleMe, redCircleFind; + private CheckBox voiceCb; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_personal); + initView(); + initListener(); + if (DensityUtil.isNetworkConnected(this)) { + initUserData(); + } else { + ToastUtil.show(this, R.string.Unconnected_network); + } + } + + private void initView() { + voiceCb = (CheckBox) findViewById(R.id.cb_voice); + redCircleMe = (TextView) findViewById(R.id.tv_notify_red_circle); + redCircleFind = (TextView) findViewById(R.id.tv_notify_red_circle_find); + mExit = (Button) findViewById(R.id.btn_exit); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + mUserIcon = (CircleImageView) findViewById(R.id.civ_personl); + mUsername = (TextView) findViewById(R.id.tv_user); + mydeviceRl = (RelativeLayout) findViewById(R.id.rl_person_mydevice); + serviceCenterRl = (RelativeLayout) findViewById(R.id.rl_person_service_center); + messageCenterRl = (RelativeLayout) findViewById(R.id.rl_person_message_center); + aboutVersionRl = (RelativeLayout) findViewById(R.id.rl_person_about_version); + feedBackRl = (RelativeLayout) findViewById(R.id.rl_person_iv_person_feed_back); + mTitle = (TitleView) findViewById(R.id.title_personl); + mTitle.setHead(R.string.mine); + mTitle.clearBackGroud(); + if (SharedpreferencesUtil.get(Constans.USERICON, "").toString() != null) { + ImageLoader.getInstance().displayImage(SharedpreferencesUtil.get(Constans.USERICON, "").toString(), mUserIcon, UniKongApp.getHiApp().getImageLoaderOption()); + } + if (SharedpreferencesUtil.get(Constans.USERNAME, "").toString() != null) { + mUsername.setText(SharedpreferencesUtil.get(Constans.USERNAME, "").toString()); + } + + if (msgViewNum != 0) { + redCircleFind.setText(msgViewNum + ""); + redCircleFind.setVisibility(View.VISIBLE); + } + if (msgViewNum != 0) { + redCircleMe.setVisibility(View.VISIBLE); + } + if (SharedpreferencesUtil.get(Constans.VOICE)) { + voiceCb.setChecked(true); + } else { + voiceCb.setChecked(false); + } + } + + @Override + public void onResume() { + super.onResume(); + if (msgViewNum != 0) { + redCircleFind.setText(msgViewNum + ""); + redCircleFind.setVisibility(View.VISIBLE); + } else { + redCircleFind.setVisibility(View.GONE); + } + if (AppGenerUtil.getVersionName(this) != null) { + if (!versionId.equals(AppGenerUtil.getVersionName(this))) { + redCircleMe.setVisibility(View.VISIBLE); + } else { + redCircleMe.setVisibility(View.GONE); + } + } + } + + private void initListener() { + voiceCb.setOnClickListener(this); + mUserIcon.setOnClickListener(this); + mydeviceRl.setOnClickListener(this); + serviceCenterRl.setOnClickListener(this); + messageCenterRl.setOnClickListener(this); + aboutVersionRl.setOnClickListener(this); + feedBackRl.setOnClickListener(this); + mExit.setOnClickListener(this); + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + @Override + public void onClick(View v) { + super.onClick(v); + switch (v.getId()) { + case R.id.civ_personl: + Intent intent = new Intent(PersonalActivity.this, PersonCenterActivity.class); + if (iconTag == 0) { + Bundle bundle = new Bundle(); + bundle.putSerializable("user", mMine); + intent.putExtras(bundle); + } + startActivityForResult(intent, NICKNAME_RESULT); + break; + case R.id.rl_person_mydevice: + startActivity(new Intent(PersonalActivity.this, MyDeviceActivity.class)); + break; + case R.id.rl_person_service_center: + startActivity(new Intent(PersonalActivity.this, SeviceCenterActivity.class)); + break; + case R.id.rl_person_message_center: + startActivity(new Intent(PersonalActivity.this, MssageCenterActivity.class)); + break; + case R.id.rl_person_about_version: + startActivity(new Intent(PersonalActivity.this, AboutVersionActivity.class)); + break; + case R.id.rl_person_iv_person_feed_back: + startActivity(new Intent(PersonalActivity.this, FeedBackActivity.class)); + break; + case R.id.btn_exit: + logOut(); + break; + case R.id.cb_voice: + if (voiceCb.isChecked()) { + SharedpreferencesUtil.save(Constans.VOICE, true); + } else { + SharedpreferencesUtil.save(Constans.VOICE, false); + } + break; + } + } + + private void logOut() { + ConfirmDialog dialog = new ConfirmDialog(PersonalActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + SharedpreferencesUtil.save(Constans.USERPHONE, ""); + SharedpreferencesUtil.save(Constans.USERID, ""); + SharedpreferencesUtil.save(Constans.USERNAME, ""); + SharedpreferencesUtil.save(Constans.USERSEX, ""); + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + SharedpreferencesUtil.save(Constans.PASSWORD, ""); + finish(); + Intent intent = new Intent(PersonalActivity.this, LoginActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + break; + } + } + }); + dialog.setContent(R.string.sure_exit); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void initUserData() { + HashMap map = new HashMap<>(); + map.put("userId", userId); + Log.i("personals", "PersonalActivity initUserData()" + SharedpreferencesUtil.get(Constans.SEESSIONID, "null")); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.PERSONAL_URL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("personals", respone); + ResponeEntity entity = JSON.parseObject(respone, ResponeEntity.class); + if (entity.getFlag() == -401) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USER_SESSION_NULL; + msg.obj = entity.getData(); + mHandler.sendMessage(msg); + } else if (entity.getFlag() == 1) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USER_DETAIL_SUCCESS; + msg.obj = entity.getData(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USER_DETAIL_FAIL; + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Log.i("personal", message); + Message msg = mHandler.obtainMessage(); + msg.what = GET_USER_DETAIL_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_USER_DETAIL_SUCCESS: + mMine = (ResponeEntity.Obj) msg.obj; + initViewData(mMine); + break; + case GET_USER_DETAIL_FAIL: + + break; + case GET_USER_SESSION_NULL: + /*ToastUtil.show(PersonalActivity.this, "用户在其他手机登陆"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(PersonalActivity.this, LoginActivity.class); + startActivity(intent); + finish(); + } + }, 1000);*/ + break; + } + } + + private void initViewData(ResponeEntity.Obj mine) { + if (mine != null) { + if (mine.getPhotoVersion().toString() != null && "0" == mine.getPhotoVersion().toString()) { + String url = SERVER_URL_PHOTO + mine.getUser().getId() + ".png"; + ImageLoader.getInstance().displayImage(url, mUserIcon, UniKongApp.getHiApp().getImageLoaderOption()); + SharedpreferencesUtil.save(Constans.USERICON, url); + } else { + String url = SERVER_URL_PHOTO + mine.getUser().getId() + "_" + mine.getPhotoVersion() + ".png"; + ImageLoader.getInstance().displayImage(url, mUserIcon, UniKongApp.getHiApp().getImageLoaderOption()); + SharedpreferencesUtil.save(Constans.USERICON, url); + } + if (mine.getUserName() != null) { + mUsername.setText(mine.getUserName()); + } + } else { + mUsername.setText(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + String url = SERVER_URL_PHOTO + SharedpreferencesUtil.get(Constans.USERPHONE, "") + ".png"; + ImageLoader.getInstance().displayImage(url, mUserIcon, UniKongApp.getHiApp().getImageLoaderOption()); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == NICKNAME_RESULT) { + if (data != null && data.getExtras().get("data") != null) { + mUsername.setText((String) data.getExtras().get("data")); + if (mMine != null) { + mMine.setUserName((String) data.getExtras().get("data")); + } + } + if (data != null && data.getExtras().get("icon") != null) { + ImageLoader.getInstance().displayImage(data.getExtras().get("icon").toString(), mUserIcon, UniKongApp.getHiApp().getImageLoaderOption()); + iconTag = 1; + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/VersionDecalreActivity.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/VersionDecalreActivity.java new file mode 100644 index 0000000..4893b1a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/VersionDecalreActivity.java @@ -0,0 +1,173 @@ +package com.yonsz.z1.mine.aboutversion; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.KeyEvent; +import android.view.View; +import android.webkit.WebChromeClient; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.RelativeLayout; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.sevicecenter.AfterSeviceActivity; +import com.yonsz.z1.mine.sevicecenter.InstructionActivity; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.StandardCodeUtil; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2017/5/26. + */ +public class VersionDecalreActivity extends BaseActivity { + private RelativeLayout instructionRl, afterServiceRl; + private TitleView mTitleView; + private WebView webView; + private String fromActivity; + private String standardCode = ""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sevice_center); + initView(); + initListener(); + } + + private void initView() { + fromActivity = getIntent().getExtras().get("activity").toString(); + instructionRl = (RelativeLayout) findViewById(R.id.rl_instruction); + afterServiceRl = (RelativeLayout) findViewById(R.id.rl_after_service); + mTitleView = (TitleView) findViewById(R.id.title_service_center); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (fromActivity) { + case "SolidVersionActivity": + mTitleView.setHead(R.string.version_upgrade_declare); + break; + case "AboutVersionActivity": + mTitleView.setHead(R.string.version_declare); + break; + default: + mTitleView.setHead(R.string.version_declare); + break; + } + + webView = (WebView) findViewById(R.id.webView); + webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setDomStorageEnabled(true); + webView.getSettings().setAllowContentAccess(true); + webView.getSettings().setAppCacheEnabled(false); + webView.getSettings().setDisplayZoomControls(true); + webView.setWebChromeClient(new WebChromeClient()); + webView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return true; + } + }); + String appId = DifferConstans.APPID_S_VOICE; + /*switch (DifferConstans.APPID_S) { + case "1104": + //小讯智能 + appId = "1105"; + break; + case "1103": + //安顺祥 + if (AppIdUtil.isChuangWei()) { + appId = "110202"; + } else + appId = "1102"; + break; + case "1202": + //语音生活助手 + appId = "1104"; + break; + case "1201": + //语音遥控器 + appId = "1103"; + break; + case "1106": + //办公版 + appId = "1106"; + break; + default: + if (DifferConstans.APPID_S_VOICE.equals("110101")) { + appId = "1103"; + } else + appId = "1101"; + break; + }*/ + + switch (fromActivity) { + case "SolidVersionActivity": + if (null != getIntent().getExtras().get("standardCode")) { + standardCode = getIntent().getExtras().get("standardCode").toString(); + } + String solidVersionUrl = StandardCodeUtil.getSolidVersionUrl(standardCode, appId); + webView.loadUrl(solidVersionUrl); + break; + case "AboutVersionActivity": + webView.loadUrl("https://app-static.yonsz.net/help/" + appId + "/appversion/index.html"); + break; + default: + break; + } + } + + private void initListener() { + instructionRl.setOnClickListener(this); + afterServiceRl.setOnClickListener(this); + } + + /** + * 使点击回退按钮不会直接退出整个应用程序而是返回上一个页面 + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) { + webView.goBack();//返回上个页面 + return true; + } + return super.onKeyDown(keyCode, event);//退出整个应用程序 + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_instruction: + intent = new Intent(VersionDecalreActivity.this, InstructionActivity.class); + startActivity(intent); + break; + case R.id.rl_after_service: + intent = new Intent(VersionDecalreActivity.this, AfterSeviceActivity.class); + startActivity(intent); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/BottomDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/BottomDialog.java new file mode 100644 index 0000000..17d0c46 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/BottomDialog.java @@ -0,0 +1,79 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Administrator on 2017/8/17. + */ + +public class BottomDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private TextView reverse; + + public BottomDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog1); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_bottom, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_save); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + reverse = (TextView) mView.findViewById(R.id.dialog_confirm_reverse); + + reverse.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(3); + BottomDialog.this.cancel(); + } + }); + + content.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(2); + BottomDialog.this.cancel(); + } + }); + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + BottomDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + BottomDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + public void setSureBtn() { + sureBtn.setVisibility(View.GONE); + } + + public BottomDialog setContent(String s) { + content.setText(s); + content.setTextColor(Color.RED); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/CombinationBindAdapter.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/CombinationBindAdapter.java new file mode 100644 index 0000000..eb11acf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/CombinationBindAdapter.java @@ -0,0 +1,129 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity5.BaseModelEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerTypeClickListener; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class CombinationBindAdapter extends RecyclerView.Adapter { + private List mDataBeans; + private List mchooseBeans; + private Context mContext; + private OnRecyclerTypeClickListener mOnItemClickListener; + private List photos = null; + + + public CombinationBindAdapter(Context context, List mDataBeans, List mchooseBeans) { + this.mDataBeans = mDataBeans; + this.mchooseBeans = mchooseBeans; + this.mContext = context; + } + + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_combination_bind, parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(holder, position); + } + + @Override + public int getItemCount() { + return mDataBeans == null ? 0 : mDataBeans.size(); + } + + public void setmOnItemClickListener(OnRecyclerTypeClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.iv_model_type_pic) + ImageView mIvModelPic; + @BindView(R.id.tv_model_name_home) + TextView mTvModelName; + @BindView(R.id.tv_model_stage_home) + TextView mTvModelStage; + @BindView(R.id.tv_once_time_home) + TextView onceTimeHome; + @BindView(R.id.tv_week_home) + TextView weekTvHome; + @BindView(R.id.ll_bg) + RelativeLayout mLlBg; + @BindView(R.id.stv_third) + CheckBox timeOpenCb; + + public MessageViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final RecyclerView.ViewHolder holder, final int position) { + mTvModelName.setText(mDataBeans.get(position).getAddressName() + "的" + mDataBeans.get(position).getGatewayName()); + + if (mchooseBeans.contains(mDataBeans.get(position))) { + timeOpenCb.setChecked(true); + } else { + timeOpenCb.setChecked(false); + } + + if (mDataBeans.get(position).getHouseId().isEmpty()) { + timeOpenCb.setVisibility(View.VISIBLE); + } else { + timeOpenCb.setVisibility(View.GONE); + } + + timeOpenCb.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (timeOpenCb.isChecked()) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position, 1); + } + } else { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position, 0); + } + } + + } + }); + + mLlBg.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position, 100); + } + } + }); + mLlBg.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onLongClick(holder, position); + } + return false; + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/CombinationBindDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/CombinationBindDialog.java new file mode 100644 index 0000000..bedcdad --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/CombinationBindDialog.java @@ -0,0 +1,139 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity5.BaseModelEntity; +import com.yonsz.z1.listener.OnRecyclerTypeClickListener; +import com.yonsz.z1.mine.aboutversion.feature.Callback2; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; + +import java.util.List; + +/** + * Created by Teprinciple on 2016/10/13. + */ +public class CombinationBindDialog extends Dialog { + + Callback2 callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private View line_view; + private RecyclerView mRecyclerView; + private List thisziIds; + private List allziIds; + private Context context; + private CombinationBindAdapter combinationBindAdapter; + + public CombinationBindDialog(Context context, List allziIds, List thisziIds, Callback2 callback) { + super(context, R.style.CustomDialog); + this.callback = callback; + this.context = context; + this.allziIds = allziIds; + this.thisziIds = thisziIds; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_combination_bind, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + line_view = (View) mView.findViewById(R.id.line_view); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + mRecyclerView = (RecyclerView) mView.findViewById(R.id.recyclerView); + + + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(thisziIds.size()<2) { + ToastUtil.show(context,"组合执行请选择不少于两个网关"); + return; + } + callback.callback(1, thisziIds); + CombinationBindDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0, thisziIds); + CombinationBindDialog.this.cancel(); + } + }); + + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(context); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setLayoutManager(manager); + combinationBindAdapter = new CombinationBindAdapter(context, allziIds, thisziIds); + mRecyclerView.setAdapter(combinationBindAdapter); + + + combinationBindAdapter.setmOnItemClickListener(new OnRecyclerTypeClickListener() { + @Override + public void onClick(View view, int position, int i) { + switch (i) { + case 0: + thisziIds.remove(allziIds.get(position)); + combinationBindAdapter.notifyDataSetChanged(); + break; + case 1: + thisziIds.add(allziIds.get(position)); + combinationBindAdapter.notifyDataSetChanged(); + break; + } + } + + @Override + public void onLongClick(RecyclerView.ViewHolder viewHolder, int position) { + + } + }); + + super.setContentView(mView); + } + + public void setCancleGone() { + cancleBtn.setVisibility(View.GONE); + line_view.setVisibility(View.GONE); + } + + + public CombinationBindDialog setContent(String s) { + content.setText(s); + return this; + } + + public CombinationBindDialog setSureBtn(String s) { + sureBtn.setText(s); + return this; + } + + public CombinationBindDialog setCancleBtn(String s) { + cancleBtn.setText(s); + return this; + } + + public CombinationBindDialog setContent(int s) { + content.setText(s); + return this; + } + + public CombinationBindDialog setSureBtn(int s) { + sureBtn.setText(s); + return this; + } + + public CombinationBindDialog setCancleBtn(int s) { + cancleBtn.setText(s); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmBindDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmBindDialog.java new file mode 100644 index 0000000..6d35f79 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmBindDialog.java @@ -0,0 +1,74 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Teprinciple on 2016/10/13. + */ +public class ConfirmBindDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private View line_view; + + public ConfirmBindDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_confirm_bind, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + line_view = (View) mView.findViewById(R.id.line_view); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + + + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + ConfirmBindDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + ConfirmBindDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + + public ConfirmBindDialog setContent(String s) { + content.setText(s); + return this; + } + + public void setCancleGone() { + cancleBtn.setVisibility(View.GONE); + line_view.setVisibility(View.GONE); + } + + public ConfirmBindDialog setSureBtn(String s) { + sureBtn.setText(s); + return this; + } + + public ConfirmBindDialog setCancleBtn(String s) { + cancleBtn.setText(s); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmDialog.java new file mode 100644 index 0000000..7902f88 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmDialog.java @@ -0,0 +1,89 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Teprinciple on 2016/10/13. + */ +public class ConfirmDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private View line_view; + + public ConfirmDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_confirm, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + line_view = (View) mView.findViewById(R.id.line_view); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + + + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + ConfirmDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + ConfirmDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + public void setCancleGone() { + cancleBtn.setVisibility(View.GONE); + line_view.setVisibility(View.GONE); + } + + + public ConfirmDialog setContent(String s) { + content.setText(s); + return this; + } + + public ConfirmDialog setSureBtn(String s) { + sureBtn.setText(s); + return this; + } + + public ConfirmDialog setCancleBtn(String s) { + cancleBtn.setText(s); + return this; + } + + public ConfirmDialog setContent(int s) { + content.setText(s); + return this; + } + + public ConfirmDialog setSureBtn(int s) { + sureBtn.setText(s); + return this; + } + + public ConfirmDialog setCancleBtn(int s) { + cancleBtn.setText(s); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmNameDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmNameDialog.java new file mode 100644 index 0000000..f42dc16 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmNameDialog.java @@ -0,0 +1,257 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.text.InputFilter; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +import static com.yonsz.z1.R.id.et_confirm_title; + +/** + * Created by Teprinciple on 2016/10/13. + */ +public class ConfirmNameDialog extends Dialog { + Callback1 callback; + int mMaxLenth = 4;//设置允许输入的字符长度 + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private EditText mEditText; + //输入表情前的光标位置 + private int cursorPos; + //输入表情前EditText中的文本 + private String inputAfterText; + //是否重置了EditText的内容 + private boolean resetText; + private boolean isSetLength = false; + private TextView tv_allow_text; + + public ConfirmNameDialog(Context context, Callback1 callback) { + super(context, R.style.CustomDialog); + this.callback = callback; + setCustomDialog(); + } + + public static String stringFilter(String str) throws PatternSyntaxException { + String regEx = "[/\\:*?<>|\"()\n\t]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(str); + return m.replaceAll(""); + } + + public static boolean isEmojiCharacter(char codePoint) { + return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD) || ((codePoint >= 0x20) && codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)); + } + + /** + * 检测是否有emoji表情 + * + * @param source + * @return + */ + public static boolean containsEmoji(String source) { + int len = source.length(); + for (int i = 0; i < len; i++) { + char codePoint = source.charAt(i); + if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情 + return true; + } + } + return false; + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_confirm_name, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure); + tv_allow_text = (TextView) mView.findViewById(R.id.tv_allow_text); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + mEditText = (EditText) mView.findViewById(et_confirm_title); + /*mEditText.addTextChangedListener(new TextWatcher() { + private int cou = 0; + int selectionEnd = 0; + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + cursorPos = mEditText.getSelectionEnd(); + inputAfterText = s.toString(); + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + + int i = s.length(); + if (i > 4 && !isSetLength) { + ToastUtil.show(getContext(), "最多四个字"); + return; + } + + cou = before + count; + String editable = mEditText.getText().toString(); + String str = stringFilter(editable); //过滤特殊字符 + if (!editable.equals(str)) { + mEditText.setText(str); + } + mEditText.setSelection(mEditText.length()); + cou = mEditText.length(); + + *//*if (s.toString().contains(" ")) { + String[] str2 = s.toString().split(" "); + String str1 = ""; + for (int j = 0; j < str2.length; j++) { + str1 += str2[j]; + } + mEditText.setText(str1); + mEditText.setSelection(start); + }*//* + + if (count >= 2) { + *//*CharSequence input = s.subSequence(cursorPos, cursorPos + count); + if (containsEmoji(input.toString())) { + resetText = true; + ToastUtil.show(getContext(), "不支持输入表情符号"); + mEditText.setText(inputAfterText); + CharSequence text = mEditText.getText(); + if (text instanceof Spannable) { + Spannable spanText = (Spannable) text; + Selection.setSelection(spanText, text.length()); + } + return; + }*//* + int index = mEditText.getSelectionStart() - 1; + if (index > 0) { + if (isEmojiCharacter(s.charAt(index))) { + Editable edit = mEditText.getText(); + edit.delete(s.length() - 2, s.length()); + // ToastUtil.show(getContext(), "不支持输入表情符号"); + tv_allow_text.setTextColor(0xffd0021b); + } + } + } + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().isEmpty()) + return; + + if (cou > mMaxLenth) { + selectionEnd = mEditText.getSelectionEnd(); + s.delete(mMaxLenth, selectionEnd); + } + + *//*int index = mEditText.getSelectionStart() - 1; + if (index > 0) { + if (isEmojiCharacter(s.charAt(index))) { + Editable edit = mEditText.getText(); + edit.delete(s.length() - 2, s.length()); + ToastUtil.show(getContext(), "不支持输入表情符号"); + } + }*//* + *//*if (!s.toString().matches("[A-Za-z0-9]+")) { + String temp = s.toString(); + ToastUtil.show(getContext(), "请输入数字或字母"); + s.delete(temp.length() - 1, temp.length()); + mEditText.setSelection(s.length()); + }*//* + } + });*/ + + + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!TextUtils.isEmpty(mEditText.getText().toString().trim())) { + callback.callback(1, mEditText.getText().toString()); + ConfirmNameDialog.this.cancel(); + } else { + // callback.callback(1, mEditText.getText().toString()); + tv_allow_text.setTextColor(0xffd0021b); + } + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0, mEditText.getText().toString()); + ConfirmNameDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + public void setMaxEms(int number) { + mMaxLenth = number; + if (number == 10) { + isSetLength = true; + } + mEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(number)}); + } + + public ConfirmNameDialog setOldName(String s) { + mEditText.setText(s); + return this; + } + + public ConfirmNameDialog setHintName(String s) { + mEditText.setHint(s); + return this; + } + + public ConfirmNameDialog setDeclare(String s) { + tv_allow_text.setText(s); + return this; + } + + public ConfirmNameDialog setContent(String s) { + content.setText(s); + return this; + } + + public ConfirmNameDialog setSureBtn(String s) { + sureBtn.setText(s); + return this; + } + + public ConfirmNameDialog setCancleBtn(String s) { + cancleBtn.setText(s); + return this; + } + + public ConfirmNameDialog setOldName(int s) { + mEditText.setText(s); + return this; + } + + public ConfirmNameDialog setHintName(int s) { + mEditText.setHint(s); + return this; + } + + public ConfirmNameDialog setContent(int s) { + content.setText(s); + return this; + } + + public ConfirmNameDialog setSureBtn(int s) { + sureBtn.setText(s); + return this; + } + + public ConfirmNameDialog setCancleBtn(int s) { + cancleBtn.setText(s); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmNewValueDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmNewValueDialog.java new file mode 100644 index 0000000..5e92798 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmNewValueDialog.java @@ -0,0 +1,278 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Activity; +import android.app.Dialog; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.SeekBar; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.ModelSetEntity; +import com.yonsz.z1.mine.aboutversion.feature.Callback3; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.view.listpopupwindow.RankingPopupWindow; + +import java.util.ArrayList; +import java.util.List; + +public class ConfirmNewValueDialog extends Dialog { + + private final Activity context; + Callback3 callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private View line_view; + private TextView topTxt; + private TextView dialog_seek_progress, tv_model_name; + private SeekBar brightNessSb; + private String thisProgress; + private String thisMode = ""; + private String deviceType; + private RelativeLayout rl_model, rl_model_choose; + private RankingPopupWindow mWindow; + private RankingPopupWindow.Listener listener; + + public ConfirmNewValueDialog(Activity context, List settings, String deviceType, Callback3 callback) { + super(context, R.style.CustomDialog); + this.context = context; + this.callback = callback; + for (ModelSetEntity.DataBean.ControlListEntity.SettingsBean settingsBean : settings) { + if (settingsBean.getName().equals("mode")) { + this.thisMode = settingsBean.getValue(); + } else { + this.thisProgress = settingsBean.getValue(); + } + } + this.deviceType = deviceType; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_confirm_value, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + topTxt = (TextView) mView.findViewById(R.id.dialog_confirm_top); + line_view = (View) mView.findViewById(R.id.line_view); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + brightNessSb = (SeekBar) mView.findViewById(R.id.sb_lightness); + dialog_seek_progress = (TextView) mView.findViewById(R.id.dialog_seek_progress); + tv_model_name = (TextView) mView.findViewById(R.id.tv_model_name); + rl_model = (RelativeLayout) mView.findViewById(R.id.rl_model); + rl_model_choose = (RelativeLayout) mView.findViewById(R.id.rl_model_choose); + + if (deviceType.equals(Constans.AIR_TAG) || deviceType.equals(Constans.TEMP_CONTROL)) { + rl_model.setVisibility(View.VISIBLE); + if (thisProgress.equals("100")) { + thisProgress = "26"; + } + dialog_seek_progress.setText(thisProgress + "℃"); + brightNessSb.setProgress((Integer.parseInt(thisProgress) - 16) * 7143 / 1000); + + setModelName(thisMode); + } else { + rl_model.setVisibility(View.GONE); + dialog_seek_progress.setText(thisProgress + "%"); + brightNessSb.setProgress(Integer.parseInt(thisProgress)); + } + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!thisProgress.isEmpty()) { + callback.callback(1, thisProgress, thisMode); + } + ConfirmNewValueDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0, thisProgress, thisMode); + ConfirmNewValueDialog.this.cancel(); + } + }); + rl_model_choose.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + List list = new ArrayList<>(); + list.add("制冷模式"); + list.add("制暖模式"); + if (deviceType.equals(Constans.AIR_TAG)) { + list.add("除湿模式"); + } else if (deviceType.equals(Constans.TEMP_CONTROL)) { + list.add("送风模式"); + } + initListItem(list, 1, "", v); + } + }); + brightNessSb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, final int progress, boolean fromUser) { + Log.i("LightA1Fragment", "onProgressChanged()" + progress); + if (deviceType.equals(Constans.AIR_TAG) || deviceType.equals(Constans.TEMP_CONTROL)) { + if (progress == 100) { + thisProgress = 30 + ""; + } else { + thisProgress = (progress * 1000 / 7143 + 16) + ""; + } + dialog_seek_progress.setText(thisProgress + "℃"); + } else { + if (progress < 10) { + brightNessSb.setProgress(0); + } else if (progress < 30) { + brightNessSb.setProgress(20); + } else if (progress < 40) { + brightNessSb.setProgress(30); + } else if (progress < 50) { + brightNessSb.setProgress(40); + } else if (progress < 60) { + brightNessSb.setProgress(50); + } else if (progress < 70) { + brightNessSb.setProgress(60); + } else if (progress < 80) { + brightNessSb.setProgress(70); + } else if (progress < 90) { + brightNessSb.setProgress(80); + } else if (progress < 100) { + brightNessSb.setProgress(90); + } else { + brightNessSb.setProgress(100); + } + + dialog_seek_progress.setText(seekBar.getProgress() + "%"); + thisProgress = seekBar.getProgress() + ""; + /*tv_brightness.setText("亮度" + seekBar.getProgress() + "%"); + subsetControl("brightness", seekBar.getProgress());*/ + } + + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + Log.i("LightA1Fragment", "onStopTrackingTouch()" + seekBar.getProgress()); + } + }); + super.setContentView(mView); + } + + private void initListItem(final List list, final int flag, final String selectName, View view) { + //生成Listener和清空 + setPopupWindowListener(flag); + mWindow = null; + //显示popupwindow + mWindow = new RankingPopupWindow(context, list, selectName, listener, view, flag); + } + + private void setPopupWindowListener(final int flag) { + listener = null; + listener = new RankingPopupWindow.Listener() { + @Override + public void onPopupWindowDismissListener() { + //消失时的操作 + } + + @Override + public void onItemClickListener(int position) { + //点击Item时的操作 + if (flag == 1) { + switch (position) { + case 0: + setModelName("cold"); + break; + case 1: + setModelName("heat"); + break; + case 2: + if (deviceType.equals(Constans.AIR_TAG)) { + setModelName("dehumidification"); + } else if (deviceType.equals(Constans.TEMP_CONTROL)) { + setModelName("ventilate"); + } + break; + } + } + } + }; + } + + private void setModelName(String name) { + String value = "制冷模式"; + switch (name) { + case "cold": + value = "制冷模式"; + thisMode = "cold"; + break; + case "heat": + value = "制暖模式"; + thisMode = "heat"; + break; + case "dehumidification": + value = "除湿模式"; + thisMode = "dehumidification"; + break; + case "ventilate": + value = "送风模式"; + thisMode = "ventilate"; + break; + default: + value = "制冷模式"; + thisMode = "cold"; + break; + } + tv_model_name.setText(value); + } + + public void setCancleGone() { + cancleBtn.setVisibility(View.GONE); + line_view.setVisibility(View.GONE); + } + + public ConfirmNewValueDialog setContent(String s) { + content.setText(s); + return this; + } + + public ConfirmNewValueDialog setSureBtn(String s) { + sureBtn.setText(s); + return this; + } + + public ConfirmNewValueDialog setCancleBtn(String s) { + cancleBtn.setText(s); + return this; + } + + public ConfirmNewValueDialog setTopTxt(String s) { + topTxt.setText(s); + return this; + } + + public ConfirmNewValueDialog setContent(int s) { + content.setText(s); + return this; + } + + public ConfirmNewValueDialog setSureBtn(int s) { + sureBtn.setText(s); + return this; + } + + public ConfirmNewValueDialog setCancleBtn(int s) { + cancleBtn.setText(s); + return this; + } + + public ConfirmNewValueDialog setTopTxt(int s) { + topTxt.setText(s); + return this; + } +} + diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmNextDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmNextDialog.java new file mode 100644 index 0000000..88fce8d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmNextDialog.java @@ -0,0 +1,103 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Teprinciple on 2016/10/13. + */ +public class ConfirmNextDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private View line_view; + private TextView topTxt; + + public ConfirmNextDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_confirm_next, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + topTxt = (TextView) mView.findViewById(R.id.dialog_confirm_top); + line_view = (View) mView.findViewById(R.id.line_view); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + + + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + ConfirmNextDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + ConfirmNextDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + + + + public void setCancleGone() { + cancleBtn.setVisibility(View.GONE); + line_view.setVisibility(View.GONE); + } + + public ConfirmNextDialog setContent(String s) { + content.setText(s); + return this; + } + + public ConfirmNextDialog setSureBtn(String s) { + sureBtn.setText(s); + return this; + } + + public ConfirmNextDialog setCancleBtn(String s) { + cancleBtn.setText(s); + return this; + } + + public ConfirmNextDialog setTopTxt(String s) { + topTxt.setText(s); + return this; + } + + public ConfirmNextDialog setContent(int s) { + content.setText(s); + return this; + } + + public ConfirmNextDialog setSureBtn(int s) { + sureBtn.setText(s); + return this; + } + + public ConfirmNextDialog setCancleBtn(int s) { + cancleBtn.setText(s); + return this; + } + + public ConfirmNextDialog setTopTxt(int s) { + topTxt.setText(s); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmValueDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmValueDialog.java new file mode 100644 index 0000000..930d56b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ConfirmValueDialog.java @@ -0,0 +1,824 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Activity; +import android.app.Dialog; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.SeekBar; +import android.widget.TextView; + +import com.example.zhouwei.library.CustomPopWindow; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity5.NewModelSetEntity; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.mine.aboutversion.feature.Callback4; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.version5.adapter.PopAdapter; +import com.yonsz.z1.view.PlugTypePopupWindow; +import com.yonsz.z1.view.listpopupwindow.RankingPopupWindow; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Teprinciple on 2016/10/13. + */ +public class ConfirmValueDialog extends Dialog { + + private final Activity context; + Callback4 callback; + private TextView content, tv_function; + private TextView sureBtn; + private TextView cancleBtn; + private View line_view; + private TextView topTxt; + private TextView dialog_seek_progress, tv_model_name, tv_function_name; + private SeekBar brightNessSb; + private String thisProgress = ""; + private String thisMode = ""; + private String deviceType, deviceModel; + private RelativeLayout rl_model, rl_model_choose, ll_light_control, rl_function, rl_function_choose; + private RankingPopupWindow mWindow; + private RankingPopupWindow.Listener listener; + private CustomPopWindow mListPopWindow; + private List settings = new ArrayList<>(); + + public ConfirmValueDialog(Activity context, List settings, String deviceType, String deviceModel, Callback4 callback) { + super(context, R.style.CustomDialog); + this.context = context; + this.callback = callback; + this.deviceType = deviceType; + this.settings = settings; + this.deviceModel = deviceModel; + if (deviceType.equals(Constans.CLOTHES_HANGER)) { + for (NewModelSetEntity.DataBean.ModeAiDevicesBean.ControlsBean.SettingsBean settingsBean : settings) { + if (settingsBean.getName().equals("function")) { + this.thisMode = settingsBean.getValue(); + } + } + } else if (deviceType.equals(Constans.SECURITY_MANIPULATOR)) { + for (NewModelSetEntity.DataBean.ModeAiDevicesBean.ControlsBean.SettingsBean settingsBean : settings) { + this.thisMode = settingsBean.getValue(); + } + } else { + for (NewModelSetEntity.DataBean.ModeAiDevicesBean.ControlsBean.SettingsBean settingsBean : settings) { + if (settingsBean.getName().equals("mode")) { + this.thisMode = settingsBean.getValue(); + } else if (settingsBean.getName().equals("effect")) { + this.thisProgress = settingsBean.getValue(); + this.thisMode = settingsBean.getValue(); + } else { + this.thisProgress = settingsBean.getValue(); + } + } + } + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_confirm_value, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + topTxt = (TextView) mView.findViewById(R.id.dialog_confirm_top); + line_view = (View) mView.findViewById(R.id.line_view); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + tv_function = (TextView) mView.findViewById(R.id.tv_function); + brightNessSb = (SeekBar) mView.findViewById(R.id.sb_lightness); + dialog_seek_progress = (TextView) mView.findViewById(R.id.dialog_seek_progress); + tv_model_name = (TextView) mView.findViewById(R.id.tv_model_name); + tv_function_name = (TextView) mView.findViewById(R.id.tv_function_name); + rl_model = (RelativeLayout) mView.findViewById(R.id.rl_model); + ll_light_control = (RelativeLayout) mView.findViewById(R.id.ll_light_control); + rl_model_choose = (RelativeLayout) mView.findViewById(R.id.rl_model_choose); + rl_function_choose = (RelativeLayout) mView.findViewById(R.id.rl_function_choose); + rl_function = (RelativeLayout) mView.findViewById(R.id.rl_function); + + if (deviceType.equals(Constans.AIR_TAG) || deviceType.equals(Constans.TEMP_CONTROL)) { + rl_model.setVisibility(View.VISIBLE); + if (thisProgress.equals("100")) { + thisProgress = "26"; + } + dialog_seek_progress.setText(thisProgress + "℃"); + brightNessSb.setProgress((Integer.parseInt(thisProgress) - 16) * 7143 / 1000); + setModelName(thisMode); + } else if (deviceType.equals(Constans.RGB_LIGHT)) { + rl_model.setVisibility(View.VISIBLE); + tv_model_name.setText(AddressNameUtil.getModelColorName(thisMode)); + dialog_seek_progress.setVisibility(View.GONE); + brightNessSb.setVisibility(View.GONE); + } else if (deviceType.equals(Constans.CLOTHES_HANGER)) { + rl_model.setVisibility(View.VISIBLE); + ll_light_control.setVisibility(View.GONE); + rl_function.setVisibility(View.VISIBLE); + setModelName(thisMode); + mockData(); + } else if (deviceType.equals(Constans.SECURITY_MANIPULATOR)) { + rl_model.setVisibility(View.VISIBLE); + if (thisMode.equals("1")) { + tv_model_name.setText("开启状态"); + } else { + tv_model_name.setText("关闭状态"); + } + ll_light_control.setVisibility(View.GONE); + rl_function.setVisibility(View.INVISIBLE); +// setModelName(thisMode); + } else { + rl_model.setVisibility(View.GONE); + dialog_seek_progress.setText(thisProgress + "%"); + brightNessSb.setProgress(Integer.parseInt(thisProgress)); + } + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + /*if (!thisProgress.isEmpty()) { + }*/ + callback.callback(1, thisProgress, thisMode, settings); + ConfirmValueDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0, thisProgress, thisMode, settings); + ConfirmValueDialog.this.cancel(); + } + }); + rl_model_choose.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + List list = new ArrayList<>(); + if (deviceType.equals(Constans.CLOTHES_HANGER)) { + list.add("上升"); + list.add("下降"); + } else if (deviceType.equals(Constans.SECURITY_MANIPULATOR)) { + list.add("开启状态"); + list.add("关闭状态"); + } else if (deviceType.equals(Constans.RGB_LIGHT)) { + if (deviceModel.equals("1")) { + /*list.add("亮度+"); + list.add("亮度-"); + list.add("暂停"); + list.add("开关");*/ + list.add("红"); + list.add("绿"); + list.add("深蓝"); + list.add("白"); + list.add("朱砂红"); + list.add("草绿"); + list.add("蓝"); + list.add("琥珀"); + list.add("橙"); + list.add("天蓝"); + list.add("蓝紫"); + list.add("粉色"); + list.add("橙黄"); + list.add("湖蓝"); + list.add("紫"); + list.add("蔚蓝"); + list.add("柠檬黄"); + list.add("墨绿"); + list.add("红紫"); + list.add("碧蓝"); + /*list.add("红色+"); + list.add("绿色+"); + list.add("蓝色+"); + list.add("速度+"); + list.add("红色-"); + list.add("绿色-"); + list.add("蓝色-"); + list.add("速度-");*/ + list.add("DIY1"); + list.add("DIY2"); + list.add("DIY3"); + list.add("模式循环"); + list.add("DIY4"); + list.add("DIY5"); + list.add("DIY6"); + list.add("白光屏闪"); + list.add("跳变3"); + list.add("跳变7"); + list.add("渐变3"); + list.add("渐变7"); + } else { + /*list.add("亮/速度+"); + list.add("亮/速度-"); + list.add("开"); + list.add("关");*/ + list.add("红"); + list.add("绿"); + list.add("深蓝"); + list.add("白"); + list.add("朱砂红"); + list.add("草绿"); + list.add("蓝"); + list.add("跳变"); + list.add("橙"); + list.add("天蓝"); + list.add("蓝紫"); + list.add("频闪"); + list.add("橙黄"); + list.add("湖蓝"); + list.add("紫"); + list.add("渐变"); + list.add("柠檬黄"); + list.add("墨绿"); + list.add("红紫"); + list.add("平滑渐变"); + } + } else { + list.add("制冷模式"); + list.add("制暖模式"); + if (deviceType.equals(Constans.AIR_TAG)) { + list.add("除湿模式"); + } else if (deviceType.equals(Constans.TEMP_CONTROL)) { + list.add("送风模式"); + } + } + initListItem(list, 3, "", v); + } + }); + rl_function_choose.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // showTypeBottom(); + showPopListView(); + } + }); + brightNessSb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, final int progress, boolean fromUser) { + Log.i("LightA1Fragment", "onProgressChanged()" + progress); + if (deviceType.equals(Constans.AIR_TAG) || deviceType.equals(Constans.TEMP_CONTROL)) { + if (progress == 100) { + thisProgress = 30 + ""; + } else { + thisProgress = (progress * 1000 / 7143 + 16) + ""; + } + dialog_seek_progress.setText(thisProgress + "℃"); + } else { + dialog_seek_progress.setText(progress + "%"); + thisProgress = progress + ""; + } + + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + Log.i("LightA1Fragment", "onStopTrackingTouch()" + seekBar.getProgress()); + } + + + }); + super.setContentView(mView); + } + + + private void showPopListView() { + View contentView = LayoutInflater.from(context).inflate(R.layout.pop_list, null); + //处理popWindow 显示内容 + handleListView(contentView); + //创建并显示popWindow + mListPopWindow = new CustomPopWindow.PopupWindowBuilder(context) + .setView(contentView) + .enableOutsideTouchableDissmiss(true) + .setOutsideTouchable(true) + .size(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)//显示大小 + .create() + .showAsDropDown(rl_function_choose); + } + + private void handleListView(View contentView) { + RecyclerView recyclerView = (RecyclerView) contentView.findViewById(R.id.recyclerView); + LinearLayoutManager manager = new LinearLayoutManager(context); + manager.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView.setLayoutManager(manager); + if (settings.size() == 4) { + for (int i = 0; i < settings.size(); i++) { + if (settings.get(i).getName().equals("function")) { + settings.remove(i); + } + } + } + PopAdapter adapter = new PopAdapter(context, settings); + recyclerView.setAdapter(adapter); + adapter.notifyDataSetChanged(); + + adapter.setmOnItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id) { + switch (settings.get(parentPosition).getName()) { + case "disinfect": + if (childPosition == 1) { + if (i == 1) { + settings.get(parentPosition).setValue("disinfect"); + } else { + settings.get(parentPosition).setValue("disinfectoff"); + } + } else { + settings.get(parentPosition).setValue(""); + // settings.get(parentPosition).setId(""); + } + break; + case "airdrying": + if (childPosition == 1) { + if (i == 1) { + settings.get(parentPosition).setValue("airdrying"); + } else { + settings.get(parentPosition).setValue("airdryingoff"); + } + } else { + settings.get(parentPosition).setValue(""); + // settings.get(parentPosition).setId(""); + } + break; + case "stoving": + if (childPosition == 1) { + if (i == 1) { + settings.get(parentPosition).setValue("stoving"); + } else { + settings.get(parentPosition).setValue("stovingoff"); + } + } else { + settings.get(parentPosition).setValue(""); + // settings.get(parentPosition).setId(""); + } + break; + } + adapter.notifyDataSetChanged(); + mockData(); + } + }); + } + + + private void showTypeBottom() { + PlugTypePopupWindow popupWindow = new PlugTypePopupWindow(context, "", new PlugTypePopupWindow.OnCompleteListener() { + @Override + public void onComplete(String time) { + Log.i("showPositionBottom", "SwitcherActivity onComplete()" + time); + + } + }); + popupWindow.showAsDropDown(rl_function_choose); + } + + private void initListItem(final List list, final int flag, final String selectName, View view) { + //生成Listener和清空 + setPopupWindowListener(flag); + mWindow = null; + //显示popupwindow + mWindow = new RankingPopupWindow(context, list, selectName, listener, view, flag); + } + + private void setPopupWindowListener(final int flag) { + listener = null; + listener = new RankingPopupWindow.Listener() { + @Override + public void onPopupWindowDismissListener() { + //消失时的操作 + } + + @Override + public void onItemClickListener(int position) { + //点击Item时的操作 + if (flag == 1 || flag == 3) { + if (deviceType.equals(Constans.CLOTHES_HANGER)) { + switch (position) { + case 0: + setModelName("up"); + break; + case 1: + setModelName("down"); + break; + } + } else if (deviceType.equals(Constans.SECURITY_MANIPULATOR)) { + switch (position) { + case 0: + setModelName("power"); + break; + case 1: + setModelName("poweroff"); + break; + } + } else if (deviceType.equals(Constans.RGB_LIGHT)) { + switch (position) { + /*case 0: + if (deviceModel.equals("1")) { + thisMode = "brightnessPlus"; + tv_model_name.setText("亮度+"); + } else { + thisMode = "brightnessSpeedPlus"; + tv_model_name.setText("亮/速度+"); + } + break; + case 1: + if (deviceModel.equals("1")) { + thisMode = "brightnessLess"; + tv_model_name.setText("亮度-"); + } else { + thisMode = "brightnessSpeedLess"; + tv_model_name.setText("亮/速度-"); + } + break; + case 2: + if (deviceModel.equals("1")) { + thisMode = "stop"; + tv_model_name.setText("暂停"); + } else { + thisMode = "power"; + tv_model_name.setText("开"); + } + break; + case 3: + if (deviceModel.equals("1")) { + thisMode = "power"; + tv_model_name.setText("开关"); + } else { + thisMode = "poweroff"; + tv_model_name.setText("关"); + } + break;*/ + case 0: + thisMode = "red"; + tv_model_name.setText("红"); + break; + case 1: + thisMode = "green"; + tv_model_name.setText("绿"); + break; + case 2: + thisMode = "darkBlue"; + tv_model_name.setText("深蓝"); + break; + case 3: + thisMode = "white"; + tv_model_name.setText("白"); + break; + case 4: + thisMode = "vermilion"; + tv_model_name.setText("朱砂红"); + break; + case 5: + thisMode = "grassGreen"; + tv_model_name.setText("草绿"); + break; + case 6: + thisMode = "blue"; + tv_model_name.setText("蓝"); + break; + case 7: + //跳变,琥珀 + if (deviceModel.equals("1")) { + thisMode = "amber"; + tv_model_name.setText("琥珀"); + } else { + thisMode = "jump"; + tv_model_name.setText("跳变"); + } + break; + case 8: + thisMode = "orange"; + tv_model_name.setText("橙"); + break; + case 9: + thisMode = "skyBlue"; + tv_model_name.setText("天蓝"); + break; + case 10: + thisMode = "bluishViolet"; + tv_model_name.setText("蓝紫"); + break; + case 11: + //频闪,粉色 + if (deviceModel.equals("1")) { + thisMode = "pink"; + tv_model_name.setText("粉色"); + } else { + thisMode = "strobe"; + tv_model_name.setText("频闪"); + } + break; + case 12: + thisMode = "orangeYellow"; + tv_model_name.setText("橙黄"); + break; + case 13: + thisMode = "acidBlue"; + tv_model_name.setText("湖蓝"); + break; + case 14: + thisMode = "purple"; + tv_model_name.setText("紫"); + break; + case 15: + //渐变,蔚蓝 + if (deviceModel.equals("1")) { + thisMode = "azure"; + tv_model_name.setText("蔚蓝"); + } else { + thisMode = "gradient"; + tv_model_name.setText("渐变"); + } + break; + case 16: + thisMode = "lemonYellow"; + tv_model_name.setText("柠檬黄"); + break; + case 17: + thisMode = "blackishgreen"; + tv_model_name.setText("墨绿"); + break; + case 18: + thisMode = "redPurple"; + tv_model_name.setText("红紫"); + break; + case 19: + //平滑渐变,碧蓝 + if (deviceModel.equals("1")) { + thisMode = "vividBlue"; + tv_model_name.setText("碧蓝"); + } else { + thisMode = "smoothGradient"; + tv_model_name.setText("平滑渐变"); + } + break; + /*case 24: + thisMode = "redPlus"; + tv_model_name.setText("红色+"); + break; + case 25: + thisMode = "greenPlus"; + tv_model_name.setText("绿色+"); + break; + case 26: + thisMode = "bluePlus"; + tv_model_name.setText("蓝色+"); + break; + case 27: + thisMode = "speedPlus"; + tv_model_name.setText("速度+"); + break; + case 28: + thisMode = "redLess"; + tv_model_name.setText("红色-"); + break; + case 29: + thisMode = "greenLess"; + tv_model_name.setText("绿色-"); + break; + case 30: + thisMode = "blueLess"; + tv_model_name.setText("蓝色-"); + break; + case 31: + thisMode = "speedLess"; + tv_model_name.setText("速度-"); + break;*/ + case 20: + thisMode = "diy1"; + tv_model_name.setText("DIY1"); + break; + case 21: + thisMode = "diy2"; + tv_model_name.setText("DIY2"); + break; + case 22: + thisMode = "diy3"; + tv_model_name.setText("DIY3"); + break; + case 23: + thisMode = "modelCycle"; + tv_model_name.setText("模式循环"); + break; + case 24: + thisMode = "diy4"; + tv_model_name.setText("DIY4"); + break; + case 25: + thisMode = "diy5"; + tv_model_name.setText("DIY5"); + break; + case 26: + thisMode = "diy6"; + tv_model_name.setText("DIY6"); + break; + case 27: + thisMode = "flash"; + tv_model_name.setText("白光屏闪"); + break; + case 28: + thisMode = "jump3"; + tv_model_name.setText("跳变3"); + break; + case 29: + thisMode = "jump7"; + tv_model_name.setText("跳变7"); + break; + case 30: + thisMode = "gradient3"; + tv_model_name.setText("渐变3"); + break; + case 31: + thisMode = "gradient7"; + tv_model_name.setText("渐变7"); + break; + } + } else { + switch (position) { + case 0: + setModelName("cold"); + break; + case 1: + setModelName("heat"); + break; + case 2: + if (deviceType.equals(Constans.AIR_TAG)) { + setModelName("dehumidification"); + } else if (deviceType.equals(Constans.TEMP_CONTROL)) { + setModelName("ventilate"); + } + break; + } + } + + } + } + }; + } + + private void mockData() { + String modelState = ""; + for (NewModelSetEntity.DataBean.ModeAiDevicesBean.ControlsBean.SettingsBean settingsBean : settings) { + switch (settingsBean.getName()) { + /*case "function": + String value = ""; + switch (settingsBean.getValue()) { + case "down": + value = "下降"; + break; + case "up": + value = "上升"; + break; + default: + value = "上升"; + break; + } + tv_function_name.setText(""); + tv_function_name.setText(settingsBean.getLabel() + ":" + value); + break;*/ + case "disinfect": + if (settingsBean.getValue().equals("100") || settingsBean.getValue().isEmpty()) { + modelState += ""; + } else if (settingsBean.getValue().equals("disinfect")) { + modelState += "消毒开、"; + } else { + modelState += "消毒关、"; + } + break; + case "airdrying": + if (settingsBean.getValue().equals("100") || settingsBean.getValue().isEmpty()) { + modelState += ""; + } else if (settingsBean.getValue().equals("airdrying")) { + modelState += "风干开、"; + } else { + modelState += "风干关、"; + } + break; + case "stoving": + if (settingsBean.getValue().equals("100") || settingsBean.getValue().isEmpty()) { + modelState += ""; + } else if (settingsBean.getValue().equals("stoving")) { + modelState += "烘干开、"; + } else { + modelState += "烘干关、"; + } + break; + } + } + if (modelState.isEmpty()) { + tv_function_name.setText(""); + } else { + tv_function_name.setText(modelState.substring(0, modelState.length() - 1)); + } + } + + private void setModelName(String name) { + if (deviceType.equals(Constans.CLOTHES_HANGER)) { + String value = "上升"; + switch (name) { + case "up": + value = "上升"; + thisMode = "up"; + break; + case "down": + value = "下降"; + thisMode = "down"; + break; + default: + value = "上升"; + thisMode = "up"; + break; + } + tv_model_name.setText(value); + } else if (deviceType.equals(Constans.SECURITY_MANIPULATOR)) { + String value = "开启状态"; + switch (name) { + case "power": + value = "开启状态"; + thisMode = "1"; + break; + case "poweroff": + value = "关闭状态"; + thisMode = "0"; + break; + } + tv_model_name.setText(value); + } else { + String value = "制冷模式"; + switch (name) { + case "cold": + value = "制冷模式"; + thisMode = "cold"; + break; + case "heat": + value = "制暖模式"; + thisMode = "heat"; + break; + case "dehumidification": + value = "除湿模式"; + thisMode = "dehumidification"; + break; + case "ventilate": + value = "送风模式"; + thisMode = "ventilate"; + break; + default: + value = "制冷模式"; + thisMode = "cold"; + break; + } + tv_model_name.setText(value); + } + } + + public void setCancleGone() { + cancleBtn.setVisibility(View.GONE); + line_view.setVisibility(View.GONE); + } + + public ConfirmValueDialog setContent(String s) { + content.setText(s); + return this; + } + + public ConfirmValueDialog setFunction(String s) { + tv_function.setText(s); + return this; + } + + public ConfirmValueDialog setSureBtn(String s) { + sureBtn.setText(s); + return this; + } + + public ConfirmValueDialog setCancleBtn(String s) { + cancleBtn.setText(s); + return this; + } + + public ConfirmValueDialog setTopTxt(String s) { + topTxt.setText(s); + return this; + } + + public ConfirmValueDialog setContent(int s) { + content.setText(s); + return this; + } + + public ConfirmValueDialog setSureBtn(int s) { + sureBtn.setText(s); + return this; + } + + public ConfirmValueDialog setCancleBtn(int s) { + cancleBtn.setText(s); + return this; + } + + public ConfirmValueDialog setTopTxt(int s) { + topTxt.setText(s); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/CurtainBottomDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/CurtainBottomDialog.java new file mode 100644 index 0000000..c2ffcbd --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/CurtainBottomDialog.java @@ -0,0 +1,81 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Administrator on 2017/8/17. + */ + +public class CurtainBottomDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private TextView reverse; + + public CurtainBottomDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog1); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_bottom_curtain, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_save); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + reverse = (TextView) mView.findViewById(R.id.dialog_confirm_reverse); + + reverse.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(3); + CurtainBottomDialog.this.cancel(); + } + }); + + content.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(2); + CurtainBottomDialog.this.cancel(); + } + }); + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + CurtainBottomDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + CurtainBottomDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + + + public void setSureBtn() { + sureBtn.setVisibility(View.GONE); + } + + public CurtainBottomDialog setContent(String s) { + content.setText(s); + content.setTextColor(Color.RED); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/DeviceBottomDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/DeviceBottomDialog.java new file mode 100644 index 0000000..8b03c24 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/DeviceBottomDialog.java @@ -0,0 +1,207 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Administrator on 2017/8/17. + */ + +public class DeviceBottomDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private TextView reverse; + private TextView learn; + private TextView add; + private TextView modifyName, otherName; + private View line1, line2, line3, line4, line5; + + public DeviceBottomDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog1); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_device_bottom, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_save); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + modifyName = (TextView) mView.findViewById(R.id.dialog_modify_name); + otherName = (TextView) mView.findViewById(R.id.dialog_other_name); + reverse = (TextView) mView.findViewById(R.id.dialog_confirm_reverse); + learn = (TextView) mView.findViewById(R.id.dialog_learn); + add = (TextView) mView.findViewById(R.id.dialog_add); + line1 = (View) mView.findViewById(R.id.line1); + line2 = (View) mView.findViewById(R.id.line2); + line3 = (View) mView.findViewById(R.id.line3); + line4 = (View) mView.findViewById(R.id.line4); + line5 = (View) mView.findViewById(R.id.line5); + otherName.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(7); + DeviceBottomDialog.this.cancel(); + } + }); + add.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(6); + DeviceBottomDialog.this.cancel(); + } + }); + learn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(4); + DeviceBottomDialog.this.cancel(); + } + }); + reverse.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(3); + DeviceBottomDialog.this.cancel(); + } + }); + + content.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(2); + DeviceBottomDialog.this.cancel(); + } + }); + modifyName.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(5); + DeviceBottomDialog.this.cancel(); + } + }); + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + DeviceBottomDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + DeviceBottomDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + + public void setModifyName() { + modifyName.setVisibility(View.GONE); + line3.setVisibility(View.GONE); + } + + public void setOtherNameGone() { + otherName.setVisibility(View.GONE); + line5.setVisibility(View.GONE); + } + + public void setAddTxt(String s) { + add.setText(s); + add.setVisibility(View.VISIBLE); + line4.setVisibility(View.VISIBLE); + } + + public void setAdd() { + add.setVisibility(View.GONE); + line4.setVisibility(View.GONE); + } + + public void setLearnTxt(String s) { + learn.setText(s); + } + + public void setLearn() { + learn.setVisibility(View.GONE); + line2.setVisibility(View.GONE); + } + + public void setSureBtn() { + sureBtn.setVisibility(View.GONE); + } + + public void setSureBtnTxt(String s) { + sureBtn.setText(s); + } + + public DeviceBottomDialog setTop(String s) { + reverse.setText(s); + return this; + } + + public DeviceBottomDialog setBottom(String s) { + sureBtn.setText(s); + sureBtn.setTextColor(0xff0076ff); + return this; + } + + public void setContent() { + content.setVisibility(View.GONE); + line1.setVisibility(View.GONE); + } + + public DeviceBottomDialog setContent(String s) { + content.setText(s); + line1.setVisibility(View.VISIBLE); + // content.setTextColor(Color.RED); + return this; + } + + public DeviceBottomDialog setModifyName(String s) { + modifyName.setVisibility(View.VISIBLE); + line3.setVisibility(View.VISIBLE); + modifyName.setText(s); + return this; + } + + public void setSureBtnTxt(int s) { + sureBtn.setText(s); + } + + public void setSureBtnTxt() { + sureBtn.setVisibility(View.GONE); + } + + public void setLearnTxt(int s) { + learn.setText(s); + line2.setVisibility(View.VISIBLE); + } + + public DeviceBottomDialog setTop(int s) { + reverse.setText(s); + return this; + } + + public DeviceBottomDialog setBottom(int s) { + sureBtn.setText(s); + sureBtn.setTextColor(0xff0076ff); + return this; + } + + public DeviceBottomDialog setContent(int s) { + content.setText(s); + // content.setTextColor(Color.RED); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/DviceOffLineDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/DviceOffLineDialog.java new file mode 100644 index 0000000..43e162d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/DviceOffLineDialog.java @@ -0,0 +1,84 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Teprinciple on 2016/10/13. + */ +public class DviceOffLineDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private ImageView cancelIv; + private View line_view; + + public DviceOffLineDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_device_offline, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + cancelIv = (ImageView) mView.findViewById(R.id.iv_cancel); + line_view = (View) mView.findViewById(R.id.line_view); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + + + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + DviceOffLineDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + DviceOffLineDialog.this.cancel(); + } + }); + cancelIv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + DviceOffLineDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + + public DviceOffLineDialog setContent(String s) { + content.setText(s); + return this; + } + + public void setCancleGone() { + cancleBtn.setVisibility(View.GONE); + line_view.setVisibility(View.GONE); + } + + public DviceOffLineDialog setSureBtn(String s) { + sureBtn.setText(s); + return this; + } + + public DviceOffLineDialog setCancleBtn(String s) { + cancleBtn.setText(s); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/FanlistBottomDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/FanlistBottomDialog.java new file mode 100644 index 0000000..0f7ed62 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/FanlistBottomDialog.java @@ -0,0 +1,97 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Administrator on 2017/8/17. + */ + +public class FanlistBottomDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private TextView reverse; + private LinearLayout fanEmergeLl, fanApartLl; + + public FanlistBottomDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog1); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_bottom_fan_list, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_save); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + reverse = (TextView) mView.findViewById(R.id.dialog_confirm_reverse); + fanEmergeLl = (LinearLayout) mView.findViewById(R.id.ll_fan_emerge); + fanApartLl = (LinearLayout) mView.findViewById(R.id.ll_fan_apart); + + fanEmergeLl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + FanlistBottomDialog.this.cancel(); + } + }); + fanApartLl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + FanlistBottomDialog.this.cancel(); + } + }); + /*reverse.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(3); + FanlistBottomDialog.this.cancel(); + } + }); + + content.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(2); + FanlistBottomDialog.this.cancel(); + } + }); + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + FanlistBottomDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + FanlistBottomDialog.this.cancel(); + } + });*/ + super.setContentView(mView); + } + + public void setSureBtn() { + sureBtn.setVisibility(View.GONE); + } + + public FanlistBottomDialog setContent(String s) { + content.setText(s); + content.setTextColor(Color.RED); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ForceUpdateDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ForceUpdateDialog.java new file mode 100644 index 0000000..1b0fac4 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ForceUpdateDialog.java @@ -0,0 +1,74 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Teprinciple on 2016/10/13. + */ +public class ForceUpdateDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private View line_view; + + public ForceUpdateDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_force_update, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + line_view = (View) mView.findViewById(R.id.line_view); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + + + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + ForceUpdateDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + ForceUpdateDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + + public ForceUpdateDialog setContent(String s) { + content.setText(s); + return this; + } + + public void setCancleGone() { + cancleBtn.setVisibility(View.GONE); + line_view.setVisibility(View.GONE); + } + + public ForceUpdateDialog setSureBtn(String s) { + sureBtn.setText(s); + return this; + } + + public ForceUpdateDialog setCancleBtn(String s) { + cancleBtn.setText(s); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/NormalBottomDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/NormalBottomDialog.java new file mode 100644 index 0000000..52f0328 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/NormalBottomDialog.java @@ -0,0 +1,113 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Administrator on 2017/8/17. + */ + +public class NormalBottomDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private TextView reverse; + private TextView learn; + + public NormalBottomDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog1); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_bottom_normal, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_save); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + reverse = (TextView) mView.findViewById(R.id.dialog_confirm_reverse); + learn = (TextView) mView.findViewById(R.id.dialog_learn); + learn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(4); + NormalBottomDialog.this.cancel(); + } + }); + reverse.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(3); + NormalBottomDialog.this.cancel(); + } + }); + + content.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(2); + NormalBottomDialog.this.cancel(); + } + }); + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + NormalBottomDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + NormalBottomDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + public void setSureBtn() { + sureBtn.setVisibility(View.GONE); + } + + public void setSureBtnTxt(String s) { + sureBtn.setText(s); + } + + public void setContent() { + content.setVisibility(View.GONE); + } + + public void setLearn() { + learn.setVisibility(View.GONE); + } + + public void setLearnTxt(String s) { + learn.setText(s); + } + + public NormalBottomDialog setTop(String s) { + reverse.setText(s); + return this; + } + + public NormalBottomDialog setBottom(String s) { + sureBtn.setText(s); + sureBtn.setTextColor(0xff0076ff); + return this; + } + + public NormalBottomDialog setContent(String s) { + content.setText(s); + // content.setTextColor(Color.RED); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/OffLineDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/OffLineDialog.java new file mode 100644 index 0000000..d7908ef --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/OffLineDialog.java @@ -0,0 +1,58 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Administrator on 2017/8/16. + */ + +public class OffLineDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + + public OffLineDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_offline, null); + sureBtn = (TextView)mView.findViewById(R.id.dialog_confirm_sure); + cancleBtn = (TextView)mView.findViewById(R.id.dialog_confirm_cancle); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + + + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + OffLineDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + OffLineDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + + public OffLineDialog setContent(String s){ + content.setText(s); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/RenameNameDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/RenameNameDialog.java new file mode 100644 index 0000000..6e45056 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/RenameNameDialog.java @@ -0,0 +1,258 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.text.InputFilter; +import android.text.InputType; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +import static com.yonsz.z1.R.id.et_confirm_title; + +/** + * Created by Teprinciple on 2016/10/13. + */ +public class RenameNameDialog extends Dialog { + + Callback1 callback; + int mMaxLenth = 4;//设置允许输入的字符长度 + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private EditText mEditText; + //输入表情前的光标位置 + private int cursorPos; + //输入表情前EditText中的文本 + private String inputAfterText; + //是否重置了EditText的内容 + private boolean resetText; + private boolean isSetLength = false; + + public RenameNameDialog(Context context, Callback1 callback) { + super(context, R.style.CustomDialog); + this.callback = callback; + setCustomDialog(); + // KeyboardUtil.showKeyboard(mEditText, context); + } + + public static String stringFilter(String str) throws PatternSyntaxException { + String regEx = "[/\\:*?<>|\"()\n\t]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(str); + return m.replaceAll(""); + } + + public static boolean isEmojiCharacter(char codePoint) { + return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD) || ((codePoint >= 0x20) && codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)); + } + + /** + * 检测是否有emoji表情 + * + * @param source + * @return + */ + public static boolean containsEmoji(String source) { + int len = source.length(); + for (int i = 0; i < len; i++) { + char codePoint = source.charAt(i); + if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情 + return true; + } + } + return false; + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_rename_name, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + mEditText = (EditText) mView.findViewById(et_confirm_title); + /*final int[] cou = {0}; + final int[] selectionEnd = {0}; + mEditText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + cursorPos = mEditText.getSelectionEnd(); + inputAfterText = s.toString(); + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + + int i = s.length(); + if (i > 4 && !isSetLength) { + ToastUtil.show(getContext(), "最多四个字"); + return; + } + + cou[0] = before + count; + String editable = mEditText.getText().toString(); + String str = stringFilter(editable); //过滤特殊字符 + if (!editable.equals(str)) { + mEditText.setText(str); + } + mEditText.setSelection(mEditText.length()); + cou[0] = mEditText.length(); + + *//*if (s.toString().contains(" ")) { + String[] str2 = s.toString().split(" "); + String str1 = ""; + for (int j = 0; j < str2.length; j++) { + str1 += str2[j]; + } + mEditText.setText(str1); + mEditText.setSelection(start); + }*//* + + if (count >= 2) { + *//*CharSequence input = s.subSequence(cursorPos, cursorPos + count); + if (containsEmoji(input.toString())) { + resetText = true; + ToastUtil.show(getContext(), "不支持输入表情符号"); + mEditText.setText(inputAfterText); + CharSequence text = mEditText.getText(); + if (text instanceof Spannable) { + Spannable spanText = (Spannable) text; + Selection.setSelection(spanText, text.length()); + } + return; + }*//* + int index = mEditText.getSelectionStart() - 1; + if (index > 0) { + if (isEmojiCharacter(s.charAt(index))) { + Editable edit = mEditText.getText(); + edit.delete(s.length() - 2, s.length()); + ToastUtil.show(getContext(), "不支持输入表情符号"); + } + } + } + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().isEmpty()) + return; + + if (cou[0] > mMaxLenth) { + selectionEnd[0] = mEditText.getSelectionEnd(); + s.delete(mMaxLenth, selectionEnd[0]); + } + + *//*int index = mEditText.getSelectionStart() - 1; + if (index > 0) { + if (isEmojiCharacter(s.charAt(index))) { + Editable edit = mEditText.getText(); + edit.delete(s.length() - 2, s.length()); + ToastUtil.show(getContext(), "不支持输入表情符号"); + } + }*//* + *//*if (!s.toString().matches("[A-Za-z0-9]+")) { + String temp = s.toString(); + ToastUtil.show(getContext(), "请输入数字或字母"); + s.delete(temp.length() - 1, temp.length()); + mEditText.setSelection(s.length()); + }*//* + } + });*/ + + + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mEditText.getText() != null) { + callback.callback(1, mEditText.getText().toString()); + } else { + callback.callback(1, mEditText.getText().toString()); + } + RenameNameDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0, mEditText.getText().toString()); + RenameNameDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + public void setMaxEms(int number) { + mMaxLenth = number; + if (number == 10) { + isSetLength = true; + } + mEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(number)}); + } + + public void setInsertType() { + mEditText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); + } + + public RenameNameDialog setOldName(String s) { + mEditText.setText(s); + mEditText.setSelection(s.length()); + return this; + } + + public RenameNameDialog setHintName(String s) { + mEditText.setHint(s); + return this; + } + + public RenameNameDialog setContent(String s) { + content.setText(s); + return this; + } + + public RenameNameDialog setSureBtn(String s) { + sureBtn.setText(s); + return this; + } + + public RenameNameDialog setCancleBtn(String s) { + cancleBtn.setText(s); + return this; + } + + public RenameNameDialog setOldName(int s) { + mEditText.setText(s); + return this; + } + + public RenameNameDialog setHintName(int s) { + mEditText.setHint(s); + return this; + } + + public RenameNameDialog setContent(int s) { + content.setText(s); + return this; + } + + public RenameNameDialog setSureBtn(int s) { + sureBtn.setText(s); + return this; + } + + public RenameNameDialog setCancleBtn(int s) { + cancleBtn.setText(s); + return this; + } + + public void setInputTYpe() { + mEditText.setInputType(InputType.TYPE_CLASS_NUMBER); + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/SaveCodeDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/SaveCodeDialog.java new file mode 100644 index 0000000..1344c61 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/SaveCodeDialog.java @@ -0,0 +1,140 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.text.InputFilter; +import android.text.InputType; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.mine.aboutversion.feature.Callback3; +import com.yonsz.z1.utils.ToastUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +import static com.yonsz.z1.R.id.et_confirm_title; + +/** + * Created by Teprinciple on 2016/10/13. + */ +public class SaveCodeDialog extends Dialog { + + Callback3 callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private EditText et_name, et_brand, et_model; + int mMaxLenth = 4;//设置允许输入的字符长度 + + public SaveCodeDialog(Context context, Callback3 callback) { + super(context, R.style.CustomDialog); + this.callback = callback; + setCustomDialog(); +// KeyboardUtil.showKeyboard(mEditText, context); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_save_code, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + et_name = (EditText) mView.findViewById(R.id.et_name); + et_brand = (EditText) mView.findViewById(R.id.et_brand); + et_model = (EditText) mView.findViewById(R.id.et_model); + + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1, et_name.getText().toString(), et_model.getText().toString()); + if (TextUtils.isEmpty(et_name.getText().toString().trim())) { + return; + } + SaveCodeDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0, et_name.getText().toString(), et_model.getText().toString()); + SaveCodeDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + + public SaveCodeDialog setOldName(String s) { + et_name.setText(s); + return this; + } + + public SaveCodeDialog setHintName(String s) { + et_name.setHint(s); + return this; + } + + public SaveCodeDialog setContent(String s) { + content.setText(s); + return this; + } + + public SaveCodeDialog setSureBtn(String s) { + sureBtn.setText(s); + return this; + } + + public SaveCodeDialog setCancleBtn(String s) { + cancleBtn.setText(s); + return this; + } + + public SaveCodeDialog setContent(int s) { + content.setText(s); + return this; + } + + public SaveCodeDialog setSureBtn(int s) { + sureBtn.setText(s); + return this; + } + + public SaveCodeDialog setCancleBtn(int s) { + cancleBtn.setText(s); + return this; + } + + public static String stringFilter(String str) throws PatternSyntaxException { + String regEx = "[/\\:*?<>|\"()\n\t]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(str); + return m.replaceAll(""); + } + + public static boolean isEmojiCharacter(char codePoint) { + return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD) || ((codePoint >= 0x20) && codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)); + } + + /** + * 检测是否有emoji表情 + * + * @param source + * @return + */ + public static boolean containsEmoji(String source) { + int len = source.length(); + for (int i = 0; i < len; i++) { + char codePoint = source.charAt(i); + if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情 + return true; + } + } + return false; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ShareBottomDialog.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ShareBottomDialog.java new file mode 100644 index 0000000..53e2606 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/customview/ShareBottomDialog.java @@ -0,0 +1,138 @@ +package com.yonsz.z1.mine.aboutversion.customview; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +/** + * Created by Administrator on 2017/8/17. + */ + +public class ShareBottomDialog extends Dialog { + + Callback callback; + private TextView content; + private TextView sureBtn; + private TextView cancleBtn; + private TextView reverse; + private TextView learn; + + public ShareBottomDialog(Context context, Callback callback) { + super(context, R.style.CustomDialog1); + this.callback = callback; + setCustomDialog(); + } + + private void setCustomDialog() { + View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_share, null); + sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_save); + cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle); + content = (TextView) mView.findViewById(R.id.dialog_confirm_title); + reverse = (TextView) mView.findViewById(R.id.dialog_confirm_reverse); + learn = (TextView) mView.findViewById(R.id.dialog_learn); + learn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(4); + ShareBottomDialog.this.cancel(); + } + }); + reverse.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(3); + ShareBottomDialog.this.cancel(); + } + }); + + content.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(2); + ShareBottomDialog.this.cancel(); + } + }); + sureBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(1); + ShareBottomDialog.this.cancel(); + } + }); + cancleBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + callback.callback(0); + ShareBottomDialog.this.cancel(); + } + }); + super.setContentView(mView); + } + + public void setSureBtn() { + sureBtn.setVisibility(View.GONE); + } + + public void setContent() { + content.setVisibility(View.GONE); + } + + public void setLearn() { + learn.setVisibility(View.GONE); + } + + public void setSureBtnTxt(String s) { + sureBtn.setText(s); + } + + public void setLearnTxt(String s) { + learn.setText(s); + } + + public ShareBottomDialog setTop(String s) { + reverse.setText(s); + return this; + } + + public ShareBottomDialog setBottom(String s) { + sureBtn.setText(s); + sureBtn.setTextColor(0xff0076ff); + return this; + } + + public ShareBottomDialog setContent(String s) { + content.setText(s); + // content.setTextColor(Color.RED); + return this; + } + + public void setSureBtnTxt(int s) { + sureBtn.setText(s); + } + + public void setLearnTxt(int s) { + learn.setText(s); + } + + public ShareBottomDialog setTop(int s) { + reverse.setText(s); + return this; + } + + public ShareBottomDialog setBottom(int s) { + sureBtn.setText(s); + sureBtn.setTextColor(0xff0076ff); + return this; + } + + public ShareBottomDialog setContent(int s) { + content.setText(s); + // content.setTextColor(Color.RED); + return this; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback.java new file mode 100644 index 0000000..5c4727c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback.java @@ -0,0 +1,8 @@ +package com.yonsz.z1.mine.aboutversion.feature; + +/** + * Created by sanmu on 2016/10/13 0013. + */ +public interface Callback { + public void callback(int position); +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback1.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback1.java new file mode 100644 index 0000000..01b7845 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback1.java @@ -0,0 +1,8 @@ +package com.yonsz.z1.mine.aboutversion.feature; + +/** + * Created by sanmu on 2016/10/13 0013. + */ +public interface Callback1 { + public void callback(int position, String positionName); +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback2.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback2.java new file mode 100644 index 0000000..f5199a4 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback2.java @@ -0,0 +1,12 @@ +package com.yonsz.z1.mine.aboutversion.feature; + +import com.yonsz.z1.database.entity.entity5.BaseModelEntity; + +import java.util.List; + +/** + * Created by sanmu on 2016/10/13 0013. + */ +public interface Callback2 { + public void callback(int position, List stringList); +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback3.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback3.java new file mode 100644 index 0000000..b114a15 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback3.java @@ -0,0 +1,8 @@ +package com.yonsz.z1.mine.aboutversion.feature; + +/** + * Created by sanmu on 2016/10/13 0013. + */ +public interface Callback3 { + public void callback(int position, String positionName, String model); +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback4.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback4.java new file mode 100644 index 0000000..6254964 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/feature/Callback4.java @@ -0,0 +1,12 @@ +package com.yonsz.z1.mine.aboutversion.feature; + +import com.yonsz.z1.database.entity.entity5.NewModelSetEntity; + +import java.util.List; + +/** + * Created by sanmu on 2016/10/13 0013. + */ +public interface Callback4 { + public void callback(int position, String positionName, String model,List functions); +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/DownloadAppUtils.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/DownloadAppUtils.java new file mode 100644 index 0000000..7d7ed3e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/DownloadAppUtils.java @@ -0,0 +1,97 @@ +package com.yonsz.z1.mine.aboutversion.util; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Environment; +import android.util.Log; +import android.widget.Toast; + +import com.liulishuo.filedownloader.BaseDownloadTask; +import com.liulishuo.filedownloader.FileDownloadLargeFileListener; +import com.liulishuo.filedownloader.FileDownloader; + +import java.io.File; + +import static com.yonsz.z1.difference.DifferConstans.TEPRINCIPLE_UPDATE; + + +/** + * Created by Teprinciple on 2016/12/13. + */ +public class DownloadAppUtils { + private static final String TAG = DownloadAppUtils.class.getSimpleName(); + public static long downloadUpdateApkId = -1;//下载更新Apk 下载任务对应的Id + public static String downloadUpdateApkFilePath;//下载更新Apk 文件路径 + + /** + * 通过浏览器下载APK包 + * + * @param context + * @param url + */ + public static void downloadForWebView(Context context, String url) { + Uri uri = Uri.parse(url); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + + + public static void download(final Context context, String url, final String serverVersionName) { + + String packageName = context.getPackageName(); + String filePath = null; + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//外部存储卡 + filePath = Environment.getExternalStorageDirectory().getAbsolutePath(); + } else { + Log.i(TAG, "没有SD卡"); + return; + } + + String apkLocalPath = filePath + File.separator + packageName + "_" + serverVersionName + ".apk"; + + downloadUpdateApkFilePath = apkLocalPath; + + FileDownloader.setup(context); + + FileDownloader.getImpl().create(url) + .setPath(apkLocalPath) + .setListener(new FileDownloadLargeFileListener() { + @Override + protected void pending(BaseDownloadTask task, long soFarBytes, long totalBytes) { + } + + @Override + protected void progress(BaseDownloadTask task, long soFarBytes, long totalBytes) { + send(context, (int) (soFarBytes * 100.0 / totalBytes), serverVersionName); + } + + @Override + protected void paused(BaseDownloadTask task, long soFarBytes, long totalBytes) { + } + + @Override + protected void completed(BaseDownloadTask task) { + send(context, 100, serverVersionName); + } + + @Override + protected void error(BaseDownloadTask task, Throwable e) { + Toast.makeText(context, "下载出错", Toast.LENGTH_SHORT).show(); + } + + @Override + protected void warn(BaseDownloadTask task) { + } + }).start(); + } + + + private static void send(Context context, int progress, String serverVersionName) { + Intent intent = new Intent(TEPRINCIPLE_UPDATE); + intent.putExtra("progress", progress); + intent.putExtra("title", serverVersionName); + context.sendBroadcast(intent); + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/ScoreUtils.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/ScoreUtils.java new file mode 100644 index 0000000..6125edf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/ScoreUtils.java @@ -0,0 +1,113 @@ +package com.yonsz.z1.mine.aboutversion.util; + +/** + * Created by Administrator on 2018/7/24. + */ + +import android.content.Context; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; +import android.text.TextUtils; + +import java.util.ArrayList; +import java.util.List; + +/*** + * 跳转应用市场评分 + * @author Lucasey + */ +public class ScoreUtils { + /** + * 获取已安装应用商店的包名列表 + * + * @param context + * @return + */ + public static ArrayList InstalledAPPs(Context context) { + ArrayList pkgs = new ArrayList(); + if (context == null) + return pkgs; + Intent intent = new Intent(); + intent.setAction("android.intent.action.MAIN"); + intent.addCategory("android.intent.category.APP_MARKET"); + PackageManager pm = context.getPackageManager(); + List infos = pm.queryIntentActivities(intent, 0); + if (infos == null || infos.size() == 0) + return pkgs; + int size = infos.size(); + for (int i = 0; i < size; i++) { + String pkgName = ""; + try { + ActivityInfo activityInfo = infos.get(i).activityInfo; + pkgName = activityInfo.packageName; + } catch (Exception e) { + e.printStackTrace(); + } + if (!TextUtils.isEmpty(pkgName)) + pkgs.add(pkgName); + + } + return pkgs; + } + + /** + * 过滤出已经安装的包名集合 + * + * @param context + * @param pkgs 待过滤包名集合 + * @return 已安装的包名集合 + */ + public static ArrayList SelectedInstalledAPPs(Context context, ArrayList pkgs) { + ArrayList empty = new ArrayList(); + if (context == null || pkgs == null || pkgs.size() == 0) + return empty; + PackageManager pm = context.getPackageManager(); + List installedPkgs = pm.getInstalledPackages(0); + int li = installedPkgs.size(); + int lj = pkgs.size(); + for (int j = 0; j < lj; j++) { + for (int i = 0; i < li; i++) { + String installPkg = ""; + String checkPkg = pkgs.get(j); + try { + installPkg = installedPkgs.get(i).applicationInfo.packageName; + } catch (Exception e) { + e.printStackTrace(); + } + if (TextUtils.isEmpty(installPkg)) + continue; + if (installPkg.equals(checkPkg)) { + empty.add(installPkg); + break; + } + + } + } + return empty; + } + + /** + * 跳转到app详情界面 + * + * @param appPkg App的包名 + * @param marketPkg 应用商店包名 ,如果为""则由系统弹出应用商店列表供用户选择,否则调转到目标市场的应用详情界面,某些应用商店可能会失败 + */ + public static void launchAppDetail(Context context,String appPkg, String marketPkg) { + try { + if (TextUtils.isEmpty(appPkg)) + return; + Uri uri = Uri.parse("market://details?id=" + appPkg); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + if (!TextUtils.isEmpty(marketPkg)) + intent.setPackage(marketPkg); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/UpdateAppReceiver.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/UpdateAppReceiver.java new file mode 100644 index 0000000..b24ae60 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/UpdateAppReceiver.java @@ -0,0 +1,67 @@ +package com.yonsz.z1.mine.aboutversion.util; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.support.v4.app.NotificationCompat; +import android.support.v4.content.FileProvider; + +import com.yonsz.z1.R; + +import java.io.File; + +public class UpdateAppReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + + int notifyId = 1; + int progress = intent.getIntExtra("progress", 0); + String title = intent.getStringExtra("title"); + + NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + Notification notification = null; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationChannel mChannel = new NotificationChannel("1", "2", NotificationManager.IMPORTANCE_LOW); + nm.createNotificationChannel(mChannel); + notification = new Notification.Builder(context) + .setChannelId("1") + .setContentTitle("正在下载 " + title) + .setProgress(100, progress, false) + .setSmallIcon(R.mipmap.app_lan).build(); + } else if (UpdateAppUtils.showNotification) { + NotificationCompat.Builder builder = new NotificationCompat.Builder(context); + builder.setContentTitle("正在下载 " + title); + builder.setSmallIcon(R.mipmap.app_lan); + builder.setProgress(100, progress, false); + notification = builder.build(); + } + nm.notify(notifyId, notification); + + + if (progress == 100) { + if (nm != null) + nm.cancel(notifyId); + + if (DownloadAppUtils.downloadUpdateApkFilePath != null) { + Intent i = new Intent(Intent.ACTION_VIEW); + File apkFile = new File(DownloadAppUtils.downloadUpdateApkFilePath); + if (UpdateAppUtils.needFitAndroidN && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + Uri contentUri = FileProvider.getUriForFile( + context, context.getPackageName() + ".fileprovider", apkFile); + i.setDataAndType(contentUri, "application/vnd.android.package-archive"); + } else { + i.setDataAndType(Uri.fromFile(apkFile), + "application/vnd.android.package-archive"); + } + i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(i); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/UpdateAppUtils.java b/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/UpdateAppUtils.java new file mode 100644 index 0000000..5463117 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/aboutversion/util/UpdateAppUtils.java @@ -0,0 +1,233 @@ +package com.yonsz.z1.mine.aboutversion.util; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.support.v4.content.ContextCompat; +import android.widget.Toast; + +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.ForceUpdateDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Teprinciple on 2016/11/15. + */ +public class UpdateAppUtils { + + public static final int CHECK_BY_VERSION_NAME = 1001; + public static final int CHECK_BY_VERSION_CODE = 1002; + public static final int DOWNLOAD_BY_APP = 1003; + public static final int DOWNLOAD_BY_BROWSER = 1004; + public static boolean needFitAndroidN = true; //提供给 整个工程不需要适配到7.0的项目 置为false + public static boolean showNotification = true; + private final String TAG = "UpdateAppUtils"; + private Activity activity; + private int checkBy = CHECK_BY_VERSION_CODE; + private int downloadBy = DOWNLOAD_BY_APP; + private int serverVersionCode = 0; + private String apkPath = ""; + private String serverVersionName = ""; + private boolean isForce = false; //是否强制更新 + private int localVersionCode = 0; + private String localVersionName = ""; + private List mPackageList = new ArrayList<>(); + + private UpdateAppUtils(Activity activity) { + this.activity = activity; + getAPPLocalVersion(activity); + } + + public static UpdateAppUtils from(Activity activity) { + return new UpdateAppUtils(activity); + } + + public UpdateAppUtils checkBy(int checkBy) { + this.checkBy = checkBy; + return this; + } + + public UpdateAppUtils apkPath(String apkPath) { + this.apkPath = apkPath; + return this; + } + + public UpdateAppUtils downloadBy(int downloadBy) { + this.downloadBy = downloadBy; + return this; + } + + public UpdateAppUtils serverVersionCode(int serverVersionCode) { + this.serverVersionCode = serverVersionCode; + return this; + } + + public UpdateAppUtils serverVersionName(String serverVersionName) { + this.serverVersionName = serverVersionName; + return this; + } + + public UpdateAppUtils isForce(boolean isForce) { + this.isForce = isForce; + return this; + } + + //获取apk的版本号 currentVersionCode + private void getAPPLocalVersion(Context ctx) { + PackageManager manager = ctx.getPackageManager(); + try { + PackageInfo info = manager.getPackageInfo(ctx.getPackageName(), 0); + localVersionName = info.versionName; // 版本名 + localVersionCode = info.versionCode; // 版本号 + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + } + + public void update(boolean isForce) { + toUpdate(); + } + + public void update(int tag) { + + switch (checkBy) { + case CHECK_BY_VERSION_CODE: + if (serverVersionCode > localVersionCode) { + toUpdate(); + } else { + Toast.makeText(activity, "已是最新版本", Toast.LENGTH_SHORT).show(); + // Log.i(TAG, "当前版本是最新版本" + serverVersionCode + "/" + serverVersionName); + } + break; + + case CHECK_BY_VERSION_NAME: + int i = serverVersionName.compareTo(localVersionName); + if (i > 0) { + toUpdate(); + } else { + // Log.i(TAG, "当前版本是最新版本" + serverVersionCode + "/" + serverVersionName); + if (tag == 2) { + Toast.makeText(activity, "已是最新版本", Toast.LENGTH_SHORT).show(); + } else { + /*if (DifferConstans.APPID_S_VOICE.equals("1101") && localVersionName.equals("4.9.1")) { + getAppList(); + }*/ + } + } + break; + } + + } + + private void toUpdate() { + if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) + == PackageManager.PERMISSION_GRANTED) { + if (isForce) { + forceUpdate(); + } else { + realUpdate(); + } + } else {//申请权限 + Toast.makeText(activity, "请申请读写SD卡权限", Toast.LENGTH_SHORT).show(); + } + } + + private void forceUpdate() { + ForceUpdateDialog dialog = new ForceUpdateDialog(activity, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: //cancle + if (isForce) + activity.finish(); + break; + + case 1: //sure + if (downloadBy == DOWNLOAD_BY_APP) { + DownloadAppUtils.download(activity, apkPath, serverVersionName); + } else if (downloadBy == DOWNLOAD_BY_BROWSER) { + DownloadAppUtils.downloadForWebView(activity, apkPath); + } + break; + } + } + }); + // dialog.setContent("尊敬的用户,由于您当前版本太旧\n将不支持继续使用了,请下载最新\n版本。"); + // dialog.setContent("发现新版本:" + serverVersionName + "\n是否下载更新?"); + dialog.setCancelable(false); + if (!dialog.isShowing()) { + dialog.show(); + } + } + + private void realUpdate() { + ConfirmDialog dialog = new ConfirmDialog(activity, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: //cancle + /*SharedpreferencesUtil.save(Constans.VESION_NOW, versionEntity.getVersionInfo().getVersionId().substring(2, 7)); + if (isForce) + activity.finish();*/ + break; + + case 1: //sure + // SharedpreferencesUtil.save(Constans.VESION_NOW, versionEntity.getVersionInfo().getVersionId().substring(2, 7)); + if (downloadBy == DOWNLOAD_BY_APP) { + DownloadAppUtils.download(activity, apkPath, serverVersionName); + } else if (downloadBy == DOWNLOAD_BY_BROWSER) { + DownloadAppUtils.downloadForWebView(activity, apkPath); + } + break; + } + } + }); + dialog.setContent("发现新版本:" + serverVersionName + " \n是否下载更新?"); + dialog.setCancelable(false); + if (!dialog.isShowing()) { + dialog.show(); + } + } + + private void getAppList() { + PackageManager pm = activity.getPackageManager(); + // Return a List of all packages that are installed on the device. + List packages = pm.getInstalledPackages(0); + mPackageList.clear(); + for (PackageInfo packageInfo : packages) { + // 判断系统/非系统应用 + if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) // 非系统应用 + { + System.out.println("MainActivity.getAppList, packageInfo=" + packageInfo.packageName); + mPackageList.add(packageInfo.packageName); + } else { + // 系统应用 + } + } + if (!mPackageList.contains("com.standard.z1")) { + ConfirmDialog dialog = new ConfirmDialog(activity, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: //cancle + break; + case 1: //sure + DownloadAppUtils.downloadForWebView(activity, "http://a.app.qq.com/o/simple.jsp?pkgname=com.standard.z1"); + break; + } + } + }); + dialog.setContent("语音遥控器4.9版本已经更新上线,请点击[确定]按钮下载并安装最新版本客户端,得到最佳智能生活体验,祝您生活愉快!"); + dialog.setCancelable(false); + if (!dialog.isShowing()) { + dialog.show(); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/FeedBackActivity.java b/app/src/main/java/com/yonsz/z1/mine/feedback/FeedBackActivity.java new file mode 100644 index 0000000..c6f106c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/FeedBackActivity.java @@ -0,0 +1,577 @@ +package com.yonsz.z1.mine.feedback; + +import android.content.Intent; +import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.v4.view.ViewPager; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity5.FeedBackEntity; +import com.yonsz.z1.database.entity.entity5.FeedBackTypeEntity; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.feedback.adapter.ImgCheckVpAdapter; +import com.yonsz.z1.mine.feedback.entity.ImageEntity; +import com.yonsz.z1.mine.feedback.widget.FeedbackAiPopupWindow; +import com.yonsz.z1.mine.feedback.widget.FeedbackPopupWindow; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.service.UploadHeadIconService; +import com.yonsz.z1.utils.ImageLoaderUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import id.zelory.compressor.Compressor; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.schedulers.Schedulers; + +import static com.yonsz.z1.R.id.edit_content; +import static com.yonsz.z1.mine.feedback.adapter.ImgCheckVpAdapter.DYNAMIC_VIEWPAGER_ONCLICK; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_FAIL; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.FEEDBACK_SAVE; +import static com.yonsz.z1.net.NetWorkUrl.FEEDBACK_TYPES; + +/** + * Created by Administrator on 2017/5/26. + */ +public class FeedBackActivity extends BaseActivity { + public static final int REFRESH_TALK = 1002; + ImageView imgIv; + int tag = 4; + private StringBuilder attachments = new StringBuilder(); + private List mStrings = new ArrayList<>(); + private TitleView titleView; + private EditText mEditText, editText_phone; + private Button bt_commit; + private RelativeLayout rl_question_type; + private TextView tv_choose_device, tv_feedback_type; + private RecyclerView rc_picture; + private GridLayoutManager gridManager; + private List mDatas; + private RecordPicAdapter mAdapter; + private String file; + private View imgCheckPopView; + private ViewPager imgCheckVp; + private PopupWindow imgScanPop; + private View root; + private List viewList; + private File actualImage; + private File compressedImage; + private LoadingDialog mLoadingDialog; + private Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case DYNAMIC_VIEWPAGER_ONCLICK: + imgScanPop.dismiss(); + break; + + } + } + }; + private List feedBackTypeEntityData = new ArrayList<>(); + private List dataBeanList = new ArrayList<>(); + private String feedbackType = "", ziId = ""; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + attachments.append(msg); + mStrings.add(msg); + if (mDatas.size() == 4 && mDatas.get(0).getLocalUri() != null) { + if (mStrings.size() == 4) { + feedbackSave(); + } + } else { + if (mStrings.size() == mDatas.size() - 1) { + feedbackSave(); + } + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_feed_back); + initView(); + initListener(); + } + + private void initView() { + root = findViewById(R.id.root); + titleView = (TitleView) findViewById(R.id.title_feed_back); + mEditText = (EditText) findViewById(edit_content); + editText_phone = (EditText) findViewById(R.id.editText_phone); + bt_commit = (Button) findViewById(R.id.bt_commit); + tv_choose_device = (TextView) findViewById(R.id.tv_choose_device); + tv_feedback_type = (TextView) findViewById(R.id.tv_feedback_type); + rl_question_type = (RelativeLayout) findViewById(R.id.rl_question_type); + titleView.setHead(R.string.feed_back); + titleView.setHeadFuntionTxtColor(false); + titleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + rc_picture = (RecyclerView) findViewById(R.id.rc_picture); + gridManager = new GridLayoutManager(this, 4); + // rc_picture.addItemDecoration(new GridItemDecoration()); + rc_picture.setLayoutManager(gridManager); + mDatas = new ArrayList<>(); + ImageEntity entity = new ImageEntity(); + mDatas.add(entity); + mAdapter = new RecordPicAdapter(this, mDatas, true); + rc_picture.setAdapter(mAdapter); + + mAdapter.setmOnItemClickListener(new OnRecyclerItemClickListener() { + @Override + public void onClick(View view, int position, List photos, int j) { + ImageEntity imageEntity = mDatas.get(position); + Intent intent = null; + //如果位置是第一个,并且图片的数量小于九个的时候才会跳转到PhotoPickerActivity这个页面 + if (position != 0) { + + } else if (mDatas.size() < 4 || mDatas.get(0).getLocalUri() == null) { + intent = new Intent(FeedBackActivity.this, PhotoPickerActivity.class); + intent.putExtra(PhotoPicker.EXTRA_MAX_COUNT, 4); + if (mDatas.size() > 1) { + ArrayList extras = new ArrayList(); + for (int i = 1; i < mDatas.size(); i++) { + extras.add(mDatas.get(i).getLocalUri()); + } + intent.putStringArrayListExtra(PhotoPicker.EXTRA_ORIGINAL_PHOTOS, extras); + } + + startActivityForResult(intent, 1001); + } + //九张图片 + if (mDatas.size() == 4 && mDatas.get(0).getLocalUri() != null) { + if (j == 0) { + //显示大图 + setImgCheckPop(photos, position); + } else { + mDatas.remove(position); + tag--; + if (tag == 3) { + imageEntity.setNewRecord(true); + imageEntity.setLocalUri(null); + mDatas.add(0, imageEntity); + } + mAdapter.notifyDataSetChanged(); + } + } else { + if (j == 0) { + //显示大图 + if (position != 0) { + setImgCheckPop(photos, position); + } + } else { + mDatas.remove(position); + mAdapter.notifyDataSetChanged(); + } + } + } + + @Override + public void onLongClick(View view, int position) { + if (position != 0) { + mDatas.remove(position); + mAdapter.notifyDataSetChanged(); + } + } + }); + + getFeedbackTypes(); + getAideviceList(); + + + /*View decorView = this.getWindow().getDecorView(); + View contentView = this.findViewById(Window.ID_ANDROID_CONTENT); + decorView.getViewTreeObserver().addOnGlobalLayoutListener(getGlobalLayoutListener(decorView, contentView));*/ + } + + private ViewTreeObserver.OnGlobalLayoutListener getGlobalLayoutListener(final View decorView, final View contentView) { + return new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + Rect r = new Rect(); + decorView.getWindowVisibleDisplayFrame(r); + + int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels; + int diff = height - r.bottom; + + if (diff != 0) { + if (contentView.getPaddingBottom() != diff) { + contentView.setPadding(0, 0, 0, diff); + } + } else { + if (contentView.getPaddingBottom() != 0) { + contentView.setPadding(0, 0, 0, 0); + } + } + } + }; + } + + + private void initListener() { + bt_commit.setOnClickListener(this); + rl_question_type.setOnClickListener(this); + tv_choose_device.setOnClickListener(this); + rc_picture.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_commit: + if (feedbackType.isEmpty()) { + ToastUtil.show(this, "请选择问题分类"); + return; + } else if (mEditText.getText().toString().trim().isEmpty()) { + ToastUtil.show(this, "反馈内容不能为空!"); + return; + } else if (mEditText.getText().toString().trim().length() < 5 || mEditText.getText().toString().trim().length() > 200) { + ToastUtil.show(this, "字数限制在5-200个"); + return; + } + /*else if (ziId.isEmpty()) { + ToastUtil.show(this, "请选择故障设备"); + return; + }*/ + initLoadDialog(); + if (mDatas.size() >= 2) { + mStrings.clear(); + upLoadPic(); + } else { + feedbackSave(); + } + break; + case R.id.rl_question_type: + View rootview = LayoutInflater.from(FeedBackActivity.this).inflate(R.layout.activity_feed_back, null); + FeedbackPopupWindow popupWindow = new FeedbackPopupWindow(this, feedBackTypeEntityData, new FeedbackPopupWindow.OnCompleteListener() { + @Override + public void onComplete(FeedBackTypeEntity.DataBean condition) { + tv_feedback_type.setText(condition.getName()); + feedbackType = condition.getType(); + mEditText.setText(condition.getContent()); + } + }); + popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); + break; + case R.id.tv_choose_device: + View rootview1 = LayoutInflater.from(FeedBackActivity.this).inflate(R.layout.activity_feed_back, null); + FeedbackAiPopupWindow popupWindow1 = new FeedbackAiPopupWindow(this, dataBeanList, new FeedbackAiPopupWindow.OnCompleteListener() { + @Override + public void onComplete(DeviceSimpleEntity.DataBean condition) { + tv_choose_device.setText(condition.getName()); + ziId = condition.getZiId(); + } + }); + popupWindow1.showAtLocation(rootview1, Gravity.BOTTOM, 0, 0); + break; + case R.id.rc_picture: + + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FIND_DEVICES_SUCCESS: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(FeedBackActivity.this, R.string.Submit_successfully); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + break; + case HOUSE_TYPE_LIST_SUCCESS: + FeedBackTypeEntity feedBackTypeEntity = (FeedBackTypeEntity) msg.obj; + feedBackTypeEntityData = feedBackTypeEntity.getData(); + break; + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + DeviceSimpleEntity simpleEntity = (DeviceSimpleEntity) msg.obj; + if (simpleEntity.getData().size() != 0) { + dataBeanList = simpleEntity.getData(); + } else { + + } + break; + } + } + + private void upLoadPic() { + int startNum; + if (mDatas.size() == 4 && mDatas.get(0).getLocalUri() != null) { + startNum = 0; + } else { + startNum = 1; + } + for (int i = startNum; i < mDatas.size(); i++) { + final Intent service = new Intent(this, UploadHeadIconService.class); + final ArrayList files = new ArrayList<>(); + String imgPath = mDatas.get(i).getLocalUri(); + try { + actualImage = new File(imgPath); + final int finalI1 = i; + new Compressor(this) + .compressToFileAsFlowable(actualImage) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new io.reactivex.functions.Consumer() { + @Override + public void accept(File file) { + compressedImage = file; + files.add(compressedImage.getPath()); + service.putStringArrayListExtra("data", files); + service.putExtra("parentId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + service.putExtra("TAG", "4"); + if (finalI1 == mDatas.size() - 1) { + service.putExtra("mDatas", 1); + } else { + service.putExtra("mDatas", 0); + } + startService(service); + } + }, new io.reactivex.functions.Consumer() { + @Override + public void accept(Throwable throwable) { + throwable.printStackTrace(); + } + }); + + } catch (Exception e) { + e.printStackTrace(); + } + + } + } + + private void setImgCheckPop(List photos, int position) { + Log.i("gaojie", "FoundFragment setImgCheckPop()" + photos.toString() + "----" + position); + imgCheckPopView = View.inflate(FeedBackActivity.this, R.layout.pop_found_check_img, null); + imgCheckVp = (ViewPager) imgCheckPopView.findViewById(R.id.vp_check_img); + + imgScanPop = new PopupWindow(imgCheckPopView, ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + imgScanPop.setFocusable(true); + imgScanPop.setOutsideTouchable(true); + imgScanPop.setBackgroundDrawable(new BitmapDrawable()); + imgScanPop.setOnDismissListener(new PopupWindow.OnDismissListener() { + @Override + public void onDismiss() { + root.setAlpha(1f); + viewList.clear(); + } + }); + imgScanPop.showAtLocation(root, Gravity.CENTER, 0, 0); + root.setAlpha(0.2f); + + viewList = new ArrayList<>(); + for (int i = 0; i < photos.size(); i++) { + View itemView = View.inflate(FeedBackActivity.this, R.layout.item_found_img_check, null); + imgIv = (ImageView) itemView.findViewById(R.id.iv_img); + ImageLoaderUtil.setImageUrl(photos.get(i), imgIv); + viewList.add(itemView); + } + // imgIv.setOnTouchListener(image_touch_listener); + imgCheckVp.setAdapter(new ImgCheckVpAdapter(viewList, handler, photos)); + imgCheckVp.setCurrentItem(position); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // super.onActivityResult(requestCode, resultCode, data); + if (resultCode == 1001) { + ArrayList list = data.getStringArrayListExtra("data"); + Log.i("selectedImg", "onActivityResult: " + list.size()); + ImageEntity first = mDatas.get(0); + + mDatas.clear(); + if (list != null && list.size() > 0) { + // mTitle.setHeadFuntionTxt(R.string.push); + for (String uri : list) { + ImageEntity entity = new ImageEntity(); + entity.setLocalUri(uri); + mDatas.add(entity); + } + if (mDatas.size() < 4) { + if (mDatas.size() == 3) { + first.setNewRecord(true); + first.setLocalUri(null); + mDatas.add(0, first); + } else { + mDatas.add(0, first); + } + } + mAdapter.notifyDataSetChanged(); + } + } else { + // mTitle.setHeadFuntionTxtGone(); + } + } + + + private void getFeedbackTypes() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestGetByAsy(FEEDBACK_TYPES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("getFeedbackTypes", "onSuccess()" + respone); + FeedBackTypeEntity obj = JSON.parseObject(respone, FeedBackTypeEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void feedbackSave() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (attachments.length() != 0) { + map.put("attachments", attachments.substring(0, attachments.length() - 1).toString()); + } + map.put("content", ""); + map.put("description", mEditText.getText().toString()); + map.put("deviceId", ziId); + if (null != editText_phone.getText()) { + if (editText_phone.getText().toString().contains("@")) { + map.put("email", editText_phone.getText().toString()); + } else { + map.put("phone", editText_phone.getText().toString()); + } + } + map.put("type", feedbackType); + netWorkUtil.requestPostByAsynewApi(FEEDBACK_SAVE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("feedbackSave", "onSuccess()" + respone); + FeedBackEntity obj = JSON.parseObject(respone, FeedBackEntity.class); + if (1 == obj.getFlag()) { + android.os.Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + android.os.Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getAideviceList() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + util.requestGetByAsy(NetWorkUrl.DEIVCE_AIDEVICE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getAideviceList", respone); + DeviceSimpleEntity entity = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USERDEVICES4_SIMPLEINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPagerActivity.java b/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPagerActivity.java new file mode 100644 index 0000000..ce76ca9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPagerActivity.java @@ -0,0 +1,160 @@ +package com.yonsz.z1.mine.feedback; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.support.v4.view.ViewPager; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.feedback.fragment.ImagePagerFragment; + +import java.util.List; + +import static com.yonsz.z1.mine.feedback.PhotoPicker.KEY_SELECTED_PHOTOS; +import static com.yonsz.z1.mine.feedback.PhotoPreview.EXTRA_CURRENT_ITEM; +import static com.yonsz.z1.mine.feedback.PhotoPreview.EXTRA_PHOTOS; +import static com.yonsz.z1.mine.feedback.PhotoPreview.EXTRA_SHOW_DELETE; + +/** + * Created by donglua on 15/6/24. + */ +public class PhotoPagerActivity extends AppCompatActivity { + + private ImagePagerFragment pagerFragment; + + private ActionBar actionBar; + private boolean showDelete; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.__picker_activity_photo_pager); + + int currentItem = getIntent().getIntExtra(EXTRA_CURRENT_ITEM, 0); + List paths = getIntent().getStringArrayListExtra(EXTRA_PHOTOS); + showDelete = getIntent().getBooleanExtra(EXTRA_SHOW_DELETE, true); + + if (pagerFragment == null) { + pagerFragment = + (ImagePagerFragment) getSupportFragmentManager().findFragmentById(R.id.photoPagerFragment); + } + pagerFragment.setPhotos(paths, currentItem); + + Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(mToolbar); + + actionBar = getSupportActionBar(); + + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + updateActionBarTitle(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + actionBar.setElevation(25); + } + } + + + pagerFragment.getViewPager().setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + updateActionBarTitle(); + } + }); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (showDelete){ + getMenuInflater().inflate(R.menu.__picker_menu_preview, menu); + } + return true; + } + + + @Override + public void onBackPressed() { + + Intent intent = new Intent(); + intent.putExtra(KEY_SELECTED_PHOTOS, pagerFragment.getPaths()); + setResult(RESULT_OK, intent); + finish(); + + super.onBackPressed(); + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + + if (item.getItemId() == android.R.id.home) { + onBackPressed(); + return true; + } + + if (item.getItemId() == R.id.delete) { + final int index = pagerFragment.getCurrentItem(); + + final String deletedPath = pagerFragment.getPaths().get(index); + +// Snackbar snackbar = Snackbar.make(pagerFragment.getView(), R.string.__picker_deleted_a_photo, +// Snackbar.LENGTH_LONG); +// +// if (pagerFragment.getPaths().size() <= 1) { +// +// // show confirm dialog +// new AlertDialog.Builder(this) +// .setTitle(R.string.__picker_confirm_to_delete) +// .setPositiveButton(R.string.__picker_yes, new DialogInterface.OnClickListener() { +// @Override public void onClick(DialogInterface dialogInterface, int i) { +// dialogInterface.dismiss(); +// pagerFragment.getPaths().remove(index); +// pagerFragment.getViewPager().getAdapter().notifyDataSetChanged(); +// onBackPressed(); +// } +// }) +// .setNegativeButton(R.string.__picker_cancel, new DialogInterface.OnClickListener() { +// @Override public void onClick(DialogInterface dialogInterface, int i) { +// dialogInterface.dismiss(); +// } +// }) +// .show(); +// +// } else { +// +// snackbar.show(); +// +// pagerFragment.getPaths().remove(index); +// pagerFragment.getViewPager().getAdapter().notifyDataSetChanged(); +// } +// +// snackbar.setAction(R.string.__picker_undo, new View.OnClickListener() { +// @Override public void onClick(View view) { +// if (pagerFragment.getPaths().size() > 0) { +// pagerFragment.getPaths().add(index, deletedPath); +// } else { +// pagerFragment.getPaths().add(deletedPath); +// } +// pagerFragment.getViewPager().getAdapter().notifyDataSetChanged(); +// pagerFragment.getViewPager().setCurrentItem(index, true); +// } +// }); + + return true; + } + + return super.onOptionsItemSelected(item); + } + + public void updateActionBarTitle() { + if (actionBar != null) actionBar.setTitle( + getString(R.string.__picker_image_index, pagerFragment.getViewPager().getCurrentItem() + 1, + pagerFragment.getPaths().size())); + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPicker.java b/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPicker.java new file mode 100644 index 0000000..e7b10f4 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPicker.java @@ -0,0 +1,131 @@ +package com.yonsz.z1.mine.feedback; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.NonNull; +import com.yonsz.z1.mine.feedback.utils.PermissionsUtils; + +import java.util.ArrayList; + +/** + * Created by Donglua on 16/6/25. + * Builder class to ease Intent setup. + */ +public class PhotoPicker { + + public static final int REQUEST_CODE = 233; + + public final static int DEFAULT_MAX_COUNT = 9; + public final static int DEFAULT_COLUMN_NUMBER = 3; + + public final static String KEY_SELECTED_PHOTOS = "SELECTED_PHOTOS"; + + public final static String EXTRA_MAX_COUNT = "MAX_COUNT"; + public final static String EXTRA_SHOW_CAMERA = "SHOW_CAMERA"; + public final static String EXTRA_SHOW_GIF = "SHOW_GIF"; + public final static String EXTRA_GRID_COLUMN = "column"; + public final static String EXTRA_ORIGINAL_PHOTOS = "ORIGINAL_PHOTOS"; + public final static String EXTRA_PREVIEW_ENABLED = "PREVIEW_ENABLED"; + + public static PhotoPickerBuilder builder() { + return new PhotoPickerBuilder(); + } + + public static class PhotoPickerBuilder { + private Bundle mPickerOptionsBundle; + private Intent mPickerIntent; + + public PhotoPickerBuilder() { + mPickerOptionsBundle = new Bundle(); + mPickerIntent = new Intent(); + } + + /** + * Send the Intent from an Activity with a custom request code + * + * @param activity Activity to receive result + * @param requestCode requestCode for result + */ + public void start(@NonNull Activity activity, int requestCode) { + if (PermissionsUtils.checkReadStoragePermission(activity)) { + activity.startActivityForResult(getIntent(activity), requestCode); + } + } + + /** + * + * @param fragment Fragment to receive result + * @param requestCode requestCode for result + */ + public void start(@NonNull Context context, + @NonNull android.support.v4.app.Fragment fragment, int requestCode) { + if (PermissionsUtils.checkReadStoragePermission(fragment.getActivity())) { + fragment.startActivityForResult(getIntent(context), requestCode); + } + } + + /** + * Send the Intent with a custom request code + * + * @param fragment Fragment to receive result + */ + public void start(@NonNull Context context, + @NonNull android.support.v4.app.Fragment fragment) { + if (PermissionsUtils.checkReadStoragePermission(fragment.getActivity())) { + fragment.startActivityForResult(getIntent(context), REQUEST_CODE); + } + } + + /** + * Get Intent to start {@link PhotoPickerActivity} + * + * @return Intent for {@link PhotoPickerActivity} + */ + public Intent getIntent(@NonNull Context context) { + mPickerIntent.setClass(context, PhotoPickerActivity.class); + mPickerIntent.putExtras(mPickerOptionsBundle); + return mPickerIntent; + } + + /** + * Send the crop Intent from an Activity + * + * @param activity Activity to receive result + */ + public void start(@NonNull Activity activity) { + start(activity, REQUEST_CODE); + } + + public PhotoPickerBuilder setPhotoCount(int photoCount) { + mPickerOptionsBundle.putInt(EXTRA_MAX_COUNT, photoCount); + return this; + } + + public PhotoPickerBuilder setGridColumnCount(int columnCount) { + mPickerOptionsBundle.putInt(EXTRA_GRID_COLUMN, columnCount); + return this; + } + + public PhotoPickerBuilder setShowGif(boolean showGif) { + mPickerOptionsBundle.putBoolean(EXTRA_SHOW_GIF, showGif); + return this; + } + + public PhotoPickerBuilder setShowCamera(boolean showCamera) { + mPickerOptionsBundle.putBoolean(EXTRA_SHOW_CAMERA, showCamera); + return this; + } + + public PhotoPickerBuilder setSelected(ArrayList imagesUri) { + mPickerOptionsBundle.putStringArrayList(EXTRA_ORIGINAL_PHOTOS, imagesUri); + return this; + } + + public PhotoPickerBuilder setPreviewEnabled(boolean previewEnabled) { + mPickerOptionsBundle.putBoolean(EXTRA_PREVIEW_ENABLED, previewEnabled); + return this; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPickerActivity.java b/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPickerActivity.java new file mode 100644 index 0000000..a706dba --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPickerActivity.java @@ -0,0 +1,234 @@ +package com.yonsz.z1.mine.feedback; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.widget.Toast; + +import com.yonsz.z1.R; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.feedback.entity.Photo; +import com.yonsz.z1.mine.feedback.event.OnItemCheckListener; +import com.yonsz.z1.mine.feedback.fragment.ImagePagerFragment; +import com.yonsz.z1.mine.feedback.fragment.PhotoPickerFragment; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.List; + +import static android.widget.Toast.LENGTH_LONG; +import static com.yonsz.z1.mine.feedback.PhotoPicker.DEFAULT_COLUMN_NUMBER; +import static com.yonsz.z1.mine.feedback.PhotoPicker.DEFAULT_MAX_COUNT; +import static com.yonsz.z1.mine.feedback.PhotoPicker.EXTRA_GRID_COLUMN; +import static com.yonsz.z1.mine.feedback.PhotoPicker.EXTRA_MAX_COUNT; +import static com.yonsz.z1.mine.feedback.PhotoPicker.EXTRA_ORIGINAL_PHOTOS; +import static com.yonsz.z1.mine.feedback.PhotoPicker.EXTRA_PREVIEW_ENABLED; +import static com.yonsz.z1.mine.feedback.PhotoPicker.EXTRA_SHOW_CAMERA; +import static com.yonsz.z1.mine.feedback.PhotoPicker.EXTRA_SHOW_GIF; + +public class PhotoPickerActivity extends AppCompatActivity { + + private PhotoPickerFragment pickerFragment; + private ImagePagerFragment imagePagerFragment; +// private MenuItem menuDoneItem; + + private int maxCount = DEFAULT_MAX_COUNT; + + /** to prevent multiple calls to inflate menu */ + private boolean menuIsInflated = false; + + private boolean showGif = false; + private int columnNumber = DEFAULT_COLUMN_NUMBER; + private ArrayList originalPhotos = null; +// private ActionBar actionBar; + + private TitleView mTitleView; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + boolean showCamera = getIntent().getBooleanExtra(EXTRA_SHOW_CAMERA, true); + boolean showGif = getIntent().getBooleanExtra(EXTRA_SHOW_GIF, false); + boolean previewEnabled = getIntent().getBooleanExtra(EXTRA_PREVIEW_ENABLED, true); + + setShowGif(showGif); + + + setContentView(R.layout.__picker_activity_photo_picker); + + initTitleView(); +// Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); +// setSupportActionBar(mToolbar); +// setTitle(R.string.__picker_title); + +// actionBar = getSupportActionBar(); +// +// assert actionBar != null; +// actionBar.setDisplayHomeAsUpEnabled(true); +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { +// actionBar.setElevation(25); +// } + + maxCount = getIntent().getIntExtra(EXTRA_MAX_COUNT, DEFAULT_MAX_COUNT); + columnNumber = getIntent().getIntExtra(EXTRA_GRID_COLUMN, DEFAULT_COLUMN_NUMBER); + originalPhotos = getIntent().getStringArrayListExtra(EXTRA_ORIGINAL_PHOTOS); + + pickerFragment = (PhotoPickerFragment) getSupportFragmentManager().findFragmentByTag("tag"); + if (pickerFragment == null) { + pickerFragment = PhotoPickerFragment + .newInstance(showCamera, showGif, previewEnabled, columnNumber, maxCount, originalPhotos); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.container, pickerFragment, "tag") + .commit(); + getSupportFragmentManager().executePendingTransactions(); + } + + pickerFragment.getPhotoGridAdapter().setOnItemCheckListener(new OnItemCheckListener() { + @Override + public boolean onItemCheck(int position, Photo photo, final int selectedItemCount) { + +// ViewPropertyAnimator.animate(actionBar) +// .alpha(0) +// .setDuration(1000) +// .start(); +// menuDoneItem.setEnabled(selectedItemCount > 0); + + if (maxCount <= 1) { + List photos = pickerFragment.getPhotoGridAdapter().getSelectedPhotos(); + if (!photos.contains(photo.getPath())) { + photos.clear(); + pickerFragment.getPhotoGridAdapter().notifyDataSetChanged(); + } + return true; + } + + if (selectedItemCount > maxCount) { + Toast.makeText(getActivity(), getString(R.string.__picker_over_max_count_tips, maxCount), + LENGTH_LONG).show(); + return false; + } + if (selectedItemCount > 0) { +// menuDoneItem.setEnabled(true); + mTitleView.setHeadFuntionTxt(getString(R.string.__picker_done_with_count, selectedItemCount, maxCount)); +// menuDoneItem.setTitle( +// getString(R.string.__picker_done_with_count, originalPhotos.size(), maxCount)); + } else { + mTitleView.setHeadFuntionTxtGone(); + } + +// menuDoneItem.setTitle(getString(R.string.__picker_done_with_count, selectedItemCount, maxCount)); + return true; + } + }); + + } + + private void initTitleView() { + mTitleView = (TitleView) findViewById(R.id.photo_title); + mTitleView.setHead(R.string.__picker_title); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + List data = pickerFragment.getPhotoGridAdapter().getSelectedPhotos(); + Intent intent = new Intent(); + intent.putStringArrayListExtra("data", (ArrayList) data); + setResult(1001,intent); + finish(); + } + + @Override + public void onFunctionText() { + List data = pickerFragment.getPhotoGridAdapter().getSelectedPhotos(); + Intent intent = new Intent(); + intent.putStringArrayListExtra("data", (ArrayList) data); + setResult(1001,intent); + finish(); + } + }); + } + + + /** + * Overriding this method allows us to run our exit animation first, then exiting + * the activity when it complete. + */ + @Override + public void onBackPressed() { + if (imagePagerFragment != null && imagePagerFragment.isVisible()) { + imagePagerFragment.runExitAnimation(new Runnable() { + public void run() { + if (getSupportFragmentManager().getBackStackEntryCount() > 0) { + getSupportFragmentManager().popBackStack(); + } + } + }); + } else { + super.onBackPressed(); + } + } + + + public void addImagePagerFragment(ImagePagerFragment imagePagerFragment) { + this.imagePagerFragment = imagePagerFragment; + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.container, this.imagePagerFragment) + .addToBackStack(null) + .commit(); + } + +// @Override public boolean onCreateOptionsMenu(Menu menu) { +// if (!menuIsInflated) { +// getMenuInflater().inflate(R.menu.__picker_menu_picker, menu); +// menuDoneItem = menu.findItem(R.id.done); +// if (originalPhotos != null && originalPhotos.size() > 0) { +// menuDoneItem.setEnabled(true); +// menuDoneItem.setTitle( +// getString(R.string.__picker_done_with_count, originalPhotos.size(), maxCount)); +// } else { +// menuDoneItem.setEnabled(false); +// } +// menuIsInflated = true; +// return true; +// } +// return false; +// } +// +// +// @Override +// public boolean onOptionsItemSelected(MenuItem item) { +// if (item.getItemId() == android.R.id.home) { +// super.onBackPressed(); +// return true; +// } +// +// if (item.getItemId() == R.id.done) { +// Intent intent = new Intent(); +// ArrayList selectedPhotos = pickerFragment.getPhotoGridAdapter().getSelectedPhotoPaths(); +// intent.putStringArrayListExtra(KEY_SELECTED_PHOTOS, selectedPhotos); +// setResult(RESULT_OK, intent); +// finish(); +// return true; +// } +// +// return super.onOptionsItemSelected(item); +// } + + public PhotoPickerActivity getActivity() { + return this; + } + + public boolean isShowGif() { + return showGif; + } + + public void setShowGif(boolean showGif) { + this.showGif = showGif; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPreview.java b/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPreview.java new file mode 100644 index 0000000..c91a923 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/PhotoPreview.java @@ -0,0 +1,102 @@ +package com.yonsz.z1.mine.feedback; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.NonNull; + +import java.util.ArrayList; + +/** + * Created by Donglua on 16/6/25. + * Builder class to ease Intent setup. + */ +public class PhotoPreview { + + public final static int REQUEST_CODE = 666; + + public final static String EXTRA_CURRENT_ITEM = "current_item"; + public final static String EXTRA_PHOTOS = "photos"; + public final static String EXTRA_SHOW_DELETE = "show_delete"; + + + public static PhotoPreviewBuilder builder() { + return new PhotoPreviewBuilder(); + } + + + public static class PhotoPreviewBuilder { + private Bundle mPreviewOptionsBundle; + private Intent mPreviewIntent; + + public PhotoPreviewBuilder() { + mPreviewOptionsBundle = new Bundle(); + mPreviewIntent = new Intent(); + } + + /** + * Send the Intent from an Activity with a custom request code + * + * @param activity Activity to receive result + * @param requestCode requestCode for result + */ + public void start(@NonNull Activity activity, int requestCode) { + activity.startActivityForResult(getIntent(activity), requestCode); + } + + /** + * Send the Intent with a custom request code + * + * @param fragment Fragment to receive result + * @param requestCode requestCode for result + */ + public void start(@NonNull Context context, @NonNull android.support.v4.app.Fragment fragment, int requestCode) { + fragment.startActivityForResult(getIntent(context), requestCode); + } + + /** + * Send the Intent with a custom request code + * + * @param fragment Fragment to receive result + */ + public void start(@NonNull Context context, @NonNull android.support.v4.app.Fragment fragment) { + fragment.startActivityForResult(getIntent(context), REQUEST_CODE); + } + + /** + * Send the crop Intent from an Activity + * + * @param activity Activity to receive result + */ + public void start(@NonNull Activity activity) { + start(activity, REQUEST_CODE); + } + + /** + * Get Intent to start {@link PhotoPickerActivity} + * + * @return Intent for {@link PhotoPickerActivity} + */ + public Intent getIntent(@NonNull Context context) { + mPreviewIntent.setClass(context, PhotoPagerActivity.class); + mPreviewIntent.putExtras(mPreviewOptionsBundle); + return mPreviewIntent; + } + + public PhotoPreviewBuilder setPhotos(ArrayList photoPaths) { + mPreviewOptionsBundle.putStringArrayList(EXTRA_PHOTOS, photoPaths); + return this; + } + + public PhotoPreviewBuilder setCurrentItem(int currentItem) { + mPreviewOptionsBundle.putInt(EXTRA_CURRENT_ITEM, currentItem); + return this; + } + + public PhotoPreviewBuilder setShowDeleteButton(boolean showDeleteButton) { + mPreviewOptionsBundle.putBoolean(EXTRA_SHOW_DELETE, showDeleteButton); + return this; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/RecordPicAdapter.java b/app/src/main/java/com/yonsz/z1/mine/feedback/RecordPicAdapter.java new file mode 100644 index 0000000..a588fa6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/RecordPicAdapter.java @@ -0,0 +1,172 @@ +package com.yonsz.z1.mine.feedback; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; +import com.yonsz.z1.mine.feedback.entity.ImageEntity; +import com.yonsz.z1.mine.feedback.entity.PhotoDirectory; +import com.yonsz.z1.net.NetWorkUrl; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2019/12/24. + */ + +public class RecordPicAdapter extends RecyclerView.Adapter { + + + public int currentDirectoryIndex = 0; + protected List photoDirectories; + private List mDatas; + private Context mContext; + private boolean isHaveDelete; + private int itemHeight; + private OnRecyclerItemClickListener mOnItemClickListener; + private OnRecyclerItemClickListener mOnItemLong; + + public RecordPicAdapter(Context mContext, List mDatas, boolean isHaveDelete) { + this.mDatas = mDatas; + this.mContext = mContext; + this.isHaveDelete = isHaveDelete; + } + + @Override + public PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_pic, + parent, false); + return new PersonViewHolder(view); + } + + @Override + public void onBindViewHolder(PersonViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + if (mDatas.size() == 4) { + return mDatas != null ? mDatas.size() : 0; + } else { + return mDatas != null ? mDatas.size() : 0; + } + } + + public int getItemHeight() { + return itemHeight; + } + + //点击事件 + public void setmOnItemClickListener(OnRecyclerItemClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + this.mOnItemLong = mOnItemClickListener; + } + + public List getPhotosUrl() { + if (mDatas != null && mDatas.size() > 0) { + List photos = new ArrayList<>(); + String imageUrl = null; + for (ImageEntity imageEntity : mDatas) { + if (!TextUtils.isEmpty(imageEntity.getUrl())) { + imageUrl = NetWorkUrl.SERVER_URL + imageEntity.getUrl(); + + } else if (!TextUtils.isEmpty(imageEntity.getId())) { + imageUrl = "content://" + imageEntity.getId(); + } else if (!TextUtils.isEmpty(imageEntity.getLocalUri())) { + imageUrl = "file://" + imageEntity.getLocalUri(); + } else { + imageUrl = "drawable://" + R.drawable.icon_nav_add_black; + } + photos.add(imageUrl); + } + return photos; + } else { + return null; + } + } + + class PersonViewHolder extends RecyclerView.ViewHolder { + + private ImageView mTagImgae; + private ImageView ivClose; + + public PersonViewHolder(View itemView) { + super(itemView); + mTagImgae = (ImageView) itemView.findViewById(R.id.iv_pic); + ivClose = (ImageView) itemView.findViewById(R.id.iv_close); + // final View convertView = itemView; + // itemView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { + // @Override + // public boolean onPreDraw() { + // itemHeight=convertView.getMeasuredHeight(); + // return true; + // } + // }); + } + + public void setViews(final int position) { + if (isHaveDelete) { + ivClose.setVisibility(View.VISIBLE); + if (position == 0 && mDatas.size() < 4) { + ivClose.setVisibility(View.GONE); + } + } else { + ivClose.setVisibility(View.GONE); + } + + ImageEntity entity = mDatas.get(position); + String imageUrl = null; + if (!TextUtils.isEmpty(entity.getUrl())) { + imageUrl = NetWorkUrl.SERVER_URL + entity.getUrl(); + } else if (!TextUtils.isEmpty(entity.getId())) { + imageUrl = "content://" + entity.getId(); + } else if (entity.isNewRecord()) { + imageUrl = "drawable://" + R.drawable.icon_nav_add_black; + ivClose.setVisibility(View.GONE); + } else if (!TextUtils.isEmpty(entity.getLocalUri())) { + imageUrl = "file://" + entity.getLocalUri(); + } else { + imageUrl = "drawable://" + R.drawable.icon_nav_add_black; + } + ImageLoader.getInstance().displayImage(imageUrl, mTagImgae, + UniKongApp.getHiApp().getImageLoaderOption()); + + final List photos = getPhotosUrl(); + mTagImgae.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(mTagImgae, position, photos, 0); + } + } + }); + ivClose.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(mTagImgae, position, photos, 1); + } + } + }); + ivClose.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + if (mOnItemLong != null) { + mOnItemLong.onLongClick(mTagImgae, position); + } + return true; + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/FeedbackChooseA1Adapter.java b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/FeedbackChooseA1Adapter.java new file mode 100644 index 0000000..f32faf7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/FeedbackChooseA1Adapter.java @@ -0,0 +1,162 @@ +package com.yonsz.z1.mine.feedback.adapter; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.utils.AddressNameUtil; + +import java.util.List; + +import static com.yonsz.z1.net.Constans.GATE_WAY; + +/** + * Created by Administrator on 2018/9/12. + */ + +public class FeedbackChooseA1Adapter extends RecyclerView.Adapter { + private List mObjEntity; + private Context mContext; + private OnRecyclerClickListener mOnItemClickListener; + private int nowPosition = 100; + + public FeedbackChooseA1Adapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + public void setNowPosition(int position) { + nowPosition = position; + notifyDataSetChanged(); + } + + @Override + public FeedbackChooseA1Adapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_voice_manager, + parent, false); + return new FeedbackChooseA1Adapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(FeedbackChooseA1Adapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity == null ? 0 : mObjEntity.size(); + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView floorPosition; + private TextView homeName; + private TextView homePosition; + private ImageView iv_device_pic; + private CheckBox cb_device_choose; + private LinearLayout ll_root; + + public MessageViewHolder(View view) { + super(view); + homeName = (TextView) view.findViewById(R.id.tv_home_name); + homePosition = (TextView) view.findViewById(R.id.tv_home_position); + floorPosition = (TextView) view.findViewById(R.id.tv_floor_position); + iv_device_pic = (ImageView) view.findViewById(R.id.iv_device_pic); + cb_device_choose = (CheckBox) view.findViewById(R.id.cb_device_choose); + ll_root = (LinearLayout) view.findViewById(R.id.ll_root); + } + + public void setViews(final int position) { + // homeName.setText(mObjEntity.get(position).getName()); + if (null != mObjEntity.get(position).getDeviceType() && mObjEntity.get(position).getDeviceType().equals(GATE_WAY)) { + if (!TextUtils.isEmpty(mObjEntity.get(position).getFloorCode())) { + homeName.setText(mObjEntity.get(position).getFloorCode() + "楼" + AddressNameUtil.getAddressName(mObjEntity.get(position).getAddressId()) + "的" + mObjEntity.get(position).getDeviceName()); + } else { + homeName.setText(AddressNameUtil.getAddressName(mObjEntity.get(position).getAddressId()) + "的" + mObjEntity.get(position).getDeviceName()); + } + } else { + if (!TextUtils.isEmpty(mObjEntity.get(position).getFloor())) { + homeName.setText(mObjEntity.get(position).getFloor() + "楼" + AddressNameUtil.getAddressName(mObjEntity.get(position).getAddressId()) + "的" + mObjEntity.get(position).getName()); + } else { + homeName.setText(AddressNameUtil.getAddressName(mObjEntity.get(position).getAddressId()) + "的" + mObjEntity.get(position).getName()); + } + } + /*if (mObjEntity.get(position).getDeviceVersion().equals("2")) { + iv_device_pic.setImageResource(R.drawable.pic_a2); + } else if (mObjEntity.get(position).getConnectFlag().equals("0")) { + iv_device_pic.setImageResource(R.drawable.pic_a1); + } else { + iv_device_pic.setImageResource(R.drawable.pic_z1_online); + }*/ + if (null != mObjEntity.get(position).getDeviceType() && mObjEntity.get(position).getDeviceType().equals(GATE_WAY)) { + iv_device_pic.setImageResource(R.drawable.icon_gateway_dh); + } else { + com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(mObjEntity.get(position).getIcon(), iv_device_pic, UniKongApp.getHiApp().getImageLoaderOption()); + } + /*if (null != mObjEntity.get(position).getOnline() && mObjEntity.get(position).getOnline().equals("0")) { + iv_device_pic.setAlpha(0.5f); + cb_device_choose.setAlpha(0.5f); + homeName.setAlpha(0.5f); + homePosition.setAlpha(0.5f); + cb_device_choose.setEnabled(false); + } else { + iv_device_pic.setAlpha(1.0f); + cb_device_choose.setAlpha(1.0f); + homeName.setAlpha(1.0f); + homePosition.setAlpha(1.0f); + cb_device_choose.setEnabled(true); + }*/ + homePosition.setText(AddressNameUtil.getAddressName(mObjEntity.get(position).getAddressId())); + cb_device_choose.setVisibility(View.GONE); + if (nowPosition == position) { + cb_device_choose.setChecked(true); + } else { + cb_device_choose.setChecked(false); + } + cb_device_choose.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + nowPosition = position; + notifyDataSetChanged(); + } + } + }); + ll_root.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + nowPosition = position; + notifyDataSetChanged(); + } + /*if (!mObjEntity.get(position).getOnline().equals("1")) { + if (null != mObjEntity.get(position).getDeviceType()) { + if (mObjEntity.get(position).getDeviceType().equals("000")){ + ToastUtil.show(mContext, "设备已离线"); + } + } else { + ToastUtil.show(mContext, "设备已离线"); + } + }*/ + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/FeedbackChooseTypeAdapter.java b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/FeedbackChooseTypeAdapter.java new file mode 100644 index 0000000..884e93f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/FeedbackChooseTypeAdapter.java @@ -0,0 +1,82 @@ +package com.yonsz.z1.mine.feedback.adapter; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity5.FeedBackTypeEntity; +import com.yonsz.z1.listener.OnRecyclerClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2018/9/12. + */ + +public class FeedbackChooseTypeAdapter extends RecyclerView.Adapter { + private List mObjEntity; + private Context mContext; + private OnRecyclerClickListener mOnItemClickListener; + private int nowPosition = 100; + + public FeedbackChooseTypeAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + public void setNowPosition(int position) { + nowPosition = position; + notifyDataSetChanged(); + } + + @Override + public FeedbackChooseTypeAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tv_type_name, + parent, false); + return new FeedbackChooseTypeAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(FeedbackChooseTypeAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity == null ? 0 : mObjEntity.size(); + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView typeName; + + public MessageViewHolder(View view) { + super(view); + typeName = (TextView) view.findViewById(R.id.tv_type_name); + } + + public void setViews(final int position) { + + typeName.setText(mObjEntity.get(position).getName()); + + typeName.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + nowPosition = position; + notifyDataSetChanged(); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/ImgCheckVpAdapter.java b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/ImgCheckVpAdapter.java new file mode 100644 index 0000000..e78d915 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/ImgCheckVpAdapter.java @@ -0,0 +1,81 @@ +package com.yonsz.z1.mine.feedback.adapter; + +import android.os.Handler; +import android.os.Message; +import android.support.v4.view.PagerAdapter; +import android.view.View; +import android.view.ViewGroup; + +import java.util.List; + +/** + * Created by Administrator on 2019/12/24. + */ + +public class ImgCheckVpAdapter extends PagerAdapter { + + public static final int DYNAMIC_VIEWPAGER_ONCLICK = 2031;//动态图片轮播点击事件 + public static final int DYNAMIC_VIEWPAGER_ONLONGCLICK = 2032;//长按保存 + public static final int DYNAMIC_VIEWPAGER_SACE_SUCCESS = 2033;//保存成功 + public static final int DYNAMIC_VIEWPAGER_SACE_START = 2034;//保存成功 + private List viewList; + private Handler handler; + private List photos; + + public ImgCheckVpAdapter(List viewList, Handler handler, List photos) { + this.viewList = viewList; + this.handler = handler; + this.photos = photos; + } + + @Override + public int getCount() { + return viewList.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView(viewList.get(position)); + } + + @Override + public int getItemPosition(Object object) { + return super.getItemPosition(object); + } + + @Override + public Object instantiateItem(ViewGroup container, final int position) { + View v = viewList.get(position); + v.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Message message = handler.obtainMessage(); + message.what = DYNAMIC_VIEWPAGER_ONCLICK; + message.obj = position; + handler.sendMessage(message); + } + }); + v.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + Message message = handler.obtainMessage(); + message.what = DYNAMIC_VIEWPAGER_ONLONGCLICK; + message.obj = photos.get(position).toString(); + handler.sendMessage(message); + return false; + } + }); + + container.addView(viewList.get(position)); + // if (position >1){ + // container.removeView(viewList.get(position-1)); + // + // } + return viewList.get(position); + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/PhotoGridAdapter.java b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/PhotoGridAdapter.java new file mode 100644 index 0000000..0d08e92 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/PhotoGridAdapter.java @@ -0,0 +1,234 @@ +package com.yonsz.z1.mine.feedback.adapter; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.util.DisplayMetrics; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.ImageView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.RequestManager; +import com.yonsz.z1.R; +import com.yonsz.z1.mine.feedback.entity.Photo; +import com.yonsz.z1.mine.feedback.entity.PhotoDirectory; +import com.yonsz.z1.mine.feedback.event.OnItemCheckListener; +import com.yonsz.z1.mine.feedback.event.OnPhotoClickListener; +import com.yonsz.z1.mine.feedback.utils.AndroidLifecycleUtils; +import com.yonsz.z1.mine.feedback.utils.MediaStoreHelper; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by donglua on 15/5/31. + */ +public class PhotoGridAdapter extends SelectableAdapter { + + private LayoutInflater inflater; + private RequestManager glide; + + private OnItemCheckListener onItemCheckListener = null; + private OnPhotoClickListener onPhotoClickListener = null; + private View.OnClickListener onCameraClickListener = null; + + public final static int ITEM_TYPE_CAMERA = 100; + public final static int ITEM_TYPE_PHOTO = 101; + private final static int COL_NUMBER_DEFAULT = 3; + + private boolean hasCamera = true; + private boolean previewEnable = true; + + private int imageSize; + private int columnNumber = COL_NUMBER_DEFAULT; + + + public PhotoGridAdapter(Context context, RequestManager requestManager, List photoDirectories) { + this.photoDirectories = photoDirectories; + this.glide = requestManager; + inflater = LayoutInflater.from(context); + setColumnNumber(context, columnNumber); + } + + public PhotoGridAdapter(Context context, RequestManager requestManager, List photoDirectories, ArrayList orginalPhotos, int colNum) { + this(context, requestManager, photoDirectories); + setColumnNumber(context, colNum); + selectedPhotos = new ArrayList<>(); + if (orginalPhotos != null) selectedPhotos.addAll(orginalPhotos); + } + + private void setColumnNumber(Context context, int columnNumber) { + this.columnNumber = columnNumber; + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics metrics = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(metrics); + int widthPixels = metrics.widthPixels; + imageSize = widthPixels / columnNumber; + } + + @Override + public int getItemViewType(int position) { + return (showCamera() && position == 0) ? ITEM_TYPE_CAMERA : ITEM_TYPE_PHOTO; + } + + + @Override + public PhotoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + final View itemView = inflater.inflate(R.layout.__picker_item_photo, parent, false); + final PhotoViewHolder holder = new PhotoViewHolder(itemView); + if (viewType == ITEM_TYPE_CAMERA) { + holder.vSelected.setVisibility(View.GONE); + holder.ivPhoto.setScaleType(ImageView.ScaleType.CENTER); + + holder.ivPhoto.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (onCameraClickListener != null) { + onCameraClickListener.onClick(view); + } + } + }); + } + return holder; + } + + + @Override + public void onBindViewHolder(final PhotoViewHolder holder, int position) { + + if (getItemViewType(position) == ITEM_TYPE_PHOTO) { + + List photos = getCurrentPhotos(); + final Photo photo; + + if (showCamera()) { + photo = photos.get(position - 1); + } else { + photo = photos.get(position); + } + + boolean canLoadImage = AndroidLifecycleUtils.canLoadImage(holder.ivPhoto.getContext()); + + if (canLoadImage) { + glide + .load(new File(photo.getPath())) + .centerCrop() + .dontAnimate() + .thumbnail(0.5f) + .override(imageSize, imageSize) + .placeholder(R.drawable.img_bg) + .error(R.drawable.img_bg) + .into(holder.ivPhoto); + } + + final boolean isChecked = isSelected(photo); + + holder.vSelected.setSelected(isChecked); + holder.ivPhoto.setSelected(isChecked); + + holder.ivPhoto.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (onPhotoClickListener != null) { + int pos = holder.getAdapterPosition(); + if (previewEnable) { + onPhotoClickListener.onClick(view, pos, showCamera()); + } else { + holder.vSelected.performClick(); + } + } + } + }); + holder.vSelected.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + int pos = holder.getAdapterPosition(); + boolean isEnable = true; + + if (onItemCheckListener != null) { + isEnable = onItemCheckListener.onItemCheck(pos, photo, + getSelectedPhotos().size() + (isSelected(photo) ? -1: 1)); + } + if (isEnable) { + toggleSelection(photo); + notifyItemChanged(pos); + } + } + }); + + } else { + holder.ivPhoto.setImageResource(R.drawable.__picker_camera); + } + } + + + @Override + public int getItemCount() { + int photosCount = + photoDirectories.size() == 0 ? 0 : getCurrentPhotos().size(); + if (showCamera()) { + return photosCount + 1; + } + return photosCount; + } + + + public static class PhotoViewHolder extends RecyclerView.ViewHolder { + private ImageView ivPhoto; + private View vSelected; + + public PhotoViewHolder(View itemView) { + super(itemView); + ivPhoto = (ImageView) itemView.findViewById(R.id.iv_photo); + vSelected = itemView.findViewById(R.id.v_selected); + } + } + + + public void setOnItemCheckListener(OnItemCheckListener onItemCheckListener) { + this.onItemCheckListener = onItemCheckListener; + } + + + public void setOnPhotoClickListener(OnPhotoClickListener onPhotoClickListener) { + this.onPhotoClickListener = onPhotoClickListener; + } + + + public void setOnCameraClickListener(View.OnClickListener onCameraClickListener) { + this.onCameraClickListener = onCameraClickListener; + } + + + public ArrayList getSelectedPhotoPaths() { + ArrayList selectedPhotoPaths = new ArrayList<>(getSelectedItemCount()); + + for (String photo : selectedPhotos) { + selectedPhotoPaths.add(photo); + } + + return selectedPhotoPaths; + } + + + public void setShowCamera(boolean hasCamera) { + this.hasCamera = hasCamera; + } + + public void setPreviewEnable(boolean previewEnable) { + this.previewEnable = previewEnable; + } + + public boolean showCamera() { + return (hasCamera && currentDirectoryIndex == MediaStoreHelper.INDEX_ALL_PHOTOS); + } + + @Override + public void onViewRecycled(PhotoViewHolder holder) { + Glide.clear(holder.ivPhoto); + super.onViewRecycled(holder); + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/PhotoPagerAdapter.java b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/PhotoPagerAdapter.java new file mode 100644 index 0000000..7b6252c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/PhotoPagerAdapter.java @@ -0,0 +1,102 @@ +package com.yonsz.z1.mine.feedback.adapter; + +import android.app.Activity; +import android.content.Context; +import android.net.Uri; +import android.support.v4.view.PagerAdapter; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.RequestManager; +import com.yonsz.z1.R; +import com.yonsz.z1.mine.feedback.utils.AndroidLifecycleUtils; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + + +/** + * Created by donglua on 15/6/21. + */ +public class PhotoPagerAdapter extends PagerAdapter { + + private List paths = new ArrayList<>(); + private RequestManager mGlide; + + public PhotoPagerAdapter(RequestManager glide, List paths) { + this.paths = paths; + this.mGlide = glide; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + final Context context = container.getContext(); + View itemView = LayoutInflater.from(context) + .inflate(R.layout.__picker_picker_item_pager, container, false); + + final ImageView imageView = (ImageView) itemView.findViewById(R.id.iv_pager); + + final String path = paths.get(position); + final Uri uri; + if (path.startsWith("http")) { + uri = Uri.parse(path); + } else { + uri = Uri.fromFile(new File(path)); + } + + boolean canLoadImage = AndroidLifecycleUtils.canLoadImage(context); + + if (canLoadImage) { + mGlide.load(uri) + .thumbnail(0.1f) + .dontAnimate() + .dontTransform() + .override(800, 800) + .placeholder(R.drawable.__picker_ic_photo_black_48dp) + .error(R.drawable.__picker_ic_broken_image_black_48dp) + .into(imageView); + } + + imageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (context instanceof Activity) { + if (!((Activity) context).isFinishing()) { + ((Activity) context).onBackPressed(); + } + } + } + }); + + container.addView(itemView); + + return itemView; + } + + + @Override + public int getCount() { + return paths.size(); + } + + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView((View) object); + Glide.clear((View) object); + } + + @Override + public int getItemPosition (Object object) { return POSITION_NONE; } + +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/PopupDirectoryListAdapter.java b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/PopupDirectoryListAdapter.java new file mode 100644 index 0000000..e36666f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/PopupDirectoryListAdapter.java @@ -0,0 +1,89 @@ +package com.yonsz.z1.mine.feedback.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.RequestManager; +import com.yonsz.z1.R; +import com.yonsz.z1.mine.feedback.entity.PhotoDirectory; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by donglua on 15/6/28. + */ +public class PopupDirectoryListAdapter extends BaseAdapter { + + + private List directories = new ArrayList<>(); + private RequestManager glide; + + public PopupDirectoryListAdapter(RequestManager glide, List directories) { + this.directories = directories; + this.glide = glide; + } + + + @Override + public int getCount() { + return directories.size(); + } + + + @Override + public PhotoDirectory getItem(int position) { + return directories.get(position); + } + + + @Override + public long getItemId(int position) { + return directories.get(position).hashCode(); + } + + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + LayoutInflater mLayoutInflater = LayoutInflater.from(parent.getContext()); + convertView = mLayoutInflater.inflate(R.layout.__picker_item_directory, parent, false); + holder = new ViewHolder(convertView); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.bindData(directories.get(position)); + + return convertView; + } + + private class ViewHolder { + + public ImageView ivCover; + public TextView tvName; + public TextView tvCount; + + public ViewHolder(View rootView) { + ivCover = (ImageView) rootView.findViewById(R.id.iv_dir_cover); + tvName = (TextView) rootView.findViewById(R.id.tv_dir_name); + tvCount = (TextView) rootView.findViewById(R.id.tv_dir_count); + } + + public void bindData(PhotoDirectory directory) { + glide.load(directory.getCoverPath()) + .dontAnimate() + .thumbnail(0.1f) + .into(ivCover); + tvName.setText(directory.getName()); + tvCount.setText(tvCount.getContext().getString(R.string.__picker_image_count, directory.getPhotos().size())); + } + } + +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/SelectableAdapter.java b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/SelectableAdapter.java new file mode 100644 index 0000000..6494e3b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/adapter/SelectableAdapter.java @@ -0,0 +1,98 @@ +package com.yonsz.z1.mine.feedback.adapter; + +import android.support.v7.widget.RecyclerView; + +import com.yonsz.z1.mine.feedback.entity.Photo; +import com.yonsz.z1.mine.feedback.entity.PhotoDirectory; +import com.yonsz.z1.mine.feedback.event.Selectable; + +import java.util.ArrayList; +import java.util.List; + +public abstract class SelectableAdapter + extends RecyclerView.Adapter implements Selectable { + + private static final String TAG = SelectableAdapter.class.getSimpleName(); + + protected List photoDirectories; + protected List selectedPhotos; + + public int currentDirectoryIndex = 0; + + + public SelectableAdapter() { + photoDirectories = new ArrayList<>(); + selectedPhotos = new ArrayList<>(); + } + + + /** + * Indicates if the item at position where is selected + * + * @param photo Photo of the item to check + * @return true if the item is selected, false otherwise + */ + @Override + public boolean isSelected(Photo photo) { + return getSelectedPhotos().contains(photo.getPath()); + } + + /** + * Toggle the selection status of the item at a given position + * + * @param photo Photo of the item to toggle the selection status for + */ + @Override + public void toggleSelection(Photo photo) { + if (selectedPhotos.contains(photo.getPath())) { + selectedPhotos.remove(photo.getPath()); + } else { + selectedPhotos.add(photo.getPath()); + } + } + + + /** + * Clear the selection status for all items + */ + @Override + public void clearSelection() { + selectedPhotos.clear(); + } + + + /** + * Count the selected items + * + * @return Selected items count + */ + @Override + public int getSelectedItemCount() { + return selectedPhotos.size(); + } + + + public void setCurrentDirectoryIndex(int currentDirectoryIndex) { + this.currentDirectoryIndex = currentDirectoryIndex; + } + + + public List getCurrentPhotos() { + return photoDirectories.get(currentDirectoryIndex).getPhotos(); + } + + + public List getCurrentPhotoPaths() { + List currentPhotoPaths = new ArrayList<>(getCurrentPhotos().size()); + for (Photo photo : getCurrentPhotos()) { + currentPhotoPaths.add(photo.getPath()); + } + return currentPhotoPaths; + } + + + public List getSelectedPhotos() { + return selectedPhotos; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/entity/ImageEntity.java b/app/src/main/java/com/yonsz/z1/mine/feedback/entity/ImageEntity.java new file mode 100644 index 0000000..091a055 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/entity/ImageEntity.java @@ -0,0 +1,73 @@ +package com.yonsz.z1.mine.feedback.entity; + +import java.io.Serializable; + +/** + * Created by Administrator on 2019/12/24. + */ + +public class ImageEntity implements Serializable { + private String id; + private boolean isNewRecord; + private String createDate; + private String type; + private String url; + private String parentId; + private String localUri; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public boolean isNewRecord() { + return isNewRecord; + } + + public void setNewRecord(boolean newRecord) { + isNewRecord = newRecord; + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getLocalUri() { + return localUri; + } + + public void setLocalUri(String localUri) { + this.localUri = localUri; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/entity/Photo.java b/app/src/main/java/com/yonsz/z1/mine/feedback/entity/Photo.java new file mode 100644 index 0000000..8303c53 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/entity/Photo.java @@ -0,0 +1,49 @@ +package com.yonsz.z1.mine.feedback.entity; + +/** + * Created by donglua on 15/6/30. + */ +public class Photo { + + private int id; + private String path; + + public Photo(int id, String path) { + this.id = id; + this.path = path; + } + + public Photo() { + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Photo)) return false; + + Photo photo = (Photo) o; + + return id == photo.id; + } + + @Override + public int hashCode() { + return id; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/entity/PhotoDirectory.java b/app/src/main/java/com/yonsz/z1/mine/feedback/entity/PhotoDirectory.java new file mode 100644 index 0000000..d580b2f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/entity/PhotoDirectory.java @@ -0,0 +1,124 @@ +package com.yonsz.z1.mine.feedback.entity; + +import android.text.TextUtils; +import com.yonsz.z1.mine.feedback.utils.FileUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by donglua on 15/6/28. + */ +public class PhotoDirectory { + + private String id; + private String coverPath; + private String name; + private long dateAdded; + private List photos = new ArrayList<>(); + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof PhotoDirectory)) return false; + + PhotoDirectory directory = (PhotoDirectory) o; + + boolean hasId = !TextUtils.isEmpty(id); + boolean otherHasId = !TextUtils.isEmpty(directory.id); + + if (hasId && otherHasId) { + if (!TextUtils.equals(id, directory.id)) { + return false; + } + + return TextUtils.equals(name, directory.name); + } + + return false; + } + + @Override + public int hashCode() { + if (TextUtils.isEmpty(id)) { + if (TextUtils.isEmpty(name)) { + return 0; + } + + return name.hashCode(); + } + + int result = id.hashCode(); + + if (TextUtils.isEmpty(name)) { + return result; + } + + result = 31 * result + name.hashCode(); + return result; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getCoverPath() { + return coverPath; + } + + public void setCoverPath(String coverPath) { + this.coverPath = coverPath; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getDateAdded() { + return dateAdded; + } + + public void setDateAdded(long dateAdded) { + this.dateAdded = dateAdded; + } + + public List getPhotos() { + return photos; + } + + public void setPhotos(List photos) { + if (photos == null) return; + for (int i = 0, j = 0, num = photos.size(); i < num; i++) { + Photo p = photos.get(j); + if (p == null || !FileUtils.fileIsExists(p.getPath())) { + photos.remove(j); + } else { + j++; + } + } + this.photos = photos; + } + + public List getPhotoPaths() { + List paths = new ArrayList<>(photos.size()); + for (Photo photo : photos) { + paths.add(photo.getPath()); + } + return paths; + } + + public void addPhoto(int id, String path) { + if (FileUtils.fileIsExists(path)) { + photos.add(new Photo(id, path)); + } + } + +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/event/OnItemCheckListener.java b/app/src/main/java/com/yonsz/z1/mine/feedback/event/OnItemCheckListener.java new file mode 100644 index 0000000..da6d737 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/event/OnItemCheckListener.java @@ -0,0 +1,20 @@ +package com.yonsz.z1.mine.feedback.event; + + +import com.yonsz.z1.mine.feedback.entity.Photo; + +/** + * Created by donglua on 15/6/20. + */ +public interface OnItemCheckListener { + + /*** + * + * @param position 所选图片的位置 + * @param path 所选的图片 + * @param selectedItemCount 已选数量 + * @return enable check + */ + boolean onItemCheck(int position, Photo path, int selectedItemCount); + +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/event/OnPhotoClickListener.java b/app/src/main/java/com/yonsz/z1/mine/feedback/event/OnPhotoClickListener.java new file mode 100644 index 0000000..a491d71 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/event/OnPhotoClickListener.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2015. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.yonsz.z1.mine.feedback.event; + +import android.view.View; + +/** + * Created by donglua on 15/6/20. + */ +public interface OnPhotoClickListener { + + void onClick(View v, int position, boolean showCamera); +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/event/Selectable.java b/app/src/main/java/com/yonsz/z1/mine/feedback/event/Selectable.java new file mode 100644 index 0000000..d0e88d2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/event/Selectable.java @@ -0,0 +1,39 @@ +package com.yonsz.z1.mine.feedback.event; + + +import com.yonsz.z1.mine.feedback.entity.Photo; + +/** + * Created by donglua on 15/6/30. + */ +public interface Selectable { + + + /** + * Indicates if the item at position position is selected + * + * @param photo Photo of the item to check + * @return true if the item is selected, false otherwise + */ + boolean isSelected(Photo photo); + + /** + * Toggle the selection status of the item at a given position + * + * @param photo Photo of the item to toggle the selection status for + */ + void toggleSelection(Photo photo); + + /** + * Clear the selection status for all items + */ + void clearSelection(); + + /** + * Count the selected items + * + * @return Selected items count + */ + int getSelectedItemCount(); + +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/fragment/ImagePagerFragment.java b/app/src/main/java/com/yonsz/z1/mine/feedback/fragment/ImagePagerFragment.java new file mode 100644 index 0000000..5b118fb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/fragment/ImagePagerFragment.java @@ -0,0 +1,322 @@ +package com.yonsz.z1.mine.feedback.fragment; + + +import android.animation.ObjectAnimator; +import android.graphics.ColorMatrix; +import android.graphics.ColorMatrixColorFilter; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v4.view.ViewPager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.DecelerateInterpolator; + +import com.bumptech.glide.Glide; +import com.nineoldandroids.animation.Animator; +import com.nineoldandroids.view.ViewHelper; +import com.nineoldandroids.view.ViewPropertyAnimator; +import com.yonsz.z1.R; +import com.yonsz.z1.mine.feedback.adapter.PhotoPagerAdapter; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by donglua on 15/6/21. + */ +public class ImagePagerFragment extends Fragment { + + public final static String ARG_PATH = "PATHS"; + public final static String ARG_CURRENT_ITEM = "ARG_CURRENT_ITEM"; + + private ArrayList paths; + private ViewPager mViewPager; + private PhotoPagerAdapter mPagerAdapter; + + public final static long ANIM_DURATION = 200L; + + public final static String ARG_THUMBNAIL_TOP = "THUMBNAIL_TOP"; + public final static String ARG_THUMBNAIL_LEFT = "THUMBNAIL_LEFT"; + public final static String ARG_THUMBNAIL_WIDTH = "THUMBNAIL_WIDTH"; + public final static String ARG_THUMBNAIL_HEIGHT = "THUMBNAIL_HEIGHT"; + public final static String ARG_HAS_ANIM = "HAS_ANIM"; + + private int thumbnailTop = 0; + private int thumbnailLeft = 0; + private int thumbnailWidth = 0; + private int thumbnailHeight = 0; + + private boolean hasAnim = false; + + private final ColorMatrix colorizerMatrix = new ColorMatrix(); + + private int currentItem = 0; + + + public static ImagePagerFragment newInstance(List paths, int currentItem) { + + ImagePagerFragment f = new ImagePagerFragment(); + + Bundle args = new Bundle(); + args.putStringArray(ARG_PATH, paths.toArray(new String[paths.size()])); + args.putInt(ARG_CURRENT_ITEM, currentItem); + args.putBoolean(ARG_HAS_ANIM, false); + + f.setArguments(args); + + return f; + } + + + public static ImagePagerFragment newInstance(List paths, int currentItem, int[] screenLocation, int thumbnailWidth, int thumbnailHeight) { + + ImagePagerFragment f = newInstance(paths, currentItem); + + f.getArguments().putInt(ARG_THUMBNAIL_LEFT, screenLocation[0]); + f.getArguments().putInt(ARG_THUMBNAIL_TOP, screenLocation[1]); + f.getArguments().putInt(ARG_THUMBNAIL_WIDTH, thumbnailWidth); + f.getArguments().putInt(ARG_THUMBNAIL_HEIGHT, thumbnailHeight); + f.getArguments().putBoolean(ARG_HAS_ANIM, true); + + return f; + } + + + public void setPhotos(List paths, int currentItem) { + this.paths.clear(); + this.paths.addAll(paths); + this.currentItem = currentItem; + + mViewPager.setCurrentItem(currentItem); + mViewPager.getAdapter().notifyDataSetChanged(); + } + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + paths = new ArrayList<>(); + + Bundle bundle = getArguments(); + + if (bundle != null) { + String[] pathArr = bundle.getStringArray(ARG_PATH); + paths.clear(); + if (pathArr != null) { + + paths = new ArrayList<>(Arrays.asList(pathArr)); + } + + hasAnim = bundle.getBoolean(ARG_HAS_ANIM); + currentItem = bundle.getInt(ARG_CURRENT_ITEM); + thumbnailTop = bundle.getInt(ARG_THUMBNAIL_TOP); + thumbnailLeft = bundle.getInt(ARG_THUMBNAIL_LEFT); + thumbnailWidth = bundle.getInt(ARG_THUMBNAIL_WIDTH); + thumbnailHeight = bundle.getInt(ARG_THUMBNAIL_HEIGHT); + } + + mPagerAdapter = new PhotoPagerAdapter(Glide.with(this), paths); + } + + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View rootView = inflater.inflate(R.layout.__picker_picker_fragment_image_pager, container, false); + + mViewPager = (ViewPager) rootView.findViewById(R.id.vp_photos); + mViewPager.setAdapter(mPagerAdapter); + mViewPager.setCurrentItem(currentItem); + mViewPager.setOffscreenPageLimit(5); + + // Only run the animation if we're coming from the parent activity, not if + // we're recreated automatically by the window manager (e.g., device rotation) + if (savedInstanceState == null && hasAnim) { + ViewTreeObserver observer = mViewPager.getViewTreeObserver(); + observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + + mViewPager.getViewTreeObserver().removeOnPreDrawListener(this); + + // Figure out where the thumbnail and full size versions are, relative + // to the screen and each other + int[] screenLocation = new int[2]; + mViewPager.getLocationOnScreen(screenLocation); + thumbnailLeft = thumbnailLeft - screenLocation[0]; + thumbnailTop = thumbnailTop - screenLocation[1]; + + runEnterAnimation(); + + return true; + } + }); + } + + + mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + hasAnim = currentItem == position; + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + + return rootView; + } + + + /** + * The enter animation scales the picture in from its previous thumbnail + * size/location, colorizing it in parallel. In parallel, the background of the + * activity is fading in. When the pictue is in place, the text description + * drops down. + */ + private void runEnterAnimation() { + final long duration = ANIM_DURATION; + + // Set starting values for properties we're going to animate. These + // values scale and position the full size version down to the thumbnail + // size/location, from which we'll animate it back up + ViewHelper.setPivotX(mViewPager, 0); + ViewHelper.setPivotY(mViewPager, 0); + ViewHelper.setScaleX(mViewPager, (float) thumbnailWidth / mViewPager.getWidth()); + ViewHelper.setScaleY(mViewPager, (float) thumbnailHeight / mViewPager.getHeight()); + ViewHelper.setTranslationX(mViewPager, thumbnailLeft); + ViewHelper.setTranslationY(mViewPager, thumbnailTop); + + // Animate scale and translation to go from thumbnail to full size + ViewPropertyAnimator.animate(mViewPager) + .setDuration(duration) + .scaleX(1) + .scaleY(1) + .translationX(0) + .translationY(0) + .setInterpolator(new DecelerateInterpolator()); + + // Fade in the black background + ObjectAnimator bgAnim = ObjectAnimator.ofInt(mViewPager.getBackground(), "alpha", 0, 255); + bgAnim.setDuration(duration); + bgAnim.start(); + + // Animate a color filter to take the image from grayscale to full color. + // This happens in parallel with the image scaling and moving into place. + ObjectAnimator colorizer = ObjectAnimator.ofFloat(ImagePagerFragment.this, + "saturation", 0, 1); + colorizer.setDuration(duration); + colorizer.start(); + + } + + + /** + * The exit animation is basically a reverse of the enter animation, except that if + * the orientation has changed we simply scale the picture back into the center of + * the screen. + * + * @param endAction This action gets run after the animation completes (this is + * when we actually switch activities) + */ + public void runExitAnimation(final Runnable endAction) { + + if (!getArguments().getBoolean(ARG_HAS_ANIM, false) || !hasAnim) { + endAction.run(); + return; + } + + final long duration = ANIM_DURATION; + + // Animate image back to thumbnail size/location + + ViewPropertyAnimator.animate(mViewPager) + .setDuration(duration) + .setInterpolator(new AccelerateInterpolator()) + .scaleX((float) thumbnailWidth / mViewPager.getWidth()) + .scaleY((float) thumbnailHeight / mViewPager.getHeight()) + .translationX(thumbnailLeft) + .translationY(thumbnailTop) + .setListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + } + @Override + public void onAnimationEnd(Animator animation) { + endAction.run(); + } + @Override + public void onAnimationCancel(Animator animation) { + } + @Override + public void onAnimationRepeat(Animator animation) { + } + }); + + // Fade out background + ObjectAnimator bgAnim = ObjectAnimator.ofInt(mViewPager.getBackground(), "alpha", 0); + bgAnim.setDuration(duration); + bgAnim.start(); + + // Animate a color filter to take the image back to grayscale, + // in parallel with the image scaling and moving into place. + ObjectAnimator colorizer = + ObjectAnimator.ofFloat(ImagePagerFragment.this, "saturation", 1, 0); + colorizer.setDuration(duration); + colorizer.start(); + } + + + /** + * This is called by the colorizing animator. It sets a saturation factor that is then + * passed onto a filter on the picture's drawable. + * @param value saturation + */ + public void setSaturation(float value) { + colorizerMatrix.setSaturation(value); + ColorMatrixColorFilter colorizerFilter = new ColorMatrixColorFilter(colorizerMatrix); + mViewPager.getBackground().setColorFilter(colorizerFilter); + } + + + public ViewPager getViewPager() { + return mViewPager; + } + + + public ArrayList getPaths() { + return paths; + } + + + public int getCurrentItem() { + return mViewPager.getCurrentItem(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + + paths.clear(); + paths = null; + + if (mViewPager != null) { + mViewPager.setAdapter(null); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/fragment/PhotoPickerFragment.java b/app/src/main/java/com/yonsz/z1/mine/feedback/fragment/PhotoPickerFragment.java new file mode 100644 index 0000000..4a8a65b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/fragment/PhotoPickerFragment.java @@ -0,0 +1,336 @@ +package com.yonsz.z1.mine.feedback.fragment; + +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.provider.MediaStore; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.ListPopupWindow; +import android.support.v7.widget.OrientationHelper; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.StaggeredGridLayoutManager; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.Button; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.RequestManager; +import com.yonsz.z1.R; +import com.yonsz.z1.mine.feedback.PhotoPickerActivity; +import com.yonsz.z1.mine.feedback.adapter.PhotoGridAdapter; +import com.yonsz.z1.mine.feedback.adapter.PopupDirectoryListAdapter; +import com.yonsz.z1.mine.feedback.entity.Photo; +import com.yonsz.z1.mine.feedback.entity.PhotoDirectory; +import com.yonsz.z1.mine.feedback.event.OnPhotoClickListener; +import com.yonsz.z1.mine.feedback.utils.AndroidLifecycleUtils; +import com.yonsz.z1.mine.feedback.utils.ImageCaptureManager; +import com.yonsz.z1.mine.feedback.utils.MediaStoreHelper; +import com.yonsz.z1.mine.feedback.utils.PermissionsConstant; +import com.yonsz.z1.mine.feedback.utils.PermissionsUtils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static android.app.Activity.RESULT_OK; +import static com.yonsz.z1.mine.feedback.PhotoPicker.DEFAULT_COLUMN_NUMBER; +import static com.yonsz.z1.mine.feedback.PhotoPicker.EXTRA_PREVIEW_ENABLED; +import static com.yonsz.z1.mine.feedback.PhotoPicker.EXTRA_SHOW_GIF; +import static com.yonsz.z1.mine.feedback.utils.MediaStoreHelper.INDEX_ALL_PHOTOS; + +/** + * Created by donglua on 15/5/31. + */ +public class PhotoPickerFragment extends Fragment { + + private ImageCaptureManager captureManager; + private PhotoGridAdapter photoGridAdapter; + + private PopupDirectoryListAdapter listAdapter; + //所有photos的路径 + private List directories; + //传入的已选照片 + private ArrayList originalPhotos; + + private int SCROLL_THRESHOLD = 30; + int column; + //目录弹出框的一次最多显示的目录数目 + public static int COUNT_MAX = 4; + private final static String EXTRA_CAMERA = "camera"; + private final static String EXTRA_COLUMN = "column"; + private final static String EXTRA_COUNT = "count"; + private final static String EXTRA_GIF = "gif"; + private final static String EXTRA_ORIGIN = "origin"; + private ListPopupWindow listPopupWindow; + private RequestManager mGlideRequestManager; + + public static PhotoPickerFragment newInstance(boolean showCamera, boolean showGif, + boolean previewEnable, int column, int maxCount, ArrayList originalPhotos) { + Bundle args = new Bundle(); + args.putBoolean(EXTRA_CAMERA, showCamera); + args.putBoolean(EXTRA_GIF, showGif); + args.putBoolean(EXTRA_PREVIEW_ENABLED, previewEnable); + args.putInt(EXTRA_COLUMN, column); + args.putInt(EXTRA_COUNT, maxCount); + args.putStringArrayList(EXTRA_ORIGIN, originalPhotos); + PhotoPickerFragment fragment = new PhotoPickerFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setRetainInstance(true); + + mGlideRequestManager = Glide.with(this); + + directories = new ArrayList<>(); + originalPhotos = getArguments().getStringArrayList(EXTRA_ORIGIN); + + column = getArguments().getInt(EXTRA_COLUMN, DEFAULT_COLUMN_NUMBER); + boolean showCamera = getArguments().getBoolean(EXTRA_CAMERA, true); + boolean previewEnable = getArguments().getBoolean(EXTRA_PREVIEW_ENABLED, true); + + photoGridAdapter = new PhotoGridAdapter(getActivity(), mGlideRequestManager, directories, originalPhotos, column); + photoGridAdapter.setShowCamera(showCamera); + photoGridAdapter.setPreviewEnable(previewEnable); + + Bundle mediaStoreArgs = new Bundle(); + + boolean showGif = getArguments().getBoolean(EXTRA_GIF); + mediaStoreArgs.putBoolean(EXTRA_SHOW_GIF, showGif); + MediaStoreHelper.getPhotoDirs(getActivity(), mediaStoreArgs, + new MediaStoreHelper.PhotosResultCallback() { + @Override + public void onResultCallback(List dirs) { + directories.clear(); + directories.addAll(dirs); + photoGridAdapter.notifyDataSetChanged(); + listAdapter.notifyDataSetChanged(); + adjustHeight(); + } + }); + + captureManager = new ImageCaptureManager(getActivity()); + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View rootView = inflater.inflate(R.layout.__picker_fragment_photo_picker, container, false); + + listAdapter = new PopupDirectoryListAdapter(mGlideRequestManager, directories); + + RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.rv_photos); + StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(column, OrientationHelper.VERTICAL); + layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS); + recyclerView.setLayoutManager(layoutManager); + recyclerView.setAdapter(photoGridAdapter); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + + final Button btSwitchDirectory = (Button) rootView.findViewById(R.id.button); + + listPopupWindow = new ListPopupWindow(getActivity()); + listPopupWindow.setWidth(ListPopupWindow.MATCH_PARENT); + listPopupWindow.setAnchorView(btSwitchDirectory); + listPopupWindow.setAdapter(listAdapter); + listPopupWindow.setModal(true); + listPopupWindow.setDropDownGravity(Gravity.BOTTOM); + + listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + listPopupWindow.dismiss(); + + PhotoDirectory directory = directories.get(position); + + btSwitchDirectory.setText(directory.getName()); + + photoGridAdapter.setCurrentDirectoryIndex(position); + photoGridAdapter.notifyDataSetChanged(); + } + }); + + //判断是否拍照还是看照片 + photoGridAdapter.setOnPhotoClickListener(new OnPhotoClickListener() { + @Override + public void onClick(View v, int position, boolean showCamera) { + if (position == 0 && showCamera){ + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + + startActivityForResult(intent, 1); + }else{ + final int index = showCamera ? position - 1 : position; + + List photos = photoGridAdapter.getCurrentPhotoPaths(); + + int[] screenLocation = new int[2]; + v.getLocationOnScreen(screenLocation); + ImagePagerFragment imagePagerFragment = + ImagePagerFragment.newInstance(photos, index, screenLocation, v.getWidth(), + v.getHeight()); + + ((PhotoPickerActivity) getActivity()).addImagePagerFragment(imagePagerFragment); + } + + } + }); + + //打开相机拍照 + photoGridAdapter.setOnCameraClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + if (!PermissionsUtils.checkCameraPermission(PhotoPickerFragment.this)) return; + if (!PermissionsUtils.checkWriteStoragePermission(PhotoPickerFragment.this)) return; + openCamera(); + } + }); + + btSwitchDirectory.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + + if (listPopupWindow.isShowing()) { + listPopupWindow.dismiss(); + } else if (!getActivity().isFinishing()) { + adjustHeight(); + listPopupWindow.show(); + } + } + }); + + + recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + // Log.d(">>> Picker >>>", "dy = " + dy); + if (Math.abs(dy) > SCROLL_THRESHOLD) { + mGlideRequestManager.pauseRequests(); + } else { + resumeRequestsIfNotDestroyed(); + } + } + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + resumeRequestsIfNotDestroyed(); + } + } + }); + + return rootView; + } + + private void openCamera() { + try { + Intent intent = captureManager.dispatchTakePictureIntent(); + startActivityForResult(intent, ImageCaptureManager.REQUEST_TAKE_PHOTO); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == ImageCaptureManager.REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) { + + if (captureManager == null) { + FragmentActivity activity = getActivity(); + captureManager = new ImageCaptureManager(activity); + } + + captureManager.galleryAddPic(); + if (directories.size() > 0) { + String path = captureManager.getCurrentPhotoPath(); + PhotoDirectory directory = directories.get(INDEX_ALL_PHOTOS); + directory.getPhotos().add(INDEX_ALL_PHOTOS, new Photo(path.hashCode(), path)); + directory.setCoverPath(path); + photoGridAdapter.notifyDataSetChanged(); + } + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + switch (requestCode) { + case PermissionsConstant.REQUEST_CAMERA: + case PermissionsConstant.REQUEST_EXTERNAL_WRITE: + if (PermissionsUtils.checkWriteStoragePermission(this) && + PermissionsUtils.checkCameraPermission(this)) { + openCamera(); + } + break; + } + } + } + + public PhotoGridAdapter getPhotoGridAdapter() { + return photoGridAdapter; + } + + + @Override + public void onSaveInstanceState(Bundle outState) { + captureManager.onSaveInstanceState(outState); + super.onSaveInstanceState(outState); + } + + + @Override + public void onViewStateRestored(Bundle savedInstanceState) { + captureManager.onRestoreInstanceState(savedInstanceState); + super.onViewStateRestored(savedInstanceState); + } + + public ArrayList getSelectedPhotoPaths() { + return photoGridAdapter.getSelectedPhotoPaths(); + } + + public void adjustHeight() { + if (listAdapter == null) return; + int count = listAdapter.getCount(); + count = count < COUNT_MAX ? count : COUNT_MAX; + if (listPopupWindow != null) { + listPopupWindow.setHeight(count * getResources().getDimensionPixelOffset(R.dimen.__picker_item_directory_height)); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + + if (directories == null) { + return; + } + + for (PhotoDirectory directory : directories) { + directory.getPhotoPaths().clear(); + directory.getPhotos().clear(); + directory.setPhotos(null); + } + directories.clear(); + directories = null; + } + + private void resumeRequestsIfNotDestroyed() { + if (!AndroidLifecycleUtils.canLoadImage(this)) { + return; + } + + mGlideRequestManager.resumeRequests(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/utils/AndroidLifecycleUtils.java b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/AndroidLifecycleUtils.java new file mode 100644 index 0000000..1497972 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/AndroidLifecycleUtils.java @@ -0,0 +1,47 @@ +package com.yonsz.z1.mine.feedback.utils; + +import android.app.Activity; +import android.content.Context; +import android.os.Build; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; + +public class AndroidLifecycleUtils { + public static boolean canLoadImage(Fragment fragment) { + if (fragment == null) { + return true; + } + + FragmentActivity activity = fragment.getActivity(); + + return canLoadImage(activity); + } + + public static boolean canLoadImage(Context context) { + if (context == null) { + return true; + } + + if (!(context instanceof Activity)) { + return true; + } + + Activity activity = (Activity) context; + return canLoadImage(activity); + } + + public static boolean canLoadImage(Activity activity) { + if (activity == null) { + return true; + } + + boolean destroyed = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && + activity.isDestroyed(); + + if (destroyed || activity.isFinishing()) { + return false; + } + + return true; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/utils/FileUtils.java b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/FileUtils.java new file mode 100644 index 0000000..d19f971 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/FileUtils.java @@ -0,0 +1,28 @@ +package com.yonsz.z1.mine.feedback.utils; + +import android.util.Log; + +import java.io.File; + +/** + * Created by myc on 2016/12/14. + * More Code on 1101255053@qq.com + * Description: + */ +public class FileUtils { + public static boolean fileIsExists(String path) { + if (path == null || path.trim().length() <= 0) { + return false; + } + try { + File f = new File(path); + if (!f.exists()) { + return false; + } + } catch (Exception e) { + return false; + } + Log.e("TMG",path+"file not exists"); + return true; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/utils/ImageCaptureManager.java b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/ImageCaptureManager.java new file mode 100644 index 0000000..170bd72 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/ImageCaptureManager.java @@ -0,0 +1,118 @@ +package com.yonsz.z1.mine.feedback.utils; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.provider.MediaStore; +import android.support.v4.content.FileProvider; +import android.text.TextUtils; +import android.util.Log; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + + +/** + * Created by donglua on 15/6/23. + *

+ *

+ * http://developer.android.com/training/camera/photobasics.html + */ +public class ImageCaptureManager { + + private final static String CAPTURED_PHOTO_PATH_KEY = "mCurrentPhotoPath"; + public static final int REQUEST_TAKE_PHOTO = 1; + + private String mCurrentPhotoPath; + private Context mContext; + + public ImageCaptureManager(Context mContext) { + this.mContext = mContext; + } + + private File createImageFile() throws IOException { + // Create an image file name + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.ENGLISH).format(new Date()); + String imageFileName = "JPEG_" + timeStamp + ".jpg"; + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); + + if (!storageDir.exists()) { + if (!storageDir.mkdir()) { + Log.e("TAG", "Throwing Errors...."); + throw new IOException(); + } + } + + File image = new File(storageDir, imageFileName); + + // Save a file: path for use with ACTION_VIEW intents + mCurrentPhotoPath = image.getAbsolutePath(); + return image; + } + + + public Intent dispatchTakePictureIntent() throws IOException { + Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + // Ensure that there's a camera activity to handle the intent + if (takePictureIntent.resolveActivity(mContext.getPackageManager()) != null) { + // Create the File where the photo should go + File file = createImageFile(); + Uri photoFile; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + String authority = mContext.getApplicationInfo().packageName + ".fileprovider"; + photoFile = FileProvider.getUriForFile(this.mContext.getApplicationContext(), authority, file); + /*photoFile = FileProvider.getUriForFile( + mContext, + authority, + file);*/ + } else { + photoFile = Uri.fromFile(file); + } + + // Continue only if the File was successfully created + if (photoFile != null) { + takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoFile); + } + } + return takePictureIntent; + } + + + public void galleryAddPic() { + Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); + + if (TextUtils.isEmpty(mCurrentPhotoPath)) { + return; + } + + File f = new File(mCurrentPhotoPath); + Uri contentUri = Uri.fromFile(f); + mediaScanIntent.setData(contentUri); + mContext.sendBroadcast(mediaScanIntent); + } + + + public String getCurrentPhotoPath() { + return mCurrentPhotoPath; + } + + + public void onSaveInstanceState(Bundle savedInstanceState) { + if (savedInstanceState != null && mCurrentPhotoPath != null) { + savedInstanceState.putString(CAPTURED_PHOTO_PATH_KEY, mCurrentPhotoPath); + } + } + + public void onRestoreInstanceState(Bundle savedInstanceState) { + if (savedInstanceState != null && savedInstanceState.containsKey(CAPTURED_PHOTO_PATH_KEY)) { + mCurrentPhotoPath = savedInstanceState.getString(CAPTURED_PHOTO_PATH_KEY); + } + } + +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/utils/MediaStoreHelper.java b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/MediaStoreHelper.java new file mode 100644 index 0000000..136d2a3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/MediaStoreHelper.java @@ -0,0 +1,107 @@ +package com.yonsz.z1.mine.feedback.utils; + +import android.content.Context; +import android.database.Cursor; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.Loader; + +import com.yonsz.z1.R; +import com.yonsz.z1.mine.feedback.PhotoPicker; +import com.yonsz.z1.mine.feedback.entity.PhotoDirectory; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import static android.provider.BaseColumns._ID; +import static android.provider.MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME; +import static android.provider.MediaStore.Images.ImageColumns.BUCKET_ID; +import static android.provider.MediaStore.MediaColumns.DATA; +import static android.provider.MediaStore.MediaColumns.DATE_ADDED; +import static android.provider.MediaStore.MediaColumns.SIZE; + +/** + * Created by donglua on 15/5/31. + */ +public class MediaStoreHelper { + + public final static int INDEX_ALL_PHOTOS = 0; + + + public static void getPhotoDirs(FragmentActivity activity, Bundle args, PhotosResultCallback resultCallback) { + activity.getSupportLoaderManager() + .initLoader(0, args, new PhotoDirLoaderCallbacks(activity, resultCallback)); + } + + private static class PhotoDirLoaderCallbacks implements LoaderManager.LoaderCallbacks { + + private WeakReference context; + private PhotosResultCallback resultCallback; + + public PhotoDirLoaderCallbacks(Context context, PhotosResultCallback resultCallback) { + this.context = new WeakReference<>(context); + this.resultCallback = resultCallback; + } + + @Override + public Loader onCreateLoader(int id, Bundle args) { + return new PhotoDirectoryLoader(context.get(), args.getBoolean(PhotoPicker.EXTRA_SHOW_GIF, false)); + } + + @Override + public void onLoadFinished(Loader loader, Cursor data) { + + if (data == null) return; + List directories = new ArrayList<>(); + PhotoDirectory photoDirectoryAll = new PhotoDirectory(); + photoDirectoryAll.setName(context.get().getString(R.string.__picker_all_image)); + photoDirectoryAll.setId("ALL"); + + while (data.moveToNext()) { + + int imageId = data.getInt(data.getColumnIndexOrThrow(_ID)); + String bucketId = data.getString(data.getColumnIndexOrThrow(BUCKET_ID)); + String name = data.getString(data.getColumnIndexOrThrow(BUCKET_DISPLAY_NAME)); + String path = data.getString(data.getColumnIndexOrThrow(DATA)); + long size = data.getInt(data.getColumnIndexOrThrow(SIZE)); + + if (size < 1) continue; + + PhotoDirectory photoDirectory = new PhotoDirectory(); + photoDirectory.setId(bucketId); + photoDirectory.setName(name); + + if (!directories.contains(photoDirectory)) { + photoDirectory.setCoverPath(path); + photoDirectory.addPhoto(imageId, path); + photoDirectory.setDateAdded(data.getLong(data.getColumnIndexOrThrow(DATE_ADDED))); + directories.add(photoDirectory); + } else { + directories.get(directories.indexOf(photoDirectory)).addPhoto(imageId, path); + } + + photoDirectoryAll.addPhoto(imageId, path); + } + if (photoDirectoryAll.getPhotoPaths().size() > 0) { + photoDirectoryAll.setCoverPath(photoDirectoryAll.getPhotoPaths().get(0)); + } + directories.add(INDEX_ALL_PHOTOS, photoDirectoryAll); + if (resultCallback != null) { + resultCallback.onResultCallback(directories); + } + } + + @Override + public void onLoaderReset(Loader loader) { + + } + } + + + public interface PhotosResultCallback { + void onResultCallback(List directories); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/utils/PermissionsConstant.java b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/PermissionsConstant.java new file mode 100644 index 0000000..ca2f68c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/PermissionsConstant.java @@ -0,0 +1,29 @@ +package com.yonsz.z1.mine.feedback.utils; + +import android.Manifest; +import android.os.Build; +import android.support.annotation.RequiresApi; + +/** + * Created by donglua on 2016/10/19. + */ + +public class PermissionsConstant { + + public static final int REQUEST_CAMERA = 1; + public static final int REQUEST_EXTERNAL_READ = 2; + public static final int REQUEST_EXTERNAL_WRITE = 3; + + public static final String[] PERMISSIONS_CAMERA = { + Manifest.permission.CAMERA, + Manifest.permission.WRITE_EXTERNAL_STORAGE + }; + public static final String[] PERMISSIONS_EXTERNAL_WRITE = { + Manifest.permission.WRITE_EXTERNAL_STORAGE + }; + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + public static final String[] PERMISSIONS_EXTERNAL_READ = { + Manifest.permission.READ_EXTERNAL_STORAGE + }; +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/utils/PermissionsUtils.java b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/PermissionsUtils.java new file mode 100644 index 0000000..1caa4bd --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/PermissionsUtils.java @@ -0,0 +1,63 @@ +package com.yonsz.z1.mine.feedback.utils; + +import android.app.Activity; +import android.content.pm.PackageManager; +import android.os.Build; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.Fragment; +import android.support.v4.content.ContextCompat; + +import static android.Manifest.permission.CAMERA; +import static android.Manifest.permission.READ_EXTERNAL_STORAGE; +import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; + +/** + * Created by donglua on 2016/10/19. + */ + +public class PermissionsUtils { + + public static boolean checkReadStoragePermission(Activity activity) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { + return true; + } + int readStoragePermissionState = + ContextCompat.checkSelfPermission(activity, READ_EXTERNAL_STORAGE); + + boolean readStoragePermissionGranted = readStoragePermissionState == PackageManager.PERMISSION_GRANTED; + + if (!readStoragePermissionGranted) { + ActivityCompat.requestPermissions(activity, + PermissionsConstant.PERMISSIONS_EXTERNAL_READ, + PermissionsConstant.REQUEST_EXTERNAL_READ); + } + return readStoragePermissionGranted; + } + + public static boolean checkWriteStoragePermission(Fragment fragment) { + + int writeStoragePermissionState = + ContextCompat.checkSelfPermission(fragment.getContext(), WRITE_EXTERNAL_STORAGE); + + boolean writeStoragePermissionGranted = writeStoragePermissionState == PackageManager.PERMISSION_GRANTED; + + if (!writeStoragePermissionGranted) { + fragment.requestPermissions(PermissionsConstant.PERMISSIONS_EXTERNAL_WRITE, + PermissionsConstant.REQUEST_EXTERNAL_WRITE); + } + return writeStoragePermissionGranted; + } + + public static boolean checkCameraPermission(Fragment fragment) { + int cameraPermissionState = ContextCompat.checkSelfPermission(fragment.getContext(), CAMERA); + + boolean cameraPermissionGranted = cameraPermissionState == PackageManager.PERMISSION_GRANTED; + + if (!cameraPermissionGranted) { + fragment.requestPermissions(PermissionsConstant.PERMISSIONS_CAMERA, + PermissionsConstant.REQUEST_CAMERA); + } + return cameraPermissionGranted; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/utils/PhotoDirectoryLoader.java b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/PhotoDirectoryLoader.java new file mode 100644 index 0000000..7961b3f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/utils/PhotoDirectoryLoader.java @@ -0,0 +1,49 @@ +package com.yonsz.z1.mine.feedback.utils; + +import android.content.Context; +import android.net.Uri; +import android.provider.MediaStore.Images.Media; +import android.support.v4.content.CursorLoader; + +import static android.provider.MediaStore.MediaColumns.MIME_TYPE; + +/** + * Created by 黄东鲁 on 15/6/28. + */ +public class PhotoDirectoryLoader extends CursorLoader { + + final String[] IMAGE_PROJECTION = { + Media._ID, + Media.DATA, + Media.BUCKET_ID, + Media.BUCKET_DISPLAY_NAME, + Media.DATE_ADDED, + Media.SIZE + }; + + public PhotoDirectoryLoader(Context context, boolean showGif) { + super(context); + + setProjection(IMAGE_PROJECTION); + setUri(Media.EXTERNAL_CONTENT_URI); + setSortOrder(Media.DATE_ADDED + " DESC"); + + setSelection( + MIME_TYPE + "=? or " + MIME_TYPE + "=? or "+ MIME_TYPE + "=? " + (showGif ? ("or " + MIME_TYPE + "=?") : "")); + String[] selectionArgs; + if (showGif) { + selectionArgs = new String[] { "image/jpeg", "image/png", "image/jpg","image/gif" }; + } else { + selectionArgs = new String[] { "image/jpeg", "image/png", "image/jpg" }; + } + setSelectionArgs(selectionArgs); + } + + + private PhotoDirectoryLoader(Context context, Uri uri, String[] projection, String selection, + String[] selectionArgs, String sortOrder) { + super(context, uri, projection, selection, selectionArgs, sortOrder); + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/widget/FeedbackAiPopupWindow.java b/app/src/main/java/com/yonsz/z1/mine/feedback/widget/FeedbackAiPopupWindow.java new file mode 100644 index 0000000..9c811e9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/widget/FeedbackAiPopupWindow.java @@ -0,0 +1,100 @@ +package com.yonsz.z1.mine.feedback.widget; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.PopupWindow; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.mine.feedback.adapter.FeedbackChooseA1Adapter; + +import java.util.List; + +public class FeedbackAiPopupWindow extends PopupWindow implements CompoundButton.OnCheckedChangeListener, View.OnClickListener { + + private Context context; + private View contentView; + private DeviceSimpleEntity.DataBean condition; + private OnCompleteListener onCompleteListener; + private RecyclerView mRecyclerView; + private List mFeedBackTypeEntities; + private FeedbackChooseA1Adapter mChooseA1Adapter; + private TextView tv_position_cancel; + + public FeedbackAiPopupWindow(Context context, List mFeedBackTypeEntities, OnCompleteListener onCompleteListener) { + super(context); + this.context = context; + this.onCompleteListener = onCompleteListener; + this.mFeedBackTypeEntities = mFeedBackTypeEntities; + init(); + } + + private void init() { + contentView = LayoutInflater.from(context).inflate(R.layout.pop_feedback, null); + contentView.findViewById(R.id.tv_position_cancel).setOnClickListener(this); + + mRecyclerView = contentView.findViewById(R.id.recyclerView); + tv_position_cancel = contentView.findViewById(R.id.tv_position_cancel); + mChooseA1Adapter = new FeedbackChooseA1Adapter(context, mFeedBackTypeEntities); + GridLayoutManager manage1 = new GridLayoutManager(context, 3); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setLayoutManager(manage1); + mRecyclerView.setAdapter(mChooseA1Adapter); + + + setContentView(contentView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + // 设置可触 + this.setFocusable(true); + ColorDrawable dw = new ColorDrawable(0x80000000); + this.setBackgroundDrawable(dw); + + tv_position_cancel.setText("选择设备"); + mChooseA1Adapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + if (onCompleteListener != null) { + onCompleteListener.onComplete(mFeedBackTypeEntities.get(position)); + } + dismiss(); + } + }); + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_position_sure: //完成 + if (onCompleteListener != null) { + onCompleteListener.onComplete(condition); + } + dismiss(); + break; + case R.id.tv_position_cancel: //重置 + dismiss(); + break; + } + } + + public void setOnCompleteListener(OnCompleteListener onCompleteListener) { + this.onCompleteListener = onCompleteListener; + } + + public interface OnCompleteListener { + void onComplete(DeviceSimpleEntity.DataBean condition); + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/widget/FeedbackPopupWindow.java b/app/src/main/java/com/yonsz/z1/mine/feedback/widget/FeedbackPopupWindow.java new file mode 100644 index 0000000..1038183 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/widget/FeedbackPopupWindow.java @@ -0,0 +1,96 @@ +package com.yonsz.z1.mine.feedback.widget; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.PopupWindow; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity5.FeedBackTypeEntity; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.mine.feedback.adapter.FeedbackChooseTypeAdapter; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; + +import java.util.List; + +public class FeedbackPopupWindow extends PopupWindow implements CompoundButton.OnCheckedChangeListener, View.OnClickListener { + + private Context context; + private View contentView; + private FeedBackTypeEntity.DataBean condition; + private OnCompleteListener onCompleteListener; + private RecyclerView mRecyclerView; + private List mFeedBackTypeEntities; + private FeedbackChooseTypeAdapter mChooseA1Adapter; + + public FeedbackPopupWindow(Context context, List mFeedBackTypeEntities,OnCompleteListener onCompleteListener) { + super(context); + this.context = context; + this.onCompleteListener = onCompleteListener; + this.mFeedBackTypeEntities = mFeedBackTypeEntities; + init(); + } + + private void init() { + contentView = LayoutInflater.from(context).inflate(R.layout.pop_feedback, null); + contentView.findViewById(R.id.tv_position_cancel).setOnClickListener(this); + + mRecyclerView = contentView.findViewById(R.id.recyclerView); + mChooseA1Adapter = new FeedbackChooseTypeAdapter(context, mFeedBackTypeEntities); + RecyclerViewNoBugLinearLayoutManager manage1 = new RecyclerViewNoBugLinearLayoutManager(context); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setLayoutManager(manage1); + mRecyclerView.setAdapter(mChooseA1Adapter); + + + setContentView(contentView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + // 设置可触 + this.setFocusable(true); + ColorDrawable dw = new ColorDrawable(0x80000000); + this.setBackgroundDrawable(dw); + + mChooseA1Adapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + if (onCompleteListener != null) { + onCompleteListener.onComplete(mFeedBackTypeEntities.get(position)); + } + dismiss(); + } + }); + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_position_sure: //完成 + if (onCompleteListener != null) { + onCompleteListener.onComplete(condition); + } + dismiss(); + break; + case R.id.tv_position_cancel: //重置 + dismiss(); + break; + } + } + + public void setOnCompleteListener(OnCompleteListener onCompleteListener) { + this.onCompleteListener = onCompleteListener; + } + + public interface OnCompleteListener { + void onComplete(FeedBackTypeEntity.DataBean condition); + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/widget/SquareItemLayout.java b/app/src/main/java/com/yonsz/z1/mine/feedback/widget/SquareItemLayout.java new file mode 100644 index 0000000..519f3f8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/widget/SquareItemLayout.java @@ -0,0 +1,31 @@ +package com.yonsz.z1.mine.feedback.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.RelativeLayout; + +/** + * Created by donglua on 15/6/21. + */ +public class SquareItemLayout extends RelativeLayout { + public SquareItemLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public SquareItemLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public SquareItemLayout(Context context) { + super(context); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec)); + int childWidthSize = getMeasuredWidth(); + heightMeasureSpec = + widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/feedback/widget/TouchImageView.java b/app/src/main/java/com/yonsz/z1/mine/feedback/widget/TouchImageView.java new file mode 100644 index 0000000..5b0dd28 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/feedback/widget/TouchImageView.java @@ -0,0 +1,1267 @@ +/* + * TouchImageView.java + * By: Michael Ortiz + * Updated By: Patrick Lackemacher + * Updated By: Babay88 + * Updated By: @ipsilondev + * Updated By: hank-cp + * Updated By: singpolyma + * ------------------- + * Extends Android ImageView to include pinch zooming, panning, fling and double tap zoom. + */ + +package com.yonsz.z1.mine.feedback.widget; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.PointF; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.os.Bundle; +import android.os.Parcelable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.widget.ImageView; +import android.widget.OverScroller; +import android.widget.Scroller; + +public class TouchImageView extends ImageView { + + private static final String DEBUG = "DEBUG"; + + // + // SuperMin and SuperMax multipliers. Determine how much the image can be + // zoomed below or above the zoom boundaries, before animating back to the + // min/max zoom boundary. + // + private static final float SUPER_MIN_MULTIPLIER = .75f; + private static final float SUPER_MAX_MULTIPLIER = 1.25f; + + // + // Scale of image ranges from minScale to maxScale, where minScale == 1 + // when the image is stretched to fit view. + // + private float normalizedScale; + + // + // Matrix applied to image. MSCALE_X and MSCALE_Y should always be equal. + // MTRANS_X and MTRANS_Y are the other values used. prevMatrix is the matrix + // saved prior to the screen rotating. + // + private Matrix matrix, prevMatrix; + + private enum State {NONE, DRAG, ZOOM, FLING, ANIMATE_ZOOM} + + ; + private State state; + + private float minScale; + private float maxScale; + private float superMinScale; + private float superMaxScale; + private float[] m; + + private Context context; + private Fling fling; + + private ScaleType mScaleType; + + private boolean imageRenderedAtLeastOnce; + private boolean onDrawReady; + + private ZoomVariables delayedZoomVariables; + + // + // Size of view and previous view size (ie before rotation) + // + private int viewWidth, viewHeight, prevViewWidth, prevViewHeight; + + // + // Size of image when it is stretched to fit view. Before and After rotation. + // + private float matchViewWidth, matchViewHeight, prevMatchViewWidth, prevMatchViewHeight; + + private ScaleGestureDetector mScaleDetector; + private GestureDetector mGestureDetector; + private GestureDetector.OnDoubleTapListener doubleTapListener = null; + private OnTouchListener userTouchListener = null; + private OnTouchImageViewListener touchImageViewListener = null; + + public TouchImageView(Context context) { + super(context); + sharedConstructing(context); + } + + public TouchImageView(Context context, AttributeSet attrs) { + super(context, attrs); + sharedConstructing(context); + } + + public TouchImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + sharedConstructing(context); + } + + private void sharedConstructing(Context context) { + super.setClickable(true); + this.context = context; + mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); + mGestureDetector = new GestureDetector(context, new GestureListener()); + matrix = new Matrix(); + prevMatrix = new Matrix(); + m = new float[9]; + normalizedScale = 1; + if (mScaleType == null) { + mScaleType = ScaleType.FIT_CENTER; + } + minScale = 1; + maxScale = 3; + superMinScale = SUPER_MIN_MULTIPLIER * minScale; + superMaxScale = SUPER_MAX_MULTIPLIER * maxScale; + setImageMatrix(matrix); + setScaleType(ScaleType.MATRIX); + setState(State.NONE); + onDrawReady = false; + super.setOnTouchListener(new PrivateOnTouchListener()); + } + + @Override + public void setOnTouchListener(OnTouchListener l) { + userTouchListener = l; + } + + public void setOnTouchImageViewListener(OnTouchImageViewListener l) { + touchImageViewListener = l; + } + + public void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener l) { + doubleTapListener = l; + } + + @Override + public void setImageResource(int resId) { + super.setImageResource(resId); + savePreviousImageValues(); + fitImageToView(); + } + + @Override + public void setImageBitmap(Bitmap bm) { + super.setImageBitmap(bm); + savePreviousImageValues(); + fitImageToView(); + } + + @Override + public void setImageDrawable(Drawable drawable) { + super.setImageDrawable(drawable); + savePreviousImageValues(); + fitImageToView(); + } + + @Override + public void setImageURI(Uri uri) { + super.setImageURI(uri); + savePreviousImageValues(); + fitImageToView(); + } + + @Override + public void setScaleType(ScaleType type) { + if (type == ScaleType.FIT_START || type == ScaleType.FIT_END) { + throw new UnsupportedOperationException( + "TouchImageView does not support FIT_START or FIT_END"); + } + if (type == ScaleType.MATRIX) { + super.setScaleType(ScaleType.MATRIX); + } else { + mScaleType = type; + if (onDrawReady) { + // + // If the image is already rendered, scaleType has been called programmatically + // and the TouchImageView should be updated with the new scaleType. + // + setZoom(this); + } + } + } + + @Override + public ScaleType getScaleType() { + return mScaleType; + } + + /** + * Returns false if image is in initial, unzoomed state. False, otherwise. + * + * @return true if image is zoomed + */ + public boolean isZoomed() { + return normalizedScale != 1; + } + + /** + * Return a Rect representing the zoomed image. + * + * @return rect representing zoomed image + */ + public RectF getZoomedRect() { + if (mScaleType == ScaleType.FIT_XY) { + throw new UnsupportedOperationException("getZoomedRect() not supported with FIT_XY"); + } + PointF topLeft = transformCoordTouchToBitmap(0, 0, true); + PointF bottomRight = transformCoordTouchToBitmap(viewWidth, viewHeight, true); + + float w = getDrawable().getIntrinsicWidth(); + float h = getDrawable().getIntrinsicHeight(); + return new RectF(topLeft.x / w, topLeft.y / h, bottomRight.x / w, bottomRight.y / h); + } + + /** + * Save the current matrix and view dimensions + * in the prevMatrix and prevView variables. + */ + private void savePreviousImageValues() { + if (matrix != null && viewHeight != 0 && viewWidth != 0) { + matrix.getValues(m); + prevMatrix.setValues(m); + prevMatchViewHeight = matchViewHeight; + prevMatchViewWidth = matchViewWidth; + prevViewHeight = viewHeight; + prevViewWidth = viewWidth; + } + } + + @Override + public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable("instanceState", super.onSaveInstanceState()); + bundle.putFloat("saveScale", normalizedScale); + bundle.putFloat("matchViewHeight", matchViewHeight); + bundle.putFloat("matchViewWidth", matchViewWidth); + bundle.putInt("viewWidth", viewWidth); + bundle.putInt("viewHeight", viewHeight); + matrix.getValues(m); + bundle.putFloatArray("matrix", m); + bundle.putBoolean("imageRendered", imageRenderedAtLeastOnce); + return bundle; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + if (state instanceof Bundle) { + Bundle bundle = (Bundle) state; + normalizedScale = bundle.getFloat("saveScale"); + m = bundle.getFloatArray("matrix"); + prevMatrix.setValues(m); + prevMatchViewHeight = bundle.getFloat("matchViewHeight"); + prevMatchViewWidth = bundle.getFloat("matchViewWidth"); + prevViewHeight = bundle.getInt("viewHeight"); + prevViewWidth = bundle.getInt("viewWidth"); + imageRenderedAtLeastOnce = bundle.getBoolean("imageRendered"); + super.onRestoreInstanceState(bundle.getParcelable("instanceState")); + return; + } + + super.onRestoreInstanceState(state); + } + + @Override + protected void onDraw(Canvas canvas) { + onDrawReady = true; + imageRenderedAtLeastOnce = true; + if (delayedZoomVariables != null) { + setZoom(delayedZoomVariables.scale, delayedZoomVariables.focusX, delayedZoomVariables.focusY, + delayedZoomVariables.scaleType); + delayedZoomVariables = null; + } + super.onDraw(canvas); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + savePreviousImageValues(); + } + + /** + * Get the max zoom multiplier. + * + * @return max zoom multiplier. + */ + public float getMaxZoom() { + return maxScale; + } + + /** + * Set the max zoom multiplier. Default value: 3. + * + * @param max max zoom multiplier. + */ + public void setMaxZoom(float max) { + maxScale = max; + superMaxScale = SUPER_MAX_MULTIPLIER * maxScale; + } + + /** + * Get the min zoom multiplier. + * + * @return min zoom multiplier. + */ + public float getMinZoom() { + return minScale; + } + + /** + * Get the current zoom. This is the zoom relative to the initial + * scale, not the original resource. + * + * @return current zoom multiplier. + */ + public float getCurrentZoom() { + return normalizedScale; + } + + /** + * Set the min zoom multiplier. Default value: 1. + * + * @param min min zoom multiplier. + */ + public void setMinZoom(float min) { + minScale = min; + superMinScale = SUPER_MIN_MULTIPLIER * minScale; + } + + /** + * Reset zoom and translation to initial state. + */ + public void resetZoom() { + normalizedScale = 1; + fitImageToView(); + } + + /** + * Set zoom to the specified scale. Image will be centered by default. + */ + public void setZoom(float scale) { + setZoom(scale, 0.5f, 0.5f); + } + + /** + * Set zoom to the specified scale. Image will be centered around the point + * (focusX, focusY). These floats range from 0 to 1 and denote the focus point + * as a fraction from the left and top of the view. For example, the top left + * corner of the image would be (0, 0). And the bottom right corner would be (1, 1). + * @param scale + * @param focusX + * @param focusY + */ + public void setZoom(float scale, float focusX, float focusY) { + setZoom(scale, focusX, focusY, mScaleType); + } + + /** + * Set zoom to the specified scale. Image will be centered around the point + * (focusX, focusY). These floats range from 0 to 1 and denote the focus point + * as a fraction from the left and top of the view. For example, the top left + * corner of the image would be (0, 0). And the bottom right corner would be (1, 1). + * @param scale + * @param focusX + * @param focusY + * @param scaleType + */ + public void setZoom(float scale, float focusX, float focusY, ScaleType scaleType) { + // + // setZoom can be called before the image is on the screen, but at this point, + // image and view sizes have not yet been calculated in onMeasure. Thus, we should + // delay calling setZoom until the view has been measured. + // + if (!onDrawReady) { + delayedZoomVariables = new ZoomVariables(scale, focusX, focusY, scaleType); + return; + } + + if (scaleType != mScaleType) { + setScaleType(scaleType); + } + resetZoom(); + scaleImage(scale, viewWidth / 2, viewHeight / 2, true); + matrix.getValues(m); + m[Matrix.MTRANS_X] = -((focusX * getImageWidth()) - (viewWidth * 0.5f)); + m[Matrix.MTRANS_Y] = -((focusY * getImageHeight()) - (viewHeight * 0.5f)); + matrix.setValues(m); + fixTrans(); + setImageMatrix(matrix); + } + + /** + * Set zoom parameters equal to another TouchImageView. Including scale, position, + * and ScaleType. + * @param img TouchImageView + */ + public void setZoom(TouchImageView img) { + PointF center = img.getScrollPosition(); + setZoom(img.getCurrentZoom(), center.x, center.y, img.getScaleType()); + } + + /** + * Return the point at the center of the zoomed image. The PointF coordinates range + * in value between 0 and 1 and the focus point is denoted as a fraction from the left + * and top of the view. For example, the top left corner of the image would be (0, 0). + * And the bottom right corner would be (1, 1). + * + * @return PointF representing the scroll position of the zoomed image. + */ + public PointF getScrollPosition() { + Drawable drawable = getDrawable(); + if (drawable == null) { + return null; + } + int drawableWidth = drawable.getIntrinsicWidth(); + int drawableHeight = drawable.getIntrinsicHeight(); + + PointF point = transformCoordTouchToBitmap(viewWidth / 2, viewHeight / 2, true); + point.x /= drawableWidth; + point.y /= drawableHeight; + return point; + } + + /** + * Set the focus point of the zoomed image. The focus points are denoted as a fraction from the + * left and top of the view. The focus points can range in value between 0 and 1. + * @param focusX X + * @param focusY Y + */ + public void setScrollPosition(float focusX, float focusY) { + setZoom(normalizedScale, focusX, focusY); + } + + /** + * Performs boundary checking and fixes the image matrix if it + * is out of bounds. + */ + private void fixTrans() { + matrix.getValues(m); + float transX = m[Matrix.MTRANS_X]; + float transY = m[Matrix.MTRANS_Y]; + + float fixTransX = getFixTrans(transX, viewWidth, getImageWidth()); + float fixTransY = getFixTrans(transY, viewHeight, getImageHeight()); + + if (fixTransX != 0 || fixTransY != 0) { + matrix.postTranslate(fixTransX, fixTransY); + } + } + + /** + * When transitioning from zooming from focus to zoom from center (or vice versa) + * the image can become unaligned within the view. This is apparent when zooming + * quickly. When the content size is less than the view size, the content will often + * be centered incorrectly within the view. fixScaleTrans first calls fixTrans() and + * then makes sure the image is centered correctly within the view. + */ + private void fixScaleTrans() { + fixTrans(); + matrix.getValues(m); + if (getImageWidth() < viewWidth) { + m[Matrix.MTRANS_X] = (viewWidth - getImageWidth()) / 2; + } + + if (getImageHeight() < viewHeight) { + m[Matrix.MTRANS_Y] = (viewHeight - getImageHeight()) / 2; + } + matrix.setValues(m); + } + + private float getFixTrans(float trans, float viewSize, float contentSize) { + float minTrans, maxTrans; + + if (contentSize <= viewSize) { + minTrans = 0; + maxTrans = viewSize - contentSize; + } else { + minTrans = viewSize - contentSize; + maxTrans = 0; + } + + if (trans < minTrans) return -trans + minTrans; + if (trans > maxTrans) return -trans + maxTrans; + return 0; + } + + private float getFixDragTrans(float delta, float viewSize, float contentSize) { + if (contentSize <= viewSize) { + return 0; + } + return delta; + } + + private float getImageWidth() { + return matchViewWidth * normalizedScale; + } + + private float getImageHeight() { + return matchViewHeight * normalizedScale; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + Drawable drawable = getDrawable(); + if (drawable == null || drawable.getIntrinsicWidth() == 0 + || drawable.getIntrinsicHeight() == 0) { + setMeasuredDimension(0, 0); + return; + } + + int drawableWidth = drawable.getIntrinsicWidth(); + int drawableHeight = drawable.getIntrinsicHeight(); + int widthSize = MeasureSpec.getSize(widthMeasureSpec); + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int heightSize = MeasureSpec.getSize(heightMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + viewWidth = setViewSize(widthMode, widthSize, drawableWidth); + viewHeight = setViewSize(heightMode, heightSize, drawableHeight); + + // + // Set view dimensions + // + setMeasuredDimension(viewWidth, viewHeight); + + // + // Fit content within view + // + fitImageToView(); + } + + /** + * If the normalizedScale is equal to 1, then the image is made to fit the screen. Otherwise, + * it is made to fit the screen according to the dimensions of the previous image matrix. This + * allows the image to maintain its zoom after rotation. + */ + private void fitImageToView() { + Drawable drawable = getDrawable(); + if (drawable == null || drawable.getIntrinsicWidth() == 0 + || drawable.getIntrinsicHeight() == 0) { + return; + } + if (matrix == null || prevMatrix == null) { + return; + } + + int drawableWidth = drawable.getIntrinsicWidth(); + int drawableHeight = drawable.getIntrinsicHeight(); + + // + // Scale image for view + // + float scaleX = (float) viewWidth / drawableWidth; + float scaleY = (float) viewHeight / drawableHeight; + + switch (mScaleType) { + case CENTER: + scaleX = scaleY = 1; + break; + + case CENTER_CROP: + scaleX = scaleY = Math.max(scaleX, scaleY); + break; + + case CENTER_INSIDE: + scaleX = scaleY = Math.min(1, Math.min(scaleX, scaleY)); + + case FIT_CENTER: + scaleX = scaleY = Math.min(scaleX, scaleY); + break; + + case FIT_XY: + break; + + default: + // + // FIT_START and FIT_END not supported + // + throw new UnsupportedOperationException( + "TouchImageView does not support FIT_START or FIT_END"); + } + + // + // Center the image + // + float redundantXSpace = viewWidth - (scaleX * drawableWidth); + float redundantYSpace = viewHeight - (scaleY * drawableHeight); + matchViewWidth = viewWidth - redundantXSpace; + matchViewHeight = viewHeight - redundantYSpace; + if (!isZoomed() && !imageRenderedAtLeastOnce) { + // + // Stretch and center image to fit view + // + matrix.setScale(scaleX, scaleY); + matrix.postTranslate(redundantXSpace / 2, redundantYSpace / 2); + normalizedScale = 1; + } else { + // + // These values should never be 0 or we will set viewWidth and viewHeight + // to NaN in translateMatrixAfterRotate. To avoid this, call savePreviousImageValues + // to set them equal to the current values. + // + if (prevMatchViewWidth == 0 || prevMatchViewHeight == 0) { + savePreviousImageValues(); + } + + prevMatrix.getValues(m); + + // + // Rescale Matrix after rotation + // + m[Matrix.MSCALE_X] = matchViewWidth / drawableWidth * normalizedScale; + m[Matrix.MSCALE_Y] = matchViewHeight / drawableHeight * normalizedScale; + + // + // TransX and TransY from previous matrix + // + float transX = m[Matrix.MTRANS_X]; + float transY = m[Matrix.MTRANS_Y]; + + // + // Width + // + float prevActualWidth = prevMatchViewWidth * normalizedScale; + float actualWidth = getImageWidth(); + translateMatrixAfterRotate(Matrix.MTRANS_X, transX, prevActualWidth, actualWidth, + prevViewWidth, viewWidth, drawableWidth); + + // + // Height + // + float prevActualHeight = prevMatchViewHeight * normalizedScale; + float actualHeight = getImageHeight(); + translateMatrixAfterRotate(Matrix.MTRANS_Y, transY, prevActualHeight, actualHeight, + prevViewHeight, viewHeight, drawableHeight); + + // + // Set the matrix to the adjusted scale and translate values. + // + matrix.setValues(m); + } + fixTrans(); + setImageMatrix(matrix); + } + + /** + * Set view dimensions based on layout params + */ + private int setViewSize(int mode, int size, int drawableWidth) { + int viewSize; + switch (mode) { + case MeasureSpec.EXACTLY: + viewSize = size; + break; + + case MeasureSpec.AT_MOST: + viewSize = Math.min(drawableWidth, size); + break; + + case MeasureSpec.UNSPECIFIED: + viewSize = drawableWidth; + break; + + default: + viewSize = size; + break; + } + return viewSize; + } + + /** + * After rotating, the matrix needs to be translated. This function finds the area of image + * which was previously centered and adjusts translations so that is again the center, + * post-rotation. + * + * @param axis Matrix.MTRANS_X or Matrix.MTRANS_Y + * @param trans the value of trans in that axis before the rotation + * @param prevImageSize the width/height of the image before the rotation + * @param imageSize width/height of the image after rotation + * @param prevViewSize width/height of view before rotation + * @param viewSize width/height of view after rotation + * @param drawableSize width/height of drawable + */ + private void translateMatrixAfterRotate(int axis, float trans, float prevImageSize, + float imageSize, int prevViewSize, int viewSize, int drawableSize) { + if (imageSize < viewSize) { + // + // The width/height of image is less than the view's width/height. Center it. + // + m[axis] = (viewSize - (drawableSize * m[Matrix.MSCALE_X])) * 0.5f; + } else if (trans > 0) { + // + // The image is larger than the view, but was not before rotation. Center it. + // + m[axis] = -((imageSize - viewSize) * 0.5f); + } else { + // + // Find the area of the image which was previously centered in the view. Determine its distance + // from the left/top side of the view as a fraction of the entire image's width/height. Use that percentage + // to calculate the trans in the new view width/height. + // + float percentage = (Math.abs(trans) + (0.5f * prevViewSize)) / prevImageSize; + m[axis] = -((percentage * imageSize) - (viewSize * 0.5f)); + } + } + + private void setState(State state) { + this.state = state; + } + + public boolean canScrollHorizontallyFroyo(int direction) { + return canScrollHorizontally(direction); + } + + @Override + public boolean canScrollHorizontally(int direction) { + matrix.getValues(m); + float x = m[Matrix.MTRANS_X]; + + if (getImageWidth() < viewWidth) { + return false; + } else if (x >= -1 && direction < 0) { + return false; + } else if (Math.abs(x) + viewWidth + 1 >= getImageWidth() && direction > 0) { + return false; + } + + return true; + } + + /** + * Gesture Listener detects a single click or long click and passes that on + * to the view's listener. + * + * @author Ortiz + */ + private class GestureListener extends GestureDetector.SimpleOnGestureListener { + + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + if (doubleTapListener != null) { + return doubleTapListener.onSingleTapConfirmed(e); + } + return performClick(); + } + + @Override + public void onLongPress(MotionEvent e) { + performLongClick(); + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + if (fling != null) { + // + // If a previous fling is still active, it should be cancelled so that two flings + // are not run simultaenously. + // + fling.cancelFling(); + } + fling = new Fling((int) velocityX, (int) velocityY); + compatPostOnAnimation(fling); + return super.onFling(e1, e2, velocityX, velocityY); + } + + @Override + public boolean onDoubleTap(MotionEvent e) { + boolean consumed = false; + if (doubleTapListener != null) { + consumed = doubleTapListener.onDoubleTap(e); + } + if (state == State.NONE) { + float targetZoom = (normalizedScale == minScale) ? maxScale : minScale; + DoubleTapZoom doubleTap = new DoubleTapZoom(targetZoom, e.getX(), e.getY(), false); + compatPostOnAnimation(doubleTap); + consumed = true; + } + return consumed; + } + + @Override + public boolean onDoubleTapEvent(MotionEvent e) { + if (doubleTapListener != null) { + return doubleTapListener.onDoubleTapEvent(e); + } + return false; + } + } + + public interface OnTouchImageViewListener { + public void onMove(); + } + + /** + * Responsible for all touch events. Handles the heavy lifting of drag and also sends + * touch events to Scale Detector and Gesture Detector. + * + * @author Ortiz + */ + private class PrivateOnTouchListener implements OnTouchListener { + + // + // Remember last point position for dragging + // + private PointF last = new PointF(); + + @Override + public boolean onTouch(View v, MotionEvent event) { + mScaleDetector.onTouchEvent(event); + mGestureDetector.onTouchEvent(event); + PointF curr = new PointF(event.getX(), event.getY()); + + if (state == State.NONE || state == State.DRAG || state == State.FLING) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + last.set(curr); + if (fling != null) fling.cancelFling(); + setState(State.DRAG); + break; + + case MotionEvent.ACTION_MOVE: + if (state == State.DRAG) { + float deltaX = curr.x - last.x; + float deltaY = curr.y - last.y; + float fixTransX = getFixDragTrans(deltaX, viewWidth, getImageWidth()); + float fixTransY = getFixDragTrans(deltaY, viewHeight, getImageHeight()); + matrix.postTranslate(fixTransX, fixTransY); + fixTrans(); + last.set(curr.x, curr.y); + } + break; + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_POINTER_UP: + setState(State.NONE); + break; + } + } + + setImageMatrix(matrix); + + // + // User-defined OnTouchListener + // + if (userTouchListener != null) { + userTouchListener.onTouch(v, event); + } + + // + // OnTouchImageViewListener is set: TouchImageView dragged by user. + // + if (touchImageViewListener != null) { + touchImageViewListener.onMove(); + } + + // + // indicate event was handled + // + return true; + } + } + + /** + * ScaleListener detects user two finger scaling and scales image. + * + * @author Ortiz + */ + private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { + @Override + public boolean onScaleBegin(ScaleGestureDetector detector) { + setState(State.ZOOM); + return true; + } + + @Override + public boolean onScale(ScaleGestureDetector detector) { + scaleImage(detector.getScaleFactor(), detector.getFocusX(), detector.getFocusY(), true); + + // + // OnTouchImageViewListener is set: TouchImageView pinch zoomed by user. + // + if (touchImageViewListener != null) { + touchImageViewListener.onMove(); + } + return true; + } + + @Override + public void onScaleEnd(ScaleGestureDetector detector) { + super.onScaleEnd(detector); + setState(State.NONE); + boolean animateToZoomBoundary = false; + float targetZoom = normalizedScale; + if (normalizedScale > maxScale) { + targetZoom = maxScale; + animateToZoomBoundary = true; + } else if (normalizedScale < minScale) { + targetZoom = minScale; + animateToZoomBoundary = true; + } + + if (animateToZoomBoundary) { + DoubleTapZoom doubleTap = + new DoubleTapZoom(targetZoom, viewWidth / 2, viewHeight / 2, true); + compatPostOnAnimation(doubleTap); + } + } + } + + private void scaleImage(double deltaScale, float focusX, float focusY, + boolean stretchImageToSuper) { + + float lowerScale, upperScale; + if (stretchImageToSuper) { + lowerScale = superMinScale; + upperScale = superMaxScale; + } else { + lowerScale = minScale; + upperScale = maxScale; + } + + float origScale = normalizedScale; + normalizedScale *= deltaScale; + if (normalizedScale > upperScale) { + normalizedScale = upperScale; + deltaScale = upperScale / origScale; + } else if (normalizedScale < lowerScale) { + normalizedScale = lowerScale; + deltaScale = lowerScale / origScale; + } + + matrix.postScale((float) deltaScale, (float) deltaScale, focusX, focusY); + fixScaleTrans(); + } + + /** + * DoubleTapZoom calls a series of runnables which apply + * an animated zoom in/out graphic to the image. + * + * @author Ortiz + */ + private class DoubleTapZoom implements Runnable { + + private long startTime; + private static final float ZOOM_TIME = 500; + private float startZoom, targetZoom; + private float bitmapX, bitmapY; + private boolean stretchImageToSuper; + private AccelerateDecelerateInterpolator interpolator = new AccelerateDecelerateInterpolator(); + private PointF startTouch; + private PointF endTouch; + + DoubleTapZoom(float targetZoom, float focusX, float focusY, boolean stretchImageToSuper) { + setState(State.ANIMATE_ZOOM); + startTime = System.currentTimeMillis(); + this.startZoom = normalizedScale; + this.targetZoom = targetZoom; + this.stretchImageToSuper = stretchImageToSuper; + PointF bitmapPoint = transformCoordTouchToBitmap(focusX, focusY, false); + this.bitmapX = bitmapPoint.x; + this.bitmapY = bitmapPoint.y; + + // + // Used for translating image during scaling + // + startTouch = transformCoordBitmapToTouch(bitmapX, bitmapY); + endTouch = new PointF(viewWidth / 2, viewHeight / 2); + } + + @Override + public void run() { + float t = interpolate(); + double deltaScale = calculateDeltaScale(t); + scaleImage(deltaScale, bitmapX, bitmapY, stretchImageToSuper); + translateImageToCenterTouchPosition(t); + fixScaleTrans(); + setImageMatrix(matrix); + + // + // OnTouchImageViewListener is set: double tap runnable updates listener + // with every frame. + // + if (touchImageViewListener != null) { + touchImageViewListener.onMove(); + } + + if (t < 1f) { + // + // We haven't finished zooming + // + compatPostOnAnimation(this); + } else { + // + // Finished zooming + // + setState(State.NONE); + } + } + + /** + * Interpolate between where the image should start and end in order to translate + * the image so that the point that is touched is what ends up centered at the end + * of the zoom. + */ + private void translateImageToCenterTouchPosition(float t) { + float targetX = startTouch.x + t * (endTouch.x - startTouch.x); + float targetY = startTouch.y + t * (endTouch.y - startTouch.y); + PointF curr = transformCoordBitmapToTouch(bitmapX, bitmapY); + matrix.postTranslate(targetX - curr.x, targetY - curr.y); + } + + /** + * Use interpolator to get t + */ + private float interpolate() { + long currTime = System.currentTimeMillis(); + float elapsed = (currTime - startTime) / ZOOM_TIME; + elapsed = Math.min(1f, elapsed); + return interpolator.getInterpolation(elapsed); + } + + /** + * Interpolate the current targeted zoom and get the delta + * from the current zoom. + */ + private double calculateDeltaScale(float t) { + double zoom = startZoom + t * (targetZoom - startZoom); + return zoom / normalizedScale; + } + } + + /** + * This function will transform the coordinates in the touch event to the coordinate + * system of the drawable that the imageview contain + * + * @param x x-coordinate of touch event + * @param y y-coordinate of touch event + * @param clipToBitmap Touch event may occur within view, but outside image content. True, to clip + * return value + * to the bounds of the bitmap size. + * @return Coordinates of the point touched, in the coordinate system of the original drawable. + */ + private PointF transformCoordTouchToBitmap(float x, float y, boolean clipToBitmap) { + matrix.getValues(m); + float origW = getDrawable().getIntrinsicWidth(); + float origH = getDrawable().getIntrinsicHeight(); + float transX = m[Matrix.MTRANS_X]; + float transY = m[Matrix.MTRANS_Y]; + float finalX = ((x - transX) * origW) / getImageWidth(); + float finalY = ((y - transY) * origH) / getImageHeight(); + + if (clipToBitmap) { + finalX = Math.min(Math.max(finalX, 0), origW); + finalY = Math.min(Math.max(finalY, 0), origH); + } + + return new PointF(finalX, finalY); + } + + /** + * Inverse of transformCoordTouchToBitmap. This function will transform the coordinates in the + * drawable's coordinate system to the view's coordinate system. + * + * @param bx x-coordinate in original bitmap coordinate system + * @param by y-coordinate in original bitmap coordinate system + * @return Coordinates of the point in the view's coordinate system. + */ + private PointF transformCoordBitmapToTouch(float bx, float by) { + matrix.getValues(m); + float origW = getDrawable().getIntrinsicWidth(); + float origH = getDrawable().getIntrinsicHeight(); + float px = bx / origW; + float py = by / origH; + float finalX = m[Matrix.MTRANS_X] + getImageWidth() * px; + float finalY = m[Matrix.MTRANS_Y] + getImageHeight() * py; + return new PointF(finalX, finalY); + } + + /** + * Fling launches sequential runnables which apply + * the fling graphic to the image. The values for the translation + * are interpolated by the Scroller. + * + * @author Ortiz + */ + private class Fling implements Runnable { + + CompatScroller scroller; + int currX, currY; + + Fling(int velocityX, int velocityY) { + setState(State.FLING); + scroller = new CompatScroller(context); + matrix.getValues(m); + + int startX = (int) m[Matrix.MTRANS_X]; + int startY = (int) m[Matrix.MTRANS_Y]; + int minX, maxX, minY, maxY; + + if (getImageWidth() > viewWidth) { + minX = viewWidth - (int) getImageWidth(); + maxX = 0; + } else { + minX = maxX = startX; + } + + if (getImageHeight() > viewHeight) { + minY = viewHeight - (int) getImageHeight(); + maxY = 0; + } else { + minY = maxY = startY; + } + + scroller.fling(startX, startY, (int) velocityX, (int) velocityY, minX, maxX, minY, maxY); + currX = startX; + currY = startY; + } + + public void cancelFling() { + if (scroller != null) { + setState(State.NONE); + scroller.forceFinished(true); + } + } + + @Override + public void run() { + + // + // OnTouchImageViewListener is set: TouchImageView listener has been flung by user. + // Listener runnable updated with each frame of fling animation. + // + if (touchImageViewListener != null) { + touchImageViewListener.onMove(); + } + + if (scroller.isFinished()) { + scroller = null; + return; + } + + if (scroller.computeScrollOffset()) { + int newX = scroller.getCurrX(); + int newY = scroller.getCurrY(); + int transX = newX - currX; + int transY = newY - currY; + currX = newX; + currY = newY; + matrix.postTranslate(transX, transY); + fixTrans(); + setImageMatrix(matrix); + compatPostOnAnimation(this); + } + } + } + + @TargetApi(VERSION_CODES.GINGERBREAD) private class CompatScroller { + Scroller scroller; + OverScroller overScroller; + boolean isPreGingerbread; + + public CompatScroller(Context context) { + if (VERSION.SDK_INT < VERSION_CODES.GINGERBREAD) { + isPreGingerbread = true; + scroller = new Scroller(context); + } else { + isPreGingerbread = false; + overScroller = new OverScroller(context); + } + } + + public void fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, + int minY, int maxY) { + if (isPreGingerbread) { + scroller.fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY); + } else { + overScroller.fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY); + } + } + + public void forceFinished(boolean finished) { + if (isPreGingerbread) { + scroller.forceFinished(finished); + } else { + overScroller.forceFinished(finished); + } + } + + public boolean isFinished() { + if (isPreGingerbread) { + return scroller.isFinished(); + } else { + return overScroller.isFinished(); + } + } + + public boolean computeScrollOffset() { + if (isPreGingerbread) { + return scroller.computeScrollOffset(); + } else { + overScroller.computeScrollOffset(); + return overScroller.computeScrollOffset(); + } + } + + public int getCurrX() { + if (isPreGingerbread) { + return scroller.getCurrX(); + } else { + return overScroller.getCurrX(); + } + } + + public int getCurrY() { + if (isPreGingerbread) { + return scroller.getCurrY(); + } else { + return overScroller.getCurrY(); + } + } + } + + @TargetApi(VERSION_CODES.JELLY_BEAN) private void compatPostOnAnimation(Runnable runnable) { + if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) { + postOnAnimation(runnable); + } else { + postDelayed(runnable, 1000 / 60); + } + } + + private class ZoomVariables { + public float scale; + public float focusX; + public float focusY; + public ScaleType scaleType; + + public ZoomVariables(float scale, float focusX, float focusY, ScaleType scaleType) { + this.scale = scale; + this.focusX = focusX; + this.focusY = focusY; + this.scaleType = scaleType; + } + } + + private void printMatrixInfo() { + float[] n = new float[9]; + matrix.getValues(n); + Log.d(DEBUG, "Scale: " + n[Matrix.MSCALE_X] + " TransX: " + n[Matrix.MTRANS_X] + " TransY: " + + n[Matrix.MTRANS_Y]); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/mine/messagecenter/MessageCenterAdapter.java b/app/src/main/java/com/yonsz/z1/mine/messagecenter/MessageCenterAdapter.java new file mode 100644 index 0000000..f58085c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/messagecenter/MessageCenterAdapter.java @@ -0,0 +1,114 @@ +package com.yonsz.z1.mine.messagecenter; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2017/6/14. + */ + +public class MessageCenterAdapter extends RecyclerView.Adapter { + private List mDatas; + private Context mContext; + private OnRecyclerItemClickListener mOnItemClickListener; + private boolean isRead = false; + + public MessageCenterAdapter(Context mContext, List mDatas) { + this.mDatas = mDatas; + this.mContext = mContext; + } + + public void setIsRead() { + isRead = true; + this.notifyDataSetChanged(); + } + + @Override + public MessageCenterAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message_center, + parent, false); + return new MessageCenterAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageCenterAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDatas != null ? mDatas.size() : 0; + } + + public void setmOnItemClickListener(OnRecyclerItemClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView name; + private TextView data; + private TextView content; + private RelativeLayout rootView; + + public MessageViewHolder(View itemView) { + super(itemView); + rootView = (RelativeLayout) itemView.findViewById(R.id.root_view); + name = (TextView) itemView.findViewById(R.id.tv_letter); + data = (TextView) itemView.findViewById(R.id.tv_letter_data); + content = (TextView) itemView.findViewById(R.id.tv_letter_content); + } + + public void setViews(final int position) { + final SystemMessageEntity.ObjEntity.ListEntity entity = mDatas.get(position); + name.setText(entity.getMsgType()); + data.setText(entity.getCreateDate().substring(0, 10)); + content.setText(entity.getMsgInfo()); + if (entity.getViewFlag().equals("0")) { + name.setTextColor(0xff333333); + data.setTextColor(0xff333333); + content.setTextColor(0xff666666); + } else { + name.setTextColor(0xff999999); + data.setTextColor(0xff999999); + content.setTextColor(0xff999999); + } + + if (isRead) { + name.setTextColor(0xff999999); + data.setTextColor(0xff999999); + content.setTextColor(0xff999999); + } + + rootView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + entity.setViewFlag("1"); + name.setTextColor(0xff999999); + data.setTextColor(0xff999999); + content.setTextColor(0xff999999); + List photos = null; + mOnItemClickListener.onClick(rootView, position, photos, 0); + /*if (mDatas.get(position).getViewFlag().equals("0")) { + if (msgViewNum != 0) { + msgViewNum -= 1; + } else { + msgViewNum = 0; + } + }*/ + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/messagecenter/MessageDetailActivity.java b/app/src/main/java/com/yonsz/z1/mine/messagecenter/MessageDetailActivity.java new file mode 100644 index 0000000..ad4eae9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/messagecenter/MessageDetailActivity.java @@ -0,0 +1,110 @@ +package com.yonsz.z1.mine.messagecenter; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.DEL_SYSINITMSG_BYID_RESULT; +import static com.yonsz.z1.net.Constans.DEL_SYSINITMSG_BYID_SUCCESS; + +/** + * Created by Administrator on 2017/8/31. + */ +public class MessageDetailActivity extends BaseActivity { + private TitleView mTitleView; + private TextView name; + private TextView data; + private TextView content; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_msg_detail); + initView(); + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.detail_title_); + name = (TextView) findViewById(R.id.tv_letter); + data = (TextView) findViewById(R.id.tv_letter_data); + content = (TextView) findViewById(R.id.tv_letter_content); + mTitleView.setHeadFuntionTxt(R.string.delete); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + //删除单条系统消息 + delSysInitmsgById(); + } + + @Override + public void onFunctionText() { + + } + }); + if (getIntent() != null && !TextUtils.isEmpty(getIntent().getStringExtra("msg"))) { + content.setText(getIntent().getStringExtra("msg")); + } + if (getIntent() != null && !TextUtils.isEmpty(getIntent().getStringExtra("name"))) { + name.setText(getIntent().getStringExtra("name")); + mTitleView.setHead(getIntent().getStringExtra("name")); + } + if (getIntent() != null && !TextUtils.isEmpty(getIntent().getStringExtra("data"))) { + data.setText(getIntent().getStringExtra("data").substring(0, 10)); + } + } + + private void delSysInitmsgById() { + HashMap map = new HashMap<>(); + map.put("id", getIntent().getExtras().get("id").toString()); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynew(NetWorkUrl.DEL_SYSINITMSG_BYID, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getListMessage", "onSuccess: " + respone); + Message msg = mHandler.obtainMessage(DEL_SYSINITMSG_BYID_SUCCESS); + mHandler.sendMessage(msg); + } + + @Override + public void onFail(String message) { + + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case DEL_SYSINITMSG_BYID_SUCCESS: + ToastUtil.show(this, R.string.Delete_successful); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(MessageDetailActivity.this, MssageCenterActivity.class); + intent.putExtra("position", (int) getIntent().getExtras().get("position")); + setResult(DEL_SYSINITMSG_BYID_RESULT, intent); + finish(); + } + }, 1000); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/messagecenter/MssageCenterActivity.java b/app/src/main/java/com/yonsz/z1/mine/messagecenter/MssageCenterActivity.java new file mode 100644 index 0000000..57af64b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/messagecenter/MssageCenterActivity.java @@ -0,0 +1,417 @@ +package com.yonsz.z1.mine.messagecenter; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.VersionEntity; +import com.yonsz.z1.database.entity.entitya2.SafeLogEntity; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; +import com.yonsz.z1.listener.OnRecyclerLoadDataListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LoadMoreRecyclerView; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.activity.MainActivity.msgViewNum; +import static com.yonsz.z1.difference.DifferConstans.APPID_S; +import static com.yonsz.z1.difference.DifferConstans.APPID_S_VOICE; +import static com.yonsz.z1.net.Constans.DEL_SYSINITMSG_BYID_RESULT; +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_MSG_FAIL; +import static com.yonsz.z1.net.Constans.GET_MSG_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.UPDATE_STATE_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_STATE_SUCCESS; + +/** + * Created by Administrator on 2017/5/26. + */ +public class MssageCenterActivity extends BaseActivity { + private LoadMoreRecyclerView mRecycMsgList; + private boolean isLoadMore; + private MessageCenterAdapter mAdapter; + private List mDatas; + private int page = 1; + private int DATA_TYPE; + private LoadingDialog mLoadingDialog; + // private SuperSwipeRefreshLayout mSwipeRefreshLayout; + private boolean isRefresh; + private RelativeLayout mNoRecord; + private TitleView titleView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_message_center); + initView(); + DATA_TYPE = Constans.REFRESH_DATA; + initLoadDialog(); + loadListViewData(page); + updataUserState(); + } + + @Override + public void onResume() { + super.onResume(); + updataUserState(); + } + + private void loadListViewData(int page) { + //当有网络的时候 + if (DensityUtil.isNetworkConnected(this)) { + getListMessage(page); + } + /*else if (!DensityUtil.isNetworkConnected(this) && TextUtils.isEmpty(mDataString)) { + //没网且没有数据 + ToastUtil.show(this, "网络未连接或不可用"); + } else { + //没网但是有缓存 + parseLocal(); + }*/ + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void updataUserState() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + map.put("appId", APPID_S); + map.put("appBrandId", APPID_S_VOICE); + util.requestPostByAsynew(NetWorkUrl.UPDATE_USERINFO_STATE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updataUserState", "onSuccess: " + respone); + if (respone.length() < 100) { + return; + } + VersionEntity entity = JSON.parseObject(respone, VersionEntity.class); + if (-401 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USER_SESSION_NULL); + msg.obj = entity; + mHandler.sendMessage(msg); + } else if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_STATE_SUCCESS); + msg.obj = entity.getObj(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_STATE_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_STATE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getListMessage(int page) { + HashMap map = new HashMap<>(); + map.put("pageNo", this.page + ""); + map.put("createDate", ""); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynew(NetWorkUrl.GET_SYS_MESSAGE, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("getListMessage", "onSuccess: " + respone); + SystemMessageEntity obj = JSON.parseObject(respone, SystemMessageEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_MSG_SUCCESS); + msg.obj = obj.getObj(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_MSG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_MSG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initView() { + titleView = (TitleView) findViewById(R.id.title_message_center); + titleView.setHead(R.string.System_message); + titleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + sysmsgClearunread(); + } + + @Override + public void onFunctionText() { + + } + }); + mRecycMsgList = (LoadMoreRecyclerView) findViewById(R.id.message_center_list); + mDatas = new ArrayList<>(); + mAdapter = new MessageCenterAdapter(this, mDatas); + mNoRecord = (RelativeLayout) findViewById(R.id.ll_no_record); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecycMsgList.setHasFixedSize(true); + mRecycMsgList.setLayoutManager(manage); + + mRecycMsgList.setAdapter(mAdapter); + mRecycMsgList.setOnLoadDataListener(new OnRecyclerLoadDataListener() { + @Override + public void onLoadMore() { + if (!isLoadMore) { + isLoadMore = true; + page++; + DATA_TYPE = Constans.MORE_DATA; + getListMessage(page); + } + } + }); + mAdapter.setmOnItemClickListener(new OnRecyclerItemClickListener() { + @Override + public void onClick(View view, int position, List photos, int i) { + if (position > -1 && position < mDatas.size()) { + Intent intent = new Intent(MssageCenterActivity.this, MessageDetailActivity.class); + intent.putExtra("msg", mDatas.get(position).getMsgInfo()); + intent.putExtra("name", mDatas.get(position).getMsgType()); + intent.putExtra("data", mDatas.get(position).getCreateDate()); + intent.putExtra("id", mDatas.get(position).getId()); + intent.putExtra("position", position); + startActivityForResult(intent, DEL_SYSINITMSG_BYID_RESULT); + } + } + + @Override + public void onLongClick(View view, int position) { + + } + }); + /*mSwipeRefreshLayout = (SuperSwipeRefreshLayout) findViewById(R.id.swipe_refresh); + mSwipeRefreshLayout.setHeaderView(ViewUtil.getUtil().createHeaderView(mSwipeRefreshLayout)); + mSwipeRefreshLayout.setTargetScrollWithLayout(true); + mSwipeRefreshLayout.setOnPullRefreshListener(new SuperSwipeRefreshLayout.OnPullRefreshListener() { + @Override + public void onRefresh() { + if (!isRefresh) { + isRefresh = true; + DATA_TYPE = Constans.REFRESH_DATA; + getListMessage(1); + } + + } + + @Override + public void onPullDistance(int distance) { + + } + + @Override + public void onPullEnable(boolean enable) { + + } + });*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_MSG_SUCCESS: + SystemMessageEntity.ObjEntity obj = (SystemMessageEntity.ObjEntity) msg.obj; + if (obj.getList() != null && obj.getList().size() != 0) { + titleView.setHeadFuntionTxtAndSise16("清除"); + onSuccess((SystemMessageEntity.ObjEntity) msg.obj); + } else { + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + if (mDatas.size() == 0) { + mRecycMsgList.setVisibility(View.GONE); + mNoRecord.setVisibility(View.VISIBLE); + titleView.setHeadFuntionTxtAndSise16(""); + } + return; + } + break; + case GET_MSG_FAIL: + case GET_LOG_FAIL: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_STATE_SUCCESS: + VersionEntity.ObjEntity versionEntity = (VersionEntity.ObjEntity) msg.obj; + msgViewNum = versionEntity.getSysMsgNnum(); + break; + case GET_LOG_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } +// mAdapter.setIsRead(); + mDatas.clear(); + if (mDatas.size() == 0) { + mRecycMsgList.setVisibility(View.GONE); + mNoRecord.setVisibility(View.VISIBLE); + titleView.setHeadFuntionTxtAndSise16(""); + } + break; + } + } + + private void onSuccess(final SystemMessageEntity.ObjEntity datas) { + if (mDatas.size() == 0 || (mDatas.get(0) != null && + mDatas.get(0).getId() != null && + !datas.getList().get(0).getId().equals(mDatas.get(0).getId()))) { + if (datas != null && datas.getList().size() > 0) { + if (DATA_TYPE == Constans.REFRESH_DATA) { + isRefresh = false; + // mSwipeRefreshLayout.setRefreshing(false); + mDatas.addAll(0, datas.getList()); + } else { + isLoadMore = false; + mDatas.addAll(datas.getList()); + } + if (mDatas.size() == 0) { + mRecycMsgList.setVisibility(View.GONE); + mNoRecord.setVisibility(View.VISIBLE); + } else { + mRecycMsgList.setVisibility(View.VISIBLE); + mNoRecord.setVisibility(View.GONE); + } + mAdapter.notifyDataSetChanged(); + } else { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + // mSwipeRefreshLayout.setVisibility(View.GONE); + mRecycMsgList.setVisibility(View.GONE); + mNoRecord.setVisibility(View.VISIBLE); + } + } + isRefresh = false; + isLoadMore = false; + // mSwipeRefreshLayout.setRefreshing(false); + + + DATA_TYPE = -1; + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + + /*if (datas.getList() != null) { + mRecycMsgList = (LoadMoreRecyclerView) findViewById(R.id.message_center_list); + mAdapter = new MessageCenterAdapter(this, datas.getList()); + } else { + return; + } + + LinearLayoutManager manage = new LinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecycMsgList.setHasFixedSize(true); + mRecycMsgList.setLayoutManager(manage); + mRecycMsgList.setAdapter(mAdapter); + + mAdapter.setmOnItemClickListener(new OnRecyclerItemClickListener() { + @Override + public void onClick(View view, int position, List photos, int i) { + if (position > -1 && position < datas.getList().size()) { + Intent intent = new Intent(MssageCenterActivity.this, MessageDetailActivity.class); + intent.putExtra("msg", datas.getList().get(position).getMsgInfo()); + intent.putExtra("name", datas.getList().get(position).getMsgType()); + intent.putExtra("data", datas.getList().get(position).getCreateDate()); + intent.putExtra("id", datas.getList().get(position).getId()); + startActivityForResult(intent, DEL_SYSINITMSG_BYID_RESULT); + } + } + + @Override + public void onLongClick(View view, int position) { + + } + });*/ + } + + private void sysmsgClearunread() { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.SYSMSG_CLEAR, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("sysmsgClearunread", "ShareDeviceActivity onSuccess()" + respone); + SafeLogEntity obj = JSON.parseObject(respone, SafeLogEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_LOG_SUCCESS); + msg.obj = obj.getObj(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_LOG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == DEL_SYSINITMSG_BYID_RESULT) { + if (data != null && data.getExtras().get("position") != null) { + int position = (int) data.getExtras().get("position"); + mDatas.remove(position); + if (mDatas.size() == 0) { + mRecycMsgList.setVisibility(View.GONE); + mNoRecord.setVisibility(View.VISIBLE); + } else { + mRecycMsgList.setVisibility(View.VISIBLE); + mNoRecord.setVisibility(View.GONE); + } + mAdapter.notifyDataSetChanged(); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/messagecenter/SystemMessageEntity.java b/app/src/main/java/com/yonsz/z1/mine/messagecenter/SystemMessageEntity.java new file mode 100644 index 0000000..2d4a76d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/messagecenter/SystemMessageEntity.java @@ -0,0 +1,257 @@ +package com.yonsz.z1.mine.messagecenter; + +import java.util.List; + +/** + * Created by Administrator on 2017/8/31. + */ + +public class SystemMessageEntity { + /** + * msg : 成功。 + * flag : 1 + * obj : {"pageNo":1,"maxResults":10,"count":3,"pageSize":10,"firstResult":0,"list":[{"viewFlag":"0","updateDate":"2017-08-21 17:32:26","msgType":"系统消息","msgId":"23cea1d96ebd47ce9fd7cf4dfd777455","id":"d252208067fb44e1a06c2fc7713ae894","isNewRecord":false,"user":{"admin":false,"loginFlag":"1","id":"18824634310","isNewRecord":false,"roleNames":""},"msgInfo":"隔壁女人在唱歌","createDate":"2017-08-21 17:32:26"},{"viewFlag":"0","updateDate":"2017-08-21 17:32:05","msgType":"系统消息","msgId":"4cb2dbb396da4ef69390456a26463c57","id":"9b7b530a198548d5baee4f0c719faec9","isNewRecord":false,"user":{"admin":false,"loginFlag":"1","id":"18824634310","isNewRecord":false,"roleNames":""},"msgInfo":"春风十里,不如睡你。","createDate":"2017-08-21 17:32:05"},{"viewFlag":"0","updateDate":"2017-08-18 11:44:06","msgType":"1","msgId":"975a3125e444466b837c18047224f75d","id":"6a80160864b04763ab77735b90ec3c0e","isNewRecord":false,"user":{"admin":false,"loginFlag":"1","id":"18824634310","isNewRecord":false,"roleNames":""},"msgInfo":"一路顺疯","createDate":"2017-08-18 11:44:06"}]} + */ + private String msg; + private int flag; + private ObjEntity obj; + + public void setMsg(String msg) { + this.msg = msg; + } + + public void setFlag(int flag) { + this.flag = flag; + } + + public void setObj(ObjEntity obj) { + this.obj = obj; + } + + public String getMsg() { + return msg; + } + + public int getFlag() { + return flag; + } + + public ObjEntity getObj() { + return obj; + } + + public static class ObjEntity { + /** + * pageNo : 1 + * maxResults : 10 + * count : 3 + * pageSize : 10 + * firstResult : 0 + * list : [{"viewFlag":"0","updateDate":"2017-08-21 17:32:26","msgType":"系统消息","msgId":"23cea1d96ebd47ce9fd7cf4dfd777455","id":"d252208067fb44e1a06c2fc7713ae894","isNewRecord":false,"user":{"admin":false,"loginFlag":"1","id":"18824634310","isNewRecord":false,"roleNames":""},"msgInfo":"隔壁女人在唱歌","createDate":"2017-08-21 17:32:26"},{"viewFlag":"0","updateDate":"2017-08-21 17:32:05","msgType":"系统消息","msgId":"4cb2dbb396da4ef69390456a26463c57","id":"9b7b530a198548d5baee4f0c719faec9","isNewRecord":false,"user":{"admin":false,"loginFlag":"1","id":"18824634310","isNewRecord":false,"roleNames":""},"msgInfo":"春风十里,不如睡你。","createDate":"2017-08-21 17:32:05"},{"viewFlag":"0","updateDate":"2017-08-18 11:44:06","msgType":"1","msgId":"975a3125e444466b837c18047224f75d","id":"6a80160864b04763ab77735b90ec3c0e","isNewRecord":false,"user":{"admin":false,"loginFlag":"1","id":"18824634310","isNewRecord":false,"roleNames":""},"msgInfo":"一路顺疯","createDate":"2017-08-18 11:44:06"}] + */ + private int pageNo; + private int maxResults; + private int count; + private int pageSize; + private int firstResult; + private List list; + + public void setPageNo(int pageNo) { + this.pageNo = pageNo; + } + + public void setMaxResults(int maxResults) { + this.maxResults = maxResults; + } + + public void setCount(int count) { + this.count = count; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public void setFirstResult(int firstResult) { + this.firstResult = firstResult; + } + + public void setList(List list) { + this.list = list; + } + + public int getPageNo() { + return pageNo; + } + + public int getMaxResults() { + return maxResults; + } + + public int getCount() { + return count; + } + + public int getPageSize() { + return pageSize; + } + + public int getFirstResult() { + return firstResult; + } + + public List getList() { + return list; + } + + public static class ListEntity { + /** + * viewFlag : 0 + * updateDate : 2017-08-21 17:32:26 + * msgType : 系统消息 + * msgId : 23cea1d96ebd47ce9fd7cf4dfd777455 + * id : d252208067fb44e1a06c2fc7713ae894 + * isNewRecord : false + * user : {"admin":false,"loginFlag":"1","id":"18824634310","isNewRecord":false,"roleNames":""} + * msgInfo : 隔壁女人在唱歌 + * createDate : 2017-08-21 17:32:26 + */ + private String viewFlag; + private String updateDate; + private String msgType; + private String msgId; + private String id; + private boolean isNewRecord; + private UserEntity user; + private String msgInfo; + private String createDate; + + public void setViewFlag(String viewFlag) { + this.viewFlag = viewFlag; + } + + public void setUpdateDate(String updateDate) { + this.updateDate = updateDate; + } + + public void setMsgType(String msgType) { + this.msgType = msgType; + } + + public void setMsgId(String msgId) { + this.msgId = msgId; + } + + public void setId(String id) { + this.id = id; + } + + public void setIsNewRecord(boolean isNewRecord) { + this.isNewRecord = isNewRecord; + } + + public void setUser(UserEntity user) { + this.user = user; + } + + public void setMsgInfo(String msgInfo) { + this.msgInfo = msgInfo; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getViewFlag() { + return viewFlag; + } + + public String getUpdateDate() { + return updateDate; + } + + public String getMsgType() { + return msgType; + } + + public String getMsgId() { + return msgId; + } + + public String getId() { + return id; + } + + public boolean isIsNewRecord() { + return isNewRecord; + } + + public UserEntity getUser() { + return user; + } + + public String getMsgInfo() { + return msgInfo; + } + + public String getCreateDate() { + return createDate; + } + + public static class UserEntity { + /** + * admin : false + * loginFlag : 1 + * id : 18824634310 + * isNewRecord : false + * roleNames : + */ + private boolean admin; + private String loginFlag; + private String id; + private boolean isNewRecord; + private String roleNames; + + public void setAdmin(boolean admin) { + this.admin = admin; + } + + public void setLoginFlag(String loginFlag) { + this.loginFlag = loginFlag; + } + + public void setId(String id) { + this.id = id; + } + + public void setIsNewRecord(boolean isNewRecord) { + this.isNewRecord = isNewRecord; + } + + public void setRoleNames(String roleNames) { + this.roleNames = roleNames; + } + + public boolean isAdmin() { + return admin; + } + + public String getLoginFlag() { + return loginFlag; + } + + public String getId() { + return id; + } + + public boolean isIsNewRecord() { + return isNewRecord; + } + + public String getRoleNames() { + return roleNames; + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/ConnectAdapter.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/ConnectAdapter.java new file mode 100644 index 0000000..9d9967f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/ConnectAdapter.java @@ -0,0 +1,108 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.listener.NoDoubleClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2017/6/15. + */ + +public class ConnectAdapter extends BaseAdapter { + + private Context mContext; + private List mData; + private OnListViewItemClickListener mOnItemClickListener; + + public ConnectAdapter(Context mContext, List mData) { + super(); + this.mContext = mContext; + this.mData = mData; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mData.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mData.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return mData.get(position).getId(); + } + + //点击事件 + public void setmOnItemClickListener(OnListViewItemClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + ViewHolder mHolder = null; + if (convertView == null) { + convertView = LayoutInflater.from(mContext).inflate( + R.layout.item_connect_phone, null); + mHolder = new ViewHolder(); + mHolder.name = (TextView) convertView.findViewById(R.id.name); + mHolder.moble = (TextView) convertView.findViewById(R.id.moble); + mHolder.imgV = (ImageView) convertView.findViewById(R.id.image); + mHolder.addBt = (Button) convertView.findViewById(R.id.bt_add); + + convertView.setTag(mHolder); + + } else { + mHolder = (ViewHolder) convertView.getTag(); + mHolder.imgV.setImageResource(R.mipmap.app_lan); + } + + ContactVo cv = mData.get(position); + mHolder.name.setText(cv.getName()); + // 对手机号码进行预处理(去掉号码前的+86、首尾空格、“-”号等) + String moble = cv.getMoble(); + moble = moble.replaceAll("^(\\+86)", ""); + moble = moble.replaceAll("^(86)", ""); + moble = moble.replaceAll("-", ""); + moble = moble.replaceAll(" ", ""); + moble = moble.trim(); + mHolder.moble.setText(moble); + mHolder.imgV.setImageBitmap(cv.getImg()); + + final ViewHolder finalMHolder = mHolder; + mHolder.addBt.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(position, finalMHolder.moble); + } + } + }); + return convertView; + } + + public interface OnListViewItemClickListener { + public void onClick(int position, TextView moble); + } + + class ViewHolder { + TextView name, moble; + ImageView imgV; + Button addBt; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/ContactVo.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/ContactVo.java new file mode 100644 index 0000000..76fc6bd --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/ContactVo.java @@ -0,0 +1,63 @@ +package com.yonsz.z1.mine.mydevice; + +import android.graphics.Bitmap; + +public class ContactVo { + + private long id; + private String name; + private String moble; + private Bitmap img; + + public ContactVo() { + super(); + } + + public ContactVo(long id, String name, String moble, Bitmap img) { + super(); + this.id = id; + this.name = name; + this.moble = moble; + this.img = img; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMoble() { + return moble; + } + + public void setMoble(String moble) { + this.moble = moble; + } + + public Bitmap getImg() { + return img; + } + + public void setImg(Bitmap img) { + this.img = img; + } + + @Override + public String toString() { + return "ContactVo [id=" + id + ", name=" + name + ", moble=" + moble + + ", img=" + img + "]"; + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceA2FirstPosActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceA2FirstPosActivity.java new file mode 100644 index 0000000..9834466 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceA2FirstPosActivity.java @@ -0,0 +1,365 @@ +package com.yonsz.z1.mine.mydevice; + +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.DeviceEntity; +import com.yonsz.z1.database.entity.ModifyDeviceEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_FAIL; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_SUCCESS; + +/** + * Created by Administrator on 2017/11/23. + */ + +public class DeviceA2FirstPosActivity extends BaseActivity { + private TitleView mTitleView; + private ImageView positionIv0, positionIv1, positionIv2, positionIv3, positionIv4, positionIv5, positionIv6, positionIv7, positionIv8, positionIv9, positionIv10, positionIv11, positionIv12, positionIv13; + private ImageView positionTv0, positionTv1, positionTv2, positionTv3, positionTv4, positionTv5, positionTv6, positionTv7, positionTv8, positionTv9, positionTv10, positionTv11, positionTv12, positionTv13; + private Button sureBt; + private String deviceAddress; + private DeviceEntity.ObjEntity mObjEntity; + private int positionE; + private String name, ziId; + private boolean isShowAll; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_first_position_4); + initView(); + initData(); + } + + private void initView() { + if (getIntent().getExtras() != null && getIntent().getExtras().get("deviceDetail") != null) { + mObjEntity = (DeviceEntity.ObjEntity) getIntent().getExtras().get("deviceDetail"); + positionE = (int) getIntent().getExtras().get("position"); + name = (String) getIntent().getExtras().get("name"); + ziId = (String) getIntent().getExtras().get("ziId"); + isShowAll = (boolean) getIntent().getExtras().get("isShowAll"); + } + sureBt = (Button) findViewById(R.id.bt_sure_config); + mTitleView = (TitleView) findViewById(R.id.title_position_a2); + mTitleView.setHead(R.string.Position_modification); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionTxtColor(false); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (deviceAddress != null) { + saveUserInfo(); + } else { + Toast.makeText(DeviceA2FirstPosActivity.this, "位置不能为空", Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + positionTv0 = (ImageView) findViewById(R.id.cb_position0); + positionTv1 = (ImageView) findViewById(R.id.cb_position1); + positionTv2 = (ImageView) findViewById(R.id.cb_position2); + positionTv3 = (ImageView) findViewById(R.id.cb_position3); + positionTv4 = (ImageView) findViewById(R.id.cb_position4); + positionTv5 = (ImageView) findViewById(R.id.cb_position5); + positionTv6 = (ImageView) findViewById(R.id.cb_position6); + positionTv7 = (ImageView) findViewById(R.id.cb_position7); + // positionTv8 = (ImageView) findViewById(R.id.cb_position8); + positionTv9 = (ImageView) findViewById(R.id.cb_position9); + positionTv10 = (ImageView) findViewById(R.id.cb_position10); + // positionTv11 = (ImageView) findViewById(R.id.cb_position11); + // positionTv12 = (ImageView) findViewById(R.id.cb_position12); + // positionTv13 = (ImageView) findViewById(R.id.cb_position13); + positionIv0 = (ImageView) findViewById(R.id.tv_position0); + positionIv1 = (ImageView) findViewById(R.id.tv_position1); + positionIv2 = (ImageView) findViewById(R.id.tv_position2); + positionIv3 = (ImageView) findViewById(R.id.tv_position3); + positionIv4 = (ImageView) findViewById(R.id.tv_position4); + positionIv5 = (ImageView) findViewById(R.id.tv_position5); + positionIv6 = (ImageView) findViewById(R.id.tv_position6); + positionIv7 = (ImageView) findViewById(R.id.tv_position7); + // positionIv8 = (ImageView) findViewById(R.id.tv_position8); + positionIv9 = (ImageView) findViewById(R.id.tv_position9); + positionIv10 = (ImageView) findViewById(R.id.tv_position10); + // positionIv11 = (ImageView) findViewById(R.id.tv_position11); + // positionIv12 = (ImageView) findViewById(R.id.tv_position12); + // positionIv13 = (ImageView) findViewById(R.id.tv_position13); + positionTv0.setOnClickListener(this); + positionTv1.setOnClickListener(this); + positionTv2.setOnClickListener(this); + positionTv3.setOnClickListener(this); + positionTv4.setOnClickListener(this); + positionTv5.setOnClickListener(this); + positionTv6.setOnClickListener(this); + positionTv7.setOnClickListener(this); + // positionTv8.setOnClickListener(this); + positionTv9.setOnClickListener(this); + positionTv10.setOnClickListener(this); + // positionTv11.setOnClickListener(this); + // positionTv12.setOnClickListener(this); + // positionTv13.setOnClickListener(this); + sureBt.setOnClickListener(this); + } + + private void initData() { + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case MODIFY_DEVICE_SUCCESS: + /*if (getIntent().getExtras().get("tag").toString().equals("a1")) { + Intent intent = new Intent(this, ChildDeviceListActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity); + intent.putExtras(bundle); + intent.putExtra("position", positionE); + intent.putExtra("name", name); + intent.putExtra("ziId", ziId); + intent.putExtra("isShowAll", isShowAll); + startActivity(intent); + } else { + Intent intent = new Intent(this, ChildDeviceListA2Activity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity); + intent.putExtras(bundle); + intent.putExtra("position", positionE); + intent.putExtra("isShowAll", isShowAll); + intent.putExtra("name", name); + intent.putExtra("ziId", ziId); + startActivity(intent); + }*/ + ToastUtil.show(this, "修改成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + break; + case MODIFY_DEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_position0: + mTitleView.setHeadFuntionTxtColor(true); + deviceAddress = "1"; + setRightShow(true, false, false, false, false, false, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position1: + deviceAddress = "2"; + mTitleView.setHeadFuntionTxtColor(true); + setRightShow(false, true, false, false, false, false, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position2: + mTitleView.setHeadFuntionTxtColor(true); + deviceAddress = "3"; + setRightShow(false, false, true, false, false, false, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position3: + mTitleView.setHeadFuntionTxtColor(true); + deviceAddress = "4"; + setRightShow(false, false, false, true, false, false, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position4: + mTitleView.setHeadFuntionTxtColor(true); + deviceAddress = "5"; + setRightShow(false, false, false, false, true, false, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position5: + mTitleView.setHeadFuntionTxtColor(true); + deviceAddress = "6"; + setRightShow(false, false, false, false, false, true, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position6: + mTitleView.setHeadFuntionTxtColor(true); + deviceAddress = "7"; + setRightShow(false, false, false, false, false, false, true, false, false, false, false, false, false, false); + break; + case R.id.cb_position7: + mTitleView.setHeadFuntionTxtColor(true); + deviceAddress = "8"; + setRightShow(false, false, false, false, false, false, false, true, false, false, false, false, false, false); + break; + case R.id.cb_position8: + mTitleView.setHeadFuntionTxtColor(true); + deviceAddress = "9"; + setRightShow(false, false, false, false, false, false, false, false, true, false, false, false, false, false); + break; + case R.id.cb_position9: + mTitleView.setHeadFuntionTxtColor(true); + deviceAddress = "10"; + setRightShow(false, false, false, false, false, false, false, false, false, true, false, false, false, false); + break; + case R.id.cb_position10: + mTitleView.setHeadFuntionTxtColor(true); + deviceAddress = "11"; + setRightShow(false, false, false, false, false, false, false, false, false, false, true, false, false, false); + break; + case R.id.cb_position11: + // deviceAddress = "公司"; + deviceAddress = "12"; + setRightShow(false, false, false, false, false, false, false, false, false, false, false, true, false, false); + break; + case R.id.cb_position12: + // deviceAddress = "车库"; + deviceAddress = "13"; + setRightShow(false, false, false, false, false, false, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position13: + // deviceAddress = "其他"; + deviceAddress = "0"; + setRightShow(false, false, false, false, false, false, false, false, false, false, false, false, false, true); + break; + case R.id.bt_sure_config: + if (deviceAddress != null) { + saveUserInfo(); + } else { + Toast.makeText(DeviceA2FirstPosActivity.this, "位置不能为空", Toast.LENGTH_SHORT).show(); + } + /* Intent intent = new Intent(this, ChildDeviceListA2Activity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("deviceDetail", mObjEntity.get(position)); + intent.putExtras(bundle); + intent.putExtra("position", position); + intent.putExtra("name", mObjEntity.get(position).getZiName()); + intent.putExtra("ziId", mObjEntity.get(position).getZiId()); + startActivity(intent);*/ + break; + } + } + + private void setRightShow(boolean b0, boolean b1, boolean b2, boolean b3, boolean b4, boolean b5, boolean b6, boolean b7, boolean b8, boolean b9, boolean b10, boolean b11, boolean b12, boolean b13) { + if (b0) { + positionIv0.setVisibility(View.VISIBLE); + } else { + positionIv0.setVisibility(View.GONE); + } + if (b1) { + positionIv1.setVisibility(View.VISIBLE); + } else { + positionIv1.setVisibility(View.GONE); + } + if (b2) { + positionIv2.setVisibility(View.VISIBLE); + } else { + positionIv2.setVisibility(View.GONE); + } + if (b3) { + positionIv3.setVisibility(View.VISIBLE); + } else { + positionIv3.setVisibility(View.GONE); + } + if (b4) { + positionIv4.setVisibility(View.VISIBLE); + } else { + positionIv4.setVisibility(View.GONE); + } + if (b5) { + positionIv5.setVisibility(View.VISIBLE); + } else { + positionIv5.setVisibility(View.GONE); + } + if (b6) { + positionIv6.setVisibility(View.VISIBLE); + } else { + positionIv6.setVisibility(View.GONE); + } + if (b7) { + positionIv7.setVisibility(View.VISIBLE); + } else { + positionIv7.setVisibility(View.GONE); + } + /*if (b8) { + positionIv8.setVisibility(View.VISIBLE); + } else { + positionIv8.setVisibility(View.GONE); + }*/ + if (b9) { + positionIv9.setVisibility(View.VISIBLE); + } else { + positionIv9.setVisibility(View.GONE); + } + if (b10) { + positionIv10.setVisibility(View.VISIBLE); + } else { + positionIv10.setVisibility(View.GONE); + } + /*if (b11) { + positionIv11.setVisibility(View.VISIBLE); + } else { + positionIv11.setVisibility(View.GONE); + } + if (b12) { + positionIv12.setVisibility(View.VISIBLE); + } else { + positionIv12.setVisibility(View.GONE); + } + if (b13) { + positionIv13.setVisibility(View.VISIBLE); + } else { + positionIv13.setVisibility(View.GONE); + }*/ + } + + private void saveUserInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("addressId", deviceAddress); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.UPDATE_DEVICE_ADDRESS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ModifyDeviceEntity obj = JSON.parseObject(respone, ModifyDeviceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(MODIFY_DEVICE_SUCCESS); + msg.obj = deviceAddress; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(MODIFY_DEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(MODIFY_DEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceA2PositionActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceA2PositionActivity.java new file mode 100644 index 0000000..14e8340 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceA2PositionActivity.java @@ -0,0 +1,337 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ModifyDeviceEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.R.id.cb_position0; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_FAIL; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_SUCCESS; + +/** + * Created by Administrator on 2017/11/23. + */ + +public class DeviceA2PositionActivity extends BaseActivity { + private TitleView mTitleView; + private ImageView positionIv0, positionIv1, positionIv2, positionIv3, positionIv4, positionIv5, positionIv6, positionIv7, positionIv8, positionIv9, positionIv10, positionIv11, positionIv12, positionIv13; + private ImageView positionTv0, positionTv1, positionTv2, positionTv3, positionTv4, positionTv5, positionTv6, positionTv7, positionTv9, positionTv10; + private String deviceAddress; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_first_position_4); + initView(); + } + + private void initView() { + if (getIntent().getExtras() != null) { + deviceAddress = (String) getIntent().getExtras().get("name"); + } + mTitleView = (TitleView) findViewById(R.id.title_position_a2); + mTitleView.setHead(R.string.Position_modification); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (deviceAddress != null) { + saveUserInfo(); + } else { + Toast.makeText(DeviceA2PositionActivity.this, "位置不能为空", Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + positionTv0 = (ImageView) findViewById(R.id.cb_position0); + positionTv1 = (ImageView) findViewById(R.id.cb_position1); + positionTv2 = (ImageView) findViewById(R.id.cb_position2); + positionTv3 = (ImageView) findViewById(R.id.cb_position3); + positionTv4 = (ImageView) findViewById(R.id.cb_position4); + positionTv5 = (ImageView) findViewById(R.id.cb_position5); + positionTv6 = (ImageView) findViewById(R.id.cb_position6); + positionTv7 = (ImageView) findViewById(R.id.cb_position7); + // positionTv8 = (ImageView) findViewById(R.id.cb_position8); + positionTv9 = (ImageView) findViewById(R.id.cb_position9); + positionTv10 = (ImageView) findViewById(R.id.cb_position10); + // positionTv11 = (ImageView) findViewById(R.id.cb_position11); + // positionTv12 = (ImageView) findViewById(R.id.cb_position12); + // positionTv13 = (ImageView) findViewById(R.id.cb_position13); + positionIv0 = (ImageView) findViewById(R.id.tv_position0); + positionIv1 = (ImageView) findViewById(R.id.tv_position1); + positionIv2 = (ImageView) findViewById(R.id.tv_position2); + positionIv3 = (ImageView) findViewById(R.id.tv_position3); + positionIv4 = (ImageView) findViewById(R.id.tv_position4); + positionIv5 = (ImageView) findViewById(R.id.tv_position5); + positionIv6 = (ImageView) findViewById(R.id.tv_position6); + positionIv7 = (ImageView) findViewById(R.id.tv_position7); + positionIv8 = (ImageView) findViewById(R.id.tv_position8); + positionIv9 = (ImageView) findViewById(R.id.tv_position9); + positionIv10 = (ImageView) findViewById(R.id.tv_position10); + positionIv11 = (ImageView) findViewById(R.id.tv_position11); + positionIv12 = (ImageView) findViewById(R.id.tv_position12); + positionIv13 = (ImageView) findViewById(R.id.tv_position13); + positionTv0.setOnClickListener(this); + positionTv1.setOnClickListener(this); + positionTv2.setOnClickListener(this); + positionTv3.setOnClickListener(this); + positionTv4.setOnClickListener(this); + positionTv5.setOnClickListener(this); + positionTv6.setOnClickListener(this); + positionTv7.setOnClickListener(this); + // positionTv8.setOnClickListener(this); + positionTv9.setOnClickListener(this); + positionTv10.setOnClickListener(this); + // positionTv11.setOnClickListener(this); + // positionTv12.setOnClickListener(this); + // positionTv13.setOnClickListener(this); + + switch (deviceAddress) { + case "客厅": + deviceAddress = "1"; + positionIv0.setVisibility(View.VISIBLE); + break; + case "主卧": + deviceAddress = "2"; + positionIv1.setVisibility(View.VISIBLE); + break; + case "次卧": + deviceAddress = "3"; + positionIv2.setVisibility(View.VISIBLE); + break; + case "儿童房": + deviceAddress = "4"; + positionIv3.setVisibility(View.VISIBLE); + break; + case "书房": + deviceAddress = "5"; + positionIv4.setVisibility(View.VISIBLE); + break; + case "厨房": + deviceAddress = "6"; + positionIv5.setVisibility(View.VISIBLE); + break; + case "餐厅": + deviceAddress = "7"; + positionIv6.setVisibility(View.VISIBLE); + break; + case "阳台": + deviceAddress = "8"; + positionIv7.setVisibility(View.VISIBLE); + break; + case "门口": + deviceAddress = "9"; + positionIv8.setVisibility(View.VISIBLE); + break; + case "卫生间": + deviceAddress = "10"; + positionIv9.setVisibility(View.VISIBLE); + break; + case "洗手间": + deviceAddress = "11"; + positionIv10.setVisibility(View.VISIBLE); + break; + case "公司": + deviceAddress = "12"; + positionIv11.setVisibility(View.VISIBLE); + break; + case "车库": + deviceAddress = "13"; + positionIv12.setVisibility(View.VISIBLE); + break; + case "其它": + deviceAddress = "0"; + positionIv13.setVisibility(View.VISIBLE); + break; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case cb_position0: + deviceAddress = "1"; + setRightShow(true, false, false, false, false, false, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position1: + deviceAddress = "2"; + setRightShow(false, true, false, false, false, false, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position2: + deviceAddress = "3"; + setRightShow(false, false, true, false, false, false, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position3: + deviceAddress = "4"; + setRightShow(false, false, false, true, false, false, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position4: + deviceAddress = "5"; + setRightShow(false, false, false, false, true, false, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position5: + deviceAddress = "6"; + setRightShow(false, false, false, false, false, true, false, false, false, false, false, false, false, false); + break; + case R.id.cb_position6: + deviceAddress = "7"; + setRightShow(false, false, false, false, false, false, true, false, false, false, false, false, false, false); + break; + case R.id.cb_position7: + deviceAddress = "8"; + setRightShow(false, false, false, false, false, false, false, true, false, false, false, false, false, false); + break; + case R.id.cb_position8: + deviceAddress = "9"; + setRightShow(false, false, false, false, false, false, false, false, true, false, false, false, false, false); + break; + case R.id.cb_position9: + deviceAddress = "10"; + setRightShow(false, false, false, false, false, false, false, false, false, true, false, false, false, false); + break; + case R.id.cb_position10: + deviceAddress = "11"; + setRightShow(false, false, false, false, false, false, false, false, false, false, true, false, false, false); + break; + case R.id.cb_position11: + deviceAddress = "12"; + setRightShow(false, false, false, false, false, false, false, false, false, false, false, true, false, false); + break; + case R.id.cb_position12: + deviceAddress = "13"; + setRightShow(false, false, false, false, false, false, false, false, false, false, false, false, true, false); + break; + case R.id.cb_position13: + deviceAddress = "0"; + setRightShow(false, false, false, false, false, false, false, false, false, false, false, false, false, true); + break; + } + } + + private void setRightShow(boolean b0, boolean b1, boolean b2, boolean b3, boolean b4, boolean b5, boolean b6, boolean b7, boolean b8, boolean b9, boolean b10, boolean b11, boolean b12, boolean b13) { + if (b0) { + positionIv0.setVisibility(View.VISIBLE); + } else { + positionIv0.setVisibility(View.GONE); + } + if (b1) { + positionIv1.setVisibility(View.VISIBLE); + } else { + positionIv1.setVisibility(View.GONE); + } + if (b2) { + positionIv2.setVisibility(View.VISIBLE); + } else { + positionIv2.setVisibility(View.GONE); + } + if (b3) { + positionIv3.setVisibility(View.VISIBLE); + } else { + positionIv3.setVisibility(View.GONE); + } + if (b4) { + positionIv4.setVisibility(View.VISIBLE); + } else { + positionIv4.setVisibility(View.GONE); + } + if (b5) { + positionIv5.setVisibility(View.VISIBLE); + } else { + positionIv5.setVisibility(View.GONE); + } + if (b6) { + positionIv6.setVisibility(View.VISIBLE); + } else { + positionIv6.setVisibility(View.GONE); + } + if (b7) { + positionIv7.setVisibility(View.VISIBLE); + } else { + positionIv7.setVisibility(View.GONE); + } + if (b8) { + positionIv8.setVisibility(View.VISIBLE); + } else { + positionIv8.setVisibility(View.GONE); + } + if (b9) { + positionIv9.setVisibility(View.VISIBLE); + } else { + positionIv9.setVisibility(View.GONE); + } + if (b10) { + positionIv10.setVisibility(View.VISIBLE); + } else { + positionIv10.setVisibility(View.GONE); + } + if (b11) { + positionIv11.setVisibility(View.VISIBLE); + } else { + positionIv11.setVisibility(View.GONE); + } + if (b12) { + positionIv12.setVisibility(View.VISIBLE); + } else { + positionIv12.setVisibility(View.GONE); + } + if (b13) { + positionIv13.setVisibility(View.VISIBLE); + } else { + positionIv13.setVisibility(View.GONE); + } + } + + private void saveUserInfo() { + + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case MODIFY_DEVICE_SUCCESS: + final ModifyDeviceEntity entity = (ModifyDeviceEntity) msg.obj; + ToastUtil.show(this, entity.getMsg()); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(DeviceA2PositionActivity.this, DeviceDetailActivity.class); + intent.putExtra("data", entity.getObj().getDeviceAddress()); + setResult(MODIFY_ADDRESS_RESULT, intent); + finish(); + } + }, 1000); + break; + case MODIFY_DEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceDetailActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceDetailActivity.java new file mode 100644 index 0000000..41ecbb3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceDetailActivity.java @@ -0,0 +1,1225 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.floor.ChooseRoomInFloorActivity; +import com.yonsz.z1.database.entity.LockEvent; +import com.yonsz.z1.database.entity.ResponeEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.Z1DetailEntity; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.devicelog.DeviceLog4Activity; +import com.yonsz.z1.fragment.person.upgrade.DeviceUpgradeActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.version5.adapter.DeviceTagAdapter; +import com.yonsz.z1.version5.adapter.RoomChooseAdapter; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.net.Constans.CHILD_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.CHILD_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_LOCK_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_DEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_DEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_RESULT; +import static com.yonsz.z1.net.Constans.NIGHT_LIGHT_FAIL; +import static com.yonsz.z1.net.Constans.NIGHT_LIGHT_SUCCESS; +import static com.yonsz.z1.net.Constans.OPEN_LOCK_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.VOLUME_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.VOLUME_SWITCH_FAIL; +import static com.yonsz.z1.net.Constans.VOLUME_SWITCH_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; + +/** + * Created by Administrator on 2017/6/12. + */ + +public class DeviceDetailActivity extends BaseActivity { + static boolean childControlLock;//童锁ll + private Z1DetailEntity entity1 = new Z1DetailEntity(); + private RelativeLayout deviceNameRl, devicePositionRl, deviceShareRl, deviceLogRl, deviceVoiceRl, deviceVoiceSetRl, deviceLockRl, deviceLockDeclRl, resetRl; + private TextView deviceNameTv, devicePositionTv, deleteDeviceTv; + private TitleView mTitle; + private int isOwner; + private String ziId; + private String userId; + private TextView deviceOwner, deviceHardVersion, deviceSolidVersion, deviceWifi; + private TextView deviceMac; + private TextView deviceMacTxt; + private ImageView noWifiBg; + private LinearLayout noWifiTv, ll_frequentOffline; + private Bitmap bitmap; + private CheckBox lockVoiceCb, voiceSetCb; + private CheckBox nightLightCb; + private LoadingDialog mLoadingDialog; + private TextView mVoiceStageTv, mVoiceStageSetTv, mVoiceStageTimeTv; + private String voiceControl, voiceControlRe = "6";//音量 + private String voiceSwitch;//语音开关 + private String childControl;//童锁 + private TextView mVoiceHigh; + private TextView updateSolidTv; + private ImageView deviceIcon; + private String deviceVersion; + private String nowVersion; + private boolean isShowAll; + private TextView tv_night_light_state; + private RelativeLayout rl_device_night_light; + private RelativeLayout rl_device_solid_version; + private String IsNewOtaFlag = "0"; + private String subVersion = "", standardCode = ""; + private String voiceId = ""; + private boolean isVirtual = false; + private RecyclerView deviceTagRc; + private List dataList = new ArrayList<>(); + private DeviceTagAdapter mAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_detail); + if (getIntent().getExtras() != null && getIntent().getExtras().get("ziId") != null) { + ziId = getIntent().getExtras().get("ziId").toString(); + deviceVersion = getIntent().getExtras().get("deviceVersion").toString(); + } + isOwner = (int) getIntent().getExtras().get("isOwner"); + initView(); + initListener(); + } + + private void initView() { + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + // noWifiBg = (ImageView) findViewById(R.id.iv_bg_no_wifi); + // bitmap = ((BitmapDrawable) (noWifiBg.getDrawable())).getBitmap(); + rl_device_night_light = (RelativeLayout) findViewById(R.id.rl_device_night_light); + rl_device_solid_version = (RelativeLayout) findViewById(R.id.rl_device_solid_version); + deviceIcon = (ImageView) findViewById(R.id.iv_device_icon); + mVoiceHigh = (TextView) findViewById(R.id.tv_voice_high); + updateSolidTv = (TextView) findViewById(R.id.tv_red_to_update_solid); + lockVoiceCb = (CheckBox) findViewById(R.id.cb_voice_lock); + nightLightCb = (CheckBox) findViewById(R.id.cb_voice_night_light); + voiceSetCb = (CheckBox) findViewById(R.id.cb_voice_set); + noWifiTv = (LinearLayout) findViewById(R.id.tv_no_wifi); + ll_frequentOffline = (LinearLayout) findViewById(R.id.ll_frequentOffline); + deviceOwner = (TextView) findViewById(R.id.tv_device_owner); + deviceHardVersion = (TextView) findViewById(R.id.tv_device_hard_version); + deviceSolidVersion = (TextView) findViewById(R.id.tv_device_solid_version); + deviceMac = (TextView) findViewById(R.id.iv_user_modifyPw_mac); + deviceMacTxt = (TextView) findViewById(R.id.tv_device_mac); + deviceWifi = (TextView) findViewById(R.id.tv_wifi_name); + tv_night_light_state = (TextView) findViewById(R.id.tv_night_light_state); + deviceLogRl = (RelativeLayout) findViewById(R.id.rl_device_log); + deviceVoiceRl = (RelativeLayout) findViewById(R.id.rl_device_voice); + deviceVoiceSetRl = (RelativeLayout) findViewById(R.id.rl_device_voice_set); + deviceLockRl = (RelativeLayout) findViewById(R.id.rl_device_lock); + deviceLockDeclRl = (RelativeLayout) findViewById(R.id.rl_lock_declare); + resetRl = (RelativeLayout) findViewById(R.id.rl_reset); + deviceNameRl = (RelativeLayout) findViewById(R.id.rl_device_detail_top); + devicePositionRl = (RelativeLayout) findViewById(R.id.rl_device_position); + deviceShareRl = (RelativeLayout) findViewById(R.id.rl_device_share); + deviceNameTv = (TextView) findViewById(R.id.tv_device_name); + devicePositionTv = (TextView) findViewById(R.id.tv_device_address); + deleteDeviceTv = (TextView) findViewById(R.id.tv_delete_device); + mTitle = (TitleView) findViewById(R.id.title_device_detail); + mTitle.setHead(getIntent().getExtras().get("deviceName").toString()); + deviceNameTv.setText(getIntent().getExtras().get("deviceName").toString()); + devicePositionTv.setText(getIntent().getExtras().get("devicePosition").toString()); + mVoiceStageTv = (TextView) findViewById(R.id.tv_voice_stage); + mVoiceStageSetTv = (TextView) findViewById(R.id.tv_voice_stage_set); + mVoiceStageTimeTv = (TextView) findViewById(R.id.tv_voice_stage_time); + deviceTagRc = (RecyclerView) findViewById(R.id.rc_device_tag); + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + /*if (null != deviceVersion && deviceVersion.equals("2")) { + + } else { + rl_device_night_light.setVisibility(View.GONE); + }*/ + if (DensityUtil.isNetworkConnected(this)) { + if (null != getIntent().getExtras().get("deviceIcon")) { + com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(getIntent().getExtras().get("deviceIcon").toString(), deviceIcon, UniKongApp.getHiApp().getImageLoaderOption()); + } else if (null != deviceVersion && deviceVersion.equals("2")) { + deviceIcon.setImageResource(R.drawable.pic_a2); + } else if (deviceHardVersion.getText().equals("A1联机版")) { + deviceIcon.setImageResource(R.drawable.pic_z1_online); + } else { + deviceIcon.setImageResource(R.drawable.pic_a1); + } + // queryDeviceDetail(); + } else { + ToastUtil.show(this, R.string.net_error); + } + if (isOwner == 1) { + /*if (mObjEntity.getIsNewOtaFlag().equals("1")) { + updateSolidTv.setVisibility(View.VISIBLE); + IsNewOtaFlag = "1"; + } else { + updateSolidTv.setVisibility(View.GONE); + IsNewOtaFlag = "0"; + }*/ + } + } + + private void initListener() { + ll_frequentOffline.setOnClickListener(this); + deviceMac.setOnClickListener(this); + deviceHardVersion.setOnClickListener(this); + lockVoiceCb.setOnClickListener(this); + nightLightCb.setOnClickListener(this); + voiceSetCb.setOnClickListener(this); + deviceNameRl.setOnClickListener(this); + devicePositionRl.setOnClickListener(this); + deviceShareRl.setOnClickListener(this); + deleteDeviceTv.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (DensityUtil.isNetworkConnected(getApplicationContext())) { + if (isVirtual) { + ToastUtil.show(DeviceDetailActivity.this, "虚拟家庭不支持该操作"); + return; + } + if (null != getIntent().getExtras().get("upgradeStatus") && !getIntent().getExtras().get("upgradeStatus").toString().isEmpty() + && (getIntent().getExtras().get("upgradeStatus").toString().equals("3") || getIntent().getExtras().get("upgradeStatus").toString().equals("5"))) { + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + deleteDevice(); + break; + } + } + }); + dialog.setContent("请尝试重新升级直到成功为止,否则该网关只能返厂维修,确定要删除吗?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + } + } + }); + dialog.setContent("升级失败之后请继续尝试重新升级,否则该网关将无法继续使用,确定要删除吗?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else { + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + deleteDevice(); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + } else { + ToastUtil.show(DeviceDetailActivity.this, R.string.net_error); + } + } + }); + noWifiTv.setOnClickListener(this); + deviceLogRl.setOnClickListener(this); + deviceVoiceRl.setOnClickListener(this); + deviceVoiceSetRl.setOnClickListener(this); + resetRl.setOnClickListener(this); + rl_device_solid_version.setOnClickListener(this); + /*noWifiBg.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View arg0, MotionEvent arg1) { + // TODO Auto-generated method stub + if (bitmap.getPixel((int) (arg1.getX()), ((int) arg1.getY())) == 0) { + Log.i("Test", "透明区域"); + return true;//透明区域返回true + } + return false; + } + });*/ + /*deviceMac.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setText(deviceMac.getText()); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可 + cmb.getText(); + return false; + } + });*/ + } + + private void queryDeviceDetail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("userId", userId); + netWorkUtil.requestGetByAsy(NetWorkUrl.QUERY_DEVICE_DETAIL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceDetail", "ShareDeviceActivity onSuccess()" + respone); + Z1DetailEntity obj = JSON.parseObject(respone, Z1DetailEntity.class); + if (-401 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USER_SESSION_NULL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_DETAIL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_DETAIL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_DETAIL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void deleteDevice() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + util.requestPostByAsynewApi(NetWorkUrl.DELETE_DEVICE_ZI, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ResponeEntity entity = JSON.parseObject(respone, ResponeEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(DELETE_DEVICE_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DELETE_DEVICE_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DELETE_DEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case DELETE_DEVICE_SUCCESS: + ResponeEntity entity = (ResponeEntity) msg.obj; + ToastUtil.show(this, "删除成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + /*Intent intent = new Intent(DeviceDetailActivity.this, MainActivity.class); + startActivity(intent);*/ + finish(); + } + }, 1000); + break; + case DELETE_DEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case GET_USER_SESSION_NULL: + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + SharedpreferencesUtil.save(Constans.TOKENID, ""); + NettyHandlerUtil.closeCtx(); + ToastUtil.show(DeviceDetailActivity.this, "用户在其他手机登陆"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(DeviceDetailActivity.this, LoginActivity.class); + startActivity(intent); + finish(); + } + }, 1000); + break; + case QUERY_DEVICE_DETAIL_SUCCESS: + entity1 = (Z1DetailEntity) msg.obj; + if (null != entity1.getData()) { + isVirtual = entity1.getData().isVirtual();//为什么怎么样都是false呀 + if (entity1.getData().getWifiName().equals("wifi_virtual")) { + isVirtual = true; + } + setDeviceInfo(entity1); + } else { + voiceSwitch = "0"; + childControlLock = true; + mVoiceHigh.setVisibility(View.GONE); + mVoiceStageTv.setText("音量已关闭"); + } + break; + case OPEN_LOCK_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + lockVoiceCb.setChecked(true); + childControlLock = true; + queryDeviceDetail(); + break; + case CLOSE_LOCK_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + lockVoiceCb.setChecked(false); + childControlLock = false; + queryDeviceDetail(); + break; + case VOLUME_CONTROL_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + String obj1 = (String) msg.obj; + if (obj1.equals("1")) { + voiceSetCb.setChecked(true); + } else { + voiceSetCb.setChecked(false); + } + break; + case CHILD_CONTROL_SUCCESS: + // volumeSwitch("00"); + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + String obj = (String) msg.obj; + if (obj.equals("1")) { + lockVoiceCb.setChecked(true); + } else { + lockVoiceCb.setChecked(false); + } + break; + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, "重置成功"); + break; + case CHILD_CONTROL_FAIL: + case NIGHT_LIGHT_FAIL: + case VOLUME_SWITCH_FAIL: + case QUERY_DEVICE_DETAIL_FAIL: + case GET_USERDEVICES4_SIMPLEINFO_FAIL: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case NIGHT_LIGHT_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + if (nightLightCb.isChecked()) { + tv_night_light_state.setText("夜灯已关闭"); + nightLightCb.setChecked(false); + } else { + tv_night_light_state.setText("夜灯已打开"); + nightLightCb.setChecked(true); + } + break; + case VOLUME_SWITCH_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ll_frequentOffline.setVisibility(View.GONE); + break; + } + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.iv_user_modifyPw_mac: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setText(deviceMacTxt.getText()); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可 + cmb.getText();//获取粘贴信息 + Toast.makeText(DeviceDetailActivity.this, "复制成功!", Toast.LENGTH_SHORT).show(); + break; + case R.id.rl_device_detail_top: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + if (DensityUtil.isNetworkConnected(this)) { + intent = new Intent(DeviceDetailActivity.this, RenameDeviceActivity.class); + intent.putExtra("name", deviceNameTv.getText().toString()); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, MODIFY_NAME_RESULT); + } else { + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.rl_device_position: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + /*if (DensityUtil.isNetworkConnected(this)) { + // intent = new Intent(DeviceDetailActivity.this, DevicePositionActivity.class); + intent = new Intent(DeviceDetailActivity.this, DeviceA2PositionActivity.class); + intent.putExtra("name", devicePositionTv.getText().toString()); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, MODIFY_ADDRESS_RESULT); + } else { + ToastUtil.show(this, R.string.net_error); + }*/ + if (!TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + intent = new Intent(this, ChooseRoomInFloorActivity.class); + intent.putExtra("floorList", homeListEntity.getData().get(deviceNumListPosition).getFloorList()); + intent.putExtra("houseTypeName", "房间选择"); + intent.putExtra("deviceType", "100"); + intent.putExtra("deviceModel", "0"); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("ziId", ziId); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + } else { + intent = new Intent(getActivity(), ModifyRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", "000"); + intent.putExtra("deviceModel", "0"); + intent.putExtra("addressId", AddressNameUtil.getAddressId(devicePositionTv.getText().toString())); + intent.putExtra("deviceId", ziId); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + } + break; + case R.id.rl_device_share: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + if (DensityUtil.isNetworkConnected(this)) { + if (isOwner == 1) { + intent = new Intent(DeviceDetailActivity.this, ShareDeviceActivity.class); + intent.putExtra("ziId", ziId); + startActivity(intent); + } else { + ToastUtil.show(DeviceDetailActivity.this, "您没有分享的权限"); + } + } else { + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.tv_no_wifi: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + startActivity(new Intent(DeviceDetailActivity.this, DeviceLossActivity.class)); + break; + case R.id.rl_device_log: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + if (DensityUtil.isNetworkConnected(this)) { + intent = new Intent(DeviceDetailActivity.this, DeviceLog4Activity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("isOwner", isOwner); + startActivity(intent); + } else { + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.rl_device_voice: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + if (DensityUtil.isNetworkConnected(this)) { + if (null != entity1.getData() && !TextUtils.isEmpty(entity1.getData().getOnline()) && entity1.getData().getOnline().equals("1")) { + intent = new Intent(DeviceDetailActivity.this, DeviceVoiceActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("isOwner", isOwner); + intent.putExtra("voiceControl", voiceControl); + intent.putExtra("voiceSwitch", voiceSwitch); + startActivity(intent); + } else { + ToastUtil.show(this, "设备不在线,设置失败"); + } + } else { + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.rl_device_voice_set: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + if (DensityUtil.isNetworkConnected(this)) { + if (null != entity1.getData() && !TextUtils.isEmpty(entity1.getData().getOnline()) && entity1.getData().getOnline().equals("1")) { + intent = new Intent(DeviceDetailActivity.this, DeviceVoiceSetActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("isOwner", isOwner); + intent.putExtra("voiceSwitch", voiceSwitch); + intent.putExtra("voiceId", voiceId); + if (mVoiceStageSetTv.getText().toString().isEmpty()) { + intent.putExtra("voiceControl", "1"); + intent.putExtra("voiceControlRe", "6"); + intent.putExtra("voiceTime", "00:00 - 20:00"); + } else { + intent.putExtra("voiceControl", mVoiceStageSetTv.getText().toString()); + intent.putExtra("voiceControlRe", voiceControlRe); + intent.putExtra("voiceTime", mVoiceStageTimeTv.getText().toString()); + } + startActivity(intent); + } else { + ToastUtil.show(this, "设备不在线,设置失败"); + } + } else { + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.cb_voice_set: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + if (DensityUtil.isNetworkConnected(this)) { + if (mVoiceStageSetTv.getText().toString().isEmpty() || voiceId.isEmpty()) { + if (null != entity1.getData() && !TextUtils.isEmpty(entity1.getData().getOnline()) && entity1.getData().getOnline().equals("1")) { + intent = new Intent(DeviceDetailActivity.this, DeviceVoiceSetActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("isOwner", isOwner); + intent.putExtra("voiceSwitch", voiceSwitch); + intent.putExtra("voiceId", voiceId); + intent.putExtra("voiceControl", "1"); + intent.putExtra("voiceControlRe", "6"); + intent.putExtra("voiceTime", "00:00 - 20:00"); + startActivity(intent); + } else { + ToastUtil.show(this, "设备不在线,设置失败"); + } + } else { + if (entity1.getData().getOnline().equals("1")) { + if (voiceSetCb.isChecked()) { + voiceSetCb.setChecked(false); + setNoDisturb("1"); + } else { + voiceSetCb.setChecked(true); + setNoDisturb("0"); + } + } else { + if (voiceSetCb.isChecked()) { + voiceSetCb.setChecked(false); + } else { + voiceSetCb.setChecked(true); + } + ToastUtil.show(this, "设备不在线,设置失败"); + } + } + } else { + if (voiceSetCb.isChecked()) { + voiceSetCb.setChecked(false); + } else { + voiceSetCb.setChecked(true); + } + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.cb_voice_lock: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + if (DensityUtil.isNetworkConnected(this)) { + if (null != entity1.getData() && entity1.getData().getOnline().equals("1")) { + if (lockVoiceCb.isChecked()) { + lockVoiceCb.setChecked(false); + initLoadDialog(); + // childControl("0f"); + childLockSwitch("1"); + } else { + lockVoiceCb.setChecked(true); + initLoadDialog(); + // childControl("00"); + childLockSwitch("0"); + } + } else { + if (lockVoiceCb.isChecked()) { + lockVoiceCb.setChecked(false); + } else { + lockVoiceCb.setChecked(true); + } + ToastUtil.show(this, "设备不在线,设置失败"); + } + } else { + if (lockVoiceCb.isChecked()) { + lockVoiceCb.setChecked(false); + } else { + lockVoiceCb.setChecked(true); + } + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.cb_voice_night_light: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + if (DensityUtil.isNetworkConnected(this)) { + if (entity1.getData().getOnline().equals("1")) { + if (nightLightCb.isChecked()) { + nightLightCb.setChecked(false); + initLoadDialog(); + nightLight("1"); + } else { + nightLightCb.setChecked(true); + initLoadDialog(); + nightLight("0"); + } + } else { + if (nightLightCb.isChecked()) { + nightLightCb.setChecked(false); + } else { + nightLightCb.setChecked(true); + } + ToastUtil.show(this, "设备不在线,设置失败"); + } + } else { + if (nightLightCb.isChecked()) { + nightLightCb.setChecked(false); + } else { + nightLightCb.setChecked(true); + } + ToastUtil.show(this, R.string.net_error); + } + break; + case R.id.rl_device_solid_version: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + if (isOwner == 1) { + if (null != nowVersion) { + intent = new Intent(this, SolidVersionActivity.class); + intent.putExtra("deviceVersion", deviceVersion); + intent.putExtra("nowVersion", nowVersion); + intent.putExtra("ziId", ziId); + intent.putExtra("isNewOtaFlag", IsNewOtaFlag); + intent.putExtra("subVersion", subVersion); + intent.putExtra("standardCode", standardCode); + startActivity(intent); + } + } else { + ToastUtil.show(DeviceDetailActivity.this, "您没有升级权限"); + } + break; + case R.id.tv_device_hard_version: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + if (deviceHardVersion.getText().equals("A1单机版")) { + intent = new Intent(getActivity(), DeviceUpgradeActivity.class); + startActivity(intent); + } + break; + case R.id.rl_reset: + if (isVirtual) { + ToastUtil.show(this, "虚拟家庭不支持该操作"); + return; + } + ConfirmDialog dialog = new ConfirmDialog(DeviceDetailActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + aideviceReset(); + break; + } + } + }); + dialog.setContent("是否确定恢复出厂设置?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.ll_frequentOffline: + ConfirmDialog dialog1 = new ConfirmDialog(DeviceDetailActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + ignoreFrequentOffline(); + break; + } + } + }); + dialog1.setContent("是否忽略本段时间频繁检测?"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + break; + } + } + + @Override + public void onResume() { + super.onResume(); + queryDeviceDetail(); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.setMessage("设置中…"); + mLoadingDialog.show(); + } + + private void setNoDisturb(String open) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", voiceId); + map.put("ziId", ziId); + map.put("open", open); + map.put("volume", mVoiceStageSetTv.getText().toString()); + util.requestPostByAsynewApi(NetWorkUrl.AIDEVICE_SETNODISTURB, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("setNoDisturb", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(VOLUME_CONTROL_SUCCESS); + msg.obj = open; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHILD_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHILD_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void childLockSwitch(final String sendMsg) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("lock", sendMsg); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.AIDEVICE_CHILDLOCKSWITCH, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("childLockSwitch", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CHILD_CONTROL_SUCCESS); + msg.obj = sendMsg; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHILD_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHILD_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void aideviceReset() { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + util.requestGetByAsy(NetWorkUrl.AIDEVICE_RESET, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("aideviceReset", respone); + DeviceSimpleEntity entity = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = entity; + msg.arg1 = 0; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USERDEVICES4_SIMPLEINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void ignoreFrequentOffline() { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + util.requestPostByAsynewApi(NetWorkUrl.IGNORE_FREQUENTOFFLINE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("ignoreFrequentOffline", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void nightLight(String sendMsg) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); +// map.put("userId", userId); + map.put("ziId", ziId); + map.put("open", sendMsg); + util.requestPostByAsynewApi(NetWorkUrl.NIGHT_LIGHT, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("nightLight", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(NIGHT_LIGHT_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(NIGHT_LIGHT_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(NIGHT_LIGHT_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void setDeviceInfo(Z1DetailEntity entity1) { + deviceMacTxt.setText(ziId); + if (entity1.getData().getOnline().equals("1")) { + noWifiTv.setVisibility(View.GONE); + deviceLockDeclRl.setVisibility(View.VISIBLE); + } else { + noWifiTv.setVisibility(View.VISIBLE); + deviceWifi.setText(R.string.Unconnected); + deviceLockDeclRl.setVisibility(View.GONE); + } + if (entity1.getData() != null) { + subVersion = entity1.getData().getSubVersion(); + standardCode = entity1.getData().getStandardCode(); + deviceOwner.setText(entity1.getData().getOwnerUserName()); + if (!TextUtils.isEmpty(entity1.getData().getIcon())) { + com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(entity1.getData().getIcon(), deviceIcon, UniKongApp.getHiApp().getImageLoaderOption()); + } + deviceHardVersion.setText(entity1.getData().getStandardName()); + deviceSolidVersion.setText(entity1.getData().getFirmwareVersion()); + nowVersion = entity1.getData().getFirmwareVersion(); + if (entity1.getData().getOnline().equals("1")) { + noWifiTv.setVisibility(View.GONE); + if (entity1.getData().getWifiName() != null) { + deviceWifi.setText(entity1.getData().getWifiName()); + } + if (entity1.getData().isFrequentOffline()) { + ll_frequentOffline.setVisibility(View.VISIBLE); + } else { + ll_frequentOffline.setVisibility(View.GONE); + } + } else { + noWifiTv.setVisibility(View.VISIBLE); + deviceWifi.setText("未连接"); + } + + if (entity1.getData().getChildControl() != null) { + switch (entity1.getData().getChildControl()) { + case "0": + childControl = "0"; + lockVoiceCb.setChecked(false); + childControlLock = false; + break; + case "1": + childControl = "1"; + lockVoiceCb.setChecked(true); + childControlLock = true; + break; + } + } + + if (entity1.getData().getStandardName().equals("小水滴") || entity1.getData().getStandardCode().equals("YK1") + || entity1.getData().getStandardCode().contains("B3") || entity1.getData().getStandardCode().contains("B4")) { + deviceVoiceRl.setVisibility(View.GONE); + deviceVoiceSetRl.setVisibility(View.GONE); + deviceLockRl.setVisibility(View.GONE); + deviceLockDeclRl.setVisibility(View.GONE); + } + if (entity1.getData().getStandardCode().equals("A2-L") || entity1.getData().getStandardCode().equals("D1-L")) { + rl_device_night_light.setVisibility(View.VISIBLE); + } else { + rl_device_night_light.setVisibility(View.GONE); + } + + if (entity1.getData().getVoiceControl() != null && childControlLock) { + setVoiceControl(entity1); + mVoiceHigh.setVisibility(View.GONE); + mVoiceStageTv.setText("音量已关闭"); + } else { + if (entity1.getData().getVoiceControl() != null && entity1.getData().getVoiceSwitch().equals("1")) { + mVoiceHigh.setVisibility(View.VISIBLE); + setVoiceControl(entity1); + mVoiceStageTv.setText(voiceControl); + } else { + if (entity1.getData().getVoiceControl() != null) { + setVoiceControl(entity1); + mVoiceStageTv.setText(voiceControl); + } + mVoiceHigh.setVisibility(View.GONE); + mVoiceStageTv.setText("音量已关闭"); + } + } + if (entity1.getData().getNoDisturb() != null) { + voiceId = entity1.getData().getNoDisturb().getId(); + mVoiceStageSetTv.setText(entity1.getData().getNoDisturb().getVolume()); + if (!entity1.getData().getNoDisturb().getPreVolume().isEmpty()) { + voiceControlRe = entity1.getData().getNoDisturb().getPreVolume(); + } + mVoiceStageTimeTv.setText(entity1.getData().getNoDisturb().getStartTime() + " - " + entity1.getData().getNoDisturb().getEndTime()); + if (entity1.getData().getNoDisturb().getOpen().equals("1")) { + voiceSetCb.setChecked(true); + } else { + voiceSetCb.setChecked(false); + } + } + if (entity1.getData().getVoiceSwitch() != null) { + switch (entity1.getData().getVoiceSwitch()) { + case "0": + voiceSwitch = "0"; + break; + case "1": + voiceSwitch = "1"; + break; + } + } else { + voiceSwitch = "0"; + } + + if (null != entity1.getData().getLightFlag() && entity1.getData().getLightFlag().equals("1")) { + nightLightCb.setChecked(true); + tv_night_light_state.setText("夜灯已打开"); + } else { + nightLightCb.setChecked(false); + tv_night_light_state.setText("夜灯已关闭"); + } + + if (isOwner == 1) { + if (null != entity1.getData().getIsNewOtaFlag() && entity1.getData().getIsNewOtaFlag().equals("1")) { + updateSolidTv.setVisibility(View.VISIBLE); + IsNewOtaFlag = "1"; + } else { + updateSolidTv.setVisibility(View.GONE); + IsNewOtaFlag = "0"; + } + } + //小艾标签 + if (null != entity1.getData().getTags() && entity1.getData().getTags().size() != 0) { + dataList = entity1.getData().getTags(); + GridLayoutManager manager = new GridLayoutManager(this, 4); + deviceTagRc.setLayoutManager(manager); + mAdapter = new DeviceTagAdapter(this, dataList, false); + deviceTagRc.setAdapter(mAdapter); + } + } + } + + private void setVoiceControl(Z1DetailEntity entity1) { + voiceControl = entity1.getData().getVoiceControl(); + /*switch (entity1.getObj().getVoiceControl()) { + case "17": + voiceControl = "1"; + break; + case "18": + voiceControl = "2"; + break; + case "19": + case "1": + voiceControl = "3"; + break; + case "20": + voiceControl = "4"; + break; + case "21": + voiceControl = "5"; + break; + case "22": + voiceControl = "6"; + break; + case "23": + case "2": + voiceControl = "7"; + break; + case "24": + voiceControl = "8"; + break; + case "25": + voiceControl = "9"; + break; + case "26": + case "3": + voiceControl = "10"; + break; + }*/ + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(LockEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("打开成功")) { + Message message = new Message(); + message.what = OPEN_LOCK_SUCCESS; + mHandler.sendMessage(message); + } else { + Message message = new Message(); + message.what = CLOSE_LOCK_SUCCESS; + mHandler.sendMessage(message); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_NAME_RESULT: + if (data != null && data.getExtras().get("data") != null) { + deviceNameTv.setText((String) data.getExtras().get("data")); + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("devicePosition") != null) { + devicePositionTv.setText(AddressNameUtil.getAddressName(data.getExtras().get("devicePosition").toString())); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceLogActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceLogActivity.java new file mode 100644 index 0000000..e2dc6bb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceLogActivity.java @@ -0,0 +1,231 @@ +package com.yonsz.z1.mine.mydevice; + +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.listener.OnRecyclerLoadDataListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LoadMoreRecyclerView; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.GET_LOG_FAIL; +import static com.yonsz.z1.net.Constans.GET_LOG_SUCCESS; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_FAIL; +import static com.yonsz.z1.net.Constans.TRUNCATE_LISTINFO_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.TRUNCATE_LISTINFO; + +/** + * Created by Administrator on 2017/8/31. + */ +public class DeviceLogActivity extends BaseActivity { + private RelativeLayout mNoRecord; + private int DATA_TYPE; + private LoadingDialog mLoadingDialog; + private boolean isRefresh; + private boolean isLoadMore; + private int page = 1; + private TitleView mTitleView; + private List mDatas; + private List> mDatasRercord = new ArrayList<>(); + private LoadMoreRecyclerView mLogRecycler; + private LogAdapter mLogAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_log); + initView(); + DATA_TYPE = Constans.REFRESH_DATA; + initLoadDialog(); + loadListViewData(page); + } + + private void loadListViewData(int page) { + //当有网络的时候 + if (DensityUtil.isNetworkConnected(this)) { + getListMessage(page); + } + } + + private void getListMessage(final int page) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void initView() { + mLogRecycler = (LoadMoreRecyclerView) findViewById(R.id.log_recyclerview); + RecyclerViewNoBugLinearLayoutManager manager = new RecyclerViewNoBugLinearLayoutManager(DeviceLogActivity.this); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mLogRecycler.setLayoutManager(manager); + mDatas = new ArrayList<>(); + mLogAdapter = new LogAdapter(DeviceLogActivity.this, mDatasRercord); + mNoRecord = (RelativeLayout) findViewById(R.id.ll_no_record); + mLogRecycler.setAdapter(mLogAdapter); + mLogRecycler.setOnLoadDataListener(new OnRecyclerLoadDataListener() { + @Override + public void onLoadMore() { + if (!isLoadMore) { + isLoadMore = true; + page++; + DATA_TYPE = Constans.MORE_DATA; + getListMessage(page); + } + } + }); + mTitleView = (TitleView) findViewById(R.id.title_device_log); + mTitleView.setHead(R.string.device_log); + if (getIntent().getExtras().get("isOwner").toString().equals("1")) { + mTitleView.setHeadFuntionTxt(R.string.clear); + } else { + mTitleView.setHeadFuntionTxtGone(); + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + truncateListInfo(); + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void truncateListInfo() { + + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_LOG_SUCCESS: + mLoadingDialog.dismiss(); + int arg1 = msg.arg1; + if (msg.obj != null && page <= arg1) { + onSuccess((List) msg.obj); + } else { + Toast.makeText(DeviceLogActivity.this, "我是有底线的", Toast.LENGTH_LONG).show(); + } + break; + case GET_LOG_FAIL: + + break; + case TRUNCATE_LISTINFO_SUCCESS: + mDatasRercord.clear(); + mLogAdapter.notifyDataSetChanged(); + break; + case TRUNCATE_LISTINFO_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void onSuccess(List logEntities) { + for (int j = 0; j < mDatasRercord.size(); j++) { + for (int k = 0; k < mDatasRercord.get(j).size(); k++) { + String id = mDatasRercord.get(j).get(k).getId(); + for (int f = 0; f < logEntities.size(); f++) { + if (logEntities.get(f).getId().equals(id)) { + logEntities.remove(logEntities.get(f)); + } + } + } + } + if (logEntities.size() > 0) { + String createDate = logEntities.get(0).getCreateDate().substring(0, 10); + if (mDatasRercord.size() == 0 || (mDatasRercord.get(0) != null && logEntities != null && logEntities.size() > 0 && !logEntities.get(0).getId().equals(mDatasRercord.get(0).get(0).getId()))) { + if (DATA_TYPE == Constans.REFRESH_DATA) { + isRefresh = false; + mDatas = new ArrayList<>(); + mDatasRercord.clear(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + if (mDatas.size() == logEntities.size()) { + mDatasRercord.add(mDatas); + } else if (i == logEntities.size() - 1) { + mDatasRercord.add(mDatas); + } + } + } else { + isLoadMore = false; + if (mDatas != null && mDatas.get(mDatas.size() - 1).getCreateDate().substring(0, 10).equals(createDate)) { + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } else { + mDatas = new ArrayList<>(); + for (int i = 0; i < logEntities.size(); i++) { + if (logEntities.get(i).getCreateDate().substring(0, 10).toString().equals(createDate)) { + mDatas.add(logEntities.get(i)); + } else { + createDate = logEntities.get(i).getCreateDate().substring(0, 10).toString(); + mDatasRercord.add(mDatas); + mDatas = new ArrayList<>(); + mDatas.add(logEntities.get(i)); + } + } + } + if (mDatasRercord.size() >= 2) { + if (mDatasRercord.get(0) == mDatasRercord.get(1)) { + mDatasRercord.remove(1); + } + } + } + mLogAdapter.notifyDataSetChanged(); + } else { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + isRefresh = false; + isLoadMore = false; + DATA_TYPE = -1; + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceLogEntity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceLogEntity.java new file mode 100644 index 0000000..99e8029 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceLogEntity.java @@ -0,0 +1,644 @@ +package com.yonsz.z1.mine.mydevice; + +import java.util.List; + +/** + * Created by Administrator on 2017/8/31. + */ + +public class DeviceLogEntity { + + /** + * msg : 成功。 + * flag : 1 + * obj : {"maxResults":10,"pageNo":1,"count":4,"firstResult":0,"pageSize":10,"list":[{"viewFlag":"0","updateDate":"2017-08-30 16:32:04","msgType":"系统消息","ziId":"ACCF23DAAF20","msgFrom":"user","id":"e33aa42e50ad4ad5a5a4d791545c0e5f","isNewRecord":false,"msgInfo":"用户1hhg在2017-08-30 16:32删除电视设备成功。","user":{"admin":false,"loginFlag":"1","id":"13760248280","isNewRecord":false,"roleNames":""},"createDate":"2017-08-30 16:32:04"},{"viewFlag":"0","updateDate":"2017-08-30 16:31:52","msgType":"系统消息","ziId":"ACCF23DAAF20","msgFrom":"user","id":"f745f2a705674b8f923c969b80b5786a","isNewRecord":false,"msgInfo":"用户1hhg在2017-08-30 16:31删除风扇设备成功。","user":{"admin":false,"loginFlag":"1","id":"13760248280","isNewRecord":false,"roleNames":""},"createDate":"2017-08-30 16:31:52"}]} + */ + private String msg; + private int flag; + private ObjEntity obj; + /** + * code : 1 + * data : [{"appId":"1103","createDate":1628193576000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":679229,"logType":"ai.line.on","macId":"F0FE6B914DBF","sourceType":"ai.self","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"智能网关B3-L-A-01上线","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628191821000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":679181,"logType":"ai.line.off","macId":"F0FE6B914DBF","sourceType":"ai.self","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"智能网关B3-L-A-01离线","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628191821000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":679180,"logType":"ai.line.off","macId":"F0FE6B914DBF","sourceType":"ai.self","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"智能网关B3-L-A-01离线","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628190090000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":679101,"logType":"ai.line.on","macId":"F0FE6B914DBF","sourceType":"ai.self","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"智能网关B3-L-A-01上线","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628149074000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670336,"logType":"ai.line.on","macId":"F0FE6B914DBF","sourceType":"ai.self","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"智能网关B3-L-A-01上线","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628149047000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670330,"logType":"ai.net","macId":"F0FE6B914DBF","sourceType":"app.android","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"用户搜索添加网关。","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628149031000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670310,"logType":"ai.del","macId":"F0FE6B914DBF","sourceType":"app.android","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-01","title":"用户删除网关。","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628148883000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670287,"logType":"ai.net","macId":"F0FE6B914DBF","sourceType":"app.android","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-01","title":"用户搜索添加网关。","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628148858000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670285,"logType":"ai.del","macId":"F0FE6B914DBF","sourceType":"app.android","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-01","title":"用户删除网关。","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628148840000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670282,"logType":"ai.net","macId":"F0FE6B914DBF","sourceType":"app.android","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-01","title":"用户搜索添加网关。","userId":"e0abf2d6924a771052cd714fb209fa5b"}] + */ + + private int code; + private DataBean data; + + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public int getFlag() { + return flag; + } + + public void setFlag(int flag) { + this.flag = flag; + } + + public ObjEntity getObj() { + return obj; + } + + public void setObj(ObjEntity obj) { + this.obj = obj; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class ObjEntity { + /** + * maxResults : 10 + * pageNo : 1 + * count : 4 + * firstResult : 0 + * pageSize : 10 + * list : [{"viewFlag":"0","updateDate":"2017-08-30 16:32:04","msgType":"系统消息","ziId":"ACCF23DAAF20","msgFrom":"user","id":"e33aa42e50ad4ad5a5a4d791545c0e5f","isNewRecord":false,"msgInfo":"用户1hhg在2017-08-30 16:32删除电视设备成功。","user":{"admin":false,"loginFlag":"1","id":"13760248280","isNewRecord":false,"roleNames":""},"createDate":"2017-08-30 16:32:04"},{"viewFlag":"0","updateDate":"2017-08-30 16:31:52","msgType":"系统消息","ziId":"ACCF23DAAF20","msgFrom":"user","id":"f745f2a705674b8f923c969b80b5786a","isNewRecord":false,"msgInfo":"用户1hhg在2017-08-30 16:31删除风扇设备成功。","user":{"admin":false,"loginFlag":"1","id":"13760248280","isNewRecord":false,"roleNames":""},"createDate":"2017-08-30 16:31:52"}] + */ + private int maxResults; + private int pageNo; + private int count; + private int firstResult; + private int pageSize; + private List list; + + public int getMaxResults() { + return maxResults; + } + + public void setMaxResults(int maxResults) { + this.maxResults = maxResults; + } + + public int getPageNo() { + return pageNo; + } + + public void setPageNo(int pageNo) { + this.pageNo = pageNo; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public int getFirstResult() { + return firstResult; + } + + public void setFirstResult(int firstResult) { + this.firstResult = firstResult; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class LogEntity { + /** + * viewFlag : 0 + * updateDate : 2017-08-30 16:32:04 + * msgType : 系统消息 + * ziId : ACCF23DAAF20 + * msgFrom : user + * id : e33aa42e50ad4ad5a5a4d791545c0e5f + * isNewRecord : false + * msgInfo : 用户1hhg在2017-08-30 16:32删除电视设备成功。 + * user : {"admin":false,"loginFlag":"1","id":"13760248280","isNewRecord":false,"roleNames":""} + * createDate : 2017-08-30 16:32:04 + * controCmd : + * controlTitle : 空调电源 + * controlType : 2 + * deviceType : 001 + * macId : F0FE6BC79735 + * userName : 18824634310 + */ + private String viewFlag; + private String updateDate; + private String msgType; + private String ziId; + private String msgFrom; + private String id; + private boolean isNewRecord; + private String msgInfo; + private UserEntity user; + private String createDate; + private String controCmd; + private String controlTitle; + private String controlType; + private String deviceType; + private String macId; + private String userName; + /** + * createDate : 1560993607000 + * deviceId : 4F00417PAZBB75C + * deviceModel : 0 + * id : 25 + * keyId : 6 + * keyName : FingerPrint6 + * keyType : fingerPrint + * number : 1 + * openFlag : 1 + * result : 1 + * text : 使用指纹开锁成功 + * time : 2019-06-20 09:20:05 + * updateDate : 1560993607000 + * userId : e79dbf0cf5514e559505b596db7f770f + */ + + private String deviceId; + private String deviceModel; + private String keyId; + private String keyName; + private String keyType; + private int number; + private String openFlag; + private String result; + private String text; + private String time; + private String userId; + + + public String getViewFlag() { + return viewFlag; + } + + public void setViewFlag(String viewFlag) { + this.viewFlag = viewFlag; + } + + public String getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(String updateDate) { + this.updateDate = updateDate; + } + + public String getMsgType() { + return msgType; + } + + public void setMsgType(String msgType) { + this.msgType = msgType; + } + + public String getZiId() { + return ziId; + } + + public void setZiId(String ziId) { + this.ziId = ziId; + } + + public String getMsgFrom() { + return msgFrom; + } + + public void setMsgFrom(String msgFrom) { + this.msgFrom = msgFrom; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public boolean isIsNewRecord() { + return isNewRecord; + } + + public void setIsNewRecord(boolean isNewRecord) { + this.isNewRecord = isNewRecord; + } + + public String getMsgInfo() { + return msgInfo; + } + + public void setMsgInfo(String msgInfo) { + this.msgInfo = msgInfo; + } + + public UserEntity getUser() { + return user; + } + + public void setUser(UserEntity user) { + this.user = user; + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getControCmd() { + return controCmd; + } + + public void setControCmd(String controCmd) { + this.controCmd = controCmd; + } + + public String getControlTitle() { + return controlTitle; + } + + public void setControlTitle(String controlTitle) { + this.controlTitle = controlTitle; + } + + public String getControlType() { + return controlType; + } + + public void setControlType(String controlType) { + this.controlType = controlType; + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getMacId() { + return macId; + } + + public void setMacId(String macId) { + this.macId = macId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceModel() { + return deviceModel; + } + + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; + } + + public String getKeyId() { + return keyId; + } + + public void setKeyId(String keyId) { + this.keyId = keyId; + } + + public String getKeyName() { + return keyName; + } + + public void setKeyName(String keyName) { + this.keyName = keyName; + } + + public String getKeyType() { + return keyType; + } + + public void setKeyType(String keyType) { + this.keyType = keyType; + } + + public int getNumber() { + return number; + } + + public void setNumber(int number) { + this.number = number; + } + + public String getOpenFlag() { + return openFlag; + } + + public void setOpenFlag(String openFlag) { + this.openFlag = openFlag; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public static class UserEntity { + /** + * admin : false + * loginFlag : 1 + * id : 13760248280 + * isNewRecord : false + * roleNames : + */ + private boolean admin; + private String loginFlag; + private String id; + private boolean isNewRecord; + private String roleNames; + + public boolean isAdmin() { + return admin; + } + + public void setAdmin(boolean admin) { + this.admin = admin; + } + + public String getLoginFlag() { + return loginFlag; + } + + public void setLoginFlag(String loginFlag) { + this.loginFlag = loginFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public boolean isIsNewRecord() { + return isNewRecord; + } + + public void setIsNewRecord(boolean isNewRecord) { + this.isNewRecord = isNewRecord; + } + + public String getRoleNames() { + return roleNames; + } + + public void setRoleNames(String roleNames) { + this.roleNames = roleNames; + } + } + } + } + + public static class DataBean { + + /** + * current : 1 + * records : [{"appId":"1103","createDate":1628193576000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":679229,"logType":"ai.line.on","macId":"F0FE6B914DBF","sourceType":"ai.self","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"智能网关B3-L-A-01上线","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628191821000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":679181,"logType":"ai.line.off","macId":"F0FE6B914DBF","sourceType":"ai.self","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"智能网关B3-L-A-01离线","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628191821000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":679180,"logType":"ai.line.off","macId":"F0FE6B914DBF","sourceType":"ai.self","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"智能网关B3-L-A-01离线","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628190090000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":679101,"logType":"ai.line.on","macId":"F0FE6B914DBF","sourceType":"ai.self","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"智能网关B3-L-A-01上线","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628149074000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670336,"logType":"ai.line.on","macId":"F0FE6B914DBF","sourceType":"ai.self","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"智能网关B3-L-A-01上线","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628149047000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670330,"logType":"ai.net","macId":"F0FE6B914DBF","sourceType":"app.android","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-A-01","title":"用户搜索添加网关。","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628149031000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670310,"logType":"ai.del","macId":"F0FE6B914DBF","sourceType":"app.android","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-01","title":"用户删除网关。","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628148883000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670287,"logType":"ai.net","macId":"F0FE6B914DBF","sourceType":"app.android","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-01","title":"用户搜索添加网关。","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628148858000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670285,"logType":"ai.del","macId":"F0FE6B914DBF","sourceType":"app.android","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-01","title":"用户删除网关。","userId":"e0abf2d6924a771052cd714fb209fa5b"},{"appId":"1103","createDate":1628148840000,"houseId":"4ede57275440b90abea836a7c083a122","houseName":"正式家庭","id":670282,"logType":"ai.net","macId":"F0FE6B914DBF","sourceType":"app.android","targetId":"F0FE6B914DBF","targetName":"智能网关B3-L-01","title":"用户搜索添加网关。","userId":"e0abf2d6924a771052cd714fb209fa5b"}] + * size : 10 + * total : 170 + */ + + private int current; + private int size; + private int total; + private List records; + + public int getCurrent() { + return current; + } + + public void setCurrent(int current) { + this.current = current; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRecords() { + return records; + } + + public void setRecords(List records) { + this.records = records; + } + + public static class RecordsBean { + /** + * appId : 1103 + * createDate : 1628193576000 + * houseId : 4ede57275440b90abea836a7c083a122 + * houseName : 正式家庭 + * id : 679229 + * logType : ai.line.on + * macId : F0FE6B914DBF + * sourceType : ai.self + * targetId : F0FE6B914DBF + * targetName : 智能网关B3-L-A-01 + * title : 智能网关B3-L-A-01上线 + * userId : e0abf2d6924a771052cd714fb209fa5b + */ + + private String appId; + private String createDate; + private String houseId; + private String houseName; + private String id; + private String logType; + private String macId; + private String sourceType; + private String targetId; + private String targetName; + private String title; + private String userId; + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + + + public String getHouseId() { + return houseId; + } + + public void setHouseId(String houseId) { + this.houseId = houseId; + } + + public String getHouseName() { + return houseName; + } + + public void setHouseName(String houseName) { + this.houseName = houseName; + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLogType() { + return logType; + } + + public void setLogType(String logType) { + this.logType = logType; + } + + public String getMacId() { + return macId; + } + + public void setMacId(String macId) { + this.macId = macId; + } + + public String getSourceType() { + return sourceType; + } + + public void setSourceType(String sourceType) { + this.sourceType = sourceType; + } + + public String getTargetId() { + return targetId; + } + + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getTargetName() { + return targetName; + } + + public void setTargetName(String targetName) { + this.targetName = targetName; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceLossActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceLossActivity.java new file mode 100644 index 0000000..bf756fa --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceLossActivity.java @@ -0,0 +1,73 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.feedback.FeedBackActivity; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2017/7/27. + */ + +public class DeviceLossActivity extends BaseActivity { + private TitleView mTitleView; + private Button mButton; + private TextView feedback; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_loss); + initView(); + } + + private void initView() { + feedback = (TextView) findViewById(R.id.tv_feed_back); + mButton = (Button) findViewById(R.id.bt_restart_config); + mTitleView = (TitleView) findViewById(R.id.title_loss); + mTitleView.setHead("设备离线"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mButton.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + finish(); + } + }); + feedback.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(DeviceLossActivity.this, FeedBackActivity.class)); + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/DevicePositionActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/DevicePositionActivity.java new file mode 100644 index 0000000..d51ea80 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/DevicePositionActivity.java @@ -0,0 +1,204 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ModifyDeviceEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_FAIL; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_SUCCESS; + +/** + * Created by Administrator on 2017/6/12. + */ + +public class DevicePositionActivity extends BaseActivity { + private EditText editText;//输入文本框 + private TextView number;//显示还剩多少字 + private int numbers = 20;//默认30 + private String textcontent = "";//保存输入30个字符 + private TitleView mTitle; + private String name; + private String ziId; + private StateButton homeSb, hostSb, bedSb, kitchenSb, companySb, workSb, meetingSb, teaSb; + //输入框变化 + private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + int i = s.length(); + if (i > 20) { + ToastUtil.show(getApplicationContext(), "超过20字符"); + } + + if (i <= 20) { + number.setText(numbers - i + ""); + textcontent = s.toString(); + } else { + editText.setText(textcontent); + editText.setSelection(textcontent.length()); + } + + if (i != 0) { + mTitle.setHeadFuntionTxtColor(true); + } else { + mTitle.setHeadFuntionTxtColor(false); + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable arg0) { + + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_position); + initView(); + initData(); + } + + private void initView() { + if (getIntent().getExtras() != null) { + name = (String) getIntent().getExtras().get("name"); + ziId = (String) getIntent().getExtras().get("ziId"); + } + number = (TextView) findViewById(R.id.number); + editText = (EditText) findViewById(R.id.editText); + homeSb = (StateButton) findViewById(R.id.sb_home); + hostSb = (StateButton) findViewById(R.id.sb_host); + bedSb = (StateButton) findViewById(R.id.sb_bedroom); + kitchenSb = (StateButton) findViewById(R.id.sb_kitchen); + companySb = (StateButton) findViewById(R.id.sb_company); + workSb = (StateButton) findViewById(R.id.sb_work); + meetingSb = (StateButton) findViewById(R.id.sb_meeting); + teaSb = (StateButton) findViewById(R.id.sb_tea); + editText.setText(getIntent().getStringExtra("name")); + mTitle = (TitleView) findViewById(R.id.title_device_position); + mTitle.setHead(R.string.device_position); + mTitle.setHeadFuntionTxt(R.string.save); + if (TextUtils.isEmpty(editText.getText().toString().trim())) { + mTitle.setHeadFuntionTxtColor(false); + } else { + mTitle.setHeadFuntionTxtColor(true); + } + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + saveUserInfo(); + } + + @Override + public void onFunctionText() { + + } + }); + textcontent = editText.getText().toString(); + + homeSb.setOnClickListener(this); + hostSb.setOnClickListener(this); + bedSb.setOnClickListener(this); + kitchenSb.setOnClickListener(this); + companySb.setOnClickListener(this); + meetingSb.setOnClickListener(this); + teaSb.setOnClickListener(this); + workSb.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.sb_bedroom: + editText.setText(R.string.bedroom); + break; + case R.id.sb_company: + editText.setText(R.string.company); + break; + case R.id.sb_home: + editText.setText(R.string.my_home); + break; + case R.id.sb_host: + editText.setText(R.string.host_room); + break; + case R.id.sb_kitchen: + editText.setText(R.string.kitchen); + break; + case R.id.sb_meeting: + editText.setText(R.string.meeting_home); + break; + case R.id.sb_tea: + editText.setText(R.string.tea_home); + break; + case R.id.sb_work: + editText.setText(R.string.work_home); + break; + } + } + + private void initData() { + numbers = 20; + editText.addTextChangedListener(textWatcher); + number.setVisibility(View.VISIBLE); + number.setText(20 + ""); + } + + private void saveUserInfo() { + + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case MODIFY_DEVICE_SUCCESS: + ModifyDeviceEntity entity = (ModifyDeviceEntity) msg.obj; + ToastUtil.show(this, entity.getMsg()); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(DevicePositionActivity.this, DeviceDetailActivity.class); + intent.putExtra("data", name); + setResult(MODIFY_ADDRESS_RESULT, intent); + finish(); + } + }, 1000); + break; + case MODIFY_DEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceVoiceActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceVoiceActivity.java new file mode 100644 index 0000000..243a8b1 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceVoiceActivity.java @@ -0,0 +1,456 @@ +package com.yonsz.z1.mine.mydevice; + +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.SeekBar; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ChangeVolumeEvent; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.VolumeEvent; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import static com.yonsz.z1.mine.mydevice.DeviceDetailActivity.childControlLock; +import static com.yonsz.z1.net.Constans.CHANGE_VOLUME_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_VOLUME_SUCCESS; +import static com.yonsz.z1.net.Constans.OPEN_VOLUME_SUCCESS; +import static com.yonsz.z1.net.Constans.VOLUME_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.VOLUME_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.VOLUME_SWITCH_FAIL; +import static com.yonsz.z1.net.Constans.VOLUME_SWITCH_SUCCESS; + +/** + * Created by Administrator on 2017/10/10. + */ +public class DeviceVoiceActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout stageOneRl, stageTwoRl, stageThreeRl, stageFourRl, stageFiveRl; + private ImageView stageOneIv, stageTwoIv, stageThreeIv, stageFourIv, stageFiveIv; + private CheckBox lockVoiceCb; + private LoadingDialog mLoadingDialog; + private TextView tv_voice_stage; + private TextView tv_choose; + private RelativeLayout ll_device_version; + private String ziId; + private String userId; + private String voiceControl = "";//音量 + private String voiceSwitch = "";//语音开关 + private TextView mVoiceHigh; + private SeekBar deviceVoiceBar; + private TextView tv_week_voice; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_voice); + initView(); + initListener(); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.setMessage("设置中…"); + mLoadingDialog.show(); + } + + private void initListener() { + stageOneRl.setOnClickListener(this); + stageTwoRl.setOnClickListener(this); + stageThreeRl.setOnClickListener(this); + stageFourRl.setOnClickListener(this); + stageFiveRl.setOnClickListener(this); + lockVoiceCb.setOnClickListener(this); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(VolumeEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("打开成功")) { + Message message = new Message(); + message.what = OPEN_VOLUME_SUCCESS; + mHandler.sendMessage(message); + } else if (msg.equals("关闭成功")) { + Message message = new Message(); + message.what = CLOSE_VOLUME_SUCCESS; + mHandler.sendMessage(message); + } + } + + public void onEventMainThread(ChangeVolumeEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CHANGE_VOLUME_SUCCESS; + mHandler.sendMessage(message); + } + + private void initView() { + if (null != getIntent().getExtras().get("voiceControl")) { + voiceControl = getIntent().getExtras().get("voiceControl").toString(); + } + if (childControlLock) { + voiceSwitch = "0"; + } else { + voiceSwitch = getIntent().getExtras().get("voiceSwitch").toString(); + } + tv_week_voice = (TextView) findViewById(R.id.tv_week_voice); + deviceVoiceBar = (SeekBar) findViewById(R.id.pg_device_voice); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + ziId = getIntent().getExtras().get("ziId").toString(); + mVoiceHigh = (TextView) findViewById(R.id.tv_voice_high); + tv_choose = (TextView) findViewById(R.id.tv_choose); + ll_device_version = (RelativeLayout) findViewById(R.id.ll_device_version); + tv_voice_stage = (TextView) findViewById(R.id.tv_voice_stage); + lockVoiceCb = (CheckBox) findViewById(R.id.cb_voice_lock); + stageOneRl = (RelativeLayout) findViewById(R.id.rl_stage_one); + stageTwoRl = (RelativeLayout) findViewById(R.id.rl_stage_two); + stageThreeRl = (RelativeLayout) findViewById(R.id.rl_stage_three); + stageFourRl = (RelativeLayout) findViewById(R.id.rl_stage_four); + stageFiveRl = (RelativeLayout) findViewById(R.id.rl_stage_five); + stageOneIv = (ImageView) findViewById(R.id.ImageView01); + stageTwoIv = (ImageView) findViewById(R.id.ImageView02); + stageThreeIv = (ImageView) findViewById(R.id.ImageView03); + stageFourIv = (ImageView) findViewById(R.id.ImageView04); + stageFiveIv = (ImageView) findViewById(R.id.ImageView05); + mTitleView = (TitleView) findViewById(R.id.title_device_voice); + mTitleView.setHead(R.string.voice_device); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (voiceSwitch) { + case "0": + tv_choose.setVisibility(View.GONE); + ll_device_version.setVisibility(View.GONE); + mVoiceHigh.setVisibility(View.GONE); + tv_voice_stage.setText("音量已关闭"); + lockVoiceCb.setChecked(false); + break; + case "1": + tv_choose.setVisibility(View.VISIBLE); + ll_device_version.setVisibility(View.VISIBLE); + mVoiceHigh.setVisibility(View.VISIBLE); + lockVoiceCb.setChecked(true); + setVolumeShow(); + break; + } + + deviceVoiceBar.setProgress(Integer.parseInt(voiceControl) * 10); + deviceVoiceBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, final int progress, boolean fromUser) { + if (progress < 70) { + tv_week_voice.setVisibility(View.INVISIBLE); + } else { + tv_week_voice.setVisibility(View.VISIBLE); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + int progress = seekBar.getProgress(); + if (progress < 20) { + deviceVoiceBar.setProgress(10); + volumeControl("11", "1"); + } else if (progress < 30) { + deviceVoiceBar.setProgress(20); + volumeControl("12", "2"); + } else if (progress < 40) { + deviceVoiceBar.setProgress(30); + volumeControl("13", "3"); + } else if (progress < 50) { + deviceVoiceBar.setProgress(40); + volumeControl("14", "4"); + } else if (progress < 60) { + deviceVoiceBar.setProgress(50); + volumeControl("15", "5"); + } else if (progress < 70) { + deviceVoiceBar.setProgress(60); + volumeControl("16", "6"); + } else if (progress < 80) { + deviceVoiceBar.setProgress(70); + volumeControl("17", "7"); + } else if (progress < 90) { + deviceVoiceBar.setProgress(80); + volumeControl("18", "8"); + } else if (progress < 100) { + deviceVoiceBar.setProgress(90); + volumeControl("19", "9"); + } else { + deviceVoiceBar.setProgress(100); + volumeControl("1a", "10"); + } + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rl_stage_one: + voiceControl = "1"; + volumeControl("1a", "1"); + break; + case R.id.rl_stage_two: + voiceControl = "1"; + volumeControl("13", "2"); + break; + case R.id.rl_stage_three: + voiceControl = "2"; + volumeControl("17", "3"); + break; + case R.id.rl_stage_four: + voiceControl = "3"; + volumeControl("1b", "4"); + break; + case R.id.rl_stage_five: + voiceControl = "5"; + volumeControl("1e", "5"); + break; + case R.id.cb_voice_lock: + if (DensityUtil.isNetworkConnected(this)) { + if (childControlLock) { + if (lockVoiceCb.isChecked()) { + lockVoiceCb.setChecked(false); + } else { + lockVoiceCb.setChecked(true); + } + ConfirmDialog dialog = new ConfirmDialog(DeviceVoiceActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + break; + } + } + }); + dialog.setContent(R.string.close_lock_manually); + dialog.setCancleGone(); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else { + if (lockVoiceCb.isChecked()) { + lockVoiceCb.setChecked(false); + initLoadDialog(); + volumeSwitch("1"); + } else { + lockVoiceCb.setChecked(true); + initLoadDialog(); + volumeSwitch("0"); + } + } + } else { + if (lockVoiceCb.isChecked()) { + lockVoiceCb.setChecked(false); + } else { + lockVoiceCb.setChecked(true); + } + ToastUtil.show(this, R.string.net_error); + } + break; + } + } + + private void volumeControl(String sendMsg, String voiceC) { + NettyHandlerUtil.getInstance(); + if (DensityUtil.isNetworkConnected(this)) { + initLoadDialog(); + voiceControl = voiceC; + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); +// map.put("userId", userId); + map.put("volume", voiceC); + map.put("ziId", ziId); + util.requestPostByAsynewApi(NetWorkUrl.VOLUME_CONTROL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("volumeControl", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(VOLUME_CONTROL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(VOLUME_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(VOLUME_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } else { + ToastUtil.show(this, R.string.net_error); + } + } + + private void volumeSwitch(String sendMsg) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); +// map.put("userId", userId); + map.put("open", sendMsg); + map.put("ziId", ziId); + util.requestPostByAsynewApi(NetWorkUrl.VOLUME_SWITCH, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("volumeSwitch", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case OPEN_VOLUME_SUCCESS: + voiceSwitch = "1"; + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + tv_choose.setVisibility(View.VISIBLE); + ll_device_version.setVisibility(View.VISIBLE); + mVoiceHigh.setVisibility(View.VISIBLE); + lockVoiceCb.setChecked(true); + setVolumeShow(); + break; + case CLOSE_VOLUME_SUCCESS: + voiceSwitch = "0"; + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + tv_choose.setVisibility(View.GONE); + ll_device_version.setVisibility(View.GONE); + mVoiceHigh.setVisibility(View.GONE); + tv_voice_stage.setText("音量已关闭"); + lockVoiceCb.setChecked(false); + break; + case CHANGE_VOLUME_SUCCESS: + setVolumeShow(); + break; + case VOLUME_CONTROL_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case VOLUME_SWITCH_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void setVolumeShow() { + if (Integer.parseInt(voiceControl) < 7) { + tv_week_voice.setVisibility(View.INVISIBLE); + } else { + tv_week_voice.setVisibility(View.VISIBLE); + } + tv_voice_stage.setText(voiceControl + ""); + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + switch (voiceControl) { + case "1": + stageOneIv.setVisibility(View.VISIBLE); + stageTwoIv.setVisibility(View.INVISIBLE); + stageThreeIv.setVisibility(View.INVISIBLE); + stageFourIv.setVisibility(View.INVISIBLE); + stageFiveIv.setVisibility(View.INVISIBLE); + break; + case "2": + stageOneIv.setVisibility(View.INVISIBLE); + stageTwoIv.setVisibility(View.VISIBLE); + stageThreeIv.setVisibility(View.INVISIBLE); + stageFourIv.setVisibility(View.INVISIBLE); + stageFiveIv.setVisibility(View.INVISIBLE); + break; + case "3": + stageOneIv.setVisibility(View.INVISIBLE); + stageTwoIv.setVisibility(View.INVISIBLE); + stageThreeIv.setVisibility(View.VISIBLE); + stageFourIv.setVisibility(View.INVISIBLE); + stageFiveIv.setVisibility(View.INVISIBLE); + break; + case "4": + stageOneIv.setVisibility(View.INVISIBLE); + stageTwoIv.setVisibility(View.INVISIBLE); + stageThreeIv.setVisibility(View.INVISIBLE); + stageFourIv.setVisibility(View.VISIBLE); + stageFiveIv.setVisibility(View.INVISIBLE); + break; + case "5": + stageOneIv.setVisibility(View.INVISIBLE); + stageTwoIv.setVisibility(View.INVISIBLE); + stageThreeIv.setVisibility(View.INVISIBLE); + stageFourIv.setVisibility(View.INVISIBLE); + stageFiveIv.setVisibility(View.VISIBLE); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceVoiceSetActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceVoiceSetActivity.java new file mode 100644 index 0000000..aee9ff7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/DeviceVoiceSetActivity.java @@ -0,0 +1,473 @@ +package com.yonsz.z1.mine.mydevice; + +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.RequiresApi; +import android.support.v4.app.FragmentActivity; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.SeekBar; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ChangeVolumeEvent; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.VolumeEvent; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.MainFragment5; +import com.yonsz.z1.view.TimeRangePickerDialog; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.lang.ref.WeakReference; +import java.util.HashMap; + +import static com.yonsz.z1.mine.mydevice.DeviceDetailActivity.childControlLock; +import static com.yonsz.z1.net.Constans.CHANGE_VOLUME_SUCCESS; +import static com.yonsz.z1.net.Constans.CHILD_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.CHILD_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_VOLUME_SUCCESS; +import static com.yonsz.z1.net.Constans.OPEN_VOLUME_SUCCESS; +import static com.yonsz.z1.net.Constans.VOLUME_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.VOLUME_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.VOLUME_SWITCH_FAIL; +import static com.yonsz.z1.net.Constans.VOLUME_SWITCH_SUCCESS; + +/** + * Created by Administrator on 2017/10/10. + */ +public class DeviceVoiceSetActivity extends FragmentActivity implements View.OnClickListener { + private TitleView mTitleView; + private RelativeLayout setTimeLayout; + private LoadingDialog mLoadingDialog; + private TextView tv_voice_stage, tv_voice_stage_r; + private RelativeLayout ll_device_version; + private LinearLayout ll_re; + private String ziId; + private String voiceControl = "", voiceControlRe = "6";//音量 + private String voiceSwitch = "";//语音开关 + private TextView mVoiceHigh; + private SeekBar deviceVoiceBar, deviceReBar; + private TextView tv_week_voice, tv_week_voice_r, tvPushTime, tv_modify; + private UIHandle mHandler; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mHandler = new UIHandle(this); + setContentView(R.layout.activity_device_voice_set); + initView(); + initListener(); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.setMessage("设置中…"); + mLoadingDialog.show(); + } + + private void initListener() { + setTimeLayout.setOnClickListener(this); + } + + //eventbus接收来自netty的信息 + public void onEventMainThread(VolumeEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("打开成功")) { + Message message = new Message(); + message.what = OPEN_VOLUME_SUCCESS; + mHandler.sendMessage(message); + } else if (msg.equals("关闭成功")) { + Message message = new Message(); + message.what = CLOSE_VOLUME_SUCCESS; + mHandler.sendMessage(message); + } + } + + public void onEventMainThread(ChangeVolumeEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CHANGE_VOLUME_SUCCESS; + mHandler.sendMessage(message); + } + + private void initView() { + if (null != getIntent().getExtras().get("voiceControl")) { + voiceControl = getIntent().getExtras().get("voiceControl").toString(); + } + if (null != getIntent().getExtras().get("voiceControlRe")) { + voiceControlRe = getIntent().getExtras().get("voiceControlRe").toString(); + } + if (childControlLock) { + voiceSwitch = "0"; + } else { + voiceSwitch = getIntent().getExtras().get("voiceSwitch").toString(); + } + tv_modify = (TextView) findViewById(R.id.tv_modify); + tv_week_voice = (TextView) findViewById(R.id.tv_week_voice); + tv_week_voice_r = (TextView) findViewById(R.id.tv_week_voice_r); + deviceVoiceBar = (SeekBar) findViewById(R.id.pg_device_voice); + deviceReBar = (SeekBar) findViewById(R.id.pg_device_voice_r); + ziId = getIntent().getExtras().get("ziId").toString(); + mVoiceHigh = (TextView) findViewById(R.id.tv_voice_high); + ll_device_version = (RelativeLayout) findViewById(R.id.ll_device_version); + ll_re = (LinearLayout) findViewById(R.id.ll_re); + tv_voice_stage = (TextView) findViewById(R.id.tv_voice_stage); + tv_voice_stage_r = (TextView) findViewById(R.id.tv_voice_stage_r); + setTimeLayout = (RelativeLayout) findViewById(R.id.setTimeLayout); + tvPushTime = (TextView) findViewById(R.id.tvPushTime); + mTitleView = (TitleView) findViewById(R.id.title_device_voice); + mTitleView.setHead("免打扰时段"); + mTitleView.setHeadFuntionTxtAndSise16("保存"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + setNoDisturb(); + } + + @Override + public void onFunctionText() { + + } + }); + switch (voiceSwitch) { + case "0": + ll_device_version.setVisibility(View.GONE); + ll_re.setVisibility(View.GONE); + mVoiceHigh.setVisibility(View.GONE); + tv_modify.setVisibility(View.GONE); + tv_voice_stage.setText("音量已关闭"); + break; + case "1": + ll_device_version.setVisibility(View.VISIBLE); + ll_re.setVisibility(View.VISIBLE); + mVoiceHigh.setVisibility(View.VISIBLE); + tv_modify.setVisibility(View.VISIBLE); + setVolumeShow(); + break; + } + + tvPushTime.setText(getIntent().getExtras().get("voiceTime").toString()); + + setProgress(); + setPrpgressRe(); + } + + private void setPrpgressRe() { + deviceReBar.setProgress(Integer.parseInt(voiceControlRe) * 10); + deviceReBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, final int progress, boolean fromUser) { + if (progress < 70) { + tv_week_voice_r.setVisibility(View.INVISIBLE); + } else { + tv_week_voice_r.setVisibility(View.VISIBLE); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + int progress = seekBar.getProgress(); + if (progress < 10) { + deviceReBar.setProgress(0); + volumeControlRe("0"); + } else if (progress < 20) { + deviceReBar.setProgress(10); + volumeControlRe("1"); + } else if (progress < 30) { + deviceReBar.setProgress(20); + volumeControlRe("2"); + } else if (progress < 40) { + deviceReBar.setProgress(30); + volumeControlRe("3"); + } else if (progress < 50) { + deviceReBar.setProgress(40); + volumeControlRe("4"); + } else if (progress < 60) { + deviceReBar.setProgress(50); + volumeControlRe("5"); + } else if (progress < 70) { + deviceReBar.setProgress(60); + volumeControlRe("6"); + } else if (progress < 80) { + deviceReBar.setProgress(70); + volumeControlRe("7"); + } else if (progress < 90) { + deviceReBar.setProgress(80); + volumeControlRe("8"); + } else if (progress < 100) { + deviceReBar.setProgress(90); + volumeControlRe("9"); + } else { + deviceReBar.setProgress(100); + volumeControlRe("10"); + } + } + }); + } + + private void setProgress() { + deviceVoiceBar.setProgress(Integer.parseInt(voiceControl) * 10); + deviceVoiceBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, final int progress, boolean fromUser) { + if (progress < 70) { + tv_week_voice.setVisibility(View.INVISIBLE); + } else { + tv_week_voice.setVisibility(View.VISIBLE); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + int progress = seekBar.getProgress(); + if (progress < 10) { + deviceVoiceBar.setProgress(0); + volumeControl("0"); + } else if (progress < 20) { + deviceVoiceBar.setProgress(10); + volumeControl("1"); + } else if (progress < 30) { + deviceVoiceBar.setProgress(20); + volumeControl("2"); + } else if (progress < 40) { + deviceVoiceBar.setProgress(30); + volumeControl("3"); + } else if (progress < 50) { + deviceVoiceBar.setProgress(40); + volumeControl("4"); + } else if (progress < 60) { + deviceVoiceBar.setProgress(50); + volumeControl("5"); + } else if (progress < 70) { + deviceVoiceBar.setProgress(60); + volumeControl("6"); + } else if (progress < 80) { + deviceVoiceBar.setProgress(70); + volumeControl("7"); + } else if (progress < 90) { + deviceVoiceBar.setProgress(80); + volumeControl("8"); + } else if (progress < 100) { + deviceVoiceBar.setProgress(90); + volumeControl("9"); + } else { + deviceVoiceBar.setProgress(100); + volumeControl("10"); + } + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.setTimeLayout: + TimeRangePickerDialog timeRangePickerDialog = new TimeRangePickerDialog(DeviceVoiceSetActivity.this, tvPushTime.getText().toString(), new TimeRangePickerDialog.ConfirmAction() { + @Override + public void onLeftClick() { + } + + @Override + public void onRightClick(String startAndEndTime) { + tvPushTime.setText(startAndEndTime); + } + }); + timeRangePickerDialog.getWindow().setGravity(Gravity.BOTTOM); + timeRangePickerDialog.show(); + break; + } + } + + private void setNoDisturb() { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (!getIntent().getExtras().get("voiceId").toString().isEmpty()) { + map.put("id", getIntent().getExtras().get("voiceId").toString()); + } + map.put("ziId", ziId); + map.put("startTime", tvPushTime.getText().toString().substring(0, 5)); + map.put("endTime", tvPushTime.getText().toString().substring(8, 13)); + map.put("open", "1"); + map.put("volume", voiceControl); + map.put("preVolume", voiceControlRe); + util.requestPostByAsynewApi(NetWorkUrl.AIDEVICE_SETNODISTURB, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("setNoDisturb", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(VOLUME_CONTROL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CHILD_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHILD_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void volumeControl(String voiceC) { + voiceControl = voiceC; + tv_voice_stage.setText(voiceControl + ""); + } + + private void volumeControlRe(String voiceC) { + voiceControlRe = voiceC; + tv_voice_stage_r.setText(voiceControlRe + ""); + } + + private void volumeSwitch(String sendMsg) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("open", sendMsg); + map.put("ziId", ziId); + util.requestPostByAsynewApi(NetWorkUrl.VOLUME_SWITCH, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("volumeSwitch", "onSuccess: " + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + public void callBackUiThread(Message msg) { + switch (msg.what) { + case OPEN_VOLUME_SUCCESS: + voiceSwitch = "1"; + /*if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + }*/ + ll_device_version.setVisibility(View.VISIBLE); + mVoiceHigh.setVisibility(View.VISIBLE); + setVolumeShow(); + break; + case CLOSE_VOLUME_SUCCESS: + voiceSwitch = "0"; + /*if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + }*/ + ll_device_version.setVisibility(View.GONE); + mVoiceHigh.setVisibility(View.GONE); + tv_voice_stage.setText("音量已关闭"); + break; + case CHANGE_VOLUME_SUCCESS: + setVolumeShow(); + break; + case VOLUME_CONTROL_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case VOLUME_SWITCH_FAIL: + case CHILD_CONTROL_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case VOLUME_CONTROL_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, "保存成功"); + break; + } + } + + private void setVolumeShow() { + if (Integer.parseInt(voiceControl) < 7) { + tv_week_voice.setVisibility(View.INVISIBLE); + } else { + tv_week_voice.setVisibility(View.VISIBLE); + } + if (Integer.parseInt(voiceControlRe) < 7) { + tv_week_voice_r.setVisibility(View.INVISIBLE); + } else { + tv_week_voice_r.setVisibility(View.VISIBLE); + } + tv_voice_stage.setText(voiceControl + ""); + tv_voice_stage_r.setText(voiceControlRe + ""); + } + + //handler + static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(DeviceVoiceSetActivity activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + DeviceVoiceSetActivity activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/LogAdapter.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/LogAdapter.java new file mode 100644 index 0000000..221c201 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/LogAdapter.java @@ -0,0 +1,115 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.utils.AutoLinerLayoutManager; +import com.yonsz.z1.utils.DateTimeUitl; +import com.yonsz.z1.utils.DateUtil; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.List; + +/** + * Created by Administrator on 2017/9/1. + */ +public class LogAdapter extends RecyclerView.Adapter { + private List> mDatasRercord; + private Context mContext; + + public LogAdapter(Context mContext, List> mDatasRercord) { + this.mDatasRercord = mDatasRercord; + this.mContext = mContext; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_device_log, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDatasRercord != null ? mDatasRercord.size() : 0; + } + + private String getWeek(String pTime) { + String Week = "星期"; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + if (c.get(Calendar.DAY_OF_WEEK) == 1) { + Week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 2) { + Week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 3) { + Week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 4) { + Week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 5) { + Week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 6) { + Week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 7) { + Week += "六"; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return Week; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView tv_log_data, tv_log_data_month; + private TextView tv_log_week; + private RecyclerView mLogRecyclerView; + private RelativeLayout rootView; + + public MessageViewHolder(View itemView) { + super(itemView); + tv_log_data = (TextView) itemView.findViewById(R.id.tv_log_data); + tv_log_data_month = (TextView) itemView.findViewById(R.id.tv_log_data_month); + tv_log_week = (TextView) itemView.findViewById(R.id.tv_log_week); + mLogRecyclerView = (RecyclerView) itemView.findViewById(R.id.rc_device_log); + mLogRecyclerView.setLayoutManager(new AutoLinerLayoutManager(mContext)); + } + + public void setViews(final int position) { + DeviceLogEntity.DataBean.RecordsBean entity = mDatasRercord.get(position).get(0); + String createDate = ""; + if (TextUtils.isEmpty(entity.getCreateDate())) { + createDate = entity.getCreateDate().substring(0, 10); + } else { + String s = DateTimeUitl.toTimeFullString(Long.parseLong(entity.getCreateDate()) / 1000); + createDate = s.substring(0, 10); + } + tv_log_data_month.setText(createDate.substring(5, 8)); + tv_log_data.setText(createDate.substring(8, 10)); + tv_log_week.setText(getWeek(DateUtil.timeStamp2Date(String.valueOf(entity.getCreateDate()),"yyyy-MM-dd HH:mm").substring(0, 10))); + LogDetailAdapter adapter = new LogDetailAdapter(mContext, mDatasRercord.get(position)); + mLogRecyclerView.setAdapter(adapter); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/LogDetailAdapter.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/LogDetailAdapter.java new file mode 100644 index 0000000..4aa1aaf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/LogDetailAdapter.java @@ -0,0 +1,85 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.utils.DateUtil; + +import java.util.List; + +/** + * Created by Administrator on 2017/9/1. + */ +public class LogDetailAdapter extends RecyclerView.Adapter { + private List mDatasRercord; + private Context mContext; + + public LogDetailAdapter(Context mContext, List mDatasRercord) { + this.mDatasRercord = mDatasRercord; + this.mContext = mContext; + } + + @Override + public LogDetailAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_device_detail_log, + parent, false); + return new LogDetailAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(LogDetailAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDatasRercord != null ? mDatasRercord.size() : 0; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView tv_log_record; + private TextView tv_log_time; + private View mViewLine; + + public MessageViewHolder(View itemView) { + super(itemView); + tv_log_record = (TextView) itemView.findViewById(R.id.tv_log_record); + tv_log_time = (TextView) itemView.findViewById(R.id.tv_log_time); + mViewLine = (View) itemView.findViewById(R.id.line); + } + + public void setViews(final int position) { + /*if (null != mDatasRercord.get(position).getMsgInfo()) { + tv_log_record.setText(mDatasRercord.get(position).getMsgInfo()); + } else if (null != mDatasRercord.get(position).getControlType()) { + if (null != mDatasRercord.get(position).getUserName()) { + if (mDatasRercord.get(position).getControlType().equals("1")) { + tv_log_record.setText("用户<" + mDatasRercord.get(position).getUserName() + ">声音控制" + mDatasRercord.get(position).getControlTitle()); + } else { + tv_log_record.setText("用户<" + mDatasRercord.get(position).getUserName() + ">手动控制" + mDatasRercord.get(position).getControlTitle()); + } + } else { + if (mDatasRercord.get(position).getControlType().equals("1")) { + tv_log_record.setText("声音控制" + mDatasRercord.get(position).getControlTitle()); + } else { + tv_log_record.setText("手动控制" + mDatasRercord.get(position).getControlTitle()); + } + } + + } else { + tv_log_record.setText(mDatasRercord.get(position).getText()); + }*/ + tv_log_record.setText(mDatasRercord.get(position).getTitle()); + tv_log_time.setText(DateUtil.timeStamp2Date(String.valueOf(mDatasRercord.get(position).getCreateDate()), "yyyy-MM-dd HH:mm").substring(11, 16)); + /*if (position == mDatasRercord.size()) { + mViewLine.setVisibility(View.GONE); + }*/ + } + } + +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/MyDeviceActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/MyDeviceActivity.java new file mode 100644 index 0000000..e938a5d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/MyDeviceActivity.java @@ -0,0 +1,100 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.view.View; +import android.widget.LinearLayout; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LoadMoreRecyclerView; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2017/5/26. + */ +public class MyDeviceActivity extends BaseActivity { + private LoadMoreRecyclerView mRecycMsgList; + private LinearLayout mNoRecord; + private boolean isLoadMore; + private MydeviceAdapter mAdapter; + private List mDatas; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_mydevice); + initView(); + } + + private void initView() { + TitleView titleView = (TitleView) findViewById(R.id.title_mydevice); + titleView.setHead(R.string.my_device); + titleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mRecycMsgList = (LoadMoreRecyclerView) findViewById(R.id.mydevice_list); + mDatas = new ArrayList<>(); + mDatas.add("Smart Home Z1"); + mDatas.add("Smart Home Z2"); + mDatas.add("Smart Home Z3"); + mAdapter = new MydeviceAdapter(this, mDatas); + mNoRecord = (LinearLayout) findViewById(R.id.ll_no_record); + + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecycMsgList.setHasFixedSize(true); + mRecycMsgList.setLayoutManager(manage); + + mRecycMsgList.setAdapter(mAdapter); + /*mRecycMsgList.setOnLoadDataListener(new OnRecyclerLoadDataListener() { + @Override + public void onLoadMore() { + if (!isLoadMore) { + isLoadMore = true; + page++; + DATA_TYPE = Constans.MORE_DATA; + getListMessage(page); + } + } + });*/ + mAdapter.setmOnItemClickListener(new OnRecyclerItemClickListener() { + @Override + public void onClick(View view, int position, List photos, int i) { + Intent intent = new Intent(MyDeviceActivity.this, DeviceDetailActivity.class); + startActivity(intent); + } + + @Override + public void onLongClick(View view, int position) { + + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/MydeviceAdapter.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/MydeviceAdapter.java new file mode 100644 index 0000000..88e86ae --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/MydeviceAdapter.java @@ -0,0 +1,76 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2017/6/12. + */ + +public class MydeviceAdapter extends RecyclerView.Adapter { + private List mDatas; + private Context mContext; + private OnRecyclerItemClickListener mOnItemClickListener; + + public MydeviceAdapter(Context mContext, List mDatas) { + this.mDatas = mDatas; + this.mContext = mContext; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_person_mydevice, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDatas != null ? mDatas.size() : 0; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView name; + private RelativeLayout rootView; + + public MessageViewHolder(View itemView) { + super(itemView); + name = (TextView) itemView.findViewById(R.id.tv_person_device_name); + rootView = (RelativeLayout) itemView.findViewById(R.id.root_view); + } + + public void setViews(final int position) { + String entity = mDatas.get(position); + name.setText(entity); + + rootView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + List photos= null; + mOnItemClickListener.onClick(rootView, position, photos, 0); + } + } + }); + } + } + + public void setmOnItemClickListener(OnRecyclerItemClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/PhoneAdressActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/PhoneAdressActivity.java new file mode 100644 index 0000000..be3fe61 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/PhoneAdressActivity.java @@ -0,0 +1,192 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Bundle; +import android.os.Message; +import android.provider.ContactsContract; +import android.text.TextUtils; +import android.widget.Button; +import android.widget.ListView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ModifyDeviceEntity; +import com.yonsz.z1.homemanage.HomeGroupActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.LEARN_RESULT; +import static com.yonsz.z1.net.Constans.SHARE_DEVICE_FAIL; +import static com.yonsz.z1.net.Constans.SHARE_DEVICE_SUCCESS; + +/** + * Created by Administrator on 2017/6/15. + */ + +public class PhoneAdressActivity extends BaseActivity { + /** + * 获取库Phone表字段 + **/ + private static final String[] PHONES_PROJECTION = new String[]{ + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Photo.PHOTO_ID, ContactsContract.CommonDataKinds.Phone.CONTACT_ID}; + /** + * 联系人显示名称 + **/ + private static final int PHONES_DISPLAY_NAME = 0; + + /** + * 电话号码 + **/ + private static final int PHONES_NUMBER = 1; + + /** + * 头像ID + **/ + private static final int PHONES_PHOTO_ID = 2; + + /** + * 联系人的ID + **/ + private static final int PHONES_CONTACT_ID = 3; + + private TitleView mTitleView; + private ConnectAdapter mAdapter; + private ListView listview; + private Button btn; + private List lists = new ArrayList(); + private String ziId; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_connect); + if (getIntent().getExtras() != null) { + ziId = (String) getIntent().getExtras().get("ziId"); + } + listview = (ListView) findViewById(R.id.lv_connect); + mTitleView = (TitleView) findViewById(R.id.title_connect); + mTitleView.setHead(R.string.Mail_list); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + getPhoneContacts(); + } + + + private void getPhoneContacts() { + ContentResolver resolver = getContentResolver(); + List list = new ArrayList(); + // 获取手机联系人 + Cursor phoneCursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, + PHONES_PROJECTION, null, null, null); + + // 不为空 + if (phoneCursor != null) { + while (phoneCursor.moveToNext()) { + ContactVo cv = new ContactVo(); + // 得到手机号码 + String phoneNumber = phoneCursor.getString(PHONES_NUMBER); + // 当手机号码为空的或者为空字段 跳过当前循环 + if (TextUtils.isEmpty(phoneNumber)) + continue; + + // 得到联系人名称 + String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME); + + // 得到联系人ID + Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID); + // 得到联系人头像ID + Long imgid = phoneCursor.getLong(PHONES_PHOTO_ID); + + // 得到联系人头像Bitamp + Bitmap contactPhoto = null; + + // photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的 + if (imgid > 0) { + Uri uri = ContentUris.withAppendedId( + ContactsContract.Contacts.CONTENT_URI, contactid); + InputStream input = ContactsContract.Contacts + .openContactPhotoInputStream(resolver, uri); + contactPhoto = BitmapFactory.decodeStream(input); + } else { + contactPhoto = BitmapFactory.decodeResource(getResources(), + R.mipmap.app_lan); + } + + cv.setName(contactName); + //Log.i("info", "1111111"+contactName); + cv.setMoble(phoneNumber); + cv.setImg(contactPhoto); + //Log.i("info", "img----"+contactPhoto); + list.add(cv); + } + phoneCursor.close(); + lists.clear(); + lists.addAll(list); + // Log.i("info", "lists----"+lists); + } + mAdapter = new ConnectAdapter(this, lists); + listview.setAdapter(mAdapter); + mAdapter.setmOnItemClickListener(new ConnectAdapter.OnListViewItemClickListener() { + @Override + public void onClick(int position, TextView moble) { + Intent intent; + if (getIntent().getExtras().get("tag").toString().equals("1")) { + // shareDevice(moble.getText().toString().trim()); + intent = new Intent(PhoneAdressActivity.this, ShareDeviceActivity.class); + } else { + // shareHouse(moble.getText().toString().trim()); + intent = new Intent(PhoneAdressActivity.this, HomeGroupActivity.class); + } + intent.putExtra("phoneNumber", moble.getText().toString().trim()); + setResult(LEARN_RESULT, intent); + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SHARE_DEVICE_SUCCESS: + ModifyDeviceEntity entity = (ModifyDeviceEntity) msg.obj; + ToastUtil.show(this, entity.getMsg()); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + break; + case SHARE_DEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/RenameDeviceActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/RenameDeviceActivity.java new file mode 100644 index 0000000..6f0ba1b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/RenameDeviceActivity.java @@ -0,0 +1,187 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ModifyDeviceEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_FAIL; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_RESULT; + +/** + * Created by Administrator on 2017/6/12. + */ + +public class RenameDeviceActivity extends BaseActivity { + private EditText editText;//输入文本框 + private TextView number;//显示还剩多少字 + private int numbers = 20;//默认30 + private String textcontent = "";//保存输入30个字符 + private TitleView mTitle; + private String name; + private String ziId; + //输入框变化 + private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + int i = s.length(); + if (i > 20) { + ToastUtil.show(RenameDeviceActivity.this, "超过20字符"); + } + + if (i <= 20) { + number.setText(numbers - i + ""); + textcontent = s.toString(); + } else { + editText.setText(textcontent); + editText.setSelection(textcontent.length()); + } + + if (i != 0) { + mTitle.setHeadFuntionTxtColor(true); + } else { + mTitle.setHeadFuntionTxtColor(false); + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable arg0) { + + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_modify_nickname); + initView(); + initData(); + } + + private void initView() { + if (getIntent().getExtras() != null) { + name = (String) getIntent().getExtras().get("name"); + ziId = (String) getIntent().getExtras().get("ziId"); + } + number = (TextView) findViewById(R.id.number); + editText = (EditText) findViewById(R.id.editText); + editText.setHint(R.string.enter_name_device); + editText.setText(getIntent().getStringExtra("name")); + mTitle = (TitleView) findViewById(R.id.title_nickname); + mTitle.setHead(R.string.modify_device_name); + mTitle.setHeadFuntionTxt(R.string.save); + if (TextUtils.isEmpty(editText.getText().toString().trim())) { + mTitle.setHeadFuntionTxtColor(false); + } else { + mTitle.setHeadFuntionTxtColor(true); + } + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + saveUserInfo(); + } + + @Override + public void onFunctionText() { + + } + }); + textcontent = editText.getText().toString(); + } + + private void initData() { + numbers = 20; + editText.addTextChangedListener(textWatcher); + number.setVisibility(View.VISIBLE); + number.setText(20 + ""); + } + + private void saveUserInfo() { + name = editText.getText().toString().trim(); + if (TextUtils.isEmpty(name)) { + ToastUtil.show(this, R.string.nickname_null); + return; + } + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("ziName", name); + netWorkUtil.requestPostByAsynewApi(NetWorkUrl.MODIFY_DEVICE_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ModifyDeviceEntity obj = JSON.parseObject(respone, ModifyDeviceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(MODIFY_DEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(MODIFY_DEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(MODIFY_DEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case MODIFY_DEVICE_SUCCESS: + ModifyDeviceEntity entity = (ModifyDeviceEntity) msg.obj; + ToastUtil.show(this, "修改成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(RenameDeviceActivity.this, DeviceDetailActivity.class); + intent.putExtra("data", name); + setResult(MODIFY_NAME_RESULT, intent); + finish(); + } + }, 1000); + break; + case MODIFY_DEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/ShareAdapter.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/ShareAdapter.java new file mode 100644 index 0000000..117f779 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/ShareAdapter.java @@ -0,0 +1,136 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.database.entity.ShareListEntuty; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; + +import java.util.List; + +import static com.yonsz.z1.net.NetWorkUrl.SERVER_URL_PHOTO; + +/** + * Created by Administrator on 2017/7/26. + */ + +public class ShareAdapter extends RecyclerView.Adapter { + private List mDatas; + private Context mContext; + private OnRecyclerItemClickListener mOnItemClickListener; + + public ShareAdapter(List datas, Context context) { + mDatas = datas; + mContext = context; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_share_list, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public int getItemCount() { + return mDatas.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView phone; + private ImageView imgV; + private TextView state; + + + public MessageViewHolder(View view) { + super(view); + phone = (TextView) itemView.findViewById(R.id.phone); + imgV = (ImageView) itemView.findViewById(R.id.image); + state = (TextView) itemView.findViewById(R.id.state); + } + + public void setViews(final int position) { + /*if (mDatas.get(position).getPhotoVersion() != null && mDatas.get(position).getPhotoVersion().toString().equals("0")) { + String url = SERVER_URL_PHOTO + mDatas.get(position).getUserName() + ".png"; + ImageLoader.getInstance().displayImage(url, imgV, UniKongApp.getHiApp().getImageLoaderOption()); + } else { + String url = SERVER_URL_PHOTO + mDatas.get(position).getUserName() + "_" + mDatas.get(position).getPhotoVersion() + ".png"; + ImageLoader.getInstance().displayImage(url, imgV, UniKongApp.getHiApp().getImageLoaderOption()); + + }*/ + if(null!=mDatas.get(position).getUserPhoto()) { + String url = mDatas.get(position).getUserPhoto(); + ImageLoader.getInstance().displayImage(url, imgV, UniKongApp.getHiApp().getImageLoaderOption()); + }else { + String url = SERVER_URL_PHOTO + mDatas.get(position).getUserName() + "_" + mDatas.get(position).getPhotoVersion() + ".png"; + ImageLoader.getInstance().displayImage(url, imgV, UniKongApp.getHiApp().getImageLoaderOption()); + } + phone.setText(mDatas.get(position).getUserName()); + if (mDatas.get(position).getActiveFlag().toString().equals("1")) { + state.setText(R.string.Share_success); + } else { + state.setText("等待对方确认"); + } + } + } + + + /*@Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder mHolder = null; + if (convertView == null) { + convertView = LayoutInflater.from(mContext).inflate( + R.layout.item_share_list, null); + mHolder = new ViewHolder(); + mHolder.phone = (TextView) convertView.findViewById(R.id.phone); + mHolder.imgV = (ImageView) convertView.findViewById(R.id.image); + mHolder.state = (TextView) convertView.findViewById(R.id.state); + + convertView.setTag(mHolder); + + } else { + mHolder = (ViewHolder) convertView.getTag(); + mHolder.imgV.setImageResource(R.drawable.aaa); + } + // mHolder.imgV.setImageResource(R.drawable.aaa); + if (mDatas.get(position).getPhotoVersion() != null && mDatas.get(position).getPhotoVersion().toString().equals("0")) { + String url = SERVER_URL_PHOTO + mDatas.get(position).getUserName() + ".png"; + ImageLoader.getInstance().displayImage(url, mHolder.imgV, UniKongApp.getHiApp().getImageLoaderOption()); + } else { + String url = SERVER_URL_PHOTO + mDatas.get(position).getUserName() + "_" + mDatas.get(position).getPhotoVersion() + ".png"; + ImageLoader.getInstance().displayImage(url, mHolder.imgV, UniKongApp.getHiApp().getImageLoaderOption()); + + } + mHolder.phone.setText(mDatas.get(position).getUserName()); + if (mDatas.get(position).getActiveFlag().toString().equals("1")) { + mHolder.state.setText("分享成功"); + } else { + mHolder.state.setText("等待对方确认"); + } + return convertView; + }*/ + + /*class ViewHolder { + TextView phone; + ImageView imgV; + TextView state; + }*/ +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/ShareDeviceActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/ShareDeviceActivity.java new file mode 100644 index 0000000..57fa306 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/ShareDeviceActivity.java @@ -0,0 +1,503 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuBridge; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItem; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ModifyDeviceEntity; +import com.yonsz.z1.database.entity.ShareListEntuty; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.PhoneAreaActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.personcenter.NickNameActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.KeyboardUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.VerificationUtils; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; + +import java.io.IOException; +import java.util.HashMap; + +import okhttp3.Response; +import okhttp3.ResponseBody; + +import static com.yonsz.z1.net.Constans.DEL_ERROR_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_PHONE_AREA; +import static com.yonsz.z1.net.Constans.GET_PHONE_NUMBER; +import static com.yonsz.z1.net.Constans.QUERY_SHARE_LIST_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_SHARE_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.SHARE_DEVICE_FAIL; +import static com.yonsz.z1.net.Constans.SHARE_DEVICE_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.PIC_CODE; + +/** + * Created by Administrator on 1117/6/12. + */ + +public class ShareDeviceActivity extends BaseActivity implements SwipeItemClickListener { + private EditText editText, editTextCode;//输入文本框 + private TextView number;//显示还剩多少字 + private int numbers = 11;//默认30 + private String textcontent = "";//保存输入30个字符 + private TitleView mTitle; + private Button addBt, addPhoneBt; + private String ziId; + private SwipeMenuRecyclerView myShareListView; + private ShareAdapter mAdapter; + private ShareListEntuty entity1; + private ShareListEntuty.ObjEntity mObjEntity; + private ImageView renovateIv, renovateRefresh; + private LinearLayout phoneAreaLl; + private TextView phoneArea; + //输入框变化 + private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + int i = s.length(); + if (i > 11) { + ToastUtil.show(getApplicationContext(), "超过11字符"); + } + + if (i <= 11) { + number.setText(numbers - i + ""); + textcontent = s.toString(); + } else { + editText.setText(textcontent); + editText.setSelection(textcontent.length()); + } + + if (i != 0) { + addBt.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + addBt.setEnabled(true); + } else { + addBt.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + addBt.setEnabled(false); + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable arg0) { + + } + }; + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.y70); + + // 1. MATCH_PARENT 自适应高度,保持和Item一样高; + // 2. 指定具体的高,比如80; + // 3. WRAP_CONTENT,自身高度,不推荐; + int height = getResources().getDimensionPixelSize(R.dimen.y70); + // int height = ViewGroup.LayoutParams.MATCH_PARENT; + // 添加右侧的,如果不添加,则右侧不会出现菜单。 + { + SwipeMenuItem deleteItem = new SwipeMenuItem(ShareDeviceActivity.this) + .setBackground(R.color.z1_ff0120) + .setText("取消\n分享") + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + swipeRightMenu.addMenuItem(deleteItem);// 添加菜单到右侧。 + } + } + }; + /** + * RecyclerView的Item的Menu点击监听。 + */ + private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() { + @Override + public void onItemClick(SwipeMenuBridge menuBridge) { + menuBridge.closeMenu(); + + int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。 + final int adapterPosition = menuBridge.getAdapterPosition(); // RecyclerView的Item的position。 + int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。 + + if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) { + switch (menuPosition) { + case 0: + ConfirmDialog dialog = new ConfirmDialog(ShareDeviceActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + //取消分享 + cancleShare(adapterPosition); + break; + } + } + }); + dialog.setContent("取消该设备的分享?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + } + } + } + }; + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + View view = getCurrentFocus(); + KeyboardUtil.hideKeyboard(ev, view, ShareDeviceActivity.this);//调用方法判断是否需要隐藏键盘 + break; + + default: + break; + } + return super.dispatchTouchEvent(ev); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_device_share); + initView(); + initData(); + } + + private void initView() { + if (getIntent().getExtras() != null) { + ziId = (String) getIntent().getExtras().get("ziId"); + } + phoneAreaLl = (LinearLayout) findViewById(R.id.ll_phone_area); + phoneArea = (TextView) findViewById(R.id.tv_phone_area); + myShareListView = (SwipeMenuRecyclerView) findViewById(R.id.my_share_list); + renovateIv = (ImageView) findViewById(R.id.iv_renovate); + renovateRefresh = (ImageView) findViewById(R.id.iv_renovate_refresh); + addBt = (Button) findViewById(R.id.bt_share_add); + addPhoneBt = (Button) findViewById(R.id.bt_share_add_phone); + number = (TextView) findViewById(R.id.number); + editText = (EditText) findViewById(R.id.editText); + editTextCode = (EditText) findViewById(R.id.editText_code); + mTitle = (TitleView) findViewById(R.id.title_device_position); + mTitle.setHead(R.string.share_device); + mTitle.setHeadFuntionTxtGone(); + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + } + + @Override + public void onFunctionText() { + + } + }); + textcontent = editText.getText().toString(); + // addBt.setOnClickListener(this); + addBt.setEnabled(false); + addPhoneBt.setOnClickListener(this); + phoneAreaLl.setOnClickListener(this); + renovateRefresh.setOnClickListener(this); + addBt.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (VerificationUtils.checkPhoneNumber(editText.getText().toString().trim(), phoneArea.getText().toString())) { + if (editText.getText().toString().trim().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + ToastUtil.show(ShareDeviceActivity.this, R.string.phone_to_myself); + } else { + shareDevice(); + } + } else { + ToastUtil.show(ShareDeviceActivity.this, R.string.phone_error); + } + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + /*case R.id.bt_share_add: + if (VerificationUtils.isMobile(editText.getText().toString().trim())) { + if (editText.getText().toString().trim().equals(SharedpreferencesUtil.get(Constans.USERPHONE, ""))) { + ToastUtil.show(ShareDeviceActivity.this, R.string.phone_to_myself); + } else { + shareDevice(); + } + } else { + ToastUtil.show(ShareDeviceActivity.this, R.string.phone_error); + } + break;*/ + case R.id.bt_share_add_phone: + Intent intent = new Intent(ShareDeviceActivity.this, PhoneAdressActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("tag", "1"); + startActivityForResult(intent, GET_PHONE_NUMBER); + break; + case R.id.iv_renovate_refresh: + picValidateCode(); + break; + case R.id.ll_phone_area: + Intent intent1 = new Intent(ShareDeviceActivity.this, PhoneAreaActivity.class); + intent1.putExtra("type", "shareDevice"); + startActivityForResult(intent1, GET_PHONE_AREA); + break; + } + } + + private void queryShareList() { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + netWorkUtil.requestPostByAsynew(NetWorkUrl.QUERY_SHARE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ShareListEntuty obj = JSON.parseObject(respone, ShareListEntuty.class); + Log.i("queryShareList", "ShareDeviceActivity onSuccess()" + respone); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_SHARE_LIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_SHARE_LIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_SHARE_LIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void shareDevice() { + /*String phoneCode = phoneArea.getText().toString(); + String userId = editText.getText().toString().trim(); + String codeTrim = editTextCode.getText().toString().trim(); + if (TextUtils.isEmpty(userId)) { + ToastUtil.show(this, R.string.nickname_null); + return; + } + if (TextUtils.isEmpty(codeTrim)) { + ToastUtil.show(this, R.string.code_null); + return; + } + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + map.put("ziId", ziId); + map.put("userId", userId); + map.put("validateCode", codeTrim); + netWorkUtil.requestPostByAsynew(NetWorkUrl.SHARE_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("shareDevice", "ShareDeviceActivity onSuccess()" + respone); + ModifyDeviceEntity obj = JSON.parseObject(respone, ModifyDeviceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SHARE_DEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SHARE_DEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SHARE_DEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void initData() { + numbers = 11; + editText.addTextChangedListener(textWatcher); + number.setVisibility(View.GONE); + number.setText(11 + ""); + // queryShareList(); + } + + @Override + public void onResume() { + super.onResume(); + queryShareList(); + picValidateCode(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SHARE_DEVICE_SUCCESS: + ModifyDeviceEntity entity = (ModifyDeviceEntity) msg.obj; + ToastUtil.show(this, entity.getMsg()); + queryShareList(); + break; + case SHARE_DEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case QUERY_SHARE_LIST_SUCCESS: + entity1 = new ShareListEntuty(); + entity1 = (ShareListEntuty) msg.obj; + if (entity1 != null && entity1.getObj() != null) { + if (entity1.getObj().size() != 0) { + mAdapter = new ShareAdapter(entity1.getObj(), this); + // myShareListView.setAdapter(mAdapter); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + myShareListView.setVisibility(View.VISIBLE); + myShareListView.setHasFixedSize(true); + myShareListView.setLayoutManager(manage); + myShareListView.setSwipeMenuCreator(swipeMenuCreator); + myShareListView.setSwipeMenuItemClickListener(mMenuItemClickListener); + myShareListView.setAdapter(mAdapter); + myShareListView.setSwipeItemClickListener(this); + } + } else { + myShareListView.setVisibility(View.GONE); + } + break; + case QUERY_SHARE_LIST_FAIL: + break; + case DEL_ERROR_STUDY_SUCCESS: + queryShareList(); + break; + } + } + + private void cancleShare(int adapterPosition) { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + map.put("userId", entity1.getObj().get(adapterPosition).getUser().getId()); + netWorkUtil.requestPostByAsynew(CANCLE_SHARE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cancleShare", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DEL_ERROR_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void onItemClick(View itemView, int position) { + + } + + private void picValidateCode() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestGetByAsy(PIC_CODE, map, new NetWorkUtil.ReqCallBackOta() { + @Override + public void onSuccess(Response respone) { + ResponseBody body = respone.body(); + try { + byte[] bytes = body.bytes(); + final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + runOnUiThread(new Runnable() { + @Override + public void run() { + renovateIv.setImageBitmap(bitmap); + } + }); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void onFail(String message) { + + } + }); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case GET_PHONE_NUMBER: + if (data != null && data.getExtras().get("phoneNumber") != null) { + editText.setText(data.getExtras().get("phoneNumber").toString()); + } + break; + case GET_PHONE_AREA: + if (data != null && data.getExtras().get("phoneArea") != null) { + phoneArea.setText(data.getExtras().get("phoneArea").toString()); + } + break; + } + + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/mydevice/SolidVersionActivity.java b/app/src/main/java/com/yonsz/z1/mine/mydevice/SolidVersionActivity.java new file mode 100644 index 0000000..7e5f1c2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/mydevice/SolidVersionActivity.java @@ -0,0 +1,901 @@ +package com.yonsz.z1.mine.mydevice; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Environment; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.SolidUpEvent; +import com.yonsz.z1.database.entity.Z1DetailEntity; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity5.UpgradeEntity; +import com.yonsz.z1.database.entity.entitya2.SolidEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.VersionDecalreActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.model.Module; +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.tcpudp.utils.Utils; +import com.yonsz.z1.tcpudp.ymodem.YModem; +import com.yonsz.z1.tcpudp.ymodem.YModemListener; +import com.yonsz.z1.utils.NettyHandlerUtilTry; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.fragment.Scene5Fragment; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.io.File; +import java.io.IOException; +import java.net.DatagramPacket; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import okhttp3.Response; +import okio.BufferedSink; +import okio.Okio; +import okio.Sink; + +import static com.yonsz.z1.net.Constans.CAMERA_ISADD_SUCCESS; +import static com.yonsz.z1.net.Constans.DOWNLOAD_FILE_FAIL; +import static com.yonsz.z1.net.Constans.GET_NEWOTA_VER_FAIL; +import static com.yonsz.z1.net.Constans.GET_NEWOTA_VER_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.START_SOLID_DATEUP; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.Constans.VOLUME_SWITCH_FAIL; +import static com.yonsz.z1.net.Constans.VOLUME_SWITCH_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; + +/** + * Created by Administrator on 2018/4/2. + */ + +public class SolidVersionActivity extends BaseActivity { + private TitleView mTitleView; + private YModem ymodem; + private RelativeLayout newVersion; + private TextView nowVersion; + private TextView newVersionName; + private TextView toUpadate, serviceUpadate; + private SolidEntity mSolidEntity; + private String filePath; + private String fileName; + private String fileMD5; + private ProgressBar mProgressBar; + private TextView progressTv; + private SolidEntity.ObjBean mViewDate; + private LinearLayout progressLl; + private TextView otaDeclareTv; + private boolean isUpadate = false; + private BroadcastReceiver mWifiChangedReceiver; + private String mSDCardPath; + private File dest; + private List mModules; + private String deviceIp = ""; + // private UdpBroadcast udpBroadcast; + private String ziId; + private boolean isHaveFile = false; + private RelativeLayout versionDecalreRl, versionUpdateRl; + private LoadingDialog mLoadingDialog; + private String subVersion = ""; + private String taskId = ""; + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_solid_version); + mModules = loadDevices(); + initView(); + getNewOtaVer(); + + Scene5Fragment.getUdpBroadcast().send(Utils.getCMDScanModules(this)); + } + + @Override + public void onResume() { + super.onResume(); + // udpBroadcast.send(Utils.getCMDScanModules(this)); + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + subVersion = getIntent().getExtras().get("subVersion").toString(); + // NettyHandlerUtilTry.initNetty(); + mTitleView = (TitleView) findViewById(R.id.title_solid_version); + versionDecalreRl = (RelativeLayout) findViewById(R.id.rl_solid_version_declare); + versionUpdateRl = (RelativeLayout) findViewById(R.id.rl_solid_version_update); + mTitleView.setHead(R.string.firmware_version); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (isUpadate) { + quickOta(); + } else { + finish(); + } + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + progressTv = (TextView) findViewById(R.id.tv_progress); + mProgressBar = (ProgressBar) findViewById(R.id.progress_ota); + newVersion = (RelativeLayout) findViewById(R.id.rl_new_version); + nowVersion = (TextView) findViewById(R.id.tv_now_version); + newVersionName = (TextView) findViewById(R.id.tv_new_version_name); + toUpadate = (TextView) findViewById(R.id.tv_to_update); + serviceUpadate = (TextView) findViewById(R.id.tv_service_update); + progressLl = (LinearLayout) findViewById(R.id.ll_progress); + otaDeclareTv = (TextView) findViewById(R.id.tv_ota_stage_declare); + toUpadate.setOnClickListener(this); + serviceUpadate.setOnClickListener(this); + if (getIntent().getExtras().get("nowVersion").toString().equals("main")) { + queryDeviceDetail(); + } else { + nowVersion.setText(getIntent().getExtras().get("nowVersion").toString()); + } + + mWifiChangedReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); + if (networkInfo != null && networkInfo.isConnected()) { + } else { + if (isUpadate) { + Toast.makeText(SolidVersionActivity.this, R.string.Upgrade_failed, Toast.LENGTH_SHORT).show(); + } + } + } + }; + registerReceiver(mWifiChangedReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + + getDeviceIp(); + + + versionDecalreRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(SolidVersionActivity.this, VersionDecalreActivity.class); + intent.putExtra("activity", "SolidVersionActivity"); + intent.putExtra("deviceVersion", getIntent().getExtras().get("deviceVersion").toString()); + intent.putExtra("subVersion", subVersion); + if (null != getIntent().getExtras().get("standardCode")) { + intent.putExtra("standardCode", getIntent().getExtras().get("standardCode").toString()); + } + startActivity(intent); + } + }); + versionUpdateRl.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (getIntent().getExtras().get("isNewOtaFlag").equals("1")) { + // ToastUtil.show(SolidVersionActivity.this, "您可以点击下方升级按钮升级"); + getNewOtaVer(); + } else { + ToastUtil.show(SolidVersionActivity.this, R.string.No_escalation); + } + } + }); + } + + private void getDeviceIp() { + if (!TextUtils.isEmpty(SharedpreferencesUtil.get(ziId, ""))) { + deviceIp = SharedpreferencesUtil.get(ziId, "").toString(); + } else { + for (int i = 0; i < mModules.size(); i++) { + if (mModules.get(i).getMac().equals(ziId)) { + deviceIp = mModules.get(i).getIp(); + } + } + } + Log.i("netty", "SolidVersionActivity onCreate()" + deviceIp + "==="); + } + + private void getNewOtaVer() { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceVersion", getIntent().getExtras().get("deviceVersion").toString()); + map.put("type", "1");//目前只支持芯片升级写1,语音升级写2 + if (!TextUtils.isEmpty(subVersion)) { + map.put("subVersion", subVersion); + } + map.put("ziId", ziId); + netWorkUtil.requestPostByAsynew(NetWorkUrl.GET_NEWOTA_VER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getNewOtaVer", "SolidVersionActivity onSuccess()" + respone); + SolidEntity obj = JSON.parseObject(respone, SolidEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_NEWOTA_VER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_NEWOTA_VER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_NEWOTA_VER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void chageDeviceState(String status) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("status", status); + map.put("otaType", "1"); + if (!TextUtils.isEmpty(subVersion)) { + map.put("subVersion", subVersion); + } + netWorkUtil.requestPostByAsynew(NetWorkUrl.CHANGE_DEVICE_STATE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("chageDeviceState", "SolidVersionActivity onSuccess()" + respone); + /*SolidEntity obj = JSON.parseObject(respone, SolidEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_NEWOTA_VER_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_NEWOTA_VER_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*/ + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_NEWOTA_VER_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + // udpBroadcast.close(); + unregisterReceiver(mWifiChangedReceiver); + //When the activity finished unexpected, just call stop ymodem + // ymodem.stop(); + try { + ymodem.stop(); + NettyHandlerUtilTry.closeCtx(); + } catch (Exception e) { + + } + } + + @Override + public void onBackPressed() { + if (isUpadate) { + quickOta(); + } else { + finish(); + } + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_NEWOTA_VER_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + mSolidEntity = (SolidEntity) msg.obj; + if (null != mSolidEntity.getObj()) { + setViewDate(mSolidEntity.getObj()); + } else { + newVersion.setVisibility(View.GONE); + } + break; + case GET_NEWOTA_VER_FAIL: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case QUERY_DEVICE_DETAIL_SUCCESS: + Z1DetailEntity entity1 = (Z1DetailEntity) msg.obj; + nowVersion.setText(entity1.getObj().getFirmwareVersion()); + break; + case START_SOLID_DATEUP: + String msgMsg = (String) msg.obj; + if (msgMsg.equals("连接失败")) { + // udpBroadcast.send(Utils.getCMDScanModules(this)); + isUpadate = false; + chageDeviceState("5"); + toUpadate.setAlpha(1.0f); + toUpadate.setText(R.string.upgrade); + otaDeclareTv.setTextColor(0xffF5A623); + otaDeclareTv.setText(R.string.Upgrade_failed); + } else { + if (isUpadate) { + isUpadate = false; + chageDeviceState("5"); + toUpadate.setAlpha(1.0f); + toUpadate.setText("重新升级"); + serviceUpadate.setVisibility(View.VISIBLE); + otaDeclareTv.setTextColor(0xffF5A623); + otaDeclareTv.setText(R.string.Upgrade_failed); + Toast.makeText(SolidVersionActivity.this, "升级失败,请重新升级 ", Toast.LENGTH_SHORT).show(); + } + } + break; + case DOWNLOAD_FILE_FAIL: + if (isUpadate) { + isUpadate = false; + chageDeviceState("5"); + toUpadate.setAlpha(1.0f); + toUpadate.setText("重新升级"); + serviceUpadate.setVisibility(View.VISIBLE); + otaDeclareTv.setTextColor(0xffF5A623); + otaDeclareTv.setText(R.string.Upgrade_failed); + Toast.makeText(SolidVersionActivity.this, "下载文件失败 ", Toast.LENGTH_SHORT).show(); + } + break; + case VOLUME_SWITCH_SUCCESS: + UpgradeEntity obj = (UpgradeEntity) msg.obj; + taskId = String.valueOf(obj.getData().getId()); +// chageDeviceState("3"); + toUpadate.setAlpha(0.5f); + serviceUpadate.setText("正在升级中…"); + serviceUpadate.setAlpha(0.5f); + progressLl.setVisibility(View.VISIBLE); + otaDeclareTv.setVisibility(View.VISIBLE); + mProgressBar.setProgress(0); + progressTv.setText("0"); + otaDeclareTv.setTextColor(0xff333333); + otaDeclareTv.setText("正在升级中..."); + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 2000); + break; + case UPDATE_SEC: + deviceQueryUpgradeTask(); + break; + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + UpgradeEntity upgradeEntity = (UpgradeEntity) msg.obj; + switch (upgradeEntity.getData().getStatus()) { + case 0: + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 2000); + break; + case 1: + case 2: + if (!upgradeEntity.getData().getProgress().isEmpty()) { + mProgressBar.setProgress(Integer.parseInt(upgradeEntity.getData().getProgress())); + progressTv.setText(upgradeEntity.getData().getProgress()); + } + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 2000); + break; + case 3: + isUpadate = false; +// chageDeviceState("4"); + nowVersion.setText(mViewDate.getVersionName().toString()); + newVersion.setVisibility(View.GONE); + toUpadate.setAlpha(1.0f); + toUpadate.setVisibility(View.GONE); + serviceUpadate.setAlpha(1.0f); + serviceUpadate.setVisibility(View.GONE); + progressLl.setVisibility(View.GONE); + otaDeclareTv.setVisibility(View.GONE); + otaDeclareTv.setText("正在升级中..."); + Toast.makeText(SolidVersionActivity.this, "固件升级成功", Toast.LENGTH_SHORT).show(); + break; + case 4: + ToastUtil.show(this, upgradeEntity.getData().getReason()); + break; + default: + break; + } + break; + case VOLUME_SWITCH_FAIL: + case GET_USERDEVICES4_SIMPLEINFO_FAIL: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case CAMERA_ISADD_SUCCESS: + int arg1 = msg.arg1; + if (arg1 == 1) { + getDeviceIp(); + WifiManager wifimanager; + wifimanager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); + if (wifimanager.isWifiEnabled()) { + if (isHaveFile) { + if (!deviceIp.isEmpty()) { + if (toUpadate.getText().toString().equals("本地升级") || toUpadate.getText().toString().equals("重新升级")) { + if (serviceUpadate.getText().toString().equals("正在升级中…")) { + return; + } + isUpadate = true; + toUpadate.setText("正在升级中…"); + toUpadate.setAlpha(0.5f); + serviceUpadate.setAlpha(0.5f); + progressLl.setVisibility(View.VISIBLE); + otaDeclareTv.setVisibility(View.VISIBLE); + mProgressBar.setProgress(0); + progressTv.setText("0"); + otaDeclareTv.setTextColor(0xff333333); + otaDeclareTv.setText("正在升级中..."); + startTransmission(); + NettyHandlerUtilTry.initNetty(ymodem, deviceIp); + } + } else { + Toast.makeText(SolidVersionActivity.this, "尚未在此网络下搜索到设备", Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(SolidVersionActivity.this, "下载文件失败", Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(SolidVersionActivity.this, R.string.Upgrade_failed, Toast.LENGTH_SHORT).show(); + } + } else { + if (serviceUpadate.getText().toString().equals("远程升级")) { + if (toUpadate.getText().toString().equals("正在升级中…")) { + return; + } + deviceUpgrade(); + } + } + break; + } + } + + private void setViewDate(SolidEntity.ObjBean viewDate) { + mViewDate = viewDate; + if (mViewDate.getVersionName().compareTo(getIntent().getExtras().get("nowVersion").toString()) > 0 || getIntent().getExtras().get("isNewOtaFlag").equals("1")) { + downloadFile(mSolidEntity.getObj().getDownUrl().toString()); + newVersion.setVisibility(View.VISIBLE); + newVersionName.setText(mSolidEntity.getObj().getVersionName()); + toUpadate.setVisibility(View.VISIBLE); + serviceUpadate.setVisibility(View.VISIBLE); + } else { + newVersion.setVisibility(View.GONE); + toUpadate.setVisibility(View.GONE); + serviceUpadate.setVisibility(View.GONE); + } + } + + private void downloadFile(final String url) { + final long startTime = System.currentTimeMillis(); + Log.i("DOWNLOAD", "startTime=" + startTime); + NetWorkUtil.instans().downloadFile(url, new NetWorkUtil.ReqCallBackOta() { + @Override + public void onSuccess(Response respone) { + if (respone.code() != 200) { + isHaveFile = false; + return; + } + Sink sink = null; + BufferedSink bufferedSink = null; + try { + String mSDCardPath = getExternalCacheDir().getAbsolutePath(); + dest = new File(mSDCardPath, url.substring(url.length() - 19, url.length())); + if (dest.exists()) { + dest.delete(); + } + boolean newFile = dest.createNewFile(); + Log.i("DOWNLOAD", "download success" + newFile + dest.getAbsolutePath()); + sink = Okio.sink(dest); + bufferedSink = Okio.buffer(sink); + bufferedSink.writeAll(respone.body().source()); + bufferedSink.close(); + Log.i("DOWNLOAD", "download success"); + Log.i("DOWNLOAD", "totalTime=" + (System.currentTimeMillis() - startTime)); + isHaveFile = true; + } catch (Exception e) { + e.printStackTrace(); + Log.i("DOWNLOAD", "download failed" + e.getMessage() + "=====" + e.getCause()); + //下载文件失败 + isHaveFile = false; + /* Message message = new Message(); + message.what = DOWNLOAD_FILE_FAIL; + mHandler.sendMessage(message);*/ + } finally { + if (bufferedSink != null) { + try { + bufferedSink.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + @Override + public void onFail(String message) { + + } + }); + } + + private void quickOta() { + ConfirmDialog dialog = new ConfirmDialog(this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + ymodem.stop(); + NettyHandlerUtilTry.closeCtx(); + finish(); + break; + } + } + }); + dialog.setContent(R.string.back_declare); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_to_update: + if (!deviceIp.isEmpty()) { + canUpgrade(1); + } else { + Scene5Fragment.getUdpBroadcast().send(Utils.getCMDScanModules(this)); + initLoadDialog(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + mLoadingDialog.dismiss(); + canUpgrade(1); + } + }, 5000); + } + break; + case R.id.tv_service_update: + canUpgrade(2); + break; + } + } + + private void canUpgrade(int i) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + util.requestGetByAsy(NetWorkUrl.DEVICE_CANUPGRADE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("canUpgrade", "onSuccess: " + respone); + Message msg = mHandler.obtainMessage(CAMERA_ISADD_SUCCESS); + msg.arg1 = i; + mHandler.sendMessage(msg); + /* SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CAMERA_ISADD_SUCCESS); + msg.obj = obj; + msg.arg1 = i; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*/ + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void startTransmission() { + ymodem = new YModem.Builder() + .filePath("file:/" + dest.getAbsolutePath()) + .fileName(dest.getName()) + .checkMd5(mSolidEntity.getObj().getMd5().toString()) + .callback(new YModemListener() { + @Override + public void onDataReady(byte[] data) { + chageDeviceState("3"); + NettyHandlerUtilTry.sendBleMsg2Server(data); + } + + @Override + public void onProgress(final int currentSent, final int total) { + Log.i("startTransmission", "MainActivity onDataReady()" + currentSent + "===" + total); + //the progress of the file data has transmitted + runOnUiThread(new Runnable() { + @Override + public void run() { + mProgressBar.setProgress(currentSent * 100 / total); + if (currentSent * 100 / total < 100) { + progressTv.setText(currentSent * 100 / total + ""); + } else { + progressTv.setText(100 + ""); + } + + } + }); + } + + @Override + public void onSuccess() { + Log.i("startTransmission", "MainActivity onSuccess()" + "升级成功"); + runOnUiThread(new Runnable() { + @Override + public void run() { + isUpadate = false; + chageDeviceState("4"); + nowVersion.setText(mViewDate.getVersionName().toString()); + newVersion.setVisibility(View.GONE); + toUpadate.setAlpha(1.0f); + toUpadate.setVisibility(View.GONE); + serviceUpadate.setVisibility(View.GONE); + progressLl.setVisibility(View.GONE); + otaDeclareTv.setVisibility(View.GONE); + otaDeclareTv.setText("正在升级中..."); + Toast.makeText(SolidVersionActivity.this, "固件升级成功", Toast.LENGTH_SHORT).show(); + NettyHandlerUtilTry.closeCtx(); + } + }); + } + + @Override + public void onFailed(String reason) { + runOnUiThread(new Runnable() { + @Override + public void run() { + isUpadate = false; + chageDeviceState("5"); + toUpadate.setAlpha(1.0f); + toUpadate.setText("重新升级"); + otaDeclareTv.setTextColor(0xffF5A623); + otaDeclareTv.setText(R.string.Upgrade_failed); + Toast.makeText(SolidVersionActivity.this, "升级失败,请重新升级 ", Toast.LENGTH_SHORT).show(); + NettyHandlerUtilTry.sendBleMsg2Server("a".getBytes()); + NettyHandlerUtilTry.closeCtx(); + } + }); + } + }).build(); + ymodem.start(); + } + + public void onEventMainThread(SolidUpEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = START_SOLID_DATEUP; + message.obj = msg; + mHandler.sendMessage(message); + } + + /*stop the transmission*/ + public void onStopYmodem() { + ymodem.stop(); + } + + private void queryDeviceDetail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + netWorkUtil.requestPostByAsynew(NetWorkUrl.QUERY_DEVICE_DETAIL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceDetail", "ShareDeviceActivity onSuccess()" + respone); + Z1DetailEntity obj = JSON.parseObject(respone, Z1DetailEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_DETAIL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_DETAIL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_DETAIL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void deviceQueryUpgradeTask() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("taskId", taskId); + util.requestGetByAsy(NetWorkUrl.DEVICE_QUERYUPGRADETASK, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getAideviceList", respone); + UpgradeEntity entity = JSON.parseObject(respone, UpgradeEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USERDEVICES4_SIMPLEINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void deviceUpgrade() { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", ziId); + util.requestPostByAsynewApi(NetWorkUrl.DEVICE_UPGRADE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("deviceUpgrade", "onSuccess: " + respone); + UpgradeEntity obj = JSON.parseObject(respone, UpgradeEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(VOLUME_SWITCH_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private List loadDevices() { + List modules = new ArrayList(); + SharedPreferences preferences = getSharedPreferences("module_list", MODE_PRIVATE); + int count = preferences.getInt(Constants.KEY_MODULE_COUNT, 0); + Module module; + + for (int i = 0; i < count; i++) { + module = new Module(); + module.setId(preferences.getInt(Constants.KEY_PRE_ID + i, -1)); + module.setIp(preferences.getString(Constants.KEY_PRE_IP + i, null)); + module.setMac(preferences.getString(Constants.KEY_PRE_MAC + i, null)); + module.setModuleID(preferences.getString(Constants.KEY_PRE_MODULEID + i, null)); + modules.add(module); + } + return modules; + } + + private List decodePackets(List packets) { + + int i = 1; + Module module; + List list = new ArrayList(); + List modules = new ArrayList(); + + DECODE_PACKETS: + for (DatagramPacket packet : packets) { + + String data = new String(packet.getData(), 0, packet.getLength()); + Log.i("NettyManager", i + ": " + data); + if (data.equals(Utils.getCMDScanModules(this))) { + continue; + } + + for (String item : list) { + if (item.equals(data)) { + continue DECODE_PACKETS; + } + } + + list.add(data); + if ((module = Utils.decodeBroadcast2Module(data)) != null) { + module.setId(i); + modules.add(module); + i++; + } + } + + return modules; + } + + /** + * save modules' data to local + * + * @param modules + */ + private void saveDevices(List modules) { + + SharedPreferences preferences = getSharedPreferences("module_list", MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + + if (modules.size() > 0) { + int i = 0; + for (Module module : modules) { + editor.putInt(Constants.KEY_PRE_ID + i, module.getId()); + editor.putString(Constants.KEY_PRE_IP + i, module.getIp()); + editor.putString(Constants.KEY_PRE_MAC + i, module.getMac()); + editor.putString(Constants.KEY_PRE_MODULEID + i, module.getModuleID()); + i++; + } + + editor.putInt(Constants.KEY_MODULE_COUNT, modules.size()); + editor.commit(); + } else { + // editor.clear().commit(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/personcenter/ChangePhoneActivity.java b/app/src/main/java/com/yonsz/z1/mine/personcenter/ChangePhoneActivity.java new file mode 100644 index 0000000..952ca1e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/personcenter/ChangePhoneActivity.java @@ -0,0 +1,126 @@ +package com.yonsz.z1.mine.personcenter; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.NewRecordEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.forgetpw.ForgetPWActivity; +import com.yonsz.z1.mine.aboutversion.AboutVersionActivity; +import com.yonsz.z1.mine.aboutversion.VersionDecalreActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.KeyboardUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.ADD_PERSONINFO_FAIL; +import static com.yonsz.z1.net.Constans.ADD_PERSONINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.NICKNAME_RESULT; + +/** + * Created by Administrator on 2017/6/12. + */ + +public class ChangePhoneActivity extends BaseActivity { + private TextView number; + private TitleView mTitle; + private Button bt_msg, bt_pw; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_change_phone); + initView(); + initData(); + } + + private void initView() { + number = (TextView) findViewById(R.id.number); + bt_msg = (Button) findViewById(R.id.bt_msg); + bt_pw = (Button) findViewById(R.id.bt_pw); + mTitle = (TitleView) findViewById(R.id.title_nickname); + mTitle.setHead("选择身份验证方式"); + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + } + + @Override + public void onFunctionText() { + + } + }); + bt_msg.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent = new Intent(ChangePhoneActivity.this, PhoneCheckAndModifyActivity.class); + intent.putExtra("tag", "msgCheck"); + startActivity(intent); + } + }); + bt_pw.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent = new Intent(ChangePhoneActivity.this, PhoneCheckAndModifyActivity.class); + intent.putExtra("tag", "pwCheck"); + startActivity(intent); + } + }); + } + + private void initData() { + setPhone(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + } + + private void setPhone(String pNumber) { + if (!TextUtils.isEmpty(pNumber) && pNumber.length() > 6) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < pNumber.length(); i++) { + char c = pNumber.charAt(i); + if (i >= 3 && i <= 6) { + sb.append('*'); + } else { + sb.append(c); + } + } + number.setText("当前手机号码:" + sb.toString()); + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_PERSONINFO_SUCCESS: + Intent intent = new Intent(ChangePhoneActivity.this, PersonCenterActivity.class); + setResult(NICKNAME_RESULT, intent); + finish(); + break; + case ADD_PERSONINFO_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/personcenter/ClipSquareImageView.java b/app/src/main/java/com/yonsz/z1/mine/personcenter/ClipSquareImageView.java new file mode 100644 index 0000000..18c98cb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/personcenter/ClipSquareImageView.java @@ -0,0 +1,569 @@ +package com.yonsz.z1.mine.personcenter; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Region; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; +import android.view.VelocityTracker; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewTreeObserver; +import android.widget.ImageView; + +import com.yonsz.z1.R; + +/** + * Created by Administrator on 2017/6/12. + * 图片裁剪 + */ + +public class ClipSquareImageView extends ImageView implements View.OnTouchListener, ViewTreeObserver.OnGlobalLayoutListener { + private final Paint mBorderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// 边框画笔 + private int BORDER_DISTANCE;// 距离屏幕的边距 + private int OUTSIDE_COLOR;// 外部背景颜色 + private int BORDER_LINE_COLOR;// 边框颜色 + private float BORDER_LINE_WIDTH;// 框框宽度 + private int WIDTH_WEIGHT = 25;// 宽边比例 + private int HEIGHT_WEIGHT = 14;// 高边比例 + private int BORDER_LONG;// 边长 + + public static final float DEFAULT_MAX_SCALE = 4.0f; + public static final float DEFAULT_MID_SCALE = 2.0f; + public static final float DEFAULT_MIN_SCALE = 1.0f; + + private float minScale = DEFAULT_MIN_SCALE; + private float midScale = DEFAULT_MID_SCALE; + private float maxScale = DEFAULT_MAX_SCALE; + + private MultiGestureDetector multiGestureDetector; + private boolean isIniting;// 正在初始化 + private Rect outsideRect = new Rect();// View的Rect + private Rect cutRect = new Rect();// 裁剪的Rect + + private Matrix defaultMatrix = new Matrix();// 初始化的图片矩阵,控制图片撑满屏幕及显示区域 + private Matrix dragMatrix = new Matrix();// 拖拽放大过程中动态的矩阵 + private Matrix finalMatrix = new Matrix();// 最终显示的矩阵 + private final RectF displayRect = new RectF();// 图片的真实大小 + private final float[] matrixValues = new float[9]; + private int width; + private int hight; + private int number=0; + + private SHAPE mShape = SHAPE.REGTANGLE; // 遮罩样式 + public enum SHAPE { + ROUND, + REGTANGLE + } + + public ClipSquareImageView(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ClipSquareImageView); + setBorderDistance((int) a.getDimension(R.styleable.ClipSquareImageView_ClipSquareIV_BorderDistance, 50)); + setBorderWidth((int) a.getDimension(R.styleable.ClipSquareImageView_ClipSquareIV_BorderWidth, 2)); + setBorderColor(a.getColor(R.styleable.ClipSquareImageView_ClipSquareIV_BorderColor, Color.WHITE)); + setOutsideColor(a.getColor(R.styleable.ClipSquareImageView_ClipSquareIV_OutsideColor, Color.parseColor("#76000000"))); + a.recycle(); + + super.setScaleType(ScaleType.MATRIX); + setOnTouchListener(this); + multiGestureDetector = new MultiGestureDetector(context); + } + + /** + * 边框距离屏幕宽度 + * @param distance + */ + public void setBorderDistance(int distance) { + this.BORDER_DISTANCE = distance; + } + + /** + * 边框宽度 + * @param width + */ + public void setBorderWidth(int width) { + this.BORDER_LINE_WIDTH = width; + } + + /** + * 边框颜色 + * @param color + */ + public void setBorderColor(int color) { + this.BORDER_LINE_COLOR = color; + } + + /** + * 非裁剪区域颜色 + * @param color + */ + public void setOutsideColor(int color) { + this.OUTSIDE_COLOR = color; + } + + /** + * 设置裁剪比例 + * @param widthWeight + * @param heightWeight + */ + public void setBorderWeight(int widthWeight, int heightWeight) { + this.WIDTH_WEIGHT = widthWeight; + this.HEIGHT_WEIGHT = heightWeight; + + initBmpPosition(); + invalidate(); + } + + /** + * 设置是圆的还是方的 + */ + public void setShape(SHAPE shape) { + mShape = shape; + invalidate(); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + getViewTreeObserver().addOnGlobalLayoutListener(this); + } + + @SuppressWarnings("deprecation") + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + getViewTreeObserver().removeGlobalOnLayoutListener(this); + } + + @Override + public void onGlobalLayout() { + if(isIniting) { + return; + } + // 调整视图位置 + initBmpPosition(); + } + + @Override + public void setImageBitmap(Bitmap bm) { + super.setImageBitmap(bm); + // 调整视图位置 + initBmpPosition(); + } + + + /** + * 初始化图片位置 + */ + private void initBmpPosition() { + isIniting = true; + super.setScaleType(ScaleType.MATRIX); + Drawable drawable = getDrawable(); + + if(drawable == null) { + return; + } + outsideRect.set(0, 0, width, hight); + BORDER_LONG = Math.min(outsideRect.width(), outsideRect.height()) - 2 * BORDER_DISTANCE; + + // 裁剪后方向 + boolean isCutToHorizontal = false; + if(WIDTH_WEIGHT >= HEIGHT_WEIGHT) { + if(WIDTH_WEIGHT == HEIGHT_WEIGHT && (outsideRect.width() > outsideRect.height())) { + } else { + isCutToHorizontal = true; + } + } + + // 裁剪区域 + int inLeft = BORDER_DISTANCE + (isCutToHorizontal ? 0 : (outsideRect.width() - outsideRect.height() * WIDTH_WEIGHT / HEIGHT_WEIGHT) / 2); + int inTop = isCutToHorizontal ? (outsideRect.height() - BORDER_LONG * HEIGHT_WEIGHT / WIDTH_WEIGHT) >> 1 : BORDER_DISTANCE; + int inRight = outsideRect.width() - inLeft; + int inBottom = outsideRect.height() - inTop; + cutRect.set(0, inTop,inRight+inLeft, inBottom); + + // 获得图片高宽 + final float drawableWidth = drawable.getIntrinsicWidth(); + final float drawableHeight = drawable.getIntrinsicHeight(); + + // 按图片最小边比例缩放图片,用于撑满裁剪区 + float screenScale; + float photoX = cutRect.left; + float photoY = cutRect.top; + // 先统一比例 + float scaleWidthWeight = cutRect.width() / drawableWidth; + // 区域比图片宽,按照图片宽撑满 + if(drawableHeight * scaleWidthWeight > cutRect.height()) { + screenScale = cutRect.width() / drawableWidth; + photoY = photoY - ((drawableHeight * screenScale - cutRect.height()) / 2); + } else {// 图片比区域宽,按照图片高度撑满 + screenScale = cutRect.height() / drawableHeight; + // screenScale = cutRect.width() / drawableWidth; + photoX = photoX - ((drawableWidth * screenScale - cutRect.width()) / 2); + } + + defaultMatrix.setScale(screenScale, screenScale); + // 设置图片位置居中 + defaultMatrix.postTranslate(photoX, photoY); + + resetMatrix(); + } + + /** + * Resets the Matrix back to FIT_CENTER, and then displays it.s + */ + private void resetMatrix() { + if(dragMatrix == null) { + return; + } + + dragMatrix.reset(); + setImageMatrix(getDisplayMatrix()); + } + + private Matrix getDisplayMatrix() { + finalMatrix.set(defaultMatrix); + finalMatrix.postConcat(dragMatrix); + return finalMatrix; + } + + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + return multiGestureDetector.onTouchEvent(motionEvent); + } + + private class MultiGestureDetector extends GestureDetector.SimpleOnGestureListener implements + ScaleGestureDetector.OnScaleGestureListener { + + private final ScaleGestureDetector scaleGestureDetector; + private final GestureDetector gestureDetector; + private final float scaledTouchSlop; + + private VelocityTracker velocityTracker; + private boolean isDragging; + + private float lastTouchX; + private float lastTouchY; + private float lastPointerCount;// 上一次是几个手指事件 + + public MultiGestureDetector(Context context) { + scaleGestureDetector = new ScaleGestureDetector(context, this); + gestureDetector = new GestureDetector(context, this); + gestureDetector.setOnDoubleTapListener(this); + + final ViewConfiguration configuration = ViewConfiguration.get(context); + scaledTouchSlop = configuration.getScaledTouchSlop(); + } + + @Override + public boolean onScale(ScaleGestureDetector scaleGestureDetector) { + float scale = getScale(); + float scaleFactor = scaleGestureDetector.getScaleFactor(); + if(getDrawable() != null && ((scale < maxScale && scaleFactor > 1.0f) || (scale > minScale && scaleFactor < 1.0f))){ + if(scaleFactor * scale < minScale){ + scaleFactor = minScale / scale; + } + if(scaleFactor * scale > maxScale){ + scaleFactor = maxScale / scale; + } + dragMatrix.postScale(scaleFactor, scaleFactor, getWidth() / 2, getHeight() / 2); + checkAndDisplayMatrix(); + } + return true; + } + + @Override + public boolean onScaleBegin(ScaleGestureDetector scaleGestureDetector) { + return true; + } + + @Override + public void onScaleEnd(ScaleGestureDetector scaleGestureDetector) {} + + public boolean onTouchEvent(MotionEvent event) { + if (gestureDetector.onTouchEvent(event)) { + return true; + } + + scaleGestureDetector.onTouchEvent(event); + + /* + * Get the center x, y of all the pointers + */ + float x = 0, y = 0; + final int pointerCount = event.getPointerCount(); + for (int i = 0; i < pointerCount; i++) { + x += event.getX(i); + y += event.getY(i); + } + x = x / pointerCount; + y = y / pointerCount; + + /* + * If the pointer count has changed cancel the drag + */ + if (pointerCount != lastPointerCount) { + isDragging = false; + if (velocityTracker != null) { + velocityTracker.clear(); + } + lastTouchX = x; + lastTouchY = y; + lastPointerCount = pointerCount; + } + + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + if (velocityTracker == null) { + velocityTracker = VelocityTracker.obtain(); + } else { + velocityTracker.clear(); + } + velocityTracker.addMovement(event); + + lastTouchX = x; + lastTouchY = y; + isDragging = false; + break; + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + lastPointerCount = 0; + if (velocityTracker != null) { + velocityTracker.recycle(); + velocityTracker = null; + } + break; + case MotionEvent.ACTION_MOVE: { + final float dx = x - lastTouchX, dy = y - lastTouchY; + + if (isDragging == false) { + // Use Pythagoras to see if drag length is larger than + // touch slop + isDragging = Math.sqrt((dx * dx) + (dy * dy)) >= scaledTouchSlop; + } + + if (isDragging) { + if (getDrawable() != null) { + dragMatrix.postTranslate(dx, dy); + checkAndDisplayMatrix(); + } + + lastTouchX = x; + lastTouchY = y; + + if (velocityTracker != null) { + velocityTracker.addMovement(event); + } + } + break; + } + } + + return true; + } + + @Override + public boolean onDoubleTap(MotionEvent event) { + try { + float scale = getScale(); + float x = getWidth() / 2; + float y = getHeight() / 2; + + if (scale < midScale) { + post(new AnimatedZoomRunnable(scale, midScale, x, y)); + } else if ((scale >= midScale) && (scale < maxScale)) { + post(new AnimatedZoomRunnable(scale, maxScale, x, y)); + } else {// 双击缩小小于最小值 + post(new AnimatedZoomRunnable(scale, minScale, x, y)); + } + } catch (Exception e) { + // Can sometimes happen when getX() and getY() is called + } + return true; + } + } + + private class AnimatedZoomRunnable implements Runnable { + // These are 'postScale' values, means they're compounded each iteration + static final float ANIMATION_SCALE_PER_ITERATION_IN = 1.07f; + static final float ANIMATION_SCALE_PER_ITERATION_OUT = 0.93f; + + private final float focalX, focalY; + private final float targetZoom; + private final float deltaScale; + + public AnimatedZoomRunnable(final float currentZoom, final float targetZoom, + final float focalX, final float focalY) { + this.targetZoom = targetZoom; + this.focalX = focalX; + this.focalY = focalY; + + if (currentZoom < targetZoom) { + deltaScale = ANIMATION_SCALE_PER_ITERATION_IN; + } else { + deltaScale = ANIMATION_SCALE_PER_ITERATION_OUT; + } + } + + @Override + public void run() { + dragMatrix.postScale(deltaScale, deltaScale, focalX, focalY); + checkAndDisplayMatrix(); + + final float currentScale = getScale(); + + if (((deltaScale > 1f) && (currentScale < targetZoom)) + || ((deltaScale < 1f) && (targetZoom < currentScale))) { + // We haven't hit our target scale yet, so post ourselves + // again + postOnAnimation(ClipSquareImageView.this, this); + + } else { + // We've scaled past our target zoom, so calculate the + // necessary scale so we're back at target zoom + final float delta = targetZoom / currentScale; + dragMatrix.postScale(delta, delta, focalX, focalY); + checkAndDisplayMatrix(); + } + } + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + private void postOnAnimation(View view, Runnable runnable) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + view.postOnAnimation(runnable); + } else { + view.postDelayed(runnable, 16); + } + } + + /** + * Returns the current scale value + * + * @return float - current scale value + */ + public final float getScale() { + dragMatrix.getValues(matrixValues); + return matrixValues[Matrix.MSCALE_X]; + } + + /** + * Helper method that simply checks the Matrix, and then displays the result + */ + private void checkAndDisplayMatrix() { + checkMatrixBounds(); + setImageMatrix(getDisplayMatrix()); + } + + private void checkMatrixBounds() { + final RectF rect = getDisplayRect(getDisplayMatrix()); + if (null == rect) { + return; + } + + float deltaX = 0, deltaY = 0; + // 判断移动或缩放后,图片显示是否超出裁剪框边界 + if(rect.top > cutRect.top){ + deltaY = cutRect.top - rect.top; + } + if(rect.bottom < cutRect.bottom){ + deltaY = cutRect.bottom - rect.bottom; + } + if(rect.left > cutRect.left){ + deltaX = cutRect.left - rect.left; + } + if(rect.right < cutRect.right){ + deltaX = cutRect.right - rect.right; + } + // Finally actually translate the matrix + dragMatrix.postTranslate(deltaX, deltaY); + } + + /** + * 获取图片相对Matrix的距离 + * + * @param matrix + * - Matrix to map Drawable against + * @return RectF - Displayed Rectangle + */ + private RectF getDisplayRect(Matrix matrix) { + Drawable d = getDrawable(); + if (null != d) { + displayRect.set(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); + matrix.mapRect(displayRect); + return displayRect; + } + + return null; + } + + /** + * 剪切图片,返回剪切后的bitmap对象 + * + * @return + */ + public Bitmap clip(){ + Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + draw(canvas); + return Bitmap.createBitmap(bitmap, cutRect.left, cutRect.top, cutRect.width(), cutRect.height()); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + width=getWidth(); + hight=getHeight(); + if(width!=0){ + ++number; + if(number==1){ + initBmpPosition(); + } + } + drawBorder(canvas); + } + + /** + * 画边框 + */ + private void drawBorder(Canvas canvas) { + mBorderPaint.setColor(OUTSIDE_COLOR); + switch (mShape) { + case ROUND: + Path path = new Path(); + path.addCircle(outsideRect.centerX(), outsideRect.centerY(), BORDER_LONG / 2, Path.Direction.CW); + canvas.clipPath(path, Region.Op.DIFFERENCE); + canvas.drawRect(outsideRect, mBorderPaint); + break; + case REGTANGLE: + canvas.drawRect(outsideRect.left, outsideRect.top, outsideRect.right, cutRect.top, mBorderPaint); + canvas.drawRect(outsideRect.left, cutRect.bottom, outsideRect.right, outsideRect.bottom, mBorderPaint); + canvas.drawRect(outsideRect.left, cutRect.top, cutRect.left, cutRect.bottom, mBorderPaint); + canvas.drawRect(cutRect.right, cutRect.top, outsideRect.right, cutRect.bottom, mBorderPaint); + + // 画边框 + mBorderPaint.setColor(BORDER_LINE_COLOR); + mBorderPaint.setStrokeWidth(BORDER_LINE_WIDTH); + canvas.drawLine(cutRect.left, cutRect.top, cutRect.left, cutRect.bottom, mBorderPaint); + canvas.drawLine(cutRect.right, cutRect.top, cutRect.right, cutRect.bottom, mBorderPaint); + canvas.drawLine(cutRect.left, cutRect.top, cutRect.right, cutRect.top, mBorderPaint); + canvas.drawLine(cutRect.left, cutRect.bottom, cutRect.right, cutRect.bottom, mBorderPaint); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/personcenter/CutImageViewActivity.java b/app/src/main/java/com/yonsz/z1/mine/personcenter/CutImageViewActivity.java new file mode 100644 index 0000000..914193b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/personcenter/CutImageViewActivity.java @@ -0,0 +1,76 @@ +package com.yonsz.z1.mine.personcenter; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.Toast; + +import com.yonsz.z1.R; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +/** + * Created by Administrator on 2017/6/12. + */ + +public class CutImageViewActivity extends AppCompatActivity { + private ClipSquareImageView imageView; + public static Bitmap myBitmap; + public static Bitmap cutBitmap; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_cut_image_view); + + imageView = (ClipSquareImageView) findViewById(R.id.clipSquareIV); + if(myBitmap!=null){ + imageView.setImageBitmap(myBitmap); + } + findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + findViewById(R.id.doneBtn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + // 此处获取剪裁后的bitmap + cutBitmap = imageView.clip(); + if(cutBitmap!=null){ + setResult(PersonCenterActivity.CUT_IMAGE); + }else{ + Toast.makeText(CutImageViewActivity.this, "图片有误", Toast.LENGTH_SHORT).show(); + } + finish(); + } + }); + } + /**uri转bitmap*/ + public static byte[] readStream(InputStream inStream) throws Exception { + byte[] buffer = new byte[1024]; + int len = -1; + ByteArrayOutputStream outStream; + outStream = new ByteArrayOutputStream(); + while ((len = inStream.read(buffer)) != -1) { + outStream.write(buffer, 0, len); + } + byte[] data = outStream.toByteArray(); + outStream.close(); + inStream.close(); + return data; + } + public static Bitmap getPicFromBytes(byte[] bytes, BitmapFactory.Options opts) { + if (bytes != null) + if (opts != null) + return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts); + else + return BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + return null; + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/personcenter/EnterNewPwActivity.java b/app/src/main/java/com/yonsz/z1/mine/personcenter/EnterNewPwActivity.java new file mode 100644 index 0000000..525b08e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/personcenter/EnterNewPwActivity.java @@ -0,0 +1,205 @@ +package com.yonsz.z1.mine.personcenter; + +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.widget.EditText; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.RegisterEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.UPDATE_PW_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_PW_SUCCESS; + +/** + * Created by Administrator on 2017/6/14. + */ + +public class EnterNewPwActivity extends BaseActivity { + private TitleView mTitleView; + private EditText newPwEt, surePwEt; + private String oldPw; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_input_newpw); + initView(); + } + + private void initView() { + if (getIntent().getExtras().get("oldPw") != null) { + oldPw = getIntent().getExtras().get("oldPw").toString().trim(); + } + newPwEt = (EditText) findViewById(R.id.edit_new_pw); + surePwEt = (EditText) findViewById(R.id.edit_pw_sure); + mTitleView = (TitleView) findViewById(R.id.title_input_pw); + mTitleView.setHead(R.string.modify_password); + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setHeadFuntionTxtColor(false); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (TextUtils.isEmpty(newPwEt.getText().toString()) || newPwEt.getText().toString().length() < 6) { + ToastUtil.show(EnterNewPwActivity.this, R.string.password_error_6); + } else if (TextUtils.isEmpty(surePwEt.getText().toString()) || surePwEt.getText().toString().length() < 6) { + ToastUtil.show(EnterNewPwActivity.this, R.string.password_error_6); + } else if (!newPwEt.getText().toString().equals(surePwEt.getText().toString())) { + ToastUtil.show(EnterNewPwActivity.this, R.string.login_new_different); + } else { + modifyPw(); + } + + } + + @Override + public void onFunctionText() { + + } + }); + newPwEt.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (TextUtils.isEmpty(newPwEt.getText()) || TextUtils.isEmpty(surePwEt.getText())) { + mTitleView.setHeadFuntionTxtColor(false); + } else { + mTitleView.setHeadFuntionTxtColor(true); + } + if (s.toString().contains(" ")) { + String[] str = s.toString().split(" "); + String str1 = ""; + for (int j = 0; j < str.length; j++) { + str1 += str[j]; + } + newPwEt.setText(str1); + newPwEt.setSelection(start); + } + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().isEmpty()) + return; + /*if (!s.toString().matches("[A-Za-z0-9]+")) { + String temp = s.toString(); + ToastUtil.show(EnterNewPwActivity.this, "请输入数字或字母"); + s.delete(temp.length() - 1, temp.length()); + newPwEt.setSelection(s.length()); + }*/ + } + }); + + surePwEt.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (TextUtils.isEmpty(newPwEt.getText()) || TextUtils.isEmpty(surePwEt.getText())) { + mTitleView.setHeadFuntionTxtColor(false); + } else { + mTitleView.setHeadFuntionTxtColor(true); + } + if (s.toString().contains(" ")) { + String[] str = s.toString().split(" "); + String str1 = ""; + for (int j = 0; j < str.length; j++) { + str1 += str[j]; + } + surePwEt.setText(str1); + surePwEt.setSelection(start); + } + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().isEmpty()) + return; + /*if (!s.toString().matches("[A-Za-z0-9]+")) { + String temp = s.toString(); + ToastUtil.show(EnterNewPwActivity.this, "请输入数字或字母"); + s.delete(temp.length() - 1, temp.length()); + surePwEt.setSelection(s.length()); + }*/ + } + }); + } + + //修改密码 + private void modifyPw() { + /*HashMap map = new HashMap<>(); + map.put("password", oldPw); + map.put("newPassword", surePwEt.getText().toString()); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynew(NetWorkUrl.MODITY_PASSWORD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("gaojie", "UpdatePwActivity onSuccess()" + respone); + RegisterEntity obj = JSON.parseObject(respone, RegisterEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_PW_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_PW_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Log.i("gaojie", "UpdatePwActivity onFail()"); + Message msg = mHandler.obtainMessage(UPDATE_PW_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_PW_SUCCESS: + ToastUtil.show(this, R.string.modify_success); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + SharedpreferencesUtil.save(Constans.PASSWORD, surePwEt.getText().toString()); + finish(); + } + }, 1000); + break; + case UPDATE_PW_FAIL: + ToastUtil.show(this, (String) msg.obj != null ? ((String) msg.obj) : + getResources().getString(R.string.update_fail)); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/personcenter/ModifyPwActivity.java b/app/src/main/java/com/yonsz/z1/mine/personcenter/ModifyPwActivity.java new file mode 100644 index 0000000..13929b9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/personcenter/ModifyPwActivity.java @@ -0,0 +1,144 @@ +package com.yonsz.z1.mine.personcenter; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.R.id.editText_modifypw; +import static com.yonsz.z1.R.id.number_modifypw; + +/** + * Created by Administrator on 2017/6/12. + */ + +public class ModifyPwActivity extends BaseActivity { + private EditText editText;//输入文本框 + private TextView number;//显示还剩多少字 + private int numbers = 20;//默认30 + private String textcontent = "";//保存输入30个字符 + private TitleView mTitle; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_modify_password); + initView(); + initData(); + } + + private void initView() { + number = (TextView) findViewById(number_modifypw); + editText = (EditText) findViewById(editText_modifypw); + editText.setText(getIntent().getStringExtra("content")); + mTitle = (TitleView) findViewById(R.id.title_modifypw); + mTitle.setHead(R.string.modify_password); + mTitle.setHeadFuntionTxt(R.string.next); + if (TextUtils.isEmpty(editText.getText().toString().trim())) { + mTitle.setHeadFuntionTxtColor(false); + } else { + mTitle.setHeadFuntionTxtColor(true); + } + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (TextUtils.isEmpty(editText.getText().toString())) { + ToastUtil.show(ModifyPwActivity.this, "密码不能为空"); + } else if (editText.getText().toString().equals(SharedpreferencesUtil.get(Constans.PASSWORD, ""))) { + Intent intent = new Intent(new Intent(ModifyPwActivity.this, EnterNewPwActivity.class)); + intent.putExtra("oldPw", editText.getText().toString().trim()); + startActivity(intent); + finish(); + } else if (editText.getText().toString().length() < 6) { + ToastUtil.show(ModifyPwActivity.this, R.string.password_error_6); + } else { + ToastUtil.show(ModifyPwActivity.this, R.string.old_pw_wrong); + } + } + + @Override + public void onFunctionText() { + + } + }); + textcontent = editText.getText().toString(); + } + + private void initData() { + numbers = 20; + editText.addTextChangedListener(textWatcher); + number.setVisibility(View.VISIBLE); + number.setText(20 + ""); + } + + @Override + public void callBackUiThread(Message msg) { + + } + + //输入框变化 + private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + int i = s.length(); + if (i > 20) { + ToastUtil.show(getApplicationContext(), "超过20字符"); + } + + if (i <= 20) { + number.setText(numbers - i + ""); + textcontent = s.toString(); + } else { + editText.setText(textcontent); + editText.setSelection(textcontent.length()); + } + + if (i != 0) { + mTitle.setHeadFuntionTxtColor(true); + } else { + mTitle.setHeadFuntionTxtColor(false); + } + + if (s.toString().contains(" ")) { + String[] str = s.toString().split(" "); + String str1 = ""; + for (int j = 0; j < str.length; j++) { + str1 += str[j]; + } + editText.setText(str1); + editText.setSelection(start); + } + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable arg0) { + + } + }; +} diff --git a/app/src/main/java/com/yonsz/z1/mine/personcenter/NickNameActivity.java b/app/src/main/java/com/yonsz/z1/mine/personcenter/NickNameActivity.java new file mode 100644 index 0000000..0786143 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/personcenter/NickNameActivity.java @@ -0,0 +1,208 @@ +package com.yonsz.z1.mine.personcenter; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.MotionEvent; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.NewRecordEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.forgetpw.ForgetPWActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.KeyboardUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.ADD_PERSONINFO_FAIL; +import static com.yonsz.z1.net.Constans.ADD_PERSONINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.NICKNAME_RESULT; + +/** + * Created by Administrator on 2017/6/12. + */ + +public class NickNameActivity extends BaseActivity { + private EditText editText;//输入文本框 + private TextView number;//显示还剩多少字 + private int numbers = 20;//默认30 + private String textcontent = "";//保存输入30个字符 + private TitleView mTitle; + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + View view = getCurrentFocus(); + KeyboardUtil.hideKeyboard(ev, view, NickNameActivity.this);//调用方法判断是否需要隐藏键盘 + break; + + default: + break; + } + return super.dispatchTouchEvent(ev); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_modify_nickname); + initView(); + initData(); + } + + private void initView() { + number = (TextView) findViewById(R.id.number); + editText = (EditText) findViewById(R.id.editText); + editText.setHint(R.string.Enter_nickname); + editText.setText(getIntent().getStringExtra("content")); + mTitle = (TitleView) findViewById(R.id.title_nickname); + mTitle.setHead(R.string.nickname); + mTitle.setHeadFuntionTxt(R.string.save); + if (TextUtils.isEmpty(editText.getText().toString().trim())) { + mTitle.setHeadFuntionTxtColor(false); + } else { + mTitle.setHeadFuntionTxtColor(true); + } + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + saveUserInfo(); + } + + @Override + public void onFunctionText() { + + } + }); + textcontent = editText.getText().toString(); + } + + private void initData() { + numbers = 20; + editText.addTextChangedListener(textWatcher); + number.setVisibility(View.VISIBLE); + if (textcontent.length() == 0) { + number.setText(20 + ""); + } else { + number.setText(20 - textcontent.length() + ""); + } + } + + + //输入框变化 + private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + int i = s.length(); + if (i > 20) { + ToastUtil.show(NickNameActivity.this, "超过20字符"); + } + + if (i <= 20) { + number.setText(numbers - i + ""); + textcontent = s.toString(); + } else { + editText.setText(textcontent); + editText.setSelection(textcontent.length()); + } + + if (i != 0) { + /* if (getIntent().getStringExtra("content").toString().equals(editText.getText().toString().trim())) { + mTitle.setHeadFuntionTxtColor(false); + } else { + }*/ + mTitle.setHeadFuntionTxtColor(true); + } else { + mTitle.setHeadFuntionTxtColor(false); + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable arg0) { + + } + }; + + private void saveUserInfo() { + String name = editText.getText().toString().trim(); + if (TextUtils.isEmpty(name)) { + ToastUtil.show(this, R.string.nickname_null); + return; + } + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userName", name); + netWorkUtil.requestPostByAsynew(NetWorkUrl.SAVE_USERINFO_URL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + NewRecordEntity obj = JSON.parseObject(respone, NewRecordEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_PERSONINFO_SUCCESS); + msg.obj = obj.getObj(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_PERSONINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_PERSONINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_PERSONINFO_SUCCESS: + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(NickNameActivity.this, PersonCenterActivity.class); + intent.putExtra("data", editText.getText().toString().trim()); + SharedpreferencesUtil.save(Constans.USERNAME, editText.getText().toString().trim()); + setResult(NICKNAME_RESULT, intent); + finish(); + } + }, 10); + break; + case ADD_PERSONINFO_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/personcenter/PersonCenterActivity.java b/app/src/main/java/com/yonsz/z1/mine/personcenter/PersonCenterActivity.java new file mode 100644 index 0000000..67ddcf8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/personcenter/PersonCenterActivity.java @@ -0,0 +1,648 @@ +package com.yonsz.z1.mine.personcenter; + +import android.Manifest; +import android.app.Activity; +import android.content.ContentResolver; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.drawable.ColorDrawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Message; +import android.provider.MediaStore; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.qw.soul.permission.SoulPermission; +import com.qw.soul.permission.bean.Permission; +import com.qw.soul.permission.bean.Permissions; +import com.qw.soul.permission.callbcak.CheckRequestPermissionsListener; +import com.tencent.mm.opensdk.modelbase.BaseReq; +import com.tencent.mm.opensdk.modelbase.BaseResp; +import com.tencent.mm.opensdk.modelmsg.SendAuth; +import com.tencent.mm.opensdk.openapi.IWXAPI; +import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler; +import com.tencent.mm.opensdk.openapi.WXAPIFactory; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ResponeEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entitya2.WxLoginEvent; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.login.forgetpw.ForgetPWActivity; +import com.yonsz.z1.login.register.WxRegisterActivity; +import com.yonsz.z1.mine.PersonalActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.service.UploadHeadIconService; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.ImageLoaderUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.MainActivity4; +import com.yonsz.z1.view.CircleImageView; +import com.yonsz.z1.view.TitleView; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.umeng.analytics.pro.x.i; +import static com.yonsz.z1.R.id.title_personl_center; +import static com.yonsz.z1.difference.DifferConstans.WX_APP_ID; +import static com.yonsz.z1.net.Constans.FAN_LEARN_WHAT; +import static com.yonsz.z1.net.Constans.GET_USER_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.GET_USER_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.LOGIN_FAIL; +import static com.yonsz.z1.net.Constans.NICKNAME_RESULT; +import static com.yonsz.z1.net.Constans.WX_LOGIN_FAIL; +import static com.yonsz.z1.net.Constans.WX_LOGIN_REGISTER; +import static com.yonsz.z1.net.Constans.WX_LOGIN_SUCCESS; +import static com.yonsz.z1.net.Constans.homeListEntity; + +/** + * Created by Administrator on 2017/5/26. + */ +public class PersonCenterActivity extends BaseActivity implements IWXAPIEventHandler { + public final static int TAKING_PICTURES = 4001;//相机拍照 + public final static int PHOTO_ALBUM = 4002;//相册 + public final static int CUT_IMAGE = 4005;//裁剪图片完成 + String headPath = null; + private TitleView mTitle; + private RelativeLayout userIcaonRl, userNicknameRl, userModifyPwRl, userWxRl, changePhoneRl, userDeleteRl; + private CircleImageView userIconCiv; + private TextView userNicknameTv, userPhoneTv, phoneNumberTv; + //弹出窗口 + private PopupWindow popPricture;//照片 + //弹出布局 + private View layoutPricture; + //弹窗相对位置 + private RelativeLayout relativeLayout; + private File Image;//临时存储头像图片 + private String imageIconFile; + private ResponeEntity.DataBean obj; + private TextView wx_binding; + private IWXAPI iwxapi; + + public void onEventMainThread(WxLoginEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = FAN_LEARN_WHAT; + message.obj = msg; + mHandler.sendMessage(message); + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_personal_center); + initView(); + initListener(); + /*if (getIntent().getExtras() != null && getIntent().getExtras().get("user") != null) { + obj = (ResponeEntity.DataBean) getIntent().getExtras().get("user"); + updateDetail(obj); + } else { + initData(); + }*/ + initData(); + iwxapi = WXAPIFactory.createWXAPI(this, WX_APP_ID, true); + iwxapi.handleIntent(this.getIntent(), this); + iwxapi.registerApp(WX_APP_ID); + } + + private void initView() { + wx_binding = (TextView) findViewById(R.id.wx_binding); + userNicknameTv = (TextView) findViewById(R.id.tv_user_nickname); + userPhoneTv = (TextView) findViewById(R.id.tv_user_phone); + phoneNumberTv = (TextView) findViewById(R.id.tv_change_phone); + relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout); + userIconCiv = (CircleImageView) findViewById(R.id.HeadImage); + userIcaonRl = (RelativeLayout) findViewById(R.id.rl_user_icon); + userModifyPwRl = (RelativeLayout) findViewById(R.id.rl_user_modifyPw); + userWxRl = (RelativeLayout) findViewById(R.id.rl_user_wx); + userNicknameRl = (RelativeLayout) findViewById(R.id.rl_user_nickname); + changePhoneRl = (RelativeLayout) findViewById(R.id.rl_change_phone); + userDeleteRl = (RelativeLayout) findViewById(R.id.rl_user_delete); + mTitle = (TitleView) findViewById(title_personl_center); + mTitle.setHead(R.string.person_center); + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + Intent intent = new Intent(PersonCenterActivity.this, PersonalActivity.class); + intent.putExtra("data", userNicknameTv.getText().toString().trim()); + if (imageIconFile != null) { + intent.putExtra("icon", imageIconFile); + } + setResult(NICKNAME_RESULT, intent); + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (SharedpreferencesUtil.get(Constans.USERICON, "").toString() != null) { + ImageLoader.getInstance().displayImage(SharedpreferencesUtil.get(Constans.USERICON, "").toString(), userIconCiv, UniKongApp.getHiApp().getImageLoaderOption()); + } + if (AppIdUtil.isYagene()) { + userWxRl.setVisibility(View.GONE); + } + } + + @Override + public void onBackPressed() { + Intent intent = new Intent(PersonCenterActivity.this, PersonalActivity.class); + intent.putExtra("data", userNicknameTv.getText().toString().trim()); + if (imageIconFile != null) { + intent.putExtra("icon", imageIconFile); + } + setResult(NICKNAME_RESULT, intent); + finish(); + } + + private void initListener() { + userIcaonRl.setOnClickListener(this); + userNicknameRl.setOnClickListener(this); + changePhoneRl.setOnClickListener(this); + userDeleteRl.setOnClickListener(this); + userModifyPwRl.setOnClickListener(this); + userWxRl.setOnClickListener(this); + } + + private void initData() { + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); +// if (null != homeListEntity && null != homeListEntity.getData()) { +// map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); +// } + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.PERSONAL_URL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("personal", respone); + ResponeEntity entity = JSON.parseObject(respone, ResponeEntity.class); + if (entity.getFlag() == 1) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USER_DETAIL_SUCCESS; + msg.obj = entity.getData(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USER_DETAIL_FAIL; + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USER_DETAIL_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_user_icon: + setIcon(); + break; + case R.id.rl_user_nickname: + intent = new Intent(PersonCenterActivity.this, NickNameActivity.class); + intent.putExtra("content", userNicknameTv.getText().toString()); + startActivityForResult(intent, NICKNAME_RESULT); + break; + case R.id.rl_change_phone: + intent = new Intent(PersonCenterActivity.this, ChangePhoneActivity.class); + intent.putExtra("content", userPhoneTv.getText().toString()); + startActivityForResult(intent, NICKNAME_RESULT); + break; + case R.id.rl_user_delete: + intent = new Intent(PersonCenterActivity.this, UserDeleteActivity.class); + intent.putExtra("content", userPhoneTv.getText().toString()); + startActivityForResult(intent, NICKNAME_RESULT); + break; + case R.id.rl_user_modifyPw: + // intent = new Intent(PersonCenterActivity.this, ModifyPwActivity.class); + intent = new Intent(PersonCenterActivity.this, ForgetPWActivity.class); + intent.putExtra("tag", "PersonCenterActivity"); + startActivity(intent); + break; + case R.id.rl_user_wx: + if (wx_binding.getText().equals("已绑定")) { + ConfirmDialog dialog = new ConfirmDialog(this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + cancleBinding(); + break; + } + } + }); + dialog.setContent("解除绑定?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else { + //去绑定 + if (!iwxapi.isWXAppInstalled()) { + Toast.makeText(this, getString(R.string.not_installed_Wechat), Toast.LENGTH_SHORT).show(); + return; + } + wxLogin(); + } + break; + } + } + + private void wxLogin() { + SendAuth.Req req1 = new SendAuth.Req(); + req1.scope = "snsapi_userinfo"; + req1.state = "wechat_sdk_demo_test"; + iwxapi.sendReq(req1); + } + + private void cancleBinding() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestPostByAsynewApi(NetWorkUrl.WX_CANCLE_BINDING, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cancleBinding", "onSuccess: " + respone); + SimpleEntty entity = JSON.parseObject(respone, SimpleEntty.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(WX_LOGIN_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(WX_LOGIN_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(LOGIN_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //设置头像 + private void setIcon() { + if (popPricture != null && popPricture.isShowing()) { + popPricture.dismiss(); + } else { + layoutPricture = getLayoutInflater().inflate(R.layout.pop_user_icon_send, null); + } + + //拍照 + Button button1 = (Button) layoutPricture.findViewById(R.id.photograph); + button1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + //调用相机拍照 + SoulPermission.getInstance().checkAndRequestPermissions( + Permissions.build(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE), + //if you want do noting or no need all the callbacks you may use SimplePermissionsAdapter instead + new CheckRequestPermissionsListener() { + @Override + public void onAllPermissionOk(Permission[] allPermissions) { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + startActivityForResult(intent, TAKING_PICTURES); + popPricture.dismiss(); + } + + @Override + public void onPermissionDenied(Permission[] refusedPermissions) { + /* Toast.makeText(PersonCenterActivity.this, refusedPermissions[0].toString() + + " \n is refused you can not do next things", Toast.LENGTH_SHORT).show();*/ + } + }); + } + }); + //相册 + Button button2 = (Button) layoutPricture.findViewById(R.id.album); + button2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(); + //开启Picture画面Type定位image + intent.setType("image/*"); + /* 使用Intent.ACTION_GET_CONTENT这个Action */ + intent.setAction(Intent.ACTION_GET_CONTENT); + //取得相片后返回本画面 + startActivityForResult(intent, PHOTO_ALBUM); + popPricture.dismiss(); + } + }); + //取消 + Button button3 = (Button) layoutPricture.findViewById(R.id.cancel); + button3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + popPricture.dismiss(); + } + }); + + //创建弹出窗口 + //窗口内容为layoutLeft,里面包含一个ListView + //窗口宽度跟tvLeft一样 + popPricture = new PopupWindow(layoutPricture, ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + ColorDrawable cd = new ColorDrawable(-0000); + popPricture.update(); + popPricture.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); + popPricture.setTouchable(true);//设置popuWindow可点击 + popPricture.setOutsideTouchable(true);//设置popuWindow外部可点击 + popPricture.setTouchable(true);//获取焦点 + //动画设置还没写,出现的效果 + //设置popuWindow的位置(相对tvLeft的位置) + popPricture.showAtLocation(relativeLayout, Gravity.BOTTOM, 0, 0); + //消失的效果 + popPricture.setOnDismissListener(new PopupWindow.OnDismissListener() { + @Override + public void onDismiss() { + + } + }); + popPricture.setTouchInterceptor(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent event) { + //如果点击了popuWindow的外部,popuWindow也会消失 + if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { + popPricture.dismiss(); + return true; + } + return false; + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case GET_USER_DETAIL_SUCCESS: + obj = (ResponeEntity.DataBean) msg.obj; + updateDetail(obj); + break; + case GET_USER_DETAIL_FAIL: + break; + case GET_USER_SESSION_NULL: + intent = new Intent(this, LoginActivity.class); + startActivity(intent); + case WX_LOGIN_SUCCESS: + wx_binding.setText("未绑定"); + break; + case FAN_LEARN_WHAT: + String code = (String) msg.obj; + quickLogin(code); + break; + case WX_LOGIN_REGISTER: + //去注册 + ResponeEntity entity1 = (ResponeEntity) msg.obj; + intent = new Intent(PersonCenterActivity.this, WxRegisterActivity.class); + intent.putExtra("wxId", entity1.getObj().getWxId()); + intent.putExtra("headUrl", entity1.getObj().getHeadUrl()); + intent.putExtra("userName", entity1.getObj().getUserName()); + intent.putExtra("tag", "PersonCenterActivity"); + startActivity(intent); + break; + case WX_LOGIN_FAIL: + if (!obj.equals("获取openid或token失败")) { + ToastUtil.show(this, (String) msg.obj); + } + break; + } + } + + private void quickLogin(String code) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("code", code); + map.put("appId", DifferConstans.APPID_S); + util.requestPostByAsynewApi(NetWorkUrl.WX_QUICK_LOGIN, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("quickLogin", "onSuccess: " + respone); + ResponeEntity entity = JSON.parseObject(respone, ResponeEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(WX_LOGIN_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else if (1011 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(WX_LOGIN_REGISTER); + msg.obj = entity; + mHandler.sendMessage(msg); + } else if (1013 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(WX_LOGIN_REGISTER); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(WX_LOGIN_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(LOGIN_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void updateDetail(ResponeEntity.DataBean obj) { + if (obj != null) { + if (obj.getId() != null) { + if (null != obj.getUserPhoto()) { + ImageLoader.getInstance().displayImage(obj.getAvatar(), userIconCiv, UniKongApp.getHiApp().getImageLoaderOption()); + SharedpreferencesUtil.save(Constans.USERICON, obj.getUserPhoto()); + } + } else { + String url = NetWorkUrl.SERVER_URL + SharedpreferencesUtil.get(Constans.USERPHONE, "") + obj.getUser().getId() + ".png"; + ImageLoader.getInstance().displayImage(url, userIconCiv, UniKongApp.getHiApp().getImageLoaderOption()); + } + if (obj.getNickName() != null) { + userNicknameTv.setText(obj.getNickName()); + } else { + userNicknameTv.setText(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + } + if (null != obj.getWxId() && !TextUtils.isEmpty(obj.getWxId())) { + wx_binding.setText("已绑定"); + } else { + wx_binding.setText("未绑定"); + } + } else { + String url = NetWorkUrl.SERVER_URL + SharedpreferencesUtil.get(Constans.USERPHONE, "") + ".png"; + ImageLoader.getInstance().displayImage(url, userIconCiv, UniKongApp.getHiApp().getImageLoaderOption()); + userNicknameTv.setText(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + } + + userPhoneTv.setText(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + setPhone(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + } + + + private void setPhone(String pNumber) { + if (!TextUtils.isEmpty(pNumber) && pNumber.length() > 6) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < pNumber.length(); i++) { + char c = pNumber.charAt(i); + if (i >= 3 && i <= 6) { + sb.append('*'); + } else { + sb.append(c); + } + } + phoneNumberTv.setText(sb.toString()); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (Activity.RESULT_CANCELED != resultCode) { + if (data != null) { + //获取相册图片 + if (requestCode == PHOTO_ALBUM) { + ContentResolver resolver = getContentResolver(); + Uri uri = data.getData(); + byte[] mContent; + try { + mContent = CutImageViewActivity.readStream(resolver.openInputStream(Uri.parse(uri.toString()))); + //将字节数组转换成ImageView可调用的Bitmap对象 + CutImageViewActivity.myBitmap = CutImageViewActivity.getPicFromBytes(mContent, null); + startActivityForResult(new Intent(PersonCenterActivity.this, CutImageViewActivity.class), CUT_IMAGE); + } catch (Exception e) { + e.printStackTrace(); + } + } + //获取拍照后的相片 + if (requestCode == TAKING_PICTURES) { + Bundle bundle = data.getExtras(); + CutImageViewActivity.myBitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式 + startActivityForResult(new Intent(PersonCenterActivity.this, CutImageViewActivity.class), CUT_IMAGE); + } + + + } + } + + //裁剪后的照片 + if (requestCode == CUT_IMAGE) { + //把bitmap转化成uri + String uriToString = MediaStore.Images.Media.insertImage(getContentResolver(), CutImageViewActivity.cutBitmap, null, null); + if (uriToString != null) { + Uri uri = Uri.parse(uriToString); + imageIconFile = uri.toString(); + headPath = uri2Path(uri); + ImageLoaderUtil util = new ImageLoaderUtil(); + util.setImageUrl(imageIconFile, userIconCiv); + String string = ImageLoader.getInstance().getDiskCache().get(i).getPath(); + Image = new File(string); + if (Image == null) { + Toast.makeText(PersonCenterActivity.this, "信息填写不完整", Toast.LENGTH_SHORT).show(); + } else { + // Toast.makeText(PersonalCenterActivity.this, "上传图片成功", Toast.LENGTH_SHORT).show(); + ArrayList files = new ArrayList<>(); + Intent service = new Intent(this, UploadHeadIconService.class); + files.add(headPath); + service.putExtra("data", files); + service.putExtra("parentId", SharedpreferencesUtil.get(Constans.USERPHONE, null)); + startService(service); + } + Log.i("gaojie", "PersonalCenterActivity onActivityResult()" + uriToString + "--" + uri + "--" + i + "--" + Image.toString() + "-------" + headPath); + } + } + + if (requestCode == NICKNAME_RESULT) { + if (data != null && data.getExtras().get("data") != null) { + userNicknameTv.setText((String) data.getExtras().get("data")); + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + private String uri2Path(Uri uri) { + String path = null; + String[] proj = {MediaStore.Images.Media.DATA}; + ContentResolver cr = this.getContentResolver(); + Cursor cursor = cr.query(uri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + //最后根据索引值获取图片路径 + path = cursor.getString(column_index); + return path; + } + + @Override + public void onReq(BaseReq baseReq) { + + } + + @Override + public void onResp(BaseResp resp) { + Log.i("BaseReq", "" + resp.openId + "---" + resp.transaction + "===" + resp.errCode + "==" + resp.errStr); + String code = ((SendAuth.Resp) resp).code; + Log.i("BaseReq", "LoginActivity onResp()" + code); + String result; + switch (resp.errCode) { + case BaseResp.ErrCode.ERR_OK: + result = getString(R.string.Share_success); + EventBus.getDefault().post( + new WxLoginEvent(code)); + break; + case BaseResp.ErrCode.ERR_USER_CANCEL: + result = "取消分享"; + break; + case BaseResp.ErrCode.ERR_AUTH_DENIED: + result = "分享被拒绝"; + break; + default: + result = "发送返回"; + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/personcenter/PhoneCheckAndModifyActivity.java b/app/src/main/java/com/yonsz/z1/mine/personcenter/PhoneCheckAndModifyActivity.java new file mode 100644 index 0000000..0115d04 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/personcenter/PhoneCheckAndModifyActivity.java @@ -0,0 +1,494 @@ +package com.yonsz.z1.mine.personcenter; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.os.Message; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.ResponeEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.login.PhoneAreaActivity; +import com.yonsz.z1.login.forgetpw.SetPassWordActivity; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.KeyboardUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.VerificationUtils; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import okhttp3.Response; +import okhttp3.ResponseBody; + +import static com.yonsz.z1.login.register.RegisterActivity.getRandomString; +import static com.yonsz.z1.net.Constans.CHECK_USER_CODE_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_CODE_FAIL; +import static com.yonsz.z1.net.Constans.GET_CODE_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_PHONE_AREA; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.NetWorkUrl.PIC_CODE; + +/** + * Created by Administrator on 2017/5/26. + */ +public class PhoneCheckAndModifyActivity extends BaseActivity { + private EditText mUserPhone; + private EditText mUserCode, editTextCode, edit_pw; + private TextView mGetCode, tv_declare; + private int sec = 60; + private TitleView mTitleView; + private Button btNext; + private LinearLayout phoneAreaLl, panePwLl; + private TextView phoneArea; + private ImageView renovateIv, renovateRefresh; + private String randomString = ""; + private String tag = ""; + private String body = "{}"; + private RelativeLayout rl_msg; + private LoadingDialog mLoadingDialog; + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + View view = getCurrentFocus(); + KeyboardUtil.hideKeyboard(ev, view, PhoneCheckAndModifyActivity.this);//调用方法判断是否需要隐藏键盘 + break; + + default: + break; + } + return super.dispatchTouchEvent(ev); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_check_change_pw); + initView(); + initListener(); + } + + @Override + public void onResume() { + super.onResume(); + picValidateCode(); + } + + + private void initView() { + tag = getIntent().getExtras().get("tag").toString(); + rl_msg = (RelativeLayout) findViewById(R.id.rl_msg); + editTextCode = (EditText) findViewById(R.id.editText_code); + edit_pw = (EditText) findViewById(R.id.edit_pw); + renovateIv = (ImageView) findViewById(R.id.iv_renovate); + renovateRefresh = (ImageView) findViewById(R.id.iv_renovate_refresh); + renovateRefresh.setOnClickListener(this); + phoneArea = (TextView) findViewById(R.id.tv_phone_area); + phoneAreaLl = (LinearLayout) findViewById(R.id.ll_phone_area); + panePwLl = (LinearLayout) findViewById(R.id.pane_pw); + mUserPhone = (EditText) findViewById(R.id.edit_username); + mUserCode = (EditText) findViewById(R.id.edit_code); + mGetCode = (TextView) findViewById(R.id.tv_getcode); + tv_declare = (TextView) findViewById(R.id.tv_declare); + btNext = (Button) findViewById(R.id.bt_forgetpw_next); + btNext.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mTitleView = (TitleView) findViewById(R.id.title_forgetpw); + if (tag.equals("msgCheck")) { + mTitleView.setHead("帐号验证"); + } else if (tag.equals("pwCheck")) { + mTitleView.setHead("帐号验证"); + rl_msg.setVisibility(View.GONE); + panePwLl.setVisibility(View.VISIBLE); + } else { + mTitleView.setHead("更换手机"); + tv_declare.setVisibility(View.VISIBLE); + setPhone(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (!SharedpreferencesUtil.get(Constans.PHONEAREA, "").isEmpty()) { + phoneArea.setText(SharedpreferencesUtil.get(Constans.PHONEAREA, "")); + } + } + + private void setPhone(String pNumber) { + if (!TextUtils.isEmpty(pNumber) && pNumber.length() > 6) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < pNumber.length(); i++) { + char c = pNumber.charAt(i); + if (i >= 3 && i <= 6) { + sb.append('*'); + } else { + sb.append(c); + } + } + tv_declare.setText("更换手机号,下次登录使用新的手机号登录。当前绑定手机号" + getIntent().getExtras().get("phoneArea").toString() + sb.toString()); + } + } + + private void initListener() { + phoneAreaLl.setOnClickListener(this); + btNext.setOnClickListener(this); + mGetCode.setOnClickListener(this); + mUserCode.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + int i = s.length(); + if (i != 0) { + btNext.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + btNext.setEnabled(true); + } else { + btNext.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + btNext.setEnabled(false); + } + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + edit_pw.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + int i = s.length(); + if (i != 0) { + btNext.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + btNext.setEnabled(true); + } else { + btNext.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + btNext.setEnabled(false); + } + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_forgetpw_next: + if (tag.equals("msgCheck")) { + checkUserCode(mUserPhone.getText().toString().trim(), mUserCode.getText().toString()); + } else if (tag.equals("pwCheck")) { + checkUserCode(mUserPhone.getText().toString().trim(), edit_pw.getText().toString()); + } else { + mobileChangeUpdate(mUserPhone.getText().toString().trim(), mUserCode.getText().toString()); + } + break; + case R.id.tv_getcode: + getCode(); + break; + case R.id.ll_phone_area: + Intent intent1 = new Intent(PhoneCheckAndModifyActivity.this, PhoneAreaActivity.class); + intent1.putExtra("type", "forgetPw"); + startActivityForResult(intent1, GET_PHONE_AREA); + break; + case R.id.iv_renovate_refresh: + picValidateCode(); + break; + } + } + + private void picValidateCode() { + randomString = getRandomString(8); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("randomStr", randomString); + netWorkUtil.requestGetByAsy(PIC_CODE, map, new NetWorkUtil.ReqCallBackOta() { + @Override + public void onSuccess(Response respone) { + ResponseBody body = respone.body(); + try { + byte[] bytes = body.bytes(); + final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + runOnUiThread(new Runnable() { + @Override + public void run() { + renovateIv.setImageBitmap(bitmap); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void onFail(String message) { + + } + }); + } + + private void mobileChangeUpdate(String userName, String userCode) { + String phoneCode = phoneArea.getText().toString(); + String telAreaCode = phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length()); + if (!VerificationUtils.checkPhoneNumber(userName, telAreaCode)) { + ToastUtil.show(this, R.string.phone_error); + return; + } + if (userCode.isEmpty()){ + ToastUtil.show(this, "验证码不能为空"); + return; + } + body = "{\"mobile\":\"" + userName + "\"," + + "\"smsCode\":\"" + userCode + "\"," + + "\"telAreaCode\":\"" + telAreaCode + "\"," + + "\"checkCode\":\"" + getIntent().getExtras().get("checkCode").toString() + "\"}"; + HashMap map = new HashMap<>(); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsyBody(NetWorkUrl.MOBILE_CHANGE_UPDATE, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("gaojie", "checkUserCode onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + SharedpreferencesUtil.save(Constans.USERPHONE, userName); + Message msg = mHandler.obtainMessage(CHECK_USER_CODE_SUCCESS); + msg.obj = obj.getData(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //检验验证码 + private void checkUserCode(String userName, String userCode) { + String phoneCode = phoneArea.getText().toString(); + String telAreaCode = phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length()); + if (!VerificationUtils.checkPhoneNumber(userName, telAreaCode)) { + ToastUtil.show(this, R.string.phone_error); + return; + } + if (userCode.isEmpty()){ + ToastUtil.show(this, "验证码不能为空"); + return; + } + if (tag.equals("msgCheck")) { + body = "{\"mobile\":\"" + userName + "\"," + + "\"smsCode\":\"" + userCode + "\"," + + "\"telAreaCode\":\"" + telAreaCode + "\"," + + "\"checkType\":\"smsCode\"}"; + } else if (tag.equals("pwCheck")) { + body = "{\"mobile\":\"" + userName + "\"," + + "\"password\":\"" + userCode + "\"," + + "\"telAreaCode\":\"" + telAreaCode + "\"," + + "\"checkType\":\"password\"}"; + } + HashMap map = new HashMap<>(); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsyBody(NetWorkUrl.MOBILE_CHANGE_CHECK, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("gaojie", "checkUserCode onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CHECK_USER_CODE_SUCCESS); + msg.obj = obj.getData(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getCode() { + String codeTrim = editTextCode.getText().toString().trim(); + if (TextUtils.isEmpty(codeTrim)) { + ToastUtil.show(this, "请输入图片验证码"); + return; + } + String phoneCode = phoneArea.getText().toString(); + if (!VerificationUtils.checkPhoneNumber(mUserPhone.getText().toString(), phoneCode)) { + ToastUtil.show(this, R.string.phone_error); + return; + } + initLoadDialog(); + HashMap map = new HashMap<>(); + map.put("appId", DifferConstans.APPID_S); + map.put("code", codeTrim); + map.put("mobile", mUserPhone.getText().toString()); + map.put("randomStr", randomString); + map.put("telAreaCode", phoneCode.substring(phoneCode.indexOf("+") + 1, phoneCode.length())); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.GET_MSMCODE, map, new NetWorkUtil.ReqCallBack() { + + @Override + public void onSuccess(String respone) { + Log.i("UPdatePw", "onSuccess: " + respone); + ResponeEntity obj = JSON.parseObject(respone, ResponeEntity.class); + if (1 == obj.getFlag()) { + mHandler.sendEmptyMessage(GET_CODE_SUCCESS); + } else { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(GET_CODE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_CODE_SUCCESS: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, R.string.notice_sms); + // mSure.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_27_50)); + // mSure.setClickable(true); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_9cc6f6)); + mGetCode.setEnabled(false); + mGetCode.setText(getResources().getString(R.string.sec, sec)); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + break; + case GET_CODE_FAIL: + if (null != mLoadingDialog) { + mLoadingDialog.dismiss(); + } + picValidateCode(); + ToastUtil.show(this, (String) msg.obj != null ? ((String) msg.obj) : + getResources().getString(R.string.sms_fail)); + break; + case UPDATE_SEC: + if (sec > 2) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mGetCode.setText(getResources().getString(R.string.sec, sec - 1)); + } else { + mGetCode.setText(R.string.get_code); + mGetCode.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_398dee)); + mGetCode.setEnabled(true); + sec = 60; + } + break; + case CHECK_USER_CODE_SUCCESS: + String checkCode = (String) msg.obj; + if (tag.equals("msgCheck") || tag.equals("pwCheck")) { + Intent intent = new Intent(PhoneCheckAndModifyActivity.this, PhoneCheckAndModifyActivity.class); + intent.putExtra("checkCode", checkCode); + intent.putExtra("phoneArea", phoneArea.getText().toString()); + intent.putExtra("tag", "PhoneCheckAndModifyActivity"); + startActivity(intent); + finish(); + } else { + ToastUtil.show(PhoneCheckAndModifyActivity.this, "修改手机号成功,请用新手机号重新登录"); + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + SharedpreferencesUtil.save(Constans.TOKENID, ""); + SharedpreferencesUtil.save(Constans.PASSWORD, ""); + SharedpreferencesUtil.save(Constans.MAIN_BG_URL, ""); + NettyHandlerUtil.closeCtx(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(PhoneCheckAndModifyActivity.this, LoginActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + }, 1000); + } + break; + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case GET_PHONE_AREA: + if (data != null && data.getExtras().get("phoneArea") != null) { + phoneArea.setText(data.getExtras().get("phoneArea").toString()); + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/personcenter/UserDeleteActivity.java b/app/src/main/java/com/yonsz/z1/mine/personcenter/UserDeleteActivity.java new file mode 100644 index 0000000..cb30d98 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/personcenter/UserDeleteActivity.java @@ -0,0 +1,187 @@ +package com.yonsz.z1.mine.personcenter; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.tv.FrequencyChannelActivity; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.ADD_PERSONINFO_FAIL; +import static com.yonsz.z1.net.Constans.ADD_PERSONINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.NICKNAME_RESULT; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; + +/** + * Created by Administrator on 2017/6/12. + */ + +public class UserDeleteActivity extends BaseActivity { + private TextView number; + private TitleView mTitle; + private Button bt_msg, bt_pw; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_user_delete); + initView(); + initData(); + } + + private void initView() { + number = (TextView) findViewById(R.id.number); + bt_msg = (Button) findViewById(R.id.bt_msg); + bt_pw = (Button) findViewById(R.id.bt_pw); + mTitle = (TitleView) findViewById(R.id.title_nickname); + mTitle.setHead("注销帐号"); + mTitle.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + } + + @Override + public void onFunctionText() { + + } + }); + bt_msg.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent = new Intent(UserDeleteActivity.this, PhoneCheckAndModifyActivity.class); + intent.putExtra("tag", "msgCheck"); + startActivity(intent); + } + }); + bt_pw.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + ConfirmDialog dialog = new ConfirmDialog(UserDeleteActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + userDelete(); + break; + } + } + }); + dialog.setContent("确定是否注销帐号"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + }); + } + + private void userDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + util.requestPostByAsyBody(NetWorkUrl.USER_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("tvchannelDel", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initData() { + setPhone(SharedpreferencesUtil.get(Constans.USERPHONE, "")); + } + + private void setPhone(String pNumber) { + if (!TextUtils.isEmpty(pNumber) && pNumber.length() > 6) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < pNumber.length(); i++) { + char c = pNumber.charAt(i); + if (i >= 3 && i <= 6) { + sb.append('*'); + } else { + sb.append(c); + } + } + number.setText("将" + sb.toString() + "所绑定的帐号注销"); + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_PERSONINFO_SUCCESS: + Intent intent = new Intent(UserDeleteActivity.this, PersonCenterActivity.class); + setResult(NICKNAME_RESULT, intent); + finish(); + break; + case ADD_PERSONINFO_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + ToastUtil.show(this, "注销成功"); + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + SharedpreferencesUtil.save(Constans.TOKENID, ""); + SharedpreferencesUtil.save(Constans.PASSWORD, ""); + SharedpreferencesUtil.save(Constans.MAIN_BG_URL, ""); + NettyHandlerUtil.closeCtx(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + Intent intent1 = new Intent(UserDeleteActivity.this, LoginActivity.class); + intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent1); + } + }, 1000); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/sevicecenter/AfterSeviceActivity.java b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/AfterSeviceActivity.java new file mode 100644 index 0000000..47d83eb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/AfterSeviceActivity.java @@ -0,0 +1,103 @@ +package com.yonsz.z1.mine.sevicecenter; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.RelativeLayout; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +/** + * @time 2017/6/12 23:10 + * @desc ${TODO} + */ +public class AfterSeviceActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout rl_1, rl_2, rl_3, rl_4, rl_5; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_after_service); + initView(); + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.title_service); + mTitleView.setHead(R.string.after_service); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + rl_1 = (RelativeLayout) findViewById(R.id.rl_1); + rl_2 = (RelativeLayout) findViewById(R.id.rl_2); + rl_3 = (RelativeLayout) findViewById(R.id.rl_3); + rl_4 = (RelativeLayout) findViewById(R.id.rl_4); + rl_5 = (RelativeLayout) findViewById(R.id.rl_5); + + rl_1.setOnClickListener(this); + rl_2.setOnClickListener(this); + rl_3.setOnClickListener(this); + rl_4.setOnClickListener(this); + rl_5.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_1: + intent = new Intent(AfterSeviceActivity.this, AfterSeviceNextActivity.class); + intent.putExtra("after", "如何办理退换货?"); + intent.putExtra("tag", 1); + startActivity(intent); + break; + case R.id.rl_2: + intent = new Intent(AfterSeviceActivity.this, AfterSeviceNextActivity.class); + intent.putExtra("after", "7天内不满意可以退货吗?"); + intent.putExtra("tag", 2); + startActivity(intent); + break; + case R.id.rl_3: + intent = new Intent(AfterSeviceActivity.this, AfterSeviceNextActivity.class); + intent.putExtra("after", "收到货了,但是产品有问题,怎么办?"); + intent.putExtra("tag", 3); + startActivity(intent); + break; + case R.id.rl_4: + intent = new Intent(AfterSeviceActivity.this, AfterSeviceNextActivity.class); + intent.putExtra("after", "退货周期多长时间?"); + intent.putExtra("tag", 4); + startActivity(intent); + break; + case R.id.rl_5: + intent = new Intent(AfterSeviceActivity.this, AfterSeviceNextActivity.class); + intent.putExtra("after", "公司的客户服务电话多少?"); + intent.putExtra("tag", 5); + startActivity(intent); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/sevicecenter/AfterSeviceNextActivity.java b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/AfterSeviceNextActivity.java new file mode 100644 index 0000000..503ef5a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/AfterSeviceNextActivity.java @@ -0,0 +1,71 @@ +package com.yonsz.z1.mine.sevicecenter; + +import android.os.Bundle; +import android.os.Message; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2017/7/27. + */ + +public class AfterSeviceNextActivity extends BaseActivity { + private TitleView mTitleView; + private TextView mTextView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_after_next); + initView(); + } + + private void initView() { + mTextView = (TextView) findViewById(R.id.tv_next); + mTitleView = (TitleView) findViewById(R.id.title_next); + mTitleView.setHead(getIntent().getExtras().get("after").toString()); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + int tag = (int) getIntent().getExtras().get("tag"); + switch (tag) { + case 1: + mTextView.setText(R.string.service_1); + break; + case 2: + mTextView.setText(R.string.service_2); + break; + case 3: + mTextView.setText(R.string.service_3); + break; + case 4: + mTextView.setText(R.string.service_4); + break; + case 5: + mTextView.setText(R.string.service_5); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/sevicecenter/InstructionActivity.java b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/InstructionActivity.java new file mode 100644 index 0000000..cc24a38 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/InstructionActivity.java @@ -0,0 +1,79 @@ +package com.yonsz.z1.mine.sevicecenter; + +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.RelativeLayout; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +/** + * @time 2017/6/12 23:10 + * @desc ${TODO} + */ +public class InstructionActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout instructionRl, makeUpRl, voiceRl; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_instruction); + initView(); + initListener(); + } + + + private void initView() { + instructionRl = (RelativeLayout) findViewById(R.id.rl_how_control); + makeUpRl = (RelativeLayout) findViewById(R.id.rl_wake_up); + voiceRl = (RelativeLayout) findViewById(R.id.rl_voice); + mTitleView = (TitleView) findViewById(R.id.title_instruction); + mTitleView.setHead(R.string.instructions); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void initListener() { + instructionRl.setOnClickListener(this); + makeUpRl.setOnClickListener(this); + voiceRl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rl_instruction: + + break; + case R.id.rl_wake_up: + + break; + case R.id.rl_voice: + + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/sevicecenter/SeviceCenterActivity.java b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/SeviceCenterActivity.java new file mode 100644 index 0000000..cd3d2a0 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/SeviceCenterActivity.java @@ -0,0 +1,200 @@ +package com.yonsz.z1.mine.sevicecenter; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.os.Message; +import android.view.KeyEvent; +import android.view.View; +import android.widget.RelativeLayout; + +import com.tencent.smtt.export.external.interfaces.SslError; +import com.tencent.smtt.export.external.interfaces.SslErrorHandler; +import com.tencent.smtt.sdk.ValueCallback; +import com.tencent.smtt.sdk.WebView; +import com.tencent.smtt.sdk.WebViewClient; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Administrator on 2017/5/26. + */ +public class SeviceCenterActivity extends BaseActivity { + private RelativeLayout instructionRl, afterServiceRl; + private TitleView mTitleView; + private X5WebView webView; + private ValueCallback uploadFile; + private ValueCallback uploadFiles; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sevice_center_weixin); + initView(); + initListener(); + + } + + private void initView() { + instructionRl = (RelativeLayout) findViewById(R.id.rl_instruction); + afterServiceRl = (RelativeLayout) findViewById(R.id.rl_after_service); + mTitleView = (TitleView) findViewById(R.id.title_service_center); + mTitleView.setHead(R.string.service_center); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + webView = (X5WebView) findViewById(R.id.webView); + /*webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setDomStorageEnabled(true); + webView.getSettings().setAllowContentAccess(true); + webView.getSettings().setAppCacheEnabled(true); + webView.getSettings().setDisplayZoomControls(true); + webView.setWebChromeClient(new WebChromeClient()); + webView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return true; + } + });*/ + + String appId = DifferConstans.APPID_S_VOICE; + /*switch (DifferConstans.APPID_S) { + case "1104": + //小讯智能 + appId = "1105"; + break; + case "1103": + //安顺祥 + if (AppIdUtil.isChuangWei()) { + appId = "110202"; + } else + appId = "1102"; + break; + case "1202": + //语音生活助手 + appId = "1104"; + break; + case "1201": + //语音遥控器 + appId = "1103"; + break; + default: + if (DifferConstans.APPID_S_VOICE.equals("110101")) { + appId = "1103"; + } else + appId = "1101"; + break; + }*/ + if (null != getIntent().getExtras() && null != getIntent().getExtras().get("platform")) { + mTitleView.setHead("设备接入点"); + String url = NetWorkUrl.getSERVER() + "api/thirdDevice/goPayAccessPoint?session=" + SharedpreferencesUtil.get(Constans.SEESSIONID, "null"); + webView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView webView, String url) { + if (url == null) return false; + + try { + // ===========调用微信=========== + if (url.startsWith("weixin://")) { + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_VIEW); + intent.setData(Uri.parse(url)); + startActivity(intent); + return true; + } + } catch (Exception e) { + return false; + } + if (url.startsWith("http://") || url.startsWith("https://")) { + Map map = new HashMap<>(); + map.put("Referer", "https://api.yonsz.net:443/"); + webView.loadUrl(url, map); + return true; + } else { + try { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + startActivity(intent); + return true; + } catch (Exception e) { //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash) + return false; + } + } + } + }); + Map map = new HashMap<>(); + map.put("Referer", "https://api.yonsz.net:443/"); + webView.loadUrl(url, map); + } else { + webView.loadUrl("https://app-static.yonsz.net/help/" + appId); + } + } + + private void openFileChooseProcess() { + Intent i = new Intent(Intent.ACTION_GET_CONTENT); + i.addCategory(Intent.CATEGORY_OPENABLE); + i.setType("*/*"); + startActivityForResult(Intent.createChooser(i, "test"), 0); + } + + private void initListener() { + instructionRl.setOnClickListener(this); + afterServiceRl.setOnClickListener(this); + } + + /** + * 使点击回退按钮不会直接退出整个应用程序而是返回上一个页面 + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) { + webView.goBack();//返回上个页面 + return true; + } + return super.onKeyDown(keyCode, event);//退出整个应用程序 + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.rl_instruction: + intent = new Intent(SeviceCenterActivity.this, InstructionActivity.class); + startActivity(intent); + break; + case R.id.rl_after_service: + intent = new Intent(SeviceCenterActivity.this, AfterSeviceActivity.class); + startActivity(intent); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/mine/sevicecenter/WebViewJavaScriptFunction.java b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/WebViewJavaScriptFunction.java new file mode 100644 index 0000000..26fd518 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/WebViewJavaScriptFunction.java @@ -0,0 +1,6 @@ +package com.yonsz.z1.mine.sevicecenter; + +public interface WebViewJavaScriptFunction { + + void onJsFunctionCalled(String tag); +} diff --git a/app/src/main/java/com/yonsz/z1/mine/sevicecenter/X5WebView.java b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/X5WebView.java new file mode 100644 index 0000000..29ab324 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/mine/sevicecenter/X5WebView.java @@ -0,0 +1,95 @@ +package com.yonsz.z1.mine.sevicecenter; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.view.View; +import android.widget.TextView; + +import com.tencent.smtt.sdk.WebSettings; +import com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm; +import com.tencent.smtt.sdk.WebView; +import com.tencent.smtt.sdk.WebViewClient; + +public class X5WebView extends WebView { + TextView title; + private WebViewClient client = new WebViewClient() { + /** + * 防止加载网页时调起系统浏览器 + */ + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return true; + } + }; + + @SuppressLint("SetJavaScriptEnabled") + public X5WebView(Context arg0, AttributeSet arg1) { + super(arg0, arg1); + this.setWebViewClient(client); + // this.setWebChromeClient(chromeClient); + // WebStorage webStorage = WebStorage.getInstance(); + initWebViewSettings(); + this.getView().setClickable(true); + } + + public X5WebView(Context arg0) { + super(arg0); + setBackgroundColor(85621); + } + + private void initWebViewSettings() { + WebSettings webSetting = this.getSettings(); + webSetting.setJavaScriptEnabled(true); + webSetting.setJavaScriptCanOpenWindowsAutomatically(true); + webSetting.setAllowFileAccess(true); + webSetting.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); + webSetting.setSupportZoom(true); + webSetting.setBuiltInZoomControls(true); + webSetting.setUseWideViewPort(true); + webSetting.setSupportMultipleWindows(true); + webSetting.setLoadWithOverviewMode(true); + webSetting.setAppCacheEnabled(true); + webSetting.setDatabaseEnabled(true); + webSetting.setDomStorageEnabled(true); + webSetting.setGeolocationEnabled(true); + webSetting.setAppCacheMaxSize(Long.MAX_VALUE); + // webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY); + webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND); + // webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH); + webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE); + webSetting.setMixedContentMode(android.webkit.WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + webSetting.setJavaScriptEnabled(true); + webSetting.setJavaScriptCanOpenWindowsAutomatically(true); + + // this.getSettingsExtension().setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);//extension + // settings 的设计 + } + + @Override + protected boolean drawChild(Canvas canvas, View child, long drawingTime) { + boolean ret = super.drawChild(canvas, child, drawingTime); + /*canvas.save(); + Paint paint = new Paint(); + paint.setColor(0x7fff0000); + paint.setTextSize(24.f); + paint.setAntiAlias(true); + if (getX5WebViewExtension() != null) { + canvas.drawText(this.getContext().getPackageName() + "-pid:" + + android.os.Process.myPid(), 10, 50, paint); + canvas.drawText( + "X5 Core:" + QbSdk.getTbsVersion(this.getContext()), 10, + 100, paint); + } else { + canvas.drawText(this.getContext().getPackageName() + "-pid:" + + android.os.Process.myPid(), 10, 50, paint); + canvas.drawText("Sys Core", 10, 100, paint); + } + canvas.drawText(Build.MANUFACTURER, 10, 150, paint); + canvas.drawText(Build.MODEL, 10, 200, paint); + canvas.restore();*/ + return ret; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/model/ChooseDeviceActivity.java b/app/src/main/java/com/yonsz/z1/model/ChooseDeviceActivity.java new file mode 100644 index 0000000..5c82692 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/model/ChooseDeviceActivity.java @@ -0,0 +1,183 @@ +package com.yonsz.z1.model; + +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.widget.ExpandableListView; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entitya2.DeviceAllEntity; +import com.yonsz.z1.database.entity.entitya2.ModelSetEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.BATCH_UPDATE_MODEL_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.BATCH_UPDATE_MODEL_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_CONNDEVICE_BYUSER_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.BATCH_UPDATE_MODEL_CONTROL; + +/** + * Created by Administrator on 2017/12/8. + */ + +public class ChooseDeviceActivity extends BaseActivity { + private TitleView mTitleView; + private int model; + private TextView tvDeclare; + private ExpandableListView mListView; + private ChooseDeviceAdapter mChooseDeviceAdapter; + private List mObjEntity = new ArrayList<>(); + private String respone; + private List controlList = new ArrayList<>(); + private String delList; + private String addList; + private LoadingDialog mLoadingDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_choose_device); + initView(); + selectConndeviceByUser(); + } + + private void initView() { + model = (int) getIntent().getExtras().get("model"); + respone = (String) getIntent().getExtras().get("respone"); + tvDeclare = (TextView) findViewById(R.id.tv_declare_no_use); + mTitleView = (TitleView) findViewById(R.id.title_choose_device); + mTitleView.setHead("选择设备"); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (mChooseDeviceAdapter != null) { + delList = mChooseDeviceAdapter.getCheckBoxDel().toString(); + StringBuilder boxAdd = mChooseDeviceAdapter.getCheckBoxAdd(); + if (boxAdd.length() != 0) { + addList = boxAdd.substring(0, boxAdd.length() - 1); + } + batchUpdateModelControl(delList, addList); + } else { + Toast.makeText(ChooseDeviceActivity.this, R.string.net_error, Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + + switch (model) { + case 1: + tvDeclare.setText("添加触发“回家模式”后,所要执行动作的家电"); + break; + case 2: + tvDeclare.setText("添加触发“离家模式”后,所要执行动作的家电"); + break; + case 3: + tvDeclare.setText("添加触发“睡眠模式”后,所要执行动作的家电"); + break; + case 4: + tvDeclare.setText("添加触发“起床模式”后,所要执行动作的家电"); + break; + } + + if (respone != null) { + ModelSetEntity modelSetEntity = JSON.parseObject(respone, ModelSetEntity.class); + if (null != modelSetEntity.getData()) { + controlList = modelSetEntity.getData().getControlList(); + } + } + + mListView = (ExpandableListView) findViewById(R.id.expandablelist); + + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECT_CONNDEVICE_BYUSER_SUCCESS: + DeviceAllEntity deviceAllEntity = (DeviceAllEntity) msg.obj; + mObjEntity = deviceAllEntity.getObj(); + mChooseDeviceAdapter = new ChooseDeviceAdapter(this, mObjEntity, controlList); + mListView.setAdapter(mChooseDeviceAdapter); + for (int i = 0; i < mChooseDeviceAdapter.getGroupCount(); i++) { + mListView.expandGroup(i); + } + break; + case BATCH_UPDATE_MODEL_CONTROL_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + finish(); + break; + case BATCH_UPDATE_MODEL_CONTROL_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void batchUpdateModelControl(String boxDel, String boxAdd) { + /*initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("modelType", String.valueOf(model)); + if (boxAdd != null) { + map.put("addList", boxAdd); + } + if (boxDel != null) { + map.put("delList", boxDel); + } + netWorkUtil.requestPostByAsynew(BATCH_UPDATE_MODEL_CONTROL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("batchUpdateModelControl", "ShareDeviceActivity onSuccess()" + respone); + DeviceAllEntity obj = JSON.parseObject(respone, DeviceAllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(BATCH_UPDATE_MODEL_CONTROL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(BATCH_UPDATE_MODEL_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(BATCH_UPDATE_MODEL_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void selectConndeviceByUser() { + } +} diff --git a/app/src/main/java/com/yonsz/z1/model/ChooseDeviceAdapter.java b/app/src/main/java/com/yonsz/z1/model/ChooseDeviceAdapter.java new file mode 100644 index 0000000..33a38d0 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/model/ChooseDeviceAdapter.java @@ -0,0 +1,473 @@ +package com.yonsz.z1.model; + +import android.content.Context; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseExpandableListAdapter; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.DeviceDetailEntity; +import com.yonsz.z1.database.entity.entitya2.DeviceAllEntity; +import com.yonsz.z1.database.entity.entitya2.ModelSetEntity; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.Img; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MUSIC_TAG; +import static com.yonsz.z1.net.Constans.SAFE_IMG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; + +/** + * Created by Administrator on 2017/12/8. + */ + +public class ChooseDeviceAdapter extends BaseExpandableListAdapter { + private Context mContext; + private List mObjEntity; + private List mStringList = new ArrayList<>(); + private List controlList = new ArrayList<>(); + private List> mDatas = new ArrayList<>(); + private StringBuilder stringBuilderAdd = new StringBuilder(); + private StringBuilder stringBuilderDel = new StringBuilder(); + private CheckBox[] chooseCheckBox; + + + public ChooseDeviceAdapter(Context mContext, List mObjEntity, List controlList) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + this.controlList = controlList; + //转换成需要的列表 + if (mObjEntity != null && mObjEntity.size() != 0) { + convertList(mObjEntity); + } + } + + public StringBuilder getCheckBoxAdd() { + for (int i = 0; i < mDatas.size(); i++) { + for (int j = 0; j < mDatas.get(i).size(); j++) { + if (mDatas.get(i).get(j).isCheck()) { + boolean isAdd = true; + if (controlList != null) { + for (int k = 0; k < controlList.size(); k++) { + if (controlList.get(k).getConndeviceId().toString().equals(mDatas.get(i).get(j).getId().toString())) { + isAdd = false; + } + } + } + if (isAdd) { + stringBuilderAdd.append(mDatas.get(i).get(j).getZiId()); + stringBuilderAdd.append("_"); + stringBuilderAdd.append(mDatas.get(i).get(j).getDeviceType()); + stringBuilderAdd.append("_"); + stringBuilderAdd.append(mDatas.get(i).get(j).getId()); + stringBuilderAdd.append(","); + } + } + } + } + Log.i("getCheckBoxAdd", "ChooseDeviceAdapter getCheckBoxAdd()" + "====" + stringBuilderAdd); + return stringBuilderAdd; + } + + public StringBuilder getCheckBoxDel() { + for (int i = 0; i < mDatas.size(); i++) { + for (int j = 0; j < mDatas.get(i).size(); j++) { + if (!mDatas.get(i).get(j).isCheck()) { + boolean isDel = false; + if (controlList != null) { + for (int k = 0; k < controlList.size(); k++) { + if (controlList.get(k).getConndeviceId().toString().equals(mDatas.get(i).get(j).getId().toString())) { + isDel = true; + } + } + } + if (isDel) { + if (stringBuilderDel.length() != 0) { + stringBuilderDel.append(","); + } + for (int k = 0; k < controlList.size(); k++) { + if (controlList.get(k).getConndeviceId().toString().equals(mDatas.get(i).get(j).getId().toString())) { + stringBuilderDel.append(controlList.get(k).getId()); + } + } + } + } + } + } + Log.i("getCheckBoxAdd", "ChooseDeviceAdapter getCheckBoxDel()" + "====" + stringBuilderDel); + return stringBuilderDel; + } + + private List> convertList(List mObjEntity) { + for (int i = 0; i < mObjEntity.size(); i++) { + mStringList = new ArrayList<>(); + mStringList.clear(); + getStringList(mObjEntity.get(i)); + mDatas.add(mStringList); + } + return mDatas; + } + + @Override + public int getGroupCount() { + if (mObjEntity != null) { + return mObjEntity.size(); + } else { + return 0; + } + } + + @Override + public int getChildrenCount(int groupPosition) { + // getStringList(mObjEntity.get(groupPosition)); + return mDatas.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return mObjEntity.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + ParentHolder holder = null; + if (null == convertView) { + convertView = LayoutInflater.from(mContext).inflate(R.layout.item_choose_device_group, null); + holder = new ParentHolder(convertView); + holder.mImageArrow.setVisibility(View.GONE); + if (mObjEntity.get(groupPosition).getDeviceAddress() != null) { + holder.devicePosition.setText(mObjEntity.get(groupPosition).getDeviceAddress().toString()); + } else { + holder.devicePosition.setText(R.string.no_position); + } + convertView.setTag(holder); + } else { + holder = (ParentHolder) convertView.getTag(); + } + if (mDatas.get(groupPosition).size() == 0) { + convertView.setVisibility(View.GONE); + } else { + convertView.setVisibility(View.VISIBLE); + } + return convertView; + } + + @Override + public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildHolder holder = null; + // if (null == convertView) { + convertView = LayoutInflater.from(mContext).inflate(R.layout.item_choose_device_child, null); + holder = new ChildHolder(convertView); + if (mDatas.get(groupPosition).get(childPosition).getDeviceType() != null) { + switch (mDatas.get(groupPosition).get(childPosition).getDeviceType()) { + case TV_TAG: + holder.icon.setImageResource(Img[0]); + holder.title.setText(R.string.tv); + holder.position.setText(""); + break; + case AIR_TAG: + holder.icon.setImageResource(Img[1]); + holder.title.setText(R.string.air); + holder.position.setText(""); + break; + case FAN_TAG: + holder.icon.setImageResource(Img[2]); + holder.title.setText(R.string.fan); + holder.position.setText(""); + break; + case SWEEP_TAG: + holder.icon.setImageResource(Img[3]); + holder.title.setText(R.string.sweep); + holder.position.setText(""); + break; + case MUSIC_TAG: + holder.icon.setImageResource(Img[13]); + holder.title.setText("背景音乐"); + holder.position.setText(""); + break; + case LIGHT_TAG: + switch (mDatas.get(groupPosition).get(childPosition).getLightType()) { + case "0"://灯光 + holder.title.setText(R.string.light); + holder.icon.setImageResource(R.drawable.icon_light); + break; + case "1"://筒灯 + holder.title.setText(R.string.tong_deng); + holder.icon.setImageResource(R.drawable.icon_tubelamp); + break; + case "2"://灯带 + holder.title.setText(R.string.deng_dai); + holder.icon.setImageResource(R.drawable.icon_lightbelt); + break; + case "3"://射灯 + holder.title.setText(R.string.she_deng ); + holder.icon.setImageResource(R.drawable.icon_lamp); + break; + case "4"://壁灯 + holder.title.setText(R.string.bi_deng); + holder.icon.setImageResource(R.drawable.icon_walllamp); + break; + case "5"://吊灯 + holder.title.setText(R.string.diao_deng); + holder.icon.setImageResource(R.drawable.icon_chandelier); + break; + case "6"://廊灯 + holder.title.setText(R.string.lang_deng); + holder.icon.setImageResource(R.drawable.icon_porchlamp); + break; + case "7"://排气扇 + holder.title.setText(R.string.paiqi_shan); + holder.icon.setImageResource(R.drawable.icon_exhaust); + break; + default: + holder.title.setText(R.string.light); + holder.icon.setImageResource(R.drawable.icon_light); + break; + } + + if (mDatas.get(groupPosition).get(childPosition).getAddressName() != null) { + holder.position.setText(mDatas.get(groupPosition).get(childPosition).getAddressName().toString()); + } else { + holder.position.setText(R.string.no_position); + } + break; + case CURTAINS_TAG: + if (mDatas.get(groupPosition).get(childPosition).getRelatedStatus().equals("1")) { + holder.title.setText(R.string.curtains); + holder.icon.setImageResource(R.drawable.icon_curtaingauzecurtain); + } else { + if (mDatas.get(groupPosition).get(childPosition).getBlindType().equals("1")) { + holder.title.setText("纱帘"); + holder.icon.setImageResource(R.drawable.icon_gauze); + } else { + holder.title.setText(R.string.curtains); + holder.icon.setImageResource(R.drawable.icon_curtains); + } + } + if (mDatas.get(groupPosition).get(childPosition).getAddressName() != null) { + holder.position.setText(mDatas.get(groupPosition).get(childPosition).getAddressName().toString()); + } else { + holder.position.setText(R.string.no_position); + } + break; + case SWITCH_TAG: + switch (mDatas.get(groupPosition).get(childPosition).getPlugType()) { + case "0"://插座 + holder.title.setText(R.string.chazuo); + holder.icon.setImageResource(R.drawable.icon_chazuo); + break; + case "1"://台灯 + holder.title.setText(R.string.tai_deng); + holder.icon.setImageResource(R.drawable.icon_desklamp); + break; + case "2"://热水器(厨电) + holder.title.setText(R.string.chu_dian); + holder.icon.setImageResource(R.drawable.icon_kitchenpower); + break; + case "3"://墙壁插座 + holder.title.setText(R.string.bi_cha); + holder.icon.setImageResource(R.drawable.icon_wallsocket); + break; + case "4"://热水壶 + holder.title.setText(R.string.reshui_hu); + holder.icon.setImageResource(R.drawable.icon_kettle); + break; + case "5"://取暖器 + holder.title.setText(R.string.qunuan_qi); + holder.icon.setImageResource(R.drawable.icon_heater); + break; + case "6"://电蚊香 + holder.title.setText(R.string.dianwen_xiang); + holder.icon.setImageResource(R.drawable.icon_dwx); + break; + default: + holder.title.setText(R.string.chazuo); + holder.icon.setImageResource(R.drawable.icon_chazuo); + break; + } + + if (mDatas.get(groupPosition).get(childPosition).getAddressName() != null) { + holder.position.setText(mDatas.get(groupPosition).get(childPosition).getAddressName().toString()); + } else { + holder.position.setText(R.string.no_position); + } + break; + case DOOR_LOCK_TAG: + holder.icon.setImageResource(SAFE_IMG[3]); + holder.title.setText(R.string.door_warn); + if (mDatas.get(groupPosition).get(childPosition).getAddressName() != null) { + holder.position.setText(mDatas.get(groupPosition).get(childPosition).getAddressName().toString()); + } else { + holder.position.setText(R.string.no_position); + } + break; + case INFRARED_TAG: + holder.icon.setImageResource(SAFE_IMG[4]); + holder.title.setText(R.string.red_warn); + if (mDatas.get(groupPosition).get(childPosition).getAddressName() != null) { + holder.position.setText(mDatas.get(groupPosition).get(childPosition).getAddressName().toString()); + } else { + holder.position.setText(R.string.no_position); + } + break; + /*case SMOKE_TAG: + + break; + case GAS_TAG: + + break; + case WATER_TAG: + + break;*/ + } + } + + if (controlList != null) { + // mDatas.get(groupPosition).get(childPosition).setCheck(false); + for (int i = 0; i < controlList.size(); i++) { + if (controlList.get(i).getConndeviceId().toString().equals(mDatas.get(groupPosition).get(childPosition).getId().toString()) || mDatas.get(groupPosition).get(childPosition).isCheck()) { + holder.chooseCb.setChecked(true); + mDatas.get(groupPosition).get(childPosition).setCheck(true); + } + } + } + + holder.chooseCb.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mDatas.get(groupPosition).get(childPosition).isCheck()) { + mDatas.get(groupPosition).get(childPosition).setCheck(false); + } else { + mDatas.get(groupPosition).get(childPosition).setCheck(true); + } + } + }); + convertView.setTag(holder); + /*} else { + holder = (ChildHolder) convertView.getTag(); + }*/ + return convertView; + } + + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + private List getStringList(DeviceAllEntity.ObjEntity objEntity) { + mStringList.clear(); + if (objEntity.getList() != null) { + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case AIR_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case TV_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case FAN_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + for (int i = 0; i < objEntity.getList().size(); i++) { + switch (objEntity.getList().get(i).getDeviceType()) { + case SWEEP_TAG: + mStringList.add(objEntity.getList().get(i)); + break; + } + } + } + if (objEntity.getLightLlist() != null) { + for (int i = 0; i < objEntity.getLightLlist().size(); i++) { + objEntity.getLightLlist().get(i).setDeviceType(LIGHT_TAG); + mStringList.add(objEntity.getLightLlist().get(i)); + } + } + if (objEntity.getBlindList() != null) { + for (int i = 0; i < objEntity.getBlindList().size(); i++) { + objEntity.getBlindList().get(i).setDeviceType(CURTAINS_TAG); + mStringList.add(objEntity.getBlindList().get(i)); + } + } + if (objEntity.getPlugList() != null) { + for (int i = 0; i < objEntity.getPlugList().size(); i++) { + objEntity.getPlugList().get(i).setDeviceType(SWITCH_TAG); + mStringList.add(objEntity.getPlugList().get(i)); + } + } + if (objEntity.getSafeList() != null) { + for (int i = 0; i < objEntity.getSafeList().size(); i++) { + mStringList.add(objEntity.getSafeList().get(i)); + } + } + return mStringList; + } + + private static class ParentHolder { + public TextView devicePosition; + private ImageView mImageArrow; + + ParentHolder(View view) { + devicePosition = (TextView) view.findViewById(R.id.tv_device_position); + mImageArrow = (ImageView) view.findViewById(R.id.iv_arrow_down_up); + } + } + + private static class ChildHolder { + public ImageView icon; + public TextView title; + public TextView position; + public CheckBox chooseCb; + + ChildHolder(View view) { + icon = (ImageView) view.findViewById(R.id.icon); + title = (TextView) view.findViewById(R.id.tv_child_device); + position = (TextView) view.findViewById(R.id.tv_position); + chooseCb = (CheckBox) view.findViewById(R.id.cb_choose_device); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/model/ModelSelectActivity.java b/app/src/main/java/com/yonsz/z1/model/ModelSelectActivity.java new file mode 100644 index 0000000..fcad6cc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/model/ModelSelectActivity.java @@ -0,0 +1,135 @@ +package com.yonsz.z1.model; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.fragment.scene.TimeSettingFragment; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.MODEL_SELECT; + +/** + * Created by Administrator on 2017/11/7. + */ + +public class ModelSelectActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout inHomeRl, outHomeRl, inBedRl, outBedRl; + private ImageView inHomeIv, outHomeIv, inBedIv, outBedIv; + private String modelSelect = null; + private String modelNow; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_model_select); + initView(); + } + + private void initView() { + modelNow = (String) getIntent().getExtras().get("modelNow"); + inHomeRl = (RelativeLayout) findViewById(R.id.rl_in_home_model); + outHomeRl = (RelativeLayout) findViewById(R.id.rl_out_home_model); + inBedRl = (RelativeLayout) findViewById(R.id.rl_in_bed_model); + outBedRl = (RelativeLayout) findViewById(R.id.rl_out_bed_model); + inHomeIv = (ImageView) findViewById(R.id.ImageView01); + outHomeIv = (ImageView) findViewById(R.id.ImageView02); + inBedIv = (ImageView) findViewById(R.id.ImageView03); + outBedIv = (ImageView) findViewById(R.id.ImageView04); + mTitleView = (TitleView) findViewById(R.id.title_model_select); + mTitleView.setHead(R.string.model_select); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + Intent intent = new Intent(ModelSelectActivity.this, TimeSettingFragment.class); + intent.putExtra("modelSelect", modelSelect); + setResult(MODEL_SELECT, intent); + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + switch (modelNow) { + case "回家模式": + inHomeIv.setVisibility(View.VISIBLE); + break; + case "离家模式": + outHomeIv.setVisibility(View.VISIBLE); + break; + case "睡眠模式": + inBedIv.setVisibility(View.VISIBLE); + break; + case "起床模式": + outBedIv.setVisibility(View.VISIBLE); + break; + } + inHomeRl.setOnClickListener(this); + outHomeRl.setOnClickListener(this); + inBedRl.setOnClickListener(this); + outBedRl.setOnClickListener(this); + } + + @Override + public void onBackPressed() { + Intent intent = new Intent(ModelSelectActivity.this, TimeSettingActivity.class); + intent.putExtra("modelSelect", modelSelect); + setResult(MODEL_SELECT, intent); + finish(); + } + + @Override + public void onClick(View v) { + super.onClick(v); + switch (v.getId()) { + case R.id.rl_in_home_model: + inHomeIv.setVisibility(View.VISIBLE); + outHomeIv.setVisibility(View.GONE); + inBedIv.setVisibility(View.GONE); + outBedIv.setVisibility(View.GONE); + modelSelect = "回家模式"; + break; + case R.id.rl_out_home_model: + outHomeIv.setVisibility(View.VISIBLE); + inHomeIv.setVisibility(View.GONE); + inBedIv.setVisibility(View.GONE); + outBedIv.setVisibility(View.GONE); + modelSelect = "离家模式"; + break; + case R.id.rl_in_bed_model: + inBedIv.setVisibility(View.VISIBLE); + outHomeIv.setVisibility(View.GONE); + inHomeIv.setVisibility(View.GONE); + outBedIv.setVisibility(View.GONE); + modelSelect = "睡眠模式"; + break; + case R.id.rl_out_bed_model: + outBedIv.setVisibility(View.VISIBLE); + outHomeIv.setVisibility(View.GONE); + inHomeIv.setVisibility(View.GONE); + inBedIv.setVisibility(View.GONE); + modelSelect = "起床模式"; + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/model/ModelSetAdapter.java b/app/src/main/java/com/yonsz/z1/model/ModelSetAdapter.java new file mode 100644 index 0000000..3bf8a15 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/model/ModelSetAdapter.java @@ -0,0 +1,517 @@ +package com.yonsz.z1.model; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseExpandableListAdapter; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.ModelSetEntity; +import com.yonsz.z1.device.SlideView; +import com.yonsz.z1.listener.OnExbandItemClickListener; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.Img; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MULTIFUNCTIONAL_CONTROLLER; +import static com.yonsz.z1.net.Constans.MUSIC_TAG; +import static com.yonsz.z1.net.Constans.SAFE_IMG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.WINDOW_OPENER; + +/** + * Created by Administrator on 2017/11/13. + */ + +public class ModelSetAdapter extends BaseExpandableListAdapter { + private Context mContext; + private List mObjEntity; + private List> mDatas = new ArrayList<>(); + private int groupCount = 0; + private String ziId; + private OnExbandItemClickListener mExbandItemClickListener; + + + public ModelSetAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + //转换成需要的列表 + convertList(mObjEntity); + } + + private List> convertList(List mObjEntity) { + if (mObjEntity != null && mObjEntity.size() > 0) { + List mChildData = null; + ziId = mObjEntity.get(0).getZiId().toString(); + List ziIdStrings = new ArrayList<>(); + for (int i = 0; i < mObjEntity.size(); i++) { + ziIdStrings.add(mObjEntity.get(i).getZiId()); + } + List list = removeDuplicate(ziIdStrings); + for (int i = 0; i < list.size(); i++) { + mChildData = new ArrayList<>(); + for (int j = 0; j < mObjEntity.size(); j++) { + if (mObjEntity.get(j).getZiId().equals(list.get(i))) { + mChildData.add(mObjEntity.get(j)); + } + } + mDatas.add(mChildData); + } + + /*for (int i = 0; i < mObjEntity.size(); i++) { + if (mObjEntity.get(i).getZiId().equals(ziId)) { + mChildData.add(mObjEntity.get(i)); + } else { + ziId = mObjEntity.get(i).getZiId().toString(); + mDatas.add(mChildData); + mChildData = new ArrayList<>(); + mChildData.add(mObjEntity.get(i)); + } + if (mChildData.size() == mObjEntity.size()) { + mDatas.add(mChildData); + } else if (i == mObjEntity.size() - 1) { + mDatas.add(mChildData); + } + }*/ + } + return mDatas; + } + + private List removeDuplicate(List list) { + for (int i = 0; i < list.size() - 1; i++) { + for (int j = list.size() - 1; j > i; j--) { + if (list.get(j).equals(list.get(i))) { + list.remove(j); + } + } + } + return list; + } + + private int getGroupCountSum(List mObjEntity) { + if (mObjEntity != null) { + ziId = mObjEntity.get(0).getZiId().toString(); + groupCount = 1; + + for (int i = 0; i < mObjEntity.size(); i++) { + if (!mObjEntity.get(i).getZiId().toString().equals(ziId)) { + groupCount += 1; + ziId = mObjEntity.get(i).getZiId().toString(); + } + } + } + return groupCount; + } + + @Override + public int getGroupCount() { + return mDatas.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + /*int childSum = 0; + for (int i = 0; i < mObjEntity.size(); i++) { + if (mObjEntity.get(i).getZiId().toString().equals(mObjEntity.get(groupPosition).getZiId().toString())) { + childSum += 1; + } + }*/ + return mDatas.get(groupPosition).size(); + } + + @Override + public Object getGroup(int groupPosition) { + return mObjEntity.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + ParentHolder parentHolder; + SlideView slideView = (SlideView) convertView; + if (slideView == null) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_choose_device_group, null); + slideView = new SlideView(mContext, false, false); + slideView.setContentView(itemView); + parentHolder = new ParentHolder(slideView); + slideView.setTag(parentHolder); + } else { + parentHolder = (ParentHolder) slideView.getTag(); + } + slideView.shrink(); + if (mDatas.get(groupPosition).get(0).getDeviceAddress() != null) { + parentHolder.devicePosition.setText(mDatas.get(groupPosition).get(0).getDeviceAddress().toString()); + } else { + parentHolder.devicePosition.setText(R.string.no_position); + } + if (isExpanded) { + parentHolder.arrowIv.setImageDrawable(mContext.getResources().getDrawable(R.drawable.arrow_down)); + } else { + parentHolder.arrowIv.setImageDrawable(mContext.getResources().getDrawable(R.drawable.arrow_up)); + } + return slideView; + } + + @Override + public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + final ChildHolder childHolder; + SlideView slideView = (SlideView) convertView; + if (slideView == null) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_model_set_child, null); + slideView = new SlideView(mContext, false, false); + slideView.setContentView(itemView); + childHolder = new ChildHolder(slideView); + slideView.setTag(childHolder); + } else { + childHolder = (ChildHolder) slideView.getTag(); + } + slideView.shrink(); + switch (mDatas.get(groupPosition).get(childPosition).getDeviceType()) { + case TV_TAG: + childHolder.icon.setImageResource(Img[0]); + childHolder.title.setText(R.string.tv); + childHolder.position.setText(""); + break; + case AIR_TAG: + childHolder.icon.setImageResource(Img[1]); + childHolder.title.setText(R.string.air); + childHolder.position.setText(""); + break; + case FAN_TAG: + childHolder.icon.setImageResource(Img[2]); + childHolder.title.setText(R.string.fan); + childHolder.position.setText(""); + break; + case SWEEP_TAG: + childHolder.icon.setImageResource(Img[3]); + childHolder.title.setText(R.string.sweep); + childHolder.position.setText(""); + break; + case MUSIC_TAG: + childHolder.icon.setImageResource(Img[13]); + childHolder.title.setText("背景音乐"); + childHolder.position.setText(""); + break; + case LIGHT_TAG: + switch (mDatas.get(groupPosition).get(childPosition).getSubType()) { + case "0"://灯光 + childHolder.title.setText(R.string.light); + childHolder.icon.setImageResource(R.drawable.icon_light); + break; + case "1"://筒灯 + childHolder.title.setText(R.string.tong_deng); + childHolder.icon.setImageResource(R.drawable.icon_tubelamp); + break; + case "2"://灯带 + childHolder.title.setText(R.string.deng_dai); + childHolder.icon.setImageResource(R.drawable.icon_lightbelt); + break; + case "3"://射灯 + childHolder.title.setText(R.string.she_deng); + childHolder.icon.setImageResource(R.drawable.icon_lamp); + break; + case "4"://壁灯 + childHolder.title.setText(R.string.bi_deng); + childHolder.icon.setImageResource(R.drawable.icon_walllamp); + break; + case "5"://吊灯 + childHolder.title.setText(R.string.diao_deng); + childHolder.icon.setImageResource(R.drawable.icon_chandelier); + break; + case "6"://廊灯 + childHolder.title.setText(R.string.lang_deng); + childHolder.icon.setImageResource(R.drawable.icon_porchlamp); + break; + case "7"://排气扇 + childHolder.title.setText(R.string.paiqi_shan); + childHolder.icon.setImageResource(R.drawable.icon_exhaust); + break; + default: + childHolder.title.setText(R.string.light); + childHolder.icon.setImageResource(R.drawable.icon_light); + break; + } + if (mDatas.get(groupPosition).get(childPosition).getConndeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getConndeviceAddress().toString()); + } else if (mDatas.get(groupPosition).get(childPosition).getDeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getDeviceAddress().toString()); + } else { + childHolder.position.setText(R.string.no_position); + } + break; + case CURTAINS_TAG: + if (mDatas.get(groupPosition).get(childPosition).getRelatedStatus().equals("1")) { + childHolder.title.setText(R.string.curtains); + childHolder.icon.setImageResource(R.drawable.icon_curtaingauzecurtain); + } else { + if (mDatas.get(groupPosition).get(childPosition).getSubType().equals("1")) { + childHolder.title.setText("纱帘"); + childHolder.icon.setImageResource(R.drawable.icon_gauze); + } else { + childHolder.title.setText(R.string.curtains); + childHolder.icon.setImageResource(R.drawable.icon_curtains); + } + } + if (mDatas.get(groupPosition).get(childPosition).getConndeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getConndeviceAddress().toString()); + } else if (mDatas.get(groupPosition).get(childPosition).getDeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getDeviceAddress().toString()); + } else { + childHolder.position.setText(R.string.no_position); + } + break; + case SWITCH_TAG: + switch (mDatas.get(groupPosition).get(childPosition).getSubType()) { + case "0"://插座 + childHolder.title.setText(R.string.chazuo); + childHolder.icon.setImageResource(R.drawable.icon_chazuo); + break; + case "1"://台灯 + childHolder.title.setText(R.string.tai_deng); + childHolder.icon.setImageResource(R.drawable.icon_desklamp); + break; + case "2"://热水器(厨电) + childHolder.title.setText(R.string.chu_dian); + childHolder.icon.setImageResource(R.drawable.icon_kitchenpower); + break; + case "3"://墙壁插座 + childHolder.title.setText(R.string.bi_cha); + childHolder.icon.setImageResource(R.drawable.icon_wallsocket); + break; + case "4"://热水壶 + childHolder.title.setText(R.string.reshui_hu); + childHolder.icon.setImageResource(R.drawable.icon_kettle); + break; + case "5"://取暖器 + childHolder.title.setText(R.string.qunuan_qi); + childHolder.icon.setImageResource(R.drawable.icon_heater); + break; + case "6"://电蚊香 + childHolder.title.setText(R.string.dianwen_xiang); + childHolder.icon.setImageResource(R.drawable.icon_dwx); + break; + default: + childHolder.title.setText(R.string.chazuo); + childHolder.icon.setImageResource(R.drawable.icon_chazuo); + break; + } + if (mDatas.get(groupPosition).get(childPosition).getConndeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getConndeviceAddress().toString()); + } else if (mDatas.get(groupPosition).get(childPosition).getDeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getDeviceAddress().toString()); + } else { + childHolder.position.setText(R.string.no_position); + } + break; + case DOOR_LOCK_TAG: + childHolder.icon.setImageResource(SAFE_IMG[3]); + childHolder.title.setText(R.string.door_warn); + if (mDatas.get(groupPosition).get(childPosition).getConndeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getConndeviceAddress().toString()); + } else if (mDatas.get(groupPosition).get(childPosition).getDeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getDeviceAddress().toString()); + } else { + childHolder.position.setText(R.string.no_position); + } + break; + case INFRARED_TAG: + childHolder.icon.setImageResource(SAFE_IMG[4]); + childHolder.title.setText(R.string.red_warn); + if (mDatas.get(groupPosition).get(childPosition).getConndeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getConndeviceAddress().toString()); + } else if (mDatas.get(groupPosition).get(childPosition).getDeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getDeviceAddress().toString()); + } else { + childHolder.position.setText(R.string.no_position); + } + break; + case WINDOW_OPENER: + childHolder.icon.setImageResource(R.drawable.icon_window_opener); + childHolder.title.setText("开窗器"); + if (mDatas.get(groupPosition).get(childPosition).getConndeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getConndeviceAddress().toString()); + } else if (mDatas.get(groupPosition).get(childPosition).getDeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getDeviceAddress().toString()); + } else { + childHolder.position.setText(R.string.no_position); + } + break; + case MULTIFUNCTIONAL_CONTROLLER: + switch (mDatas.get(groupPosition).get(childPosition).getSubType()) { + case "0": + childHolder.icon.setImageResource(R.drawable.icon_curtains); + break; + case "1": + childHolder.icon.setImageResource(R.drawable.icon_gauze); + break; + case "2": + childHolder.icon.setImageResource(R.drawable.icon_window_opener); + break; + default: + childHolder.icon.setImageResource(R.drawable.icon_multifunctional); + break; + } + childHolder.title.setText("多功能控制器"); + if (mDatas.get(groupPosition).get(childPosition).getConndeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getConndeviceAddress().toString()); + } else if (mDatas.get(groupPosition).get(childPosition).getDeviceAddress() != null) { + childHolder.position.setText(mDatas.get(groupPosition).get(childPosition).getDeviceAddress().toString()); + } else { + childHolder.position.setText(R.string.no_position); + } + break; + } + + if (mDatas.get(groupPosition).get(childPosition).getDeviceName().isEmpty()) { + childHolder.title.setText(mDatas.get(groupPosition).get(childPosition).getDeviceName()); + } + + if (mDatas.get(groupPosition).get(childPosition).getOpenFlag() == 1) { + childHolder.mDeviceChoose.setChecked(true); + childHolder.rl_innet_bg.setAlpha(1.0f); + childHolder.mControlOpen.setEnabled(true); + } else { + childHolder.mDeviceChoose.setChecked(false); + childHolder.rl_innet_bg.setAlpha(0.5f); + childHolder.mControlOpen.setEnabled(false); + } + + if (mDatas.get(groupPosition).get(childPosition).getCmdType().equals("1")) { + childHolder.mControlOpen.setChecked(true); + childHolder.mControlOpenTv.setText(R.string.timing_open); + } else { + childHolder.mControlOpen.setChecked(false); + childHolder.mControlOpenTv.setText(R.string.timing_close); + } + + final SlideView finalSlideView = slideView; + childHolder.deleteHolder.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + mExbandItemClickListener.onClick(finalSlideView, groupPosition, childPosition, 0, 0, mDatas.get(groupPosition).get(childPosition).getId()); + } + } + }); + + childHolder.mControlOpen.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + if (childHolder.mControlOpen.isChecked()) { + mExbandItemClickListener.onClick(finalSlideView, groupPosition, childPosition, 1, 0, mDatas.get(groupPosition).get(childPosition).getId()); + childHolder.mControlOpenTv.setText(R.string.timing_open); + } else { + mExbandItemClickListener.onClick(finalSlideView, groupPosition, childPosition, 1, 1, mDatas.get(groupPosition).get(childPosition).getId()); + childHolder.mControlOpenTv.setText(R.string.timing_close); + } + } + } + }); + childHolder.mDeviceChoose.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mExbandItemClickListener != null) { + if (!childHolder.mDeviceChoose.isChecked()) { + //删除 + mExbandItemClickListener.onClick(finalSlideView, groupPosition, childPosition, 0, 0, mDatas.get(groupPosition).get(childPosition).getId()); + + childHolder.mDeviceChoose.setChecked(false); + childHolder.rl_innet_bg.setAlpha(0.5f); + childHolder.mControlOpen.setEnabled(false); + } else { + //增加 + StringBuilder stringBuilderAdd = new StringBuilder(); + stringBuilderAdd.append(mDatas.get(groupPosition).get(childPosition).getZiId()); + stringBuilderAdd.append("_"); + stringBuilderAdd.append(mDatas.get(groupPosition).get(childPosition).getDeviceType()); + stringBuilderAdd.append("_"); + stringBuilderAdd.append(mDatas.get(groupPosition).get(childPosition).getConndeviceId()); + mExbandItemClickListener.onClick(finalSlideView, groupPosition, childPosition, 0, 1, String.valueOf(stringBuilderAdd)); + + childHolder.mDeviceChoose.setChecked(true); + childHolder.rl_innet_bg.setAlpha(1.0f); + childHolder.mControlOpen.setEnabled(true); + } + } + } + }); + return slideView; + } + + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + + //点击事件 + public void setmOnExpandItemClickListener(OnExbandItemClickListener mExbandItemClickListener) { + this.mExbandItemClickListener = mExbandItemClickListener; + } + + private static class ParentHolder { + public TextView devicePosition; + private ImageView arrowIv; + + ParentHolder(View view) { + devicePosition = (TextView) view.findViewById(R.id.tv_device_position); + arrowIv = (ImageView) view.findViewById(R.id.iv_arrow_down_up); + } + } + + private static class ChildHolder { + public ImageView icon; + public TextView title; + public TextView deleteHolder; + public TextView position; + public TextView mControlOpenTv; + private CheckBox mControlOpen; + private CheckBox mDeviceChoose; + private RelativeLayout rl_innet_bg; + + ChildHolder(View view) { + icon = (ImageView) view.findViewById(R.id.icon); + title = (TextView) view.findViewById(R.id.tv_child_device); + position = (TextView) view.findViewById(R.id.tv_position); + deleteHolder = (TextView) view.findViewById(R.id.deleteDevice); + mControlOpenTv = (TextView) view.findViewById(R.id.tv_control_open); + mControlOpen = (CheckBox) view.findViewById(R.id.cb_choose_device); + mDeviceChoose = (CheckBox) view.findViewById(R.id.cb_device_choose); + rl_innet_bg = (RelativeLayout) view.findViewById(R.id.rl_innet_bg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/model/ModelSettingActivity.java b/app/src/main/java/com/yonsz/z1/model/ModelSettingActivity.java new file mode 100644 index 0000000..3776289 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/model/ModelSettingActivity.java @@ -0,0 +1,373 @@ +package com.yonsz.z1.model; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entitya2.ModelOpenEntity; +import com.yonsz.z1.database.entity.entitya2.ModelSetEntity; +import com.yonsz.z1.device.DeviceExpandableListView; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.id.tv_che_dan; +import static com.yonsz.z1.net.Constans.DEL_MODEL_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.DEL_MODEL_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_CONTROL_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_BASIC; + +/** + * Created by Administrator on 2017/11/7. + */ + +public class ModelSettingActivity extends BaseActivity { + private LoadingDialog mLoadingDialog; + private TitleView mTitleView; + private int model; + private TextView modelNameTv, modelDeclareTv; + private CheckBox modelOpenCb; + private DeviceExpandableListView mListView; + private ModelSetAdapter mModelSetAdapter; + private List mObjEntity; + private ImageView modelAddIv; + private TextView tvDeclare; + private TextView tv_1; + private RelativeLayout mainDeclare; + private RelativeLayout noDeviceRl; + private RelativeLayout allAddRl; + private RelativeLayout topDecalre; + private String respone; + private List mChildData = new ArrayList<>(); + private List> mDatas = new ArrayList<>(); + private String ziId; + private String isHaveDevice; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_model_setting); + initView(); + initListener(); + selectModelDetail(); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + public void onResume() { + super.onResume(); + selectModelDetail(); + } + + private void initView() { + model = (int) getIntent().getExtras().get("model"); + isHaveDevice = (String) getIntent().getExtras().get("isHaveDevice"); + modelAddIv = (ImageView) findViewById(R.id.iv_time_set_add); + modelNameTv = (TextView) findViewById(R.id.tv_model_name); + modelDeclareTv = (TextView) findViewById(R.id.tv_model_declare); + tvDeclare = (TextView) findViewById(tv_che_dan); + tv_1 = (TextView) findViewById(R.id.tv_1); + topDecalre = (RelativeLayout) findViewById(R.id.rl_declare); + mainDeclare = (RelativeLayout) findViewById(R.id.rl_text_declare); + noDeviceRl = (RelativeLayout) findViewById(R.id.rl_text_declare_no_device); + allAddRl = (RelativeLayout) findViewById(R.id.rl_time_set_add); + modelOpenCb = (CheckBox) findViewById(R.id.cb_model_open); + mTitleView = (TitleView) findViewById(R.id.title_model_set); + mTitleView.setHead(R.string.model_setting); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + switch (model) { + case 1: + modelNameTv.setText("回家模式"); + modelDeclareTv.setText("可开启灯光、空调等设备"); + tvDeclare.setText("触发“回家模式”后,执行以下动作"); + tv_1.setText("触发“回家模式”后,所要"); + break; + case 2: + modelNameTv.setText("离家模式"); + modelDeclareTv.setText("可关闭灯光、空调等"); + tvDeclare.setText("触发“离家模式”后,执行以下动作"); + tv_1.setText("触发“离家模式”后,所要"); + break; + case 3: + modelNameTv.setText("睡眠模式"); + modelDeclareTv.setText("可关闭电视、开启夜灯等"); + tvDeclare.setText("触发“睡眠模式”后,执行以下动作"); + tv_1.setText("触发“睡眠模式”后,所要"); + break; + case 4: + modelNameTv.setText("起床模式"); + modelDeclareTv.setText("关闭夜灯、打开窗帘等"); + tvDeclare.setText("触发“起床模式”后,执行以下动作"); + tv_1.setText("触发“起床模式”后,所要"); + break; + } + mListView = (DeviceExpandableListView) findViewById(R.id.expandablelist); + mObjEntity = new ArrayList<>(); + + if (isHaveDevice.equals("1")) { + + } else { + modelOpenCb.setEnabled(false); + noDeviceRl.setVisibility(View.VISIBLE); + allAddRl.setVisibility(View.GONE); + } + } + + + private void initListener() { + modelAddIv.setOnClickListener(this); + modelOpenCb.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_time_set_add: + Intent intent = new Intent(ModelSettingActivity.this, ChooseDeviceActivity.class); + intent.putExtra("model", model); + intent.putExtra("respone", respone); + startActivity(intent); + break; + case R.id.cb_model_open: + if (modelOpenCb.isChecked()) { + updateModelBasic("1"); + } else { + updateModelBasic("0"); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECT_MODEL_DETAIL_SUCCESS: + if (null != msg.obj) { + if (isHaveDevice.equals("1")) { + ModelSetEntity modelSetEntity = (ModelSetEntity) msg.obj; + if (null != modelSetEntity.getData()) { + if (String.valueOf(modelSetEntity.getData().getFlag()).equals("1")) { + modelOpenCb.setChecked(true); + } else { + modelOpenCb.setChecked(false); + } + setViewData(modelSetEntity); + } + } else { + + } + } else { + + } + break; + case UPDATE_MODEL_BASIC_SUCCESS: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ModelOpenEntity obj = (ModelOpenEntity) msg.obj; + if (null != obj.getObj()) { + if (obj.getObj().getFlag() == 1) { + mListView.setVisibility(View.VISIBLE); + mainDeclare.setVisibility(View.GONE); + topDecalre.setVisibility(View.VISIBLE); + selectModelDetail(); + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + } + } + break; + case UPDATE_MODEL_BASIC_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case SELECT_MODEL_DETAIL_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case DEL_MODEL_CONTROL_SUCCESS: + selectModelDetail(); + mListView.deferNotifyDataSetChanged(); + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + break; + case DEL_MODEL_CONTROL_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_MODEL_CONTROL_SUCCESS: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + break; + case UPDATE_MODEL_CONTROL_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void setViewData(final ModelSetEntity modelSetEntity) { + mObjEntity = modelSetEntity.getData().getControlList(); + convertList(mObjEntity); + if (String.valueOf(modelSetEntity.getData().getFlag()).equals("1")) { + if (mObjEntity != null) { + mListView.setVisibility(View.VISIBLE); + mainDeclare.setVisibility(View.GONE); + topDecalre.setVisibility(View.VISIBLE); + mModelSetAdapter = new ModelSetAdapter(this, mObjEntity); + mListView.setAdapter(mModelSetAdapter); + for (int i = 0; i < mModelSetAdapter.getGroupCount(); i++) { + mListView.expandGroup(i); + } + mModelSetAdapter.setmOnExpandItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id) { + switch (i) { + case 0: + //删除 + delModelControl(id); + break; + case 1: + //开关 + if (j == 0) { + updateModelControl(mDatas.get(parentPosition).get(childPosition).getId().toString(), "1"); + } else { + updateModelControl(mDatas.get(parentPosition).get(childPosition).getId().toString(), "0"); + } + break; + } + } + }); + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + } + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + } + } + + private List> convertList(List mObjEntity) { + if (mObjEntity != null) { + ziId = mObjEntity.get(0).getZiId().toString(); + + for (int i = 0; i < mObjEntity.size(); i++) { + if (mObjEntity.get(i).getZiId().equals(ziId)) { + mChildData.add(mObjEntity.get(i)); + } else { + ziId = mObjEntity.get(i).getZiId().toString(); + mDatas.add(mChildData); + mChildData = new ArrayList<>(); + mChildData.add(mObjEntity.get(i)); + } + if (mChildData.size() == mObjEntity.size()) { + mDatas.add(mChildData); + } else if (i == mObjEntity.size() - 1) { + mDatas.add(mChildData); + } + } + } + return mDatas; + } + + + private void delModelControl(String controlId) { + + } + + private void updateModelControl(String controlId, String cmdType) { + } + + private void updateModelBasic(String flag) { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + map.put("modelType", String.valueOf(model)); + map.put("flag", flag); + netWorkUtil.requestPostByAsynewApi(UPDATE_MODEL_BASIC, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelBasic", "ShareDeviceActivity onSuccess()" + respone); + ModelOpenEntity obj = JSON.parseObject(respone, ModelOpenEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void selectModelDetail() { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/model/ModelTimeSetActivity.java b/app/src/main/java/com/yonsz/z1/model/ModelTimeSetActivity.java new file mode 100644 index 0000000..3f1637d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/model/ModelTimeSetActivity.java @@ -0,0 +1,303 @@ +package com.yonsz.z1.model; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuBridge; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItem; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entitya2.AddModelEntity; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.DEL_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.SELECT_MODEL_TIME; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_TIME; + +/** + * Created by Administrator on 2017/11/6. + */ + +public class ModelTimeSetActivity extends BaseActivity implements SwipeItemClickListener { + private TitleView mTitleView; + private SwipeMenuRecyclerView mRecyclerView; + private List mDatas; + private ModelTimeSetAdapter mModelTimeSetAdapter; + private ImageView timeAdd; + private String isHaveDevice; + private RelativeLayout noDeviceRl; + private RelativeLayout allAddRl; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_model_time_set); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + selectModelTime(); + } + + private void initView() { + isHaveDevice = (String) getIntent().getExtras().get("isHaveDevice"); + noDeviceRl = (RelativeLayout) findViewById(R.id.rl_text_declare_no_device); + allAddRl = (RelativeLayout) findViewById(R.id.rl_time_set_add); + timeAdd = (ImageView) findViewById(R.id.iv_time_set_add); + mTitleView = (TitleView) findViewById(R.id.title_model_time_set); + mTitleView.setHead(R.string.add_time_set); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mDatas = new ArrayList(); + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_set_model_time_list); + timeAdd.setOnClickListener(this); + + if (isHaveDevice.equals("1")) { + mRecyclerView.setVisibility(View.VISIBLE); + } else { + noDeviceRl.setVisibility(View.VISIBLE); + allAddRl.setVisibility(View.GONE); + mRecyclerView.setVisibility(View.GONE); + } + } + + private void selectModelTime() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + netWorkUtil.requestGetByAsy(SELECT_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectModelTime", "ShareDeviceActivity onSuccess()" + respone); + TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_time_set_add: + Intent intent = new Intent(this, TimeSettingActivity.class); + intent.putExtra("flag", false); + startActivity(intent); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECT_MODEL_TIME_SUCCESS: + TimeSetEntity timeSetEntity = (TimeSetEntity) msg.obj; + mDatas = timeSetEntity.getObj(); + mModelTimeSetAdapter = new ModelTimeSetAdapter(this, mDatas); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + if (isHaveDevice.equals("1")) { + allAddRl.setVisibility(View.VISIBLE); + mRecyclerView.setVisibility(View.VISIBLE); + } else { + allAddRl.setVisibility(View.GONE); + mRecyclerView.setVisibility(View.GONE); + } + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setSwipeMenuCreator(swipeMenuCreator); + mRecyclerView.setSwipeMenuItemClickListener(mMenuItemClickListener); + mRecyclerView.setAdapter(mModelTimeSetAdapter); + mRecyclerView.setSwipeItemClickListener(this); + + mModelTimeSetAdapter.setmOnItemClickListener(new OnRecyclerItemClickListener() { + @Override + public void onClick(View view, int position, List photos, int i) { + updateModelTime(mDatas.get(position).getId().toString(), i); + } + + @Override + public void onLongClick(View view, int position) { + + } + }); + break; + case DEL_MODEL_TIME_SUCCESS: + selectModelTime(); + break; + case UPDATE_MODEL_TIME_SUCCESS: + AddModelEntity addModelEntity = (AddModelEntity) msg.obj; + ToastUtil.show(this, addModelEntity.getMsg().toString()); + break; + case UPDATE_MODEL_TIME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void updateModelTime(String id, int openFlag) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", id); + map.put("openFlag", String.valueOf(openFlag)); + netWorkUtil.requestPostByAsynewApi(UPDATE_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelTime", "ShareDeviceActivity onSuccess()" + respone); + AddModelEntity obj = JSON.parseObject(respone, AddModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.x60); + // 1. MATCH_PARENT 自适应高度,保持和Item一样高; + // 2. 指定具体的高,比如80; + // 3. WRAP_CONTENT,自身高度,不推荐; + int height = ViewGroup.LayoutParams.MATCH_PARENT; + // 添加右侧的,如果不添加,则右侧不会出现菜单。 + { + SwipeMenuItem deleteItem = new SwipeMenuItem(ModelTimeSetActivity.this) + .setBackground(R.color.z1_ff0000) + .setText(R.string.delete) + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + swipeRightMenu.addMenuItem(deleteItem);// 添加菜单到右侧。 + } + } + }; + /** + * RecyclerView的Item的Menu点击监听。 + */ + private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() { + @Override + public void onItemClick(SwipeMenuBridge menuBridge) { + menuBridge.closeMenu(); + + int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。 + final int adapterPosition = menuBridge.getAdapterPosition(); // RecyclerView的Item的position。 + int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。 + + if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) { + if (DensityUtil.isNetworkConnected(ModelTimeSetActivity.this)) { + ConfirmDialog dialog = new ConfirmDialog(ModelTimeSetActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + delModelTime(mDatas.get(adapterPosition).getId().toString()); + break; + } + } + }); + dialog.setContent("确认删除时间设置?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } else { + ToastUtil.show(ModelTimeSetActivity.this, R.string.net_error); + } + } + } + }; + + private void delModelTime(String id) { + + } + + @Override + public void onItemClick(View itemView, int position) { + //这个是去修好 + Intent intent = new Intent(this, TimeSettingActivity.class); + intent.putExtra("flag", true); + Bundle bundle = new Bundle(); + bundle.putSerializable("mDatas", mDatas.get(position)); + intent.putExtras(bundle); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/yonsz/z1/model/ModelTimeSetAdapter.java b/app/src/main/java/com/yonsz/z1/model/ModelTimeSetAdapter.java new file mode 100644 index 0000000..48765f7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/model/ModelTimeSetAdapter.java @@ -0,0 +1,155 @@ +package com.yonsz.z1.model; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.listener.OnRecyclerItemClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2017/11/6. + */ + +class ModelTimeSetAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mDatas; + private OnRecyclerItemClickListener mOnItemClickListener; + + public ModelTimeSetAdapter(Context mContext, List mDatas) { + super(); + this.mContext = mContext; + this.mDatas = mDatas; + } + + + @Override + public ModelTimeSetAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_model_time_set, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(ModelTimeSetAdapter.MessageViewHolder holder, int position) { + if (mDatas != null) { + holder.setViews(position); + } + } + + @Override + public int getItemCount() { + return mDatas != null ? mDatas.size() : 0; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView modelName; + private TextView onceTime; + private TextView modelStage; + private CheckBox mCheckBoxOpen; + private TextView weekTv; + private RelativeLayout rootView; + + public MessageViewHolder(View view) { + super(view); + modelName = (TextView) itemView.findViewById(R.id.tv_model_name); + onceTime = (TextView) itemView.findViewById(R.id.tv_once_time); + modelStage = (TextView) itemView.findViewById(R.id.tv_model_stage); + weekTv = (TextView) itemView.findViewById(R.id.tv_week); + mCheckBoxOpen = (CheckBox) itemView.findViewById(R.id.cb_time_open); + rootView = (RelativeLayout) itemView.findViewById(R.id.root_view); + } + + public void setViews(final int position) { + TimeSetEntity.ObjEntity objEntity = mDatas.get(position); + if (objEntity.getExecTime() != null) { + onceTime.setText(objEntity.getExecTime()); + } + if (objEntity.getOpenFlag() == 0) { + modelStage.setText(R.string.timing_close); + mCheckBoxOpen.setChecked(false); + } else { + modelStage.setText(R.string.timing_open); + mCheckBoxOpen.setChecked(true); + } + switch (objEntity.getModelType()) { + case "1": + modelName.setText("回家模式"); + break; + case "2": + modelName.setText("离家模式"); + break; + case "3": + modelName.setText("睡眠模式"); + break; + case "4": + modelName.setText("起床模式"); + break; + } + if (objEntity.getOnceFlag() == 0) { + if (objEntity.getWeekNum1() != null) { + String str = ""; + if (objEntity.getWeekNum1().equals("1")) { + str += "周一 "; + } else { + } + if (objEntity.getWeekNum2().equals("1")) { + str += "周二 "; + } else { + } + if (objEntity.getWeekNum3().equals("1")) { + str += "周三 "; + } else { + } + if (objEntity.getWeekNum4().equals("1")) { + str += "周四 "; + } else { + } + if (objEntity.getWeekNum5().equals("1")) { + str += "周五 "; + } else { + } + if (objEntity.getWeekNum6().equals("1")) { + str += "周六 "; + } else { + } + if (objEntity.getWeekNum7().equals("1")) { + str += "周天"; + } else { + } + weekTv.setText(str); + } + } else { + weekTv.setText(R.string.once_time); + } + + mCheckBoxOpen.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + List photos = null; + if (mCheckBoxOpen.isChecked()) { + mOnItemClickListener.onClick(rootView, position, photos, 1); + modelStage.setText(R.string.timing_open); + } else { + mOnItemClickListener.onClick(rootView, position, photos, 0); + modelStage.setText(R.string.timing_close); + } + } + } + }); + } + } + + public void setmOnItemClickListener(OnRecyclerItemClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/model/ReapetTimeActivity.java b/app/src/main/java/com/yonsz/z1/model/ReapetTimeActivity.java new file mode 100644 index 0000000..3e81eaf --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/model/ReapetTimeActivity.java @@ -0,0 +1,295 @@ +package com.yonsz.z1.model; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.annotation.NonNull; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.fragment.scene.TimeSettingFragment; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.MODEL_REAPEAT; + +/** + * Created by Administrator on 2017/11/7. + */ + +public class ReapetTimeActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout oneRl, twoRl, threeRl, fourRl, fiveRl, sixRl, sevenRl; + private ImageView oneIv, twoIv, threeIv, fourIv, fiveIv, sixIv, sevenIv; + private String week = ""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_repeat_time); + initView(); + initListener(); + } + + private void initListener() { + oneRl.setOnClickListener(this); + twoRl.setOnClickListener(this); + threeRl.setOnClickListener(this); + fourRl.setOnClickListener(this); + fiveRl.setOnClickListener(this); + sixRl.setOnClickListener(this); + sevenRl.setOnClickListener(this); + } + + @Override + public void onBackPressed() { + String str = getString(); + week = getWeek(); + Intent intent = new Intent(ReapetTimeActivity.this, TimeSettingFragment.class); + intent.putExtra("modelRepeat", str); + intent.putExtra("week", week); + setResult(MODEL_REAPEAT, intent); + finish(); + } + + private String getWeek() { + String str = ""; + String week = ""; + if (oneIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Monday); + week += "1"; + } else { + week += "0"; + } + if (twoIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Tuesday); + week += "1"; + } else { + week += "0"; + } + if (threeIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Wednesday); + week += "1"; + } else { + week += "0"; + } + if (fourIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Thursday); + week += "1"; + } else { + week += "0"; + } + if (fiveIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Friday); + week += "1"; + } else { + week += "0"; + } + if (sixIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Saturday); + week += "1"; + } else { + week += "0"; + } + if (sevenIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Sunday); + week += "1"; + } else { + week += "0"; + } + return week; + } + + @NonNull + private String getString() { + String str = ""; + if (oneIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Monday); + week += "1"; + } else { + week += "0"; + } + if (twoIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Tuesday); + week += "1"; + } else { + week += "0"; + } + if (threeIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Wednesday); + week += "1"; + } else { + week += "0"; + } + if (fourIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Thursday); + week += "1"; + } else { + week += "0"; + } + if (fiveIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Friday); + week += "1"; + } else { + week += "0"; + } + if (sixIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Saturday); + week += "1"; + } else { + week += "0"; + } + if (sevenIv.getVisibility() == View.VISIBLE) { + str += getString(R.string.Sunday); + week += "1"; + } else { + week += "0"; + } + return str; + } + + private void initView() { + oneRl = (RelativeLayout) findViewById(R.id.rl_one); + twoRl = (RelativeLayout) findViewById(R.id.rl_two); + threeRl = (RelativeLayout) findViewById(R.id.rl_three); + fourRl = (RelativeLayout) findViewById(R.id.rl_four); + fiveRl = (RelativeLayout) findViewById(R.id.rl_five); + sixRl = (RelativeLayout) findViewById(R.id.rl_six); + sevenRl = (RelativeLayout) findViewById(R.id.rl_seven); + + oneIv = (ImageView) findViewById(R.id.iv_one); + twoIv = (ImageView) findViewById(R.id.iv_two); + threeIv = (ImageView) findViewById(R.id.iv_three); + fourIv = (ImageView) findViewById(R.id.iv_four); + fiveIv = (ImageView) findViewById(R.id.iv_five); + sixIv = (ImageView) findViewById(R.id.iv_six); + sevenIv = (ImageView) findViewById(R.id.iv_seven); + + mTitleView = (TitleView) findViewById(R.id.title_repeat_time); + mTitleView.setHead(R.string.repeat_time_set); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + String str = getString(); + week = getWeek(); + Intent intent = new Intent(ReapetTimeActivity.this, TimeSettingActivity.class); + intent.putExtra("modelRepeat", str); + intent.putExtra("week", week); + setResult(MODEL_REAPEAT, intent); + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + if (getIntent().getExtras() != null) { + String repeatTime = (String) getIntent().getExtras().get("repeatTime"); + if (repeatTime.substring(0, 1).equals("1")) { + oneIv.setVisibility(View.VISIBLE); + } else { + oneIv.setVisibility(View.INVISIBLE); + } + if (repeatTime.substring(1, 2).equals("1")) { + twoIv.setVisibility(View.VISIBLE); + } else { + twoIv.setVisibility(View.INVISIBLE); + } + if (repeatTime.substring(2, 3).equals("1")) { + threeIv.setVisibility(View.VISIBLE); + } else { + threeIv.setVisibility(View.INVISIBLE); + } + if (repeatTime.substring(3, 4).equals("1")) { + fourIv.setVisibility(View.VISIBLE); + } else { + fourIv.setVisibility(View.INVISIBLE); + } + if (repeatTime.substring(4, 5).equals("1")) { + fiveIv.setVisibility(View.VISIBLE); + } else { + fiveIv.setVisibility(View.INVISIBLE); + } + if (repeatTime.substring(5, 6).equals("1")) { + sixIv.setVisibility(View.VISIBLE); + } else { + sixIv.setVisibility(View.INVISIBLE); + } + if (repeatTime.substring(6, 7).equals("1")) { + sevenIv.setVisibility(View.VISIBLE); + } else { + sevenIv.setVisibility(View.INVISIBLE); + } + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rl_one: + if (oneIv.getVisibility() == View.VISIBLE) { + oneIv.setVisibility(View.INVISIBLE); + } else { + oneIv.setVisibility(View.VISIBLE); + } + break; + case R.id.rl_two: + if (twoIv.getVisibility() == View.VISIBLE) { + twoIv.setVisibility(View.INVISIBLE); + } else { + twoIv.setVisibility(View.VISIBLE); + } + break; + case R.id.rl_three: + if (threeIv.getVisibility() == View.VISIBLE) { + threeIv.setVisibility(View.INVISIBLE); + } else { + threeIv.setVisibility(View.VISIBLE); + } + break; + case R.id.rl_four: + if (fourIv.getVisibility() == View.VISIBLE) { + fourIv.setVisibility(View.INVISIBLE); + } else { + fourIv.setVisibility(View.VISIBLE); + } + break; + case R.id.rl_five: + if (fiveIv.getVisibility() == View.VISIBLE) { + fiveIv.setVisibility(View.INVISIBLE); + } else { + fiveIv.setVisibility(View.VISIBLE); + } + break; + case R.id.rl_six: + if (sixIv.getVisibility() == View.VISIBLE) { + sixIv.setVisibility(View.INVISIBLE); + } else { + sixIv.setVisibility(View.VISIBLE); + } + break; + case R.id.rl_seven: + if (sevenIv.getVisibility() == View.VISIBLE) { + sevenIv.setVisibility(View.INVISIBLE); + } else { + sevenIv.setVisibility(View.VISIBLE); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/model/SelectDeviceActivity.java b/app/src/main/java/com/yonsz/z1/model/SelectDeviceActivity.java new file mode 100644 index 0000000..a9181cc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/model/SelectDeviceActivity.java @@ -0,0 +1,50 @@ +package com.yonsz.z1.model; + +import android.os.Bundle; +import android.os.Message; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2017/11/6. + */ + +public class SelectDeviceActivity extends BaseActivity { + private TitleView mTitleView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_select_device); + initView(); + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.title_select_device); + mTitleView.setHead(R.string.select_device); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/model/TimeSettingActivity.java b/app/src/main/java/com/yonsz/z1/model/TimeSettingActivity.java new file mode 100644 index 0000000..8acbe80 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/model/TimeSettingActivity.java @@ -0,0 +1,389 @@ +package com.yonsz.z1.model; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.bigkoo.pickerview.TimePickerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entitya2.AddModelEntity; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; + +import static com.yonsz.z1.R.id.tv_model_select; +import static com.yonsz.z1.net.Constans.ADD_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.ADD_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.MODEL_REAPEAT; +import static com.yonsz.z1.net.Constans.MODEL_SELECT; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.ADD_MODEL_TIME; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_TIME; + +/** + * Created by Administrator on 2017/11/6. + */ + +public class TimeSettingActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout modelSelectRl, repeatTimeRl, timeSetRl; + private TextView timeSetTv, modelSelectTv, onceTimeTv; + private String modelType; + private boolean isModify; + private String useId; + private TimeSetEntity.ObjEntity mObjEntity; + private String week = ""; + private LoadingDialog mLoadingDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_time_setting); + initView(); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void initView() { + isModify = (Boolean) getIntent().getExtras().get("flag"); + if (isModify) { + mObjEntity = (TimeSetEntity.ObjEntity) getIntent().getExtras().get("mDatas"); + useId = mObjEntity.getId().toString(); + } else { + + } + modelSelectRl = (RelativeLayout) findViewById(R.id.rl_model_select); + repeatTimeRl = (RelativeLayout) findViewById(R.id.rl_repeat_time); + onceTimeTv = (TextView) findViewById(R.id.tv_once_time); + timeSetRl = (RelativeLayout) findViewById(R.id.rl_time_set); + timeSetTv = (TextView) findViewById(R.id.tv_time_set); + modelSelectTv = (TextView) findViewById(tv_model_select); + mTitleView = (TitleView) findViewById(R.id.title_time_set); + mTitleView.setHead(R.string.time_set); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (isModify) { + updateModelTime(); + } else { + addModelTime(); + } + } + + @Override + public void onFunctionText() { + + } + }); + modelSelectRl.setOnClickListener(this); + repeatTimeRl.setOnClickListener(this); + timeSetRl.setOnClickListener(this); + + if (mObjEntity != null) { + timeSetTv.setText(mObjEntity.getExecTime().toString()); + modelType = mObjEntity.getModelType().toString(); + switch (modelType) { + case "1": + modelSelectTv.setText("回家模式"); + break; + case "2": + modelSelectTv.setText("离家模式"); + break; + case "3": + modelSelectTv.setText("睡眠模式"); + break; + case "4": + modelSelectTv.setText("起床模式"); + break; + } + + if (mObjEntity.getOnceFlag() == 0) { + String str = ""; + if (mObjEntity.getWeekNum1().equals("1")) { + str += "周一 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum2().equals("1")) { + str += "周二 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum3().equals("1")) { + str += "周三 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum4().equals("1")) { + str += "周四 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum5().equals("1")) { + str += "周五 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum6().equals("1")) { + str += "周六 "; + week += "1"; + } else { + week += "0"; + } + if (mObjEntity.getWeekNum7().equals("1")) { + str += "周天"; + week += "1"; + } else { + week += "0"; + } + onceTimeTv.setText(str); + } + } + } + + + @Override + public void onClick(View v) { + Intent intent; + super.onClick(v); + switch (v.getId()) { + case R.id.rl_model_select: + intent = new Intent(this, ModelSelectActivity.class); + intent.putExtra("modelNow", modelSelectTv.getText().toString().trim()); + startActivityForResult(intent, MODEL_SELECT); + break; + case R.id.rl_repeat_time: + intent = new Intent(this, ReapetTimeActivity.class); + if (week.length() == 7) { + intent.putExtra("repeatTime", week); + } + startActivityForResult(intent, MODEL_REAPEAT); + break; + case R.id.rl_time_set: + setTime(timeSetTv); + break; + } + } + + private void setTime(final TextView textView) { + TimePickerView pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() { + @Override + public void onTimeSelect(Date date, View v) {//选中事件回调 + textView.setText(getTime(date)); + // updateOnceTimer(id, "1", textView); + } + })//年月日时分秒 的显示与否,不设置则默认全部显示 + .setType(new boolean[]{false, false, false, true, true, false}) + .setLabel("", "", "", "点", "分", "") + .isCenterLabel(false) + .setDividerColor(Color.DKGRAY) + .setContentSize(21) + .setBackgroundId(0x00FFFFFF) //设置外部遮罩颜色 + .setDecorView(null) + .build(); + pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。 + pvTime.show(); + } + + private String getTime(Date date) {//可根据需要自行截取数据显示 + SimpleDateFormat format = new SimpleDateFormat("HH:mm"); + return format.format(date); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_MODEL_TIME_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + finish(); + AddModelEntity addModelEntity = (AddModelEntity) msg.obj; + // ToastUtil.show(this, addModelEntity.getMsg().toString()); + // mHandler.postDelayed(new Runnable() { + // @Override + // public void run() { + // finish(); + // } + // }, 1000); + break; + case ADD_MODEL_TIME_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_MODEL_TIME_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + finish(); + AddModelEntity addModelEntity1 = (AddModelEntity) msg.obj; + // ToastUtil.show(this, addModelEntity1.getMsg().toString()); + // mHandler.postDelayed(new Runnable() { + // @Override + // public void run() { + // finish(); + // } + // }, 1000); + break; + case UPDATE_MODEL_TIME_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void updateModelTime() { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", useId); + if (modelType != null) { + map.put("modelType", modelType); + } else { + map.put("modelType", "1"); + } + map.put("execTime", timeSetTv.getText().toString()); + if (onceTimeTv.getText().toString().equals(getString(R.string.once_time))) { + map.put("onceFlag", "1"); + } else { + map.put("week", week); + map.put("onceFlag", "0"); + } + netWorkUtil.requestPostByAsynewApi(UPDATE_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelTime", "ShareDeviceActivity onSuccess()" + respone); + AddModelEntity obj = JSON.parseObject(respone, AddModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private void addModelTime() { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (modelType != null) { + map.put("modelType", modelType); + } else { + map.put("modelType", "1"); + } + map.put("execTime", timeSetTv.getText().toString()); + if (onceTimeTv.getText().toString().equals(getString(R.string.once_time))) { + map.put("onceFlag", "1"); + } else { + map.put("week", week); + map.put("onceFlag", "0"); + } + netWorkUtil.requestPostByAsynewApi(ADD_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addModelTime", "ShareDeviceActivity onSuccess()" + respone); + AddModelEntity obj = JSON.parseObject(respone, AddModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODEL_SELECT: + if (data != null && data.getExtras().get("modelSelect") != null) { + modelSelectTv.setText(data.getExtras().get("modelSelect").toString().trim()); + switch (data.getExtras().get("modelSelect").toString().trim()) { + case "回家模式": + modelType = "1"; + break; + case "离家模式": + modelType = "2"; + break; + case "睡眠模式": + modelType = "3"; + break; + case "起床模式": + modelType = "4"; + break; + } + } + break; + case MODEL_REAPEAT: + if (data != null && data.getExtras().get("modelRepeat") != null) { + if (!TextUtils.isEmpty(data.getExtras().get("modelRepeat").toString().trim())) { + onceTimeTv.setText(data.getExtras().get("modelRepeat").toString().trim()); + week = data.getExtras().get("week").toString().trim(); + } else { + onceTimeTv.setText(R.string.once_time); + week = "0000000"; + } + } + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/net/Constans.java b/app/src/main/java/com/yonsz/z1/net/Constans.java new file mode 100644 index 0000000..92164b7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/net/Constans.java @@ -0,0 +1,627 @@ +package com.yonsz.z1.net; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2016/11/27 0027. + */ + +public class Constans { + public static final String SEESSIONID = "sessionId"; + public static final String ISOVER = "isOver"; + public static final String USERID = "userId"; + public static final String USERNAME = "userName"; + public static final String USERPHONE = "userphone"; + public static final String PHONEAREA = "phoneArea"; + public static final String USERSEX = "usersex"; + public static final String PASSWORD = "password"; + public static final String USERICON = "usericon"; + public static final String WEATHERPICURL = "weatherpicurl"; + public static final String SSID = "ssid"; + public static final String NETPASSWORD = "pswd"; + public static final String VESION = "version"; + public static final String VESION_NOW = "version_now"; + public static final String VOICE = "voice"; + public static final String TOKENID = "tokenId"; + public static final String MAIN_BG_URL = "mainBgUrl"; + public static final String ISBIND = "isBind"; + public static final String ADIMAGEURL = "startUpImgUrl"; + public static final String PORT = "port"; + public static final String HOUSEID = "houseId"; + public static final String ISALLSCREEN = "IsAllScreen"; + + public static final String UPDATEPW = "updatepw"; + public static final String TYPE = "type"; + public static final String I18N = "i18n"; + public static final String LOCALE_LANGUAGE = "locale_language"; + public static final String ISADDBAOSHI = "is_add_baoshi";//临时加一下,为了显示宝石精灵的图片 + + public static final int REFRESH_DATA = 1000001; + public static final int MORE_DATA = 1000002; + public static final String APP_NAME = "UniKong"; + public static final int MODIFY_NAME_RESULT = 1001; + public static final int MODIFY_ADDRESS_RESULT = 1002; + public static final int MODIFY_DEVICE_RESULT = 1003; + public static final int LEARN_RESULT = 1004; + public static final int TIME_RESULT = 1005; + public static final int NICKNAME_RESULT = 1006; + public static final int DEL_SYSINITMSG_BYID_RESULT = 1007; + public static final int CLOSE_THIS_ACTIVITY = 1008; + public static final int MODIFY_DEVICE_NAME = 1009; + public static final int SHOW_SAHRE_DEVICE = 1010; + public static final int SHOW_MY_DEVICE = 1011; + public static final int MODEL_REAPEAT = 1012; + public static final int REQUEST_CODE = 1013; + public static final int REQUEST_IMAGE = 1014; + public static final int KEY_MATCH_RECEIVE = 1015; + public static final int SHOW_FULL_WARN = 1016; + public static final int SHOW_ADD_HOME = 1017; + public static final String AIR_TAG = "001";//空调 + public static final String FAN_TAG = "003";//风扇 + public static final String TV_TAG = "004";//电视 + public static final String TVONE_TAG = "006";//机顶盒 + public static final String SWEEP_TAG = "005";//扫地机 + public static final String LIGHT_TAG = "008";//灯 + public static final String CURTAINS_TAG = "009";//窗帘 + public static final String SWITCH_TAG = "010";//插座 + public static final String SAFE_DEVICE_TAG = "011";//安防设备 + public static final String DOOR_LOCK_TAG = "012";//门磁 + public static final String INFRARED_TAG = "013";//红外 + public static final String SMOKE_TAG = "014";//烟雾 + public static final String GAS_TAG = "015";//燃气 + public static final String WATER_TAG = "016";//水浸 + public static final String MUSIC_TAG = "017";//音乐 + public static final String SITUATIONAL_PANEL = "018";//情景面板 + public static final String CLOTHES_HANGER = "019";//晾衣架 + public static final String CAMERA_TAG = "020";//摄像头 + public static final String WINDOW_OPENER = "021";//开窗器 + public static final String GATE_WAY = "022";//网关(大华系列) + public static final String INTELLIGENT_DOOR_LOCK = "023";//智能门锁(大华系列) + public static final String WIRELESS_EMERGENCY_BUTTON = "024";//无线紧急按钮(大华系列),sos紧急按钮 + public static final String INFRARED_CURTAIN_DETECTOR = "025";//红外幕帘探测器(大华系列) + public static final String MULTIFUNCTIONAL_CONTROLLER = "026";//多功能控制器(易百珑) + public static final String GEMSTONE_ELVES = "027";//宝石精灵 + public static final String MOVIE_CAMERA = "028"; //摄影机/投影仪 + public static final String AIR_CLEANER = "029"; //净化器 + public static final String ZIGBEE_LIGHT = "031"; // zigbee灯面板 + public static final String ZIGBEE_PLUG = "032"; // zigbee插座 + public static final String ZIGBEE_INFRARED = "033"; // zigbee人体红外 + public static final String ZIGBEE_TEMPERATURE = "034"; //zigbee温湿度 + public static final String ZIGBEE_DOOR = "035"; //zigbee门磁 + public static final String ZIGBEE_CO = "036"; //zigbee一氧化碳 ( 报警) /*co-->carbon monoxide【化】一氧化碳*/ + public static final String ZIGBEE_WATER = "037"; //zigbee水浸 + public static final String ZIGBEE_SMOKE = "038"; //zigbee烟雾 (报警) + public static final String ZIGBEE_GAS = "039"; //zigbee可燃气体 + public static final String CARD_ACCESS = "030"; //插卡取电 + public static final String TEMP_CONTROL = "040"; //温控系统 + public static final String SITUATIONAL_TRIGGER = "041"; //情景触发器 + public static final String SERVICE_PANEL = "04200"; //服务面板 + public static final String SERVICE_PANEL_485 = "042"; //485 + public static final String SAFETY_DISPLACEMENT = "043"; //位移探测器 + public static final String SAFETY_ACOUSTO_OPTIC = "044"; //声光报警器 + public static final String SAFETY_WIRELESS_REMOTE = "045"; //无线遥控器 + public static final String RGB_LIGHT = "047"; //RGB灯带 + public static final String SECURITY_TRIGGER = "048"; //安防触发器 + public static final String FRESH_AIR = "049"; //新风 + public static final String FLOOR_HEATING = "050"; //地暖 + public static final String CAT_EYE = "051"; //猫眼门铃 + public static final String SAFETY_VALVE = "052"; //安防阀门控制器 + public static final String SECURITY_MANIPULATOR = "053"; //安防机械手 + public static final String KUQI_PANEL = "054"; //酷奇面板 + public static final String SKYWORTH_TV = "056"; //创维大屏 + public static final String INDEPENDENT_CODE_AC = "057"; //大金独立码空调 + public static final String ADD_TYPE = "100"; //添加设备 + + //风扇控制 + public static final String FAN_OPEN = "0301"; + public static final String FAN_SHAKE = "0302"; + public static final String FAN_WIND = "0303"; + public static final String FAN_TIME = "0304"; + public static final String FAN_CLOSE = "0305"; + public static final String FAN_TYPE = "0306"; + public static final String FAN_WIND_REDUCE = "0307"; + //电视控制 + public static final String TV_OPEN = "0401"; + public static final String TV_UP = "0402"; + public static final String TV_DOWN = "0403"; + public static final String TV_LEFT = "0404"; + public static final String TV_RIGHT = "0405"; + public static final String TV_OK = "0406"; + public static final String TV_HOME = "0407"; + public static final String TV_BACK = "0408"; + public static final String TV_MENU = "0409"; + public static final String TV_VOICE = "040C"; + public static final String TV_VOLADD = "040A"; + public static final String TV_VOLREDUCE = "040B"; + public static final String TV_JIDINGHE = "040D"; + public static final String TV_ZERO = "0410"; + public static final String TV_ONE = "0411"; + public static final String TV_TWO = "0412"; + public static final String TV_THREE = "0413"; + public static final String TV_FOUR = "0414"; + public static final String TV_FIVE = "0415"; + public static final String TV_SIX = "0416"; + public static final String TV_SEVEN = "0417"; + public static final String TV_EIGHT = "0418"; + public static final String TV_NINE = "0419"; + public static final String TV_SIGNAL = "041A"; + //空调控制 + public static final String AIR_OPEN = "0101"; + public static final String AIR_CLOSE = "010c"; + public static final String AIR_TEM_ADD = "0102"; + public static final String AIR_TEM_REDUCE = "0103"; + public static final String AIR_WIND_SPEED = "0105"; + public static final String AIR_RIGHT_LEFT = "0106"; + public static final String AIR_UP_DOWN = "0107"; + public static final String AIR_COLD = "010d"; + public static final String AIR_WARM = "010e"; + // public static final String AIR_SLEEP = "0110"; + public static final String AIR_SLEEP = "010f";//睡眠--除湿 + // public static final String AIR_POWER = "0111"; + public static final String AIR_POWER = "0109";//省电--屏显 + /*public static final String AIR_DISPLAY = "0109"; + public static final String AIR_HUMI = "010f";*/ + //扫地机控制 + public static final String SWEEP_OPEN = "0506"; + public static final String SWEEP_UP = "0502"; + public static final String SWEEP_DOWN = "0503"; + public static final String SWEEP_LEFT = "0504"; + public static final String SWEEP_RIGHT = "0505"; + public static final String SWEEP_OK = "0501"; + public static final String SWEEP_STRONG = "0508"; + public static final String SWEEP_ALONG = "0507"; + //背景音乐控制 + public static final String MUSIC_OPEN = "1301"; + public static final String MUSIC_VOICEADD = "1302"; + public static final String MUSIC_VOICERED = "1303"; + public static final String MUSIC_UP = "1304"; + public static final String MUSIC_NEXT = "1305"; + public static final String MUSIC_CHANGE = "1306"; + public static final String MUSIC_NOVOICE = "1307"; + public static final String MUSIC_MODEL = "1308"; + public static final String MUSIC_STOP = "1309"; + //灯控制 + public static final String LIGHT_OPEN = "0801"; + public static final String LIGHT_CLOSE = "0802"; + //开关控制 + public static final String SWITCH_OPEN = "1001"; + public static final String SWITCH_CLOSE = "1002"; + //风扇按键 + public static final String OSCILLATION = "oscillation"; + public static final String FANSPEED = "fanspeed"; + public static final String TIMER = "timer"; + public static final String MODE = "mode"; + public static final String POWER = "power"; + public static final String POWEROFF = "poweroff"; + //电视 + public static final String DOWNTV = "down"; + public static final String UPTV = "up"; + public static final String LEFTTV = "left"; + public static final String RIGHTTV = "right"; + public static final String POWERTV = "power"; + public static final String POWEROFFTV = "poweroff"; + public static final String OKTV = "ok"; + public static final String VOLADDTV = "vol+"; + public static final String VOLREDTV = "vol-"; + public static final String CHADDTV = "chplus"; + public static final String CHREDTV = "chminus"; + public static final String BOOTTV = "boot"; + public static final String BACKTV = "back"; + public static final String RECALLTV = "recall"; + public static final String SIGNALTV = "signal"; + public static final String MENUTV = "menu"; + public static final String POWERBOXTV = "powerbox"; + public static final String MUTETV = "mute"; + public static final String ZEROTV = "0"; + public static final String ONETV = "1"; + public static final String TWOTV = "2"; + public static final String THREETV = "3"; + public static final String FOURTV = "4"; + public static final String FIVETV = "5"; + public static final String SIXTV = "6"; + public static final String SEVENTV = "7"; + public static final String EIGHTTV = "8"; + public static final String NINETV = "9"; + //扫地机 + public static final String SWEEP_POWER = "power"; + public static final String SWEEP_AUTO = "auto"; + public static final String SWEEP_EDGEWISE = "edgewise"; + public static final String SWEEP_CHARGE = "charge"; + public static final String SWEEP_FIXEDPOINT = "fixedpoint"; + public static final String SWEEP_TIMER = "timer"; + public static final String SWEEP_Z = "z"; + public static final String SWEEP_PAUSE = "pause"; + //易百珑 + public static final String YBL_SINGLE_CONTROL = "01";//单路控制设备 + public static final String YBL_DIMMING_CONTROL = "02";//调光调速控制设备 + public static final String YBL_DOUBLE_CONTROL = "03";//双路控制设备 + //登录 + public final static int LOGIN_SUCCESS = 1; + public final static int LOGIN_FAIL = 2; + //注册 + public final static int GET_CODE_SUCCESS = 3; + public final static int GET_CODE_FAIL = 4; + public final static int UPDATE_PW_SUCCESS = 5; + public final static int UPDATE_PW_FAIL = 6; + public final static int UPDATE_SEC = 7; + public final static int CHECK_USER_NAME_SUCCESS = 8; + public final static int CHECK_USER_CODE_SUCCESS = 9; + public final static int ADD_PERSONINFO_SUCCESS = 10; + public final static int ADD_PERSONINFO_FAIL = 11; + //获取用户信息 + public final static int GET_USER_DETAIL_SUCCESS = 12; + public final static int GET_USER_DETAIL_FAIL = 13; + public final static int GET_USER_SESSION_NULL = 14; + //绑定设备 + public final static int BIND_SUCCESS = 15; + public final static int BIND_FAIL = 16; + //获取Z1信息 + public final static int GETZIINFO_SUCCESS = 17; + public final static int GETZIINFO_FAIL = 18; + public final static int DELETE_DEVICE_SUCCESS = 19; + public final static int DELETE_DEVICE_FAIL = 20; + //添加删除子设备 + public final static int ADD_CHILDDEVICE_SUCCESS = 21; + public final static int ADD_CHILDDEVICE_FAIL = 22; + public final static int DELETE_CHILDDEVICE_SUCCESS = 23; + public final static int DELETE_CHILDDEVICE_FAIL = 24; + public final static int MODIFY_DEVICE_SUCCESS = 25; + public final static int MODIFY_DEVICE_FAIL = 26; + public final static int SHARE_DEVICE_SUCCESS = 27; + public final static int SHARE_DEVICE_FAIL = 28; + public static final int FAN_LEARN_SUCCESS = 29; + public static final int AIR_AUTO_FIND = 30; + public static final int QUERY_STUDY_SUCCESS = 31; + public static final int QUERY_STUDY_FAIL = 32; + public static final int AIR_SURE_ORDER_SUCCESS = 33; + //定时 + public static final int GET_TIME_SUCCESS = 34; + public static final int GET_TIME_FAIL = 35; + public static final int UPDATE_ONCE_TIMER_SUCCESS = 36; + public static final int UPDATE_ONCE_TIMER_FAIL = 37; + public static final int UPDATE_TIMER_SWITCH_SUCCESS = 38; + public static final int UPDATE_TIMER_SWITCH_FAIL = 39; + public static final int QUERY_SHARE_LIST_SUCCESS = 40; + public static final int QUERY_SHARE_LIST_FAIL = 41; + public static final int AIR_CONTROL_SUCCESS = 42; + public static final int QUERY_DEVICE_DETAIL_SUCCESS = 43; + public static final int QUERY_DEVICE_DETAIL_FAIL = 44; + public static final int QUERY_NEXT_TIMER_SUCCESS = 45; + public static final int QUERY_NEXT_TIMER_FAIL = 46; + public static final int GET_MSG_SUCCESS = 47; + public static final int GET_MSG_FAIL = 48; + public static final int GET_LOG_SUCCESS = 49; + public static final int GET_LOG_FAIL = 50; + public static final int UPDATE_STATE_SUCCESS = 51; + public static final int UPDATE_STATE_FAIL = 52; + public static final int DEL_SYSINITMSG_BYID_SUCCESS = 53; + //发送添加子设备 + public static final int REQUEST_ADD_CHILDDEVICE = 54; + public static final int TRUNCATE_LISTINFO_SUCCESS = 55; + public static final int TRUNCATE_LISTINFO_FAIL = 56; + //灯 + public static final int SELECTINFO_BYZI_SUCCESS = 57; + public static final int SELECTINFO_BYZI_FAIL = 58; + public static final int ADDLIGHT_ENTITY_SUCCESS = 59; + public static final int ADDLIGHT_ENTITY_FAIL = 60; + public static final int SEND_CONTROL_ORDER_SUCCESS = 61; + public static final int SEND_CONTROL_ORDER_FAIL = 62; + public static final int DELLIGHT_ENTITY_SUCCESS = 63; + public static final int DELLIGHT_ENTITY_FAIL = 64; + public static final int SAVELIGHT_STUDYINFO_SUCCESS = 65; + public static final int SAVELIGHT_STUDYINFO_FAIL = 66; + public static final int STUDY_ANDCONTROLL_SUCCESS = 67; + public static final int STUDY_ANDCONTROLL_FAIL = 68; + public static final int UPDATE_LIGHT_ENTITYNAME_SUCCESS = 69; + public static final int UPDATE_LIGHT_ENTITYNAME_FAIL = 70; + public static final int ALLOW_VOICE_CONTROLL_SUCCESS = 71; + public static final int ALLOW_VOICE_CONTROLL_FAIL = 72; + public static final int SEND_VOICECONTROLL_INFO_SUCCESS = 73; + public static final int SEND_VOICECONTROLL_INFO_FAIL = 74; + public static final int LIGHT_LEARN_SUCCESS = 75; + //窗帘 + public static final int BLIND_LEARN_SUCCESS = 76; + public static final int SELECTBLIND_BYZI_FAIL = 77; + public static final int SELECTBLIND_BYZI_SUCCESS = 78; + public static final int SENDPID_STUDYBLIND_SUCCESS = 79; + public static final int SENDPID_STUDYBLIND_FAIL = 80; + public static final int ADDBLIND_ENTITY_SUCCESS = 81; + public static final int ADDBLIND_ENTITY_FAIL = 82; + public static final int DELBLIND_ENTITY_SUCCESS = 83; + public static final int DELBLIND_ENTITY_FAIL = 84; + public static final int UPDATEBLIND_ENTITYNAME_SUCCESS = 85; + public static final int UPDATEBLIND_ENTITYNAME_FAIL = 86; + public static final int SENDVOICE_BLINDMSG_SUCCESS = 87; + public static final int SENDVOICE_BLINDMSG_FAIL = 88; + public static final int SEND_VOICE_BLINDMSG_SUCCESS = 89; + public static final int SEND_VOICE_BLINDMSG_FAIL = 90; + public static final int UPDATE_STUDYFLAG_SUCCESS = 91; + public static final int UPDATE_STUDYFLAG_FAIL = 92; + public static final int UPDATEBLIND_STUDYFLAG_SUCCESS = 93; + public static final int UPDATEBLIND_STUDYFLAG_FAIL = 94; + public static final int REVERSE_BLIND_CONTROL_SUCCESS = 95; + public static final int REVERSE_BLIND_CONTROL_FAIL = 96; + public static final int SEND_REVERSE_BLINDMSG_SUCCESS = 97; + public static final int SEND_REVERSE_BLINDMSG_FAIL = 98; + public static final int LONGPRESS_TV_SUCCESS = 100; + public static final int LONGPRESS_TV_FAIL = 101; + public static final int CANCLE_LONGPRESS_SUCCESS = 102; + public static final int CANCLE_LONGPRESS_FAIL = 103; + public static final int LONGPRESS_SAO_SUCCESS = 104; + public static final int LONGPRESS_SAO_FAIL = 105; + public static final int UPDATE_WAIT = 106; + public static final int PLAY_SOUND = 107; + public static final int CHILD_CONTROL_SUCCESS = 108; + public static final int CHILD_CONTROL_FAIL = 109; + public static final int OPEN_LOCK_SUCCESS = 110; + public static final int CLOSE_LOCK_SUCCESS = 111; + public static final int VOLUME_SWITCH_SUCCESS = 112; + public static final int VOLUME_SWITCH_FAIL = 113; + public static final int OPEN_VOLUME_SUCCESS = 114; + public static final int CLOSE_VOLUME_SUCCESS = 115; + public static final int VOLUME_CONTROL_SUCCESS = 116; + public static final int VOLUME_CONTROL_FAIL = 117; + public static final int CHANGE_VOLUME_SUCCESS = 118; + public static final int QUERY_DEVICE_BRAND_SUCCESS = 119; + public static final int QUERY_DEVICE_BRAND_FAIL = 120; + public static final int DEL_ERROR_STUDY_SUCCESS = 121; + public static final int DEL_ERROR_STUDY_FAIL = 122; + public static final int UPDATE_CONN_DEVICE_SUCCESS = 123; + public static final int UPDATE_CONN_DEVICE_FAIL = 124; + public static final int QUERY_AIR_LASTSTATUS_SUCCESS = 125; + public static final int QUERY_AIR_LASTSTATUS_FAIL = 126; + public static final int FAN_LEARN_ING = 127; + public static final int FAN_LEARN_FAIL = 128; + public static final int UPDATE_STUDY_FLAG_SUCCESS = 129; + public static final int UPDATE_STUDY_FLAG_FAIL = 130; + public static final int START_CLICK = 131; + /** + * A2 + */ + public static final int MODEL_SELECT = 132; + public static final int GETROUNDINFO_BY_BRANDID_SUCCESS = 133; + public static final int GETROUNDINFO_BY_BRANDID_TAIL = 134; + public static final int DOWNLOAD_INFRARED_BYRID_SUCCESS = 135; + public static final int DOWNLOAD_INFRARED_BYRID_FAIL = 136; + public static final int SENDKEY_INFRARED_2MAC_SUCCESS = 137; + public static final int SENDKEY_INFRARED_2MAC_FAIL = 138; + public static final int SELECT_CONNDEVICE_PUSHKEY_SUCCESS = 139; + public static final int SELECT_CONNDEVICE_PUSHKEY_FAIL = 140; + public static final int SELECT_CONFRIMKEY_BYRID_SUCCESS = 141; + public static final int SELECT_CONFRIMKEY_BYRID_FAIL = 142; + //情景模式 + public static final int SELECT_CONNDEVICE_BYUSER_SUCCESS = 143; + public static final int SELECT_CONNDEVICE_BYUSER_FAIL = 144; + public static final int SELECT_MODEL_DETAIL_SUCCESS = 145; + public static final int SELECT_MODEL_DETAIL_FAIL = 146; + public static final int BATCH_UPDATE_MODEL_CONTROL_SUCCESS = 147; + public static final int BATCH_UPDATE_MODEL_CONTROL_FAIL = 148; + public static final int UPDATE_MODEL_BASIC_SUCCESS = 149; + public static final int UPDATE_MODEL_BASIC_FAIL = 150; + public static final int DEL_MODEL_CONTROL_SUCCESS = 151; + public static final int DEL_MODEL_CONTROL_FAIL = 152; + public static final int UPDATE_MODEL_CONTROL_SUCCESS = 153; + public static final int UPDATE_MODEL_CONTROL_FAIL = 154; + public static final int ADD_MODEL_TIME_SUCCESS = 155; + public static final int ADD_MODEL_TIME_FAIL = 156; + public static final int SELECT_MODEL_TIME_SUCCESS = 157; + public static final int SELECT_MODEL_TIME_FAIL = 158; + public static final int DEL_MODEL_TIME_SUCCESS = 159; + public static final int DEL_MODEL_TIME_FAIL = 160; + public static final int UPDATE_MODEL_TIME_SUCCESS = 161; + public static final int UPDATE_MODEL_TIME_FAIL = 162; + //433窗帘 + public static final int CREATE_TEST_BLIND_SUCCESS = 163; + public static final int CREATE_TEST_BLIND_FAIL = 164; + public static final int ADD_BLIND_ENTITY_SUCCESS = 165; + public static final int ADD_BLIND_ENTITY_FAIL = 166; + public static final int REVERSE_CONTROL_SUCCESS = 167; + public static final int REVERSE_CONTROL_FAIL = 168; + public static final int UPDATE_BLINDENTITY_NAME_SUCCESS = 169; + public static final int UPDATE_BLINDENTITY_NAME_FAIL = 170; + public static final int ADD_LIGHT_ENTITY_SUCCESS = 171; + public static final int ADD_LIGHT_ENTITY_FAIL = 172; + public static final int CANCEL_ADD_LIGHT_SUCCESS = 173; + public static final int CANCEL_ADD_LIGHT_FAIL = 174; + public static final int SUREADD_SENDVOIC_MSG_SUCCESS = 175; + public static final int SUREADD_SENDVOIC_MSG_FAIL = 176; + public static final int AVTIVE_MODEL_SUCCESS = 177; + public static final int AVTIVE_MODEL_FAIL = 178; + public static final int AVTIVE_MODEL_TO_SET = 179; + public static final int AVTIVE_MODEL_TO_OPEN = 180; + public static final int SEARCH_ROUND_SUCCESS = 181; + public static final int SEARCH_ROUND_FAIL = 182; + public static final int CANCEL_DOWNLOAD_SUCCESS = 183; + public static final int CANCEL_DOWNLOAD_FAIL = 184; + public static final int SEND_ADDVOICE_CONTROL_SUCCESS = 185; + public static final int SEND_ADDVOICE_CONTROL_FAIL = 186; + public static final int CHECK_MODEL_STATUS_SUCCESS = 187; + public static final int CHECK_MODEL_STATUS_SET = 188; + public static final int ADD_CHILDDEVICE = 189; + public static final int SEND_DELVOICE_CONTROL_SUCCESS = 190; + public static final int SEND_DELVOICE_CONTROL_FAIL = 191; + public static final int DEL_SAFETY_ENTITY_SUCCESS = 192; + public static final int DEL_SAFETY_ENTITY_FAIL = 193; + public static final int ADD_SAFETY_ENTITY_SUCCESS = 194; + public static final int ADD_SAFETY_ENTITY_FAIL = 195; + public static final int SEND_UPDATEVOICE_CONTROL_SUCCESS = 196; + public static final int SEND_UPDATEVOICE_CONTROL_FAIL = 197; + public static final int SELECT_SAFETY_DETAIL_SUCCESS = 198; + public static final int SELECT_SAFETY_DETAIL_FAIL = 199; + public static final int SAFE_VOICE_SUCCESS = 200; + public static final int GET_TOKEN_SUCCESS = 201; + public static final int GET_TOKEN_FAIL = 202; + public static final int KEY_MATCH_SUCCESS = 203; + public static final int KEY_MATCH_FAIL = 204; + public static final int KEY_MATCH_HTTP_SUCCESS = 205; + public static final int KEY_MATCH_HTTP_FAIL = 206; + public static final int KEY_MATCH_HTTP_CONTINUE = 207; + public static final int KEY_MATCH_HTTP_ERROR = 208; + public static final int AIR_KEY_MATCH_HTTP_SUCCESS = 209; + public static final int RELOAD_INFRARED_SUCCESS = 210; + public static final int NIGHT_LIGHT_SUCCESS = 211; + public static final int NIGHT_LIGHT_FAIL = 212; + public static final int FAN_LEARN_WHAT = 213; + public final static int WX_LOGIN_SUCCESS = 214; + public final static int WX_LOGIN_FAIL = 215; + public final static int WX_LOGIN_REGISTER = 216; + public final static int DOWNLOAD_TV_SUCCESS = 217; + public final static int DOWNLOAD_TV_FAIL = 218; + public final static int START_SOLID_DATEUP = 219; + public final static int GET_NEWOTA_VER_SUCCESS = 220; + public final static int GET_NEWOTA_VER_FAIL = 221; + public final static int SURE_BUTTON = 222; + public final static int SCENCE_CONTROL_ORDER = 223; + public final static int GET_USER_MSGS_SUCCESS = 224; + public final static int GET_USER_MSGS_FAIL = 225; + public final static int GET_WEATHER_SUCCESS = 226; + public final static int GET_Z1_INFO = 227; + public final static int DOWNLOAD_FILE_FAIL = 228; + public final static int CHANGE_SAHRENAME = 229; + public final static int UPDATE_LIGHTTYPE4_ADD_SUCCESS = 230; + public final static int UPDATE_LIGHTTYPE4_ADD_FAIL = 231; + public final static int UPDATE_LIGHT_TYPE_SUCCESS = 232; + public final static int UPDATE_LIGHT_TYPE_FAIL = 233; + public final static int UPDATE_PLUG_TYPE_SUCCESS = 234; + public final static int UPDATE_PLUG_TYPE_FAIL = 235; + public final static int SHOW_LOCAL_CONTROL = 236; + public final static int DOWN_BACKMUSIC_INFR_SUCCESS = 237; + public final static int DOWN_BACKMUSIC_INFR_FAIL = 238; + public final static int GET_APP_LOG_SUCCESS = 239; + public final static int GET_VOICE_LOG_SUCCESS = 240; + public static final int APP_CONTROL_SUCCESS = 241; + public static final int QUERY_DEVICE_LASTINFO_SUCCESS = 242; + public static final int QUERY_DEVICE_LASTINFO_FAIL = 243; + public static final int GET_ZI_VER_SUCCESS = 245; + public static final int GET_ZI_VER_FAIL = 246; + public static final int CHANGE_PIC_SUCCESS = 247; + public static final int QUERY_SYS_BANNERS_SUCCESS = 248; + public static final int QUERY_SYS_BANNERS_FAIL = 249; + public static final int GET_SWITCHER_CHANGE_INFO = 250; + public static final int GET_ONLINE_DEVICELIST_SUCCESS = 251; + public static final int GET_ONLINE_DEVICELIST_FAIL = 252; + public static final int HAS_BIND_DEVICE_SUCCESS = 253; + public static final int HAS_BIND_DEVICE_FAIL = 254; + public static final int RELIEVE_BIND_DEVICES_SUCCESS = 255; + public static final int RELIEVE_BIND_DEVICES_FAIL = 256; + public static final int ADD_BIND_DEVICES_SUCCESS = 257; + public static final int ADD_BIND_DEVICES_FAIL = 258; + public static final int DOWNLOAD_INFRARED_BYRID_SUCCESS_FAN = 259; + public static final int DOWNLOAD_INFRARED_BYRID_SUCCESS_TV = 260; + public static final int DOWNLOAD_INFRARED_BYRID_SUCCESS_SWEEP = 261; + public static final int DOWNLOAD_INFRARED_BYRID_SUCCESS_AIR = 262; + public static final int DOWNLOAD_INFRARED_BYRID_SUCCESS_MUSIC = 263; + public static final int GET_DEVICEVOICE_CHATLIST_SUCCESS = 264; + public static final int GET_DEVICEVOICE_CHATLIST_FAIL = 265; + public static final int GET_USERDEVICES4_SIMPLEINFO_SUCCESS = 266; + public static final int GET_USERDEVICES4_SIMPLEINFO_FAIL = 267; + public static final int QUERY_HOUSES_SUCCESS = 268; + public static final int QUERY_HOUSES_FAIL = 269; + public static final int CREATE_ORUPDATE_HOUSE_SUCCESS = 270; + public static final int CREATE_ORUPDATE_HOUSE_FAIL = 271; + public static final int QUERY_HOUSE_INFO_SUCCESS = 272; + public static final int QUERY_HOUSE_INFO_FAIL = 273; + public static final int QUERY_FAMILY_INFO_SUCCESS = 274; + public static final int QUERY_FAMILY_INFO_FAIL = 275; + public static final int DEL_HOUSE_SUCCESS = 276; + public static final int DEL_HOUSE_FAIL = 277; + public static final int MOVE_DEVICE_SUCCESS = 278; + public static final int MOVE_DEVICE_FAIL = 279; + public static final int MAP_RESULT = 280; + public static final int GET_PHONE_NUMBER = 281; + //支付 + public static final int APP_PAY_SUCCESS = 282; + public static final int APP_PAY_FAIL = 283; + public static final int NEEDUPGRADE_TOONLINE_DEVICES_SUCCESS = 284; + public static final int NEEDUPGRADE_TOONLINE_DEVICES_FAIL = 285; + public static final int GET_PHONE_AREA = 286; + //手机语音控制 + public static final int EXECUTE_PHONE_SUCCESS = 287; + public static final int EXECUTE_PHONE_FAIL = 288; + public static final int ONE_KEY_SWITCH_SUCCESS = 289; + public static final int ONE_KEY_SWITCH_FAIL = 290; + //易百珑 + public static final int YBL_ADD_SUCCESS = 291; + public static final int YBL_ADD_FAIL = 292; + public static final int YBL_SCENE_ADD_SUCCESS = 293; + public static final int YBL_SCENE_ADD_FAIL = 294; + public static final int ADD_MODEL_BASIC_SUCCESS = 295; + public static final int ADD_MODEL_BASIC_FAIL = 296; + //乐橙 + public static final int CHECK_USER_BIND_SUCCESS = 297; + public static final int CHECK_USER_BIND_FAIL = 298; + public static final int USER_BIND_SMS_SUCCESS = 299; + public static final int USER_BIND_SMS_FAIL = 300; + public static final int FIND_DEVICES_SUCCESS = 301; + public static final int FIND_DEVICES_FAIL = 302; + //安顺祥 + public static final int HOUSE_TYPE_LIST_SUCCESS = 303; + public static final int HOUSE_TYPE_LIST_FAIL = 304; + public static final int INDEX_APPLICANCE_LIST_SUCCESS = 305; + public static final int DEIVCE_DEVICEMODEL_LIST_SUCCESS = 306; + public static final int CAMERA_ISADD_SUCCESS = 307; + public static final int CAMERA_ISADD_FAIL = 308; + public static final int MODIFY_ALARM_STATUS_SUCCESS = 309; + public static final int FIND_DEVICES_BYGROUPID_SUCCESS = 310; + public static final int TUYA_DEVICELISTOFTOKEN_SUCCESS = 311; + public static final int TUYA_DEVICELISTOFTOKEN_FAIL = 312; + + public static final int MODIFY_NAME_SUCCESS = 313; + public static final int MODIFY_NAME_FAIL = 314; + public static final int SKYWORTH_ISADD_SUCCESS = 315; + + + public static int deviceNumListPosition = 0; + public static boolean isUseDefFlag = true; + public static HomeListEntity homeListEntity; + public static List deviceNumList = new ArrayList<>(); + public static String localAddAddressId = "1"; + public static String localAddFloorId = "1"; + public static int roomPosition = 0; + public static int[] Z_PIC = { + R.drawable.pic_z1, + R.drawable.pic_a2 + }; + + public static int[] Img = { + R.drawable.icon_tv, + R.drawable.icon_kt, + R.drawable.icon_fs, + R.drawable.icon_clean, + R.drawable.icon_light, + R.drawable.icon_curtains, + R.drawable.icon_chazuo, + R.drawable.icon_infrared, + R.drawable.icon_gatemagnetic, + R.drawable.icon_carbonmonoxide, + R.drawable.icon_waterimmersion, + R.drawable.icon_humiture, + R.drawable.icon_smoke, + R.drawable.icon_music, + R.drawable.icon_scene_four + }; + public static int[] SAFE_BIG_IMG = { + R.drawable.pic_security_water, + R.drawable.pic_security_gas, + R.drawable.pic_security_smoke, + R.drawable.pic_security_magnetometer, + R.drawable.pic_security_infrared}; + /*public static int[] ZIGBEE_BIG_IMG = { + R.drawable.pic_information_carbonmonoxide, + R.drawable.pic_information_gatemagnetic, + R.drawable.pic_information_humiture, + R.drawable.pic_information_infrared, + R.drawable.pic_information_waterimmersion, + R.drawable.pic_information_smoke};*/ + public static int[] SAFE_IMG = { + R.drawable.icon_security_water, + R.drawable.icon_security_gas, + R.drawable.icon_security_smoke, + R.drawable.icon_security_magnetometer, + R.drawable.icon_security_infrared}; + public static boolean isLocalControl; +} diff --git a/app/src/main/java/com/yonsz/z1/net/NetRequestUtil.java b/app/src/main/java/com/yonsz/z1/net/NetRequestUtil.java new file mode 100644 index 0000000..522a472 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/net/NetRequestUtil.java @@ -0,0 +1,65 @@ +package com.yonsz.z1.net; + +import android.os.Message; +import android.util.Log; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entity4.DeviceStateEntity; + +import java.util.HashMap; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.QUERY_DEVICE_LASTINFO; + +/** + * Created by Administrator on 2018/7/3. + */ + +public class NetRequestUtil extends BaseActivity { + + /** + * 查询设备最后一次状态 + * + * @param deviceId + * @param deviceType + */ + private void queryDeviceLastInfo(String deviceId, String deviceType) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceType", deviceType); + + netWorkUtil.requestGetByAsy(QUERY_DEVICE_LASTINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceLastInfo", "ShareDeviceActivity onSuccess()" + respone); + DeviceStateEntity obj = JSON.parseObject(respone, DeviceStateEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_LASTINFO_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_LASTINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_LASTINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/net/NetWorkUrl.java b/app/src/main/java/com/yonsz/z1/net/NetWorkUrl.java new file mode 100644 index 0000000..fcf17d8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/net/NetWorkUrl.java @@ -0,0 +1,362 @@ +package com.yonsz.z1.net; + + +import com.yonsz.z1.fragment.person.changeserver.SP; + +import okhttp3.MediaType; + +public class NetWorkUrl { + + public static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/x-www-form-urlencoded; charset=utf-8");//mdiatype 这个需要和服务端保持一致 + public static final String SERVER_URL = "https://api.yonsz.net:443/"; + // public static final String SERVER_URL = "https://api.stress.yonsz.net:443/"; + // public static final String SERVER_URL = "http://api.yonsz2.veryreader.com:80/"; + public static final String SERVER_BACKUP = "https://api.stress.yonsz.net:443/";//测试 + // public static final String SERVER_BACKUP = "https://api.test.yonsz.net:443/";//测试 + public static final String SERVER_BACKUP2 = "http://192.168.3.117:18181/";// + public static final String SERVER_BACKUP3 = "http://192.168.3.119:18181/";// + public static final String SERVER_A = "a/"; + public static final String SERVER_API = "api/"; + public static final String SERVER_URL_PHOTO = getSERVER() + "/userfiles/userphoto/"; + /** + * 接口 + */ + public static final String GET_TOKEN = "expose/getTokenAndVers?";//APP获取token + public static final String GET_TELAREA_CODES = "expose/getTelAreaCodes?";//获取国际电话区号列表 + public static final String ADD_TALK_IMG = getSERVER() + SERVER_API + "user/uploadAvator?";//上传说说图片= + + public static final String LOGIN_URL = "login?";//登录 + public static final String REGIST_URL = "register/?";//注册 + public static final String GET_MSMCODE = "sms/sendCode?";//获取验证码 + public static final String CHECK_USER_NAME = "register/checkUserName?";//检测用户名 + public static final String CHECK_USER_ISREGISTERED = "register/isRegistered?";//检测用户名 + public static final String CHECK_USER_CODE = "sms/check?";//检测验证码 + public static final String FORGET_PASS_WORD = "login/forgetPwd?";//忘记密码 + public static final String WX_QUICK_LOGIN = "login/quickLogin?";//微信快捷登录 + public static final String WX_QUICK_REGIST = "login/quickRegist?";//微信注册 + public static final String WX_CANCLE_BINDING = "login/cancleBinding?";//微信取消绑定 + public static final String MOBILE_CHANGE_CHECK = "user/mobile/change/check?";//修改手机号-身份校验 + public static final String MOBILE_CHANGE_UPDATE = "user/mobile/change/update?";//修改手机号-提交(先调校验接口,获取checkCode,会注销原session,返回新的session) + public static final String THIRDDEVICE_GOPAYACCESSPOINT = "thirdDevice/goPayAccessPoint?";// + public static final String AUTH_GETCODE = "auth/getCode?";//获取验证码 + public static final String THEME_GET_CODE = "theme/get?";//查询用户所拥有的家列表001 + + //天气 + public static final String GET_WEATHER = "util/getWeather?";//根据经纬度获取天气 + /** + * 硬件控制相关接口 + */ + public static final String AIR_AUTO_ADD = "infrared/cmd/sendAuthAgree?";//发送自动识别指令 + public static final String AIR_AUTO_SURE_ORDER = "infrared/cmd/sendSearchInfo?";//轮循确认指令 + // public static final String STUDY_ANDCONTROLL_LIGHT = "service?method=studyAndControllLight&mobileLogin=true&isValidatjeesiteLogin=false&";//A1保存或控制灯发送433码接口 + // + public static final String NIGHT_LIGHT = "device/aiDevice/nightLightSwitch?";//打开关闭小夜灯 + public static final String VOLUME_SWITCH = "device/aiDevice/volumeSwitch?";//A1声控开关 + public static final String VOLUME_CONTROL = "device/aiDevice/changeVolume?";//调节A1音量大小 + public static final String IGNORE_FREQUENTOFFLINE = "device/aiDevice/ignoreFrequentOffline?";//用户选择忽略本段时间频繁检测 + public static final String DEVICE_UPGRADE = "device/aiDevice/upgrade?";//智能网关远程升级 + public static final String DEVICE_CANUPGRADE = "device/aiDevice/canUpgrade?";//网关能否进行升级 + public static final String DEVICE_QUERYUPGRADETASK = "device/aiDevice/queryOtaTask?";//查询网关远程升级状态 + /** + * A2接口 + */ + public static final String SEARCH_ROUND = "infrared/cmd/sendRound?";//轮循遥控类型 + public static final String SEND_CONTROL_AIR_ORDER = "infrared/cmd/controlDevice?";//A1空调测试接口暂时 + public static final String KEY_MATCH = "infrared/cmd/sendKeyMatch?";//进入红外一键匹配自动学习模式 + //安防新接口 + public static final String SELECT_SAFETY_LOG = "safety/selectSafetyLog?";//查询安防日志 + public static final String SEND_UPDATEVOICE_CONTROL = "safety/sendUpdateVoice?";//发送修改的语音指令 + public static final String UPDATE_SAFETY_ENTITY = "safety/updateSafetyEntity?";//修改安防设备 + public static final String CLEAR_SAFETY_LOG = "safety/clearSafetyLog?";//清除安防信息 + public static final String SYSMSG_CLEAR = "sysmsg/clear?";//清除 + public static final String MSG_CLEARUNREAD = "msg/clearUnread?";//清除未读 + public static final String REP_CHECK = "safety/repCheck?";//检验是否重复添加 + public static final String ONE_KEY_SWITCH = "safety/oneKeySwitch?";//一键开启或者关闭家下的所有安防设备 + // public static final String ONE_KEY_SWITCH = "exec/safetyOneKeySwitch?";//一键开启或者关闭家下的所有安防设备 + //A2红外 + public static final String KEY_MATCH_HTTP = "infrared/yky/keyMatch?";//一键匹配YKY方案 + public static final String AIR_KEY_MATCH = "infrared/yky/airKeyMatch?";//空调一键匹配YKY方案 + public static final String GETBRANDID_BY_DEVICEID = "infrared/yky/brand/list?";//根据设备类型获取被遥控设备品牌列表 + public static final String GETROUNDINFO_BY_BRANDID = "infrared/yky/round/list?";//通过品牌ID查询所有类型的遥控器 + public static final String SELECT_CONNDEVICE_PUSHKEY = "yky/selectConnDevicePushkey?";//通过ziId查询设备已经保存的key + public static final String SELECT_CONFRIMKEY_BYRID = "infrared/yky/selectConfrimKeyByRid?";//查询A2加载完的红外 + public static final String CANCEL_DOWNLOAD = "infrared/yky/cancelDownload?";//取消下载 + public static final String YKY_DOWNLOAD = "infrared/yky/download?";//下载红外码 + //窗帘 +// public static final String REVERSE_BLIND_CONTROL = "blind/reverseBlindControl?";//窗帘反转 + //插座 + public static final String SAVE_PLUG_STUDYINFO = "plug/savePlugStudyInfo?";//插座生成433码 + public static final String UPDAT_PLUG_STUDYFLAG = "plug/updateStudyFlag?";//修改插座学习成功标识 + public static final String DEL_STUDY_FAIL = "plug/delStudyFail?";//删除插座学习内容 + //设备操作 + public static final String SEARCH_DEVICE_BIND = "device/aiDevice/add?";//新的添加小艾 + public static final String DELETE_DEVICE_ZI = "device/aiDevice/delete?";//删除Z1 + // public static final String SEARCH_DEVICE_INFO = "zidevice/getSelfZiV4?";//用户查询设备信息 + public static final String SEARCH_DEVICE_INFO = "appliance/listByAi?";//用户查询设备信息,这个待验证 + public static final String MODIFY_DEVICE_INFO = "device/aiDevice/updateName?";//修改Z1信息 + public static final String QUERY_CONTROL_KEY = "zidevice/queryControlKey?";//查询设备的学习按键 + public static final String SELECT_TIMER_SWITCH = "device/timer/selectTimerSwitch?";//定时任务查询 + public static final String QUERY_SHARE_LIST = "zidevice/queryShareList?";//查询分享的列表 + public static final String QUERY_DEVICE_DETAIL = "device/aiDevice/detail?";//查询设备详情信息 + public static final String QUERY_NEXT_TIMER = "device/timer/queryTimerNext?";//查询下次定时任务信息 + // public static final String SAVE_WIFIINFO = "zidevice/saveWifiInfo?";//添加wifi信息 + public static final String QUERY_DEVICE_BRAND = "zidevice/queryDeviceBrand?";//查询设备品牌名称 + public static final String DEL_ERROR_STUDY = "zidevice/delErrorStudy?";//学习重试删除学习内容 + public static final String UPDATE_CONN_DEVICE = "zidevice/updateConnDevice?";//修改品牌名称 + public static final String UPDATE_STUDY_FLAG = "infrared/updateStudyFlag?";//修改电视风扇灯等的学习标识 + public static final String UPDATE_DEVICE_ADDRESS = "device/aiDevice/updateAddress?";//添加A1设备的位置信息 + public static final String CHANGE_DEVICE_STATE = "zidevice/chageDeviceState?";//更新设备的状态(针对固件升级)1300-30 + public static final String GET_NEWOTA_VER = "zidevice/getNewOtaVer?";//获取设备最新的固件版本信息1300-31 + public static final String GET_ZI_VER = "zidevice/getZiVer?";//查询设备设备的设备版本1300-36 + // public static final String QUERY_DEVICE_LASTINFO = "zidevice/queryDeviceLastInfo?";//查询子设备最近的操作状态1300-37 + public static final String UPDATE_SORT_NUM = "zidevice/updateSortNum";//修改设备绑定设备的排序号1300-34(有) + public static final String UPDATE_SUB_DEVICE = "/zidevice/updateSubDevice";//情景面板位置修改1300-40(有) + //模式操作的控制 + public static final String CHECK_MODEL_STATUS = "scene/houseScene/checkModelStatus?";//发送情景模式控制信息前的查询 + public static final String QUERY_MODEL_DETAIL = "scene/houseScene/queryModelDetail?";//替换上面两个接口,查询房间下的情景模式详情,包含已添加或者未添加的子设备及相关状态 + public static final String BATCH_UPDATE_MODEL_CONTROL = "scene/houseScene/batchUpdateModeControl?";//批量增加或删除模式控制信息 + public static final String UPDATE_MODEL_BASIC = "scene/houseScene/updateModelBasic?";//修改模式状态信息 + // public static final String UPDATE_MODEL_CONTROL = "a2/model/updateModelControl?";//修改模式控制信息 + public static final String SELECT_MODEL_TIME = "scene/houseScene/selectModelTime?";//查询时间设置信息 + + public static final String ADD_MODEL_BASIC = "scene/add?";//创建自定义模式1500-016 + public static final String MODEL_SORTMODEL = "scene/houseScene/sort?";//排序情景模式,为回家、离家等模式进行排序1500-018 + public static final String UPDATE_MODEL_TIME = "timeManager/updateSceneTime?";//修改模式时间 + + //最新情景模式对接 + public static final String FIND_TIME_ANDEXECLIST = "scene/houseScene/findTimeAndExecList?";//查询模式时间列表信息及执行列表,替换之前的selectModelTime接口 + public static final String AVTIVE_MODEL_NEW = "scene/houseScene/activeModel?";//开启模式 + public static final String QUERY_GROUPMODEL_DETAIL = "scene/houseScene/queryGroupModelDetail?";//替换上面两个接口,查询房间下的情景模式详情,包含已添加或者未添加的子设备及相关状态 + public static final String BATCH_UPDATEGROUP_MODECONTROL = "scene/houseScene/batchUpdateGroupModeControl?";//批量增加或删除模式控制信息 + public static final String FIND_MODETIME_LIST = "scene/houseScene/findModeTimeList?";//查询模式时间列表 + public static final String ADD_MODEL_TIME = "scene/houseScene/addModelTime?";//添加模式时间 + public static final String FIND_DEVICES_BYGROUPID = "scene/houseScene/findDevicesByGroupId?";//查询分组下的小艾列表 + public static final String UPDATE_GROUPNAME = "scene/houseScene/updateGroupName?";//修改分组名称 + public static final String SET_CONTROL_OPERATION = "scene/houseScene/setControlOperation?";//为情景控制设备设置操作 + public static final String SCENE_CONTROL_LIST = "scene/houseScene/control/list?";//查询情景控制设备列表 + public static final String SCENE_CONTROL_SORT = "scene/houseScene/control/sort?";//设置情景模式控制设备的排序 + public static final String SCENE_HOUSESCENE_DELETE = "scene/houseScene/delete?";//支持任意情景模式删除,有关情景模式的删除,可以统一用这个 + public static final String SCENE_SETSHOWFLAG = "scene/setShowFlag?";// + public static final String SCENE_SETALIAS = "scene/setAlias?";// + public static final String SUBSET_SETSHOWFLAG = "subset/setShowFlag?";// + public static final String SUBSET_SETDEVICEALIAS = "subset/setDeviceAlias?";// + //用户信息操作 + public static final String SAVE_USERINFO_URL = "userInfo/saveUserInfo?";//更改保存用户信息 + public static final String PERSONAL_URL = "user/getUserInfoDetail?";//获取个人信息 + public static final String UPDATE_USERINFO_STATE = "userInfo/updateUserInfoOfState?";//上传经纬度 + // public static final String MODITY_PASSWORD = "userInfo/modifyPwd?";//更改用户密码 + //消息处理相关接口 + public static final String GET_SYS_MESSAGE = "sysMsg/getSysList?";//获取系统消息列表 + public static final String GET_USER_MSGS = "sysMsg/getUserMsgs?";//获取总的消息接口 + public static final String GET_SINGLE_SYSMESSAGE_BYID = "sysMsg/selectSysMsgById?";//返回单条消息并更新为已读信息 + public static final String DEL_SYSINITMSG_BYID = "sysMsg/delSysInitmsgById?";//删除单条系统消息 + public static final String GET_DEVICE_LOG_LIST = "device/log/page?";//用户查看设备日志3 + public static final String TRUNCATE_LISTINFO = "sysMsg/truncateListInfo?";//清空日志 + public static final String GET_DEVICEVOICE_CHATLIST = "log/getDeviceVoiceChatList?";//用户查看设备的语音交互聊天 + //单机联机接口 + public static final String GET_ONLINE_DEVICELIST = "online/getOnlineDeviceList?";//查询设备联机版绑定的设备及联机和单机的设备2900-001 + public static final String HAS_BIND_DEVICE = "online/hasBindDevice?";//查询是否有可绑定的联机单机设备 + public static final String RELIEVE_BIND_DEVICES = "online/relieveBindDevices?";//解除联机设备和单机设备的绑定 + public static final String ADD_BIND_DEVICES = "online/addBindDevices?";//添加要绑定的联机设备和单机设备 + //多套房接口 + public static final String GET_USERDEVICES4_SIMPLEINFO = "zidevice/getUserDevices4SimpleInfo";//获取用户拥有的设备设备列表(包含分享设备),仅返回设备设备所在位置与名称等简单信息1300-39 + public static final String SAVE_APP_SETTING = "userInfo/saveAppSetting?";//保存APP设置,设置项可以单个传,也可以多个同时传 + public static final String QUERY_HOUSES = "house/userHouse/list?";//查询用户所拥有的家列表001 + public static final String UPLOAD_HOUSE_PIC = getSERVER() + "ysz/v1/house/uploadHousePic?";//用户上传家的背景图片003 + public static final String UPLOAD_HOUSE_PIC_LOCAL = "house/uploadHousePic?";//用户上传家的背景图片003 + public static final String QUERY_HOUSE_INFO = "house/queryHouseInfo?";//查询家的详情信息004 + public static final String QUERY_FAMILY_INFO = "house/queryFamilyInfo?";//查询用户的家庭管理信息005 + public static final String DEL_HOUSE = "house/delHouse?";//删除用户的家006 + public static final String MOVE_DEVICE = "house/moveDevice?";//移动设备到另外一个家007 + public static final String SHARE_HOUSE = "house/shareHouse?";//用户分享家给另一个用户008 + public static final String QUERY_HOUSE_MEMBER = "house/queryHouseMember?";//查询家的分享者列表(家庭组成员列表008 + public static final String DEL_SHARER_HOUSE = "house/delSharerHouse?";//主人删除分享者的家010 + public static final String SET_DEFAULT_HOUSE = "house/setDefaultHouse?";//用户设置默认的家011 + public static final String HOUSE_TRANSFER = "house/transfer?";//转移家庭 + public static final String APPLIANCE_MANAGE_LIST = "appliance/manage/list?";//查询设备列表 + + public static final String PIC_CODE = "code?";//获取图形验证码1700-02 + //支付 + public static final String NEEDUPGRADE_TOONLINE_DEVICES = "pay/needUpgradeToOnlineDevices?";//获取用户需要升级到联机的设备3300-01 + public static final String APP_PAY = "pay/appPay?";//获取用户需要升级到联机的设备3300-02 + //手机语音交互相关 + public static final String PHONE_MESSAGE_SEND = "chat/message/send?";//发送消息记录 + public static final String PHONE_MESSAGE_LIST = "chat/message/list?";//发送消息记录 + public static final String PHONE_USER_INFO = "chat/user/info?";//获取聊天用户头像 + public static final String UPLOAD_VOICE = getSERVER() + "ysz/v1/chat/message/uploadVoice?";//用户上传家的背景图片003 + //易百珑 + public static final String YBL_SEARCH = "subset/light/ybl/search?";//开始搜索设备3500-001 + public static final String YBL_CONTROL = "subset/light/ybl/control?";//控制易百珑设备的开关3500-002 + public static final String YBL_ADD = "subset/light/ybl/add?";//绑定易百珑设备3500-003 + //乐橙摄像头 + public static final String CAMERA_ISADD = "thirdDevice/isAdd?";//检查用户是否已经绑定乐橙。 + public static final String AIDEVICE_ISADD = "device/aiDevice/add/check?";//检查用户是否可以添加H3E。 + public static final String CHECK_USER_BIND = "thirdDevice/checkUserBind?";//检查用户是否已经绑定乐橙。 + public static final String USER_BIND_SMS = "thirdDevice/userBindSms?";//发送绑定的短信验证码。 + public static final String USER_BIND = "thirdDevice/userBind?";//进行短信验证,验证成功后,可获取用户Token + public static final String BIND_DEVICE = "thirdDevice/bindDevice?";//用户绑定乐橙摄像头设备。 + public static final String USER_TOKEN = "thirdDevice/userToken?";//用户绑定乐橙摄像头设备。 + public static final String DEVICE_LIST = "thirdDevice/deviceList?";//获取当前家下绑定的设备列表。 + public static final String FIND_DEVICES = "thirdDevice/findDevices?";//获取当前家下绑定的设备列表。 + public static final String UNBIND_DEVICE = "thirdDevice/unBindDevice?";//用户解绑乐橙摄像头设备。 + public static final String MODIFY_DEVICE = "thirdDevice/modifyDevice?";//修改乐橙设备的相关信息。 + public static final String MODIFY_ALARM_STATUS = "thirdDevice/modifyAlarmStatus?";//修改设备的报警状态。 + //乐橙网关 + public static final String GET_LC_DEVICE_INFO = "thirdDevice/getDeviceInfo?"; //查看用户绑定的设备。 + public static final String SET_APALARM_STATUS = "thirdDevice/setApAlarmStatus?";//设置报警网关配件布防状态 + public static final String FIND_DOORLOCK_RECORDS = "thirdDevice/findDoorLockRecords?"; //查询门锁记录。 + public static final String SUBSET_DOORLOCK_RECORDS = "subset/doorLock/findDoorLockRecords?"; //查询门锁记录。 + public static final String GET_DEVICE_SNAPKEY = "thirdDevice/getDeviceSnapKey?"; //获取临时秘钥 + //涂鸦插座 + public static final String TUYA_GETDEVICETOKEN = "thirdDevice/tuya/getDeviceToken?"; //涂鸦设备获取配网token + public static final String TUYA_DEVICELISTOFTOKEN = "thirdDevice/tuya/deviceListOfToken?"; //获取配网设备列表 + public static final String SUBSET_INFO = "subset/info?"; //查询子设备信息 + public static final String SUBSET_WIFI_RESETFACTORY = "subset/wifi/resetFactory?"; //恢复设备出厂设置 + public static final String SUBSET_WIFI_UPGRADEINFO = "subset/wifi/upgradeInfo?"; //查询设备当前固件升级信息 + public static final String SUBSET_WIFI_CONFIRMUPGRADE = "subset/wifi/confirmUpgrade?"; //确认设备升级 + public static final String SUBSET_ONLINE = "subset/online?"; //查询子设备的是否在线 + public static final String SUBSET_ELECTRICQUANTITY = "subset/plug/electricQuantity?"; //查询子设备电量信息 + public static final String SUBSET_ELECTRICQUANTITYBYMONTH = "subset/plug/electricQuantityByMonth?"; //按月查询每天的电量信息 + public static final String SUBSET_BINDAIDEVICE = "subset/bindAiDevice?"; //绑定小艾,仅适用于涂鸦等与小艾无关的子设备 + public static final String SUBSET_OPENINIT_SET = "subset/openInit/set?"; //设置设备的初始打开状态 + + //安顺祥5.0版 创建家庭 + public static final String HOUSE_TYPE_LIST = "house/housetype/list?";//查询全部的户型列表,无参数。 + public static final String ADDRESS_TYPE_LIST = "house/addresstype/list?";//查询该户型下的位置列表。 + public static final String INDEX_APPLICANCE_LIST = "appliance/list?";//查询该户型下的位置列表。 + public static final String INDEX_APPLICANCE_UPDATESORT = "index/appliance/updateSort?";//修改设备排序。 + public static final String INDEX_APPLICANCE_LISTBYADDRESS = "appliance/listByAddress?";//获取某个位置下的设备列表。 + public static final String DEIVCE_DEVICEMODEL_CATEGORY_LIST = "device/devicemodel/category/list?";//查询所有的设备类型(有分类)。 + public static final String DEIVCE_DEVICEMODEL_SUBSET_LIST = "device/model/subset/list?";//查询所有的可以添加的子设备类型。 + public static final String DEIVCE_AIDEVICE_LIST = "device/aiDevice/list?";//获取家下的所有小艾设备列表,包含小艾的硬件信息。 + public static final String SCENE_SCENEMODE_SYSLIST = "scene/scenemode/syslist?";//查询系统默认的情景模式列表,用户给用户添加。 + public static final String EXEC_SEND = "exec/send?";//所有设备控制接口。 + public static final String HOUSEADDRESS_LIST = "house/houseaddress/list?";//查询用户当前房间下的位置列表。 + public static final String HOUSE_ADDHOUSE = "house/addHouse?";//添加或者修改用户的家信息。 + public static final String AIDEVICE_RESET = "device/aiDevice/reset?";//重置,恢复出厂设置 + public static final String AIDEVICE_CHILDLOCKSWITCH = "device/aiDevice/childLockSwitch?";//童锁 + public static final String AIDEVICE_SETNODISTURB = "aiDevice/config/setNoDisturb?";//为小艾设置免打扰时间 + //晾衣架(以后都统一这种) + public static final String SUBSET_STUDY = "subset/study?";//子设备添加前的学习。 + public static final String SUBSET_TEST = "subset/test?";//子设备添加前的测试。 + public static final String SUBSET_ADD = "subset/add?";//子设备添加。 + public static final String SUBSET_ADDMULTI = "subset/addMulti?";//子设备添加(灯)。 + public static final String SUBSET_DELETE = "subset/delete?";//子设备删除。 + public static final String SUBSET_CONTROL = "subset/control?";//子设备控制。 + public static final String SUBSET_SETVOICE = "subset/setVoice?";//子设备开启或关闭语音控制。 + public static final String SUBSET_SETMODETRIGGERFLAG = "subset/setModeTriggerFlag?";//子设备开启或关闭语音控制。 + public static final String SUBSET_MODIFY = "subset/modify?";//子设备开启或关闭语音控制。 + public static final String SUBSET_GETCONTROLKEYS = "subset/getControlKeys?";//子设备按键信息列表。 + public static final String SUBSET_GETDETAIL = "subset/getDetail?";//获取单个设备详情(全属性+其他属性)" + public static final String SUBSET_SCENEMODETRIGGER_SET = "subset/sceneModeTrigger/set?"; //情景模式触发设置 + public static final String SUBSET_SEARCH = "subset/search?"; //搜索子设备 + public static final String INFRARED_KEYSTUDY = "subset/infrared/keyStudy?";//a2按键学习 + public static final String SUBSET_SETSCENE = "subset/scene/setScene?"; //设置情景模式 + public static final String SCENE_CANBINDLIST = "subset/scene/canBindList?"; //查询当前情景面板可绑定的灯光和情景列表 + public static final String SCENE_OFFLINEBINDLIST = "subset/scene/offlineBindList?"; //查询离线可绑定的情景模式和设备 + public static final String SAFETY_SETINTERVAL = "subset/safety/setInterval?"; //设置提醒间隔 + public static final String SAFETY_SETREMINDS = "subset/safety/setReminds?"; //设置提醒方式 + public static final String SCENE_SAFETYBINDLIST = "subset/scene/safetyBindList?"; //查询安防触发器可绑定的设备 + public static final String SCENE_CLEARBIND = "subset/scene/clearBind?"; //清空安防触发器、情景面板绑定情景 、设备的绑定 + public static final String SUBSETMODE_LIST = "subsetmode/list?"; //查询设备模式列表 + public static final String SUBSETMODE_SAVE = "subsetmode/save?"; //保存或者更新设备模式接口 + public static final String QUERY_DEVICE_LASTINFO = "subset/getLastStatus?"; //查询子设备最近的操作状态 + public static final String GET_DOORLOCK_SNAPKEY = "subset/doorLock/getDeviceSnapKey?"; //获取创维锁临时密码 + public static final String SET_UNLOCK_NOTIFYSWITCH = "subset/doorLock/setUnlockNotifySwitch?";//设置开门推送开关。 + public static final String SET_CALL_NOTIFYSWITCH = "subset/doorLock/setCallNotifySwitch?";//设置呼叫推送开关。 + public static final String SET_ALARM_NOTIFYSWITCH = "subset/doorLock/setAlarmNotifySwitch?";//设置报警推送开关。 + + + //电视快捷频道 + public static final String TVCHANNEL_LIST = "tvchannel/list?";//查询用户某个电视的频道列表。 + public static final String TVCHANNEL_SYSLIST = "tvchannel/syslist?";//查询系统定义电视频道列表。 + public static final String TVCHANNEL_ADD = "tvchannel/add?";//添加电视快捷频道。 + public static final String TVCHANNEL_DEL = "tvchannel/del?";//删除电视快捷频道。 + public static final String TVCHANNEL_ACTION_EXEC = "tvchannel/action/exec?";//执行某个电视的动作执行。 + public static final String TVCHANNEL_SORT = "tvchannel/sort?";//修改用户某个设备的频道列表的排序。 + public static final String TVCHANNEL_BIND = "tvchannel/bind?";//绑定用户的某个电视的硬件频道(关联语音管家)。 + + //反馈 + public static final String FEEDBACK_TYPES = "feedback/types?";//查询用户可以选择的建议反馈的问题类型。 + public static final String FEEDBACK_SAVE = "feedback/save?";//保存用户的建议反馈。 + public static final String FEEDBACK_UPLOAD = getSERVER() + "api/feedback/upload?";//上传用户反馈相关的图片或者视频文件。 + + //定时管理 + public static final String TIMEMANAGER_LIST = "timeManager/list?";//查询定时时间列表 + public static final String TIMEMANAGER_UPDATEDEVICEONCETIME = "timeManager/updateDeviceOnceTime?";//更新设备的单次定时时间设置 + public static final String TIMEMANAGER_UPDATEDEVICETIME = "timeManager/updateDeviceTime?";//更新设备的周定时时间设置 + public static final String TIMEMANAGER_UPDATEOPENFLAG = "timeManager/updateOpenFlag?";//更新定时时间开关 + public static final String TIMEMANAGER_UPDATESCENETIME = "timeManager/updateSceneTime?";//更新情景模式定时时间设置 + + //办公版创建公司 + public static final String COMPANY_ADD = "office/company/add?";//创建公司,返回公司id + public static final String COMPANY_INFO = "office/company/info?";//获取公司信息 + public static final String ACTUATOR_INFO = "actuator/info?";//获取是否接口是通的 + public static final String COMPANY_LIST = "office/company/list?";//我的公司列表 + //办公版办公区域 + public static final String OFFICE_AREA_ADD = "office/area/add?";//创建办公区域[家庭] + public static final String OFFICE_AREA_UPDATE = "office/area/update?";//办公区域修改 + public static final String OFFICE_AREA_DELETE = "office/area/delete?";//办公区域删除 + public static final String OFFICE_AREA_LIST = "office/area/list?";//办公区域列表 + //办公版员工加入 + public static final String OFFICE_JOIN_APPLY = "office/join/apply?";//员工申请加入公司 + public static final String OFFICE_JOIN_LIST = "office/join/list?";//公司管理员查询员工申请列表和邀请列表 + public static final String OFFICE_JOIN_AUDIT = "office/join/audit?";//公司管理员审核加入申请 + public static final String OFFICE_JOIN_INVITE = "office/join/invite?";//公司管理员邀请其他已注册用户加入 + public static final String OFFICE_JOIN_MY = "office/join/my?";//用户查询我的申请列表、和邀请列表 + public static final String OFFICE_JOIN_ACCEPT = "office/join/accept?";//员工同意加入公司 + //办公版员工管理 + public static final String OFFICE_STAFF_LIST = "office/staff/list?";//公司员工列表 + public static final String OFFICE_STAFF_DELETE = "office/staff/delete?";//删除员工 + public static final String OFFICE_STAFF_ADD = "office/staff/add?";//添加员工到办公区域 + public static final String OFFICE_AREA_STAFF_DELETE = "office/area/staff/delete?";//办公区域删除员工 + public static final String OFFICE_AREA_STAFF_LIST = "office/area/staff/list?";//办公区域的员工列表 + //发现页 + public static final String CMS_ARTICLE_HOMEPAGE = "cms/article/homepage?";//发现-文章首页 + public static final String CMS_ARTICLE_MORE_LATEST = "cms/article/more/latest?";//查看更多最新文章 + public static final String CMS_ARTICLE_MORE_PDG = "cms/article/more/pdg?";//查看更多教程文章 + //红外码库 + public static final String INFRARED_HISTORY_LIST = "infrared/history/list?";//查询可供用户下载用户自己红外码的小艾设备 + public static final String INFRARED_HISTORY_MODIFY = "infrared/history/modify?";//修改用户保存的红外码 + public static final String INFRARED_HISTORY_BATCHDELETE = "infrared/history/batchDelete?";//批量删除红外码库 + public static final String INFRARED_HISTORY_AIDEVICE = "infrared/history/aiDevice/list?";//查询可供用户下载用户自己红外码的小艾设备 + public static final String INFRARED_HISTORY_DOWNLOAD = "infrared/history/download?";//下载用户保存的历史红外码到小艾上 + public static final String INFRARED_HISTORY_ADD = "infrared/history/add?";//保存用户的红外码 + //自动化 + public static final String AUTOMATION_LIST = "automation/list?";//查询某个家庭下的自动化列表 + public static final String AUTOMATION_INFO = "automation/info?";//查询某个自动化的详情信息 + public static final String AUTOMATION_SUBSET_LIST = "automation/subset/list?";//查询某个家庭下的可以支持自动化的子设备 + public static final String AUTOMATION_SUBSET_OPERS = "automation/subset/opers?";//查询某个设备下可以支持的操作列表 + public static final String AUTOMATION_ADD = "automation/add?";//添加或者修改自动化,添加和修改同一个 + public static final String AUTOMATION_DELETE = "automation/delete?";//删除某个自动化 + public static final String AUTOMATION_SETOPEN = "automation/setOpen?";//修改自动化开关 + public static final String AUTOMATION_SETNOTIFY = "automation/setNotify?";//设置自动化通知开关 + public static final String AUTOMATION_EXECUTE = "automation/execute?";//自动化执行 + //485设备 + public static final String GET_LIST_BYPARENTID = "device/model/listByParentType?";//按父id查询子下的添加设备,153是485设备。 + public static final String SUBSET_EXTEND = "subset/extend?"; //在测试设备之前发送地址绑定,如有异常,则不往下走 + //短信接口 + public static final String GET_USERSMS_INFO = "userSms/getUserSmsInfo?";//获取用户短信信息接口,获取用户剩余短信 + public static final String GET_SMSPACKAGE_LIST = "userSms/getSmsPackageList?";//获取短信套餐列表 + public static final String USERSMS_CREATEORDER = "userSms/createOrder?";//创建订单 + public static final String USERSMS_SAFETYSMSNOTIFYMANAGER = "userSms/safetySmsNotifyManager?";//短信提醒管理 + + public static final String HOTEL_UPDATEROOMS = "hotel/manager/info/updateRooms?";//增加或者修改房间列表、楼层列表。 + public static final String USER_DELETE = "user/delete?";//增加或者修改房间列表、楼层列表。 + + public static final String SWAIOT_DEVICE_ISBIND = "swaiot/device/isBind?";//检查用户是否已经绑定乐橙。 + public static final String SWAIOT_SYNCDEVICELIST = "swaiot/device/syncDeviceList?";//创维大屏,同步设备信息 + public static final String SWAIOT_SUSERUNBIND = "swaiot/device/userUnBind?";//创维大屏,解绑设备 + + /** + * 如果是发布版,并且本地不为空的时候去取服务器地址 + * + * @return server + */ + public static String getSERVER() { + if (!SP.getPublic().getString(SP.server).isEmpty()) { + return SP.getPublic().getString(SP.server); + } + return SERVER_URL; + } +} diff --git a/app/src/main/java/com/yonsz/z1/net/NetWorkUtil.java b/app/src/main/java/com/yonsz/z1/net/NetWorkUtil.java new file mode 100644 index 0000000..0cb148f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/net/NetWorkUtil.java @@ -0,0 +1,553 @@ +package com.yonsz.z1.net; + +import android.os.Build; +import android.util.Log; +import android.widget.Toast; + +import com.baidu.aip.chatkit.model.Message; +import com.google.gson.JsonParseException; +import com.google.gson.JsonParser; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.io.File; +import java.io.IOException; +import java.net.SocketTimeoutException; +import java.net.URLEncoder; +import java.security.cert.CertificateException; +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.ResponseBody; + +import static com.yonsz.z1.difference.DifferConstans.APPID_S; +import static com.yonsz.z1.difference.DifferConstans.APPID_S_VOICE; +import static com.yonsz.z1.difference.DifferConstans.VERSION_S; + +/** + * Created by Administrator on 2016/11/27 0027. + */ + +public class NetWorkUtil { + private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); + private static final String SERVER_URL_NOW = NetWorkUrl.getSERVER(); + // private static final String SERVER_URL_HARD = SERVER_URL_NOW.replace("8181", "9191"); + private static OkHttpClient mOkHttpClient; + private static NetWorkUtil mNet; + private Toast mToast = null; + + public synchronized static NetWorkUtil instans() { + if (mOkHttpClient == null) { + //初始化OkHttpClient + mOkHttpClient = new OkHttpClient().newBuilder() + .connectTimeout(10, TimeUnit.SECONDS)//设置超时时间 + .readTimeout(30, TimeUnit.SECONDS)//设置读取超时时间 + .writeTimeout(30, TimeUnit.SECONDS)//设置写入超时时间 + .build(); + } + if (mNet == null) { + mNet = new NetWorkUtil(); + } + return mNet; + } + + public static boolean isGoodJson(String json) { + try { + new JsonParser().parse(json); + return true; + } catch (JsonParseException e) { + System.out.println("bad json: " + json); + return false; + } + } + + public void requestGetByAsy(String actionUrl, HashMap paramsMap, + final ReqCallBack callBack) { + try { + paramsMap.put("tokenId", SharedpreferencesUtil.get(Constans.TOKENID, "null")); + // paramsMap.put("tokenId", "48c0fa05e9e2432da5a91fb975f16f0a"); + paramsMap.put("session", SharedpreferencesUtil.get(Constans.SEESSIONID, "null")); + StringBuilder tempParams = new StringBuilder(); + int pos = 0; + for (String key : paramsMap.keySet()) { + if (pos > 0) { + tempParams.append("&"); + } + tempParams.append(String.format("%s=%s", key, URLEncoder.encode(paramsMap.get(key), "utf-8"))); + pos++; + } + String params = tempParams.toString(); + // RequestBody body = RequestBody.create(NetWorkUrl.MEDIA_TYPE_JSON, params); + String requestUrl = String.format("%s/%s%s", SERVER_URL_NOW + "api", actionUrl, params); + // final Request request = addHeaders().url(requestUrl).post(body).build(); + Log.i("requestUrlGet", requestUrl); + final Request request = addHeaders().url(requestUrl).build(); + final Call call = mOkHttpClient.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + Log.e("test", "onFailure: " + e.getMessage()); + if (e.getMessage().contains("Unable to resolve host")) { + if (callBack != null) { + callBack.onFail("网络出错"); + } + } else { + if (callBack != null) { + callBack.onFail(e.getMessage()); + } + + + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + if (response.isSuccessful()) { + ResponseBody body1 = response.body(); + String string = response.body().string(); + if (callBack != null && isGoodJson(string)) { + callBack.onSuccess(string); + } + } else { + Log.i("test", "onResponse: not response"); + String string = response.body().string(); + if (callBack != null && isGoodJson(string)) { + callBack.onSuccess(string); + } + } + } + }); + } catch (Exception e) { + } + } + + public void requestGetByAsy(String actionUrl, HashMap paramsMap, + final ReqCallBackOta callBack) { + try { + paramsMap.put("tokenId", SharedpreferencesUtil.get(Constans.TOKENID, "null")); + // paramsMap.put("tokenId", "48c0fa05e9e2432da5a91fb975f16f0a"); + paramsMap.put("session", SharedpreferencesUtil.get(Constans.SEESSIONID, "null")); + StringBuilder tempParams = new StringBuilder(); + int pos = 0; + for (String key : paramsMap.keySet()) { + if (pos > 0) { + tempParams.append("&"); + } + tempParams.append(String.format("%s=%s", key, URLEncoder.encode(paramsMap.get(key), "utf-8"))); + pos++; + } + String params = tempParams.toString(); + // RequestBody body = RequestBody.create(NetWorkUrl.MEDIA_TYPE_JSON, params); + String requestUrl = String.format("%s/%s%s", SERVER_URL_NOW + "api", actionUrl, params); + // final Request request = addHeaders().url(requestUrl).post(body).build(); + Log.i("requestUrlGet", requestUrl); + final Request request = addHeaders().url(requestUrl).build(); + final Call call = mOkHttpClient.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + Log.e("test", "onFailure: " + e.getMessage()); + if (e.getMessage().contains("Unable to resolve host")) { + if (callBack != null) { + callBack.onFail("网络出错"); + } + } else { + if (callBack != null) { + callBack.onFail(e.getMessage()); + } + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + if (response.isSuccessful()) { + if (callBack != null) { + callBack.onSuccess(response); + } + } else { + Log.i("test", "onResponse: not response"); + } + } + }); + } catch (Exception e) { + } + } + + //测试新接口,加入版本,appid以及企业 + public void requestPostByAsynew(String actionUrl, HashMap paramsMap, + final ReqCallBack callBack) { + try { + if (null != SharedpreferencesUtil.get(Constans.TOKENID, "null")) { + paramsMap.put("tokenId", SharedpreferencesUtil.get(Constans.TOKENID, "null")); + } + if (null != SharedpreferencesUtil.get(Constans.SEESSIONID, "null")) { + paramsMap.put("session", SharedpreferencesUtil.get(Constans.SEESSIONID, "null")); + } + // paramsMap.put("tokenId", "48c0fa05e9e2432da5a91fb975f16f0a"); + StringBuilder tempParams = new StringBuilder(); + int pos = 0; + for (String key : paramsMap.keySet()) { + if (pos > 0) { + tempParams.append("&"); + } + tempParams.append(String.format("%s=%s", key, URLEncoder.encode(paramsMap.get(key), "utf-8"))); + pos++; + } + String params = tempParams.toString(); + RequestBody body = RequestBody.create(NetWorkUrl.MEDIA_TYPE_JSON, params); + String requestUrl = String.format("%s/%s/", SERVER_URL_NOW + "ysz/" + VERSION_S, actionUrl); + final Request request = addHeaders().url(requestUrl).post(body).build(); + Log.i("requestUrlPost", requestUrl + params); + final Call call = mOkHttpClient.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + Log.e("test", "onFailure: " + e.getMessage()); + if (e.getMessage().contains("Unable to resolve host")) { + if (callBack != null) { + callBack.onFail("网络出错"); + } + } else { + if (callBack != null) { + callBack.onFail(e.getMessage()); + } + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + if (response.isSuccessful()) { + ResponseBody body1 = response.body(); + String string = response.body().string(); + if (callBack != null && isGoodJson(string)) { + callBack.onSuccess(string); + } + } else { + String string = response.body().string(); + if (callBack != null && isGoodJson(string)) { + callBack.onSuccess(string); + } + Log.i("test", "onResponse: not response" + string); + } + } + }); + } catch (Exception e) { + } + } + + public void requestPostByAsynewApi(String actionUrl, HashMap paramsMap, + final ReqCallBack callBack) { + try { + paramsMap.put("tokenId", SharedpreferencesUtil.get(Constans.TOKENID, "null")); + // paramsMap.put("tokenId", "48c0fa05e9e2432da5a91fb975f16f0a"); + paramsMap.put("session", SharedpreferencesUtil.get(Constans.SEESSIONID, "null")); + StringBuilder tempParams = new StringBuilder(); + int pos = 0; + for (String key : paramsMap.keySet()) { + if (pos > 0) { + tempParams.append("&"); + } + tempParams.append(String.format("%s=%s", key, URLEncoder.encode(paramsMap.get(key), "utf-8"))); + pos++; + } + String params = tempParams.toString(); + RequestBody body = RequestBody.create(NetWorkUrl.MEDIA_TYPE_JSON, params); + String requestUrl = String.format("%s/%s", SERVER_URL_NOW + "api", actionUrl); + final Request request = addHeaders().url(requestUrl).post(body).build(); + Log.i("requestUrlPost", requestUrl + params); + final Call call = mOkHttpClient.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + Log.e("test", "onFailure: " + e.getMessage()); + if (e.getMessage().contains("Unable to resolve host")) { + if (callBack != null) { + callBack.onFail("网络出错"); + } + } else { + if (callBack != null) { + callBack.onFail(e.getMessage()); + } + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + if (response.isSuccessful()) { + ResponseBody body1 = response.body(); + String string = response.body().string(); + if (callBack != null && isGoodJson(string)) { + callBack.onSuccess(string); + } + } else { + String string = response.body().string(); + if (callBack != null && isGoodJson(string)) { + callBack.onSuccess(string); + } + Log.i("test", "onResponse: not response" + string); + } + } + }); + } catch (Exception e) { + } + } + + public void requestPostByAsyBody(String actionUrl, HashMap paramsMap, String bodyMap, + final ReqCallBack callBack) { + try { + paramsMap.put("tokenId", SharedpreferencesUtil.get(Constans.TOKENID, "null")); + // paramsMap.put("tokenId", "48c0fa05e9e2432da5a91fb975f16f0a"); + paramsMap.put("session", SharedpreferencesUtil.get(Constans.SEESSIONID, "null")); + StringBuilder tempParams = new StringBuilder(); + int pos = 0; + for (String key : paramsMap.keySet()) { + Object value = paramsMap.get(key); + if (value instanceof String[]) { + String[] values = (String[]) value; + for (String s : values) { + if (pos > 0) { + tempParams.append("&"); + } + tempParams.append(String.format("%s=%s", key, s)); + pos++; + } + } else { + if (pos > 0) { + tempParams.append("&"); + } + tempParams.append(String.format("%s=%s", key, URLEncoder.encode(value.toString(), "utf-8"))); + pos++; + } + } + String params = tempParams.toString(); + RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), bodyMap); + String requestUrl = String.format("%s/%s", SERVER_URL_NOW + "api", actionUrl); + final Request request = addHeaders().url(requestUrl + params).post(body).build(); + Log.i("requestUrlPostBody", requestUrl + params); + final Call call = mOkHttpClient.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + Log.e("test", "onFailure: " + e.getMessage()); + if (e.getMessage().contains("Unable to resolve host")) { + if (callBack != null) { + callBack.onFail("网络出错"); + } + } else { + if (callBack != null) { + callBack.onFail(e.getMessage()); + } + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + if (response.isSuccessful()) { + ResponseBody body1 = response.body(); + String string = response.body().string(); + if (callBack != null && isGoodJson(string)) { + callBack.onSuccess(string); + } + } else { + String string = response.body().string(); + if (callBack != null && isGoodJson(string)) { + callBack.onSuccess(string); + } + Log.i("test", "onResponse: not response" + string); + } + } + }); + } catch (Exception e) { + } + } + + //eee + public void requestPostByAsyId(String actionUrl, HashMap paramsMap, final Message chatMessage, + final ReqCallId callBack) { + try { + paramsMap.put("tokenId", SharedpreferencesUtil.get(Constans.TOKENID, "null")); + paramsMap.put("session", SharedpreferencesUtil.get(Constans.SEESSIONID, "null")); + StringBuilder tempParams = new StringBuilder(); + int pos = 0; + for (String key : paramsMap.keySet()) { + if (pos > 0) { + tempParams.append("&"); + } + tempParams.append(String.format("%s=%s", key, URLEncoder.encode(paramsMap.get(key), "utf-8"))); + pos++; + } + String params = tempParams.toString(); + RequestBody body = RequestBody.create(NetWorkUrl.MEDIA_TYPE_JSON, params); + String requestUrl = String.format("%s/%s", SERVER_URL_NOW + "api", actionUrl); + final Request request = addHeaders().url(requestUrl).post(body).build(); + Log.i("requestUrlPost", requestUrl + params); + final Call call = mOkHttpClient.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + Log.e("test", "onFailure: " + e.getMessage()); + if (e instanceof SocketTimeoutException) { + //判断超时异常 + if (callBack != null) { + callBack.onFail("连接超时", chatMessage); + } + } else if (callBack != null) { + callBack.onFail(e.getMessage(), chatMessage); + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + if (response.isSuccessful()) { + ResponseBody body1 = response.body(); + String string = response.body().string(); + if (callBack != null && isGoodJson(string)) { + callBack.onSuccess(string, chatMessage); + } + } else { + Log.i("test", "onResponse: not response"); + if (callBack != null) { + callBack.onFail("连接超时", chatMessage); + } + } + } + }); + } catch (Exception e) { + Log.i("test", e.getMessage()); + if (callBack != null) { + callBack.onFail("连接超时", chatMessage); + } + } + } + + /** + * 统一为请求添加头信息 + * + * @return + */ + private Request.Builder addHeaders() { + Request.Builder builder = new Request.Builder() + .addHeader("Connection", "keep-alive") + .addHeader("platform", "1") + .addHeader("phoneModel", Build.MODEL) + .addHeader("phoneBrand", Build.BRAND) + .addHeader("systemVersion", Build.VERSION.RELEASE) + .addHeader("appId", APPID_S) + .addHeader("appBrandId", APPID_S_VOICE) + .addHeader("appVersion", "6_6.6.0"); + return builder; + } + + public void uploadImg(List mImgUrls, String url, String picTag, final ReqCallBack back) { + + // mImgUrls为存放图片的url集合 + MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM); + for (int i = 0; i < mImgUrls.size(); i++) { + File f = new File(mImgUrls.get(i)); + if (f != null) { + if (picTag.equals("1")) { + builder.addFormDataPart("avatar", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f)); + } else if (picTag.equals("2")) { + builder.addFormDataPart("housePicFile", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f)); + } else if (picTag.equals("4")) { + builder.addFormDataPart("attachment", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f)); + } else { + builder.addFormDataPart("voiceFile", f.getName(), RequestBody.create(MediaType.parse("application/json; charset=utf-8"), f)); + } + } + } + //添加其它信息 + // builder.addFormDataPart("time",takePicTime); + // builder.addFormDataPart("mapX", SharedInfoUtils.getLongitude()); + // builder.addFormDataPart("mapY",SharedInfoUtils.getLatitude()); + // builder.addFormDataPart("name",SharedInfoUtils.getUserName()); + + + MultipartBody requestBody = builder.build(); + //构建请求 + Request request = new Request.Builder() + .url(url)//地址 + .post(requestBody)//添加请求体 + .build(); + Log.i("requestUrlUpload", url + requestBody); + mOkHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + Log.i("uploadImg", "onFailure: " + e.getLocalizedMessage()); + System.out.println("上传失败:e.getLocalizedMessage() = " + e.getLocalizedMessage()); + if (back != null) { + back.onFail(e.getMessage()); + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + // Log.i("uploadImg", "onResponse: " + response.body().string()); + if (response.isSuccessful()) { + String string = response.body().string(); + if (back != null) { + back.onSuccess(string); + } + } else { + Log.i("test", "onResponse: not response"); + } + + } + }); + } + + public void downloadFile(final String url, final ReqCallBackOta back) { + Request request = new Request.Builder().url(url).build(); + mOkHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + // 下载失败 + e.printStackTrace(); + Log.i("DOWNLOAD", "download failed"); + if (back != null) { + back.onFail(e.getMessage()); + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + if (back != null) { + back.onSuccess(response); + } + } + }); + } + + public interface ReqCallBack { + void onSuccess(String respone); + + void onFail(String message); + } + + public interface ReqCallBackOta { + void onSuccess(Response respone); + + void onFail(String message); + } + + public interface ReqCallId { + void onSuccess(String respone, Message chatMessage); + + void onFail(String message, Message chatMessage); + } +} diff --git a/app/src/main/java/com/yonsz/z1/net/NetworkChangeEvent.java b/app/src/main/java/com/yonsz/z1/net/NetworkChangeEvent.java new file mode 100644 index 0000000..a08a106 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/net/NetworkChangeEvent.java @@ -0,0 +1,13 @@ +package com.yonsz.z1.net; + +/** + * Created by Administrator on 2018/7/31. + */ + +public class NetworkChangeEvent { + public boolean isConnected; //是否存在网络 + + public NetworkChangeEvent(boolean isConnected) { + this.isConnected = isConnected; + } +} diff --git a/app/src/main/java/com/yonsz/z1/net/NetworkConnectChangedReceiver.java b/app/src/main/java/com/yonsz/z1/net/NetworkConnectChangedReceiver.java new file mode 100644 index 0000000..0bc3753 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/net/NetworkConnectChangedReceiver.java @@ -0,0 +1,25 @@ +package com.yonsz.z1.net; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import com.yonsz.z1.utils.DensityUtil; + +import de.greenrobot.event.EventBus; + +/** + * Created by Administrator on 2018/7/31. + */ + +public class NetworkConnectChangedReceiver extends BroadcastReceiver { + private static final String TAG = "NetworkConnectChanged"; + @Override + public void onReceive(Context context, Intent intent) { + //**判断当前的网络连接状态是否可用*/ + boolean isConnected = DensityUtil.isConnected(context); + Log.d(TAG, "onReceive: 当前网络 " + isConnected); + EventBus.getDefault().post(new NetworkChangeEvent(isConnected)); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainFailActivity.java b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainFailActivity.java new file mode 100644 index 0000000..b96cb49 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainFailActivity.java @@ -0,0 +1,75 @@ +package com.yonsz.z1.new433.curtain; + +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entity4.CloseActivityEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import de.greenrobot.event.EventBus; + +/** + * Created by Administrator on 2017/12/16. + */ + +public class CurtainFailActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_sure_fail; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtains_learn_fail); + initView(); + } + + private void initView() { + bt_sure_fail = (Button) findViewById(R.id.bt_sure_fail); + mTitleView = (TitleView) findViewById(R.id.title_sure_light_fail); + mTitleView.setHead(R.string.Add_help); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + + bt_sure_fail.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + EventBus.getDefault().post( + new CloseActivityEntity("CurtainsStepTwoActivity")); + /*Intent intent = new Intent(CurtainFailActivity.this, CurtainsStepOneActivity.class); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("largeClass", getIntent().getExtras().get("largeClass").toString()); + startActivity(intent);*/ + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainModifyActivity.java b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainModifyActivity.java new file mode 100644 index 0000000..b83854c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainModifyActivity.java @@ -0,0 +1,307 @@ +package com.yonsz.z1.new433.curtain; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entitya2.BlindTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.version4.fragment.CurtainFragment; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.GET_SWITCHER_CHANGE_INFO; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; + +/** + * Created by Administrator on 2018/7/9. + */ + +public class CurtainModifyActivity extends BaseActivity implements CompoundButton.OnCheckedChangeListener { + private TitleView mTitleView; + private Button nextConfig; + + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String deviceAddress = "0"; + private List condition = new ArrayList<>(); + private String addressId; + private TextView tv_curtain_step_two; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtain_two); + initView(); + initListener(); + } + + private void initView() { + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + addressId = deviceAddress; + tv_curtain_step_two = (TextView) findViewById(R.id.tv_curtain_step_two); + tv_curtain_step_two.setVisibility(View.GONE); + nextConfig = (Button) findViewById(R.id.bt_sure_config); + nextConfig.setOnClickListener(this); + nextConfig.setVisibility(View.GONE); + mTitleView = (TitleView) findViewById(R.id.title_switcher_two); + mTitleView.setHead("修改智能窗帘信息"); + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + updateBlindEntityName(addressId, getIntent().getExtras().get("curtainId").toString()); + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(this); + } + + switch (deviceAddress) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + } + + private void updateBlindEntityName(String addressId, String id) { + + } + + private void initListener() { + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + Intent intent = new Intent(CurtainModifyActivity.this, CurtainsStepOneActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("isFirst", "1"); + intent.putExtra("addressId", "0"); + intent.putExtra("deviceAddress", deviceAddress); + if (addressId.equals("13")) { + intent.putExtra("addressId", "0"); + } else { + intent.putExtra("addressId", String.valueOf(Integer.valueOf(addressId) + 1)); + } + startActivity(intent); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_BLINDENTITY_NAME_SUCCESS: + BlindTestEntity blindTestEntity = (BlindTestEntity) msg.obj; + Intent intent = new Intent(CurtainModifyActivity.this, CurtainFragment.class); + intent.putExtra("devicePosition", blindTestEntity.getObj().getAddressName()); + intent.putExtra("addressId", blindTestEntity.getObj().getAddressId()); + setResult(GET_SWITCHER_CHANGE_INFO, intent); + finish(); + break; + } + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + switch (id) { + case R.id.cb_position0: + if (isChecked) + addressId = "0"; + break; + case R.id.cb_position1: + if (isChecked) + addressId = "1"; + break; + case R.id.cb_position2: + if (isChecked) + addressId = "2"; + break; + case R.id.cb_position3: + if (isChecked) + addressId = "3"; + break; + case R.id.cb_position4: + if (isChecked) + addressId = "4"; + break; + case R.id.cb_position5: + if (isChecked) + addressId = "5"; + break; + case R.id.cb_position6: + if (isChecked) + addressId = "6"; + break; + case R.id.cb_position7: + if (isChecked) + addressId = "7"; + break; + case R.id.cb_position8: + if (isChecked) + addressId = "8"; + break; + case R.id.cb_position9: + if (isChecked) + addressId = "9"; + break; + case R.id.cb_position10: + if (isChecked) + addressId = "10"; + break; + case R.id.cb_position11: + if (isChecked) + addressId = "11"; + break; + case R.id.cb_position12: + if (isChecked) + addressId = "12"; + break; + case R.id.cb_position13: + if (isChecked) + addressId = "13"; + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainNewActivity.java b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainNewActivity.java new file mode 100644 index 0000000..37f61c0 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainNewActivity.java @@ -0,0 +1,587 @@ +package com.yonsz.z1.new433.curtain; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Vibrator; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.database.entity.LightListEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.VoiceControllEntity; +import com.yonsz.z1.database.entity.entitya2.BlindTestEntity; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.device.light.LightAdapter; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.utils.ConnectNettyUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.PositionPopupWindow; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.DELBLIND_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.DELBLIND_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECTBLIND_BYZI_FAIL; +import static com.yonsz.z1.net.Constans.SELECTBLIND_BYZI_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDPID_STUDYBLIND_FAIL; +import static com.yonsz.z1.net.Constans.SENDPID_STUDYBLIND_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDVOICE_BLINDMSG_FAIL; +import static com.yonsz.z1.net.Constans.SENDVOICE_BLINDMSG_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.isLocalControl; + +/** + * Created by Administrator on 2017/12/15. + */ + +public class CurtainNewActivity extends BaseActivity { + private TitleView mTitleView; + private LoadingDialog mLoadingDialog; + private SwipeMenuRecyclerView mRecyclerView; + private CurtainsNewAdapter mCurtainsAdapter; + private List mdatas; + private String ziId; + private String userId; + private int voicePosition; + private boolean isDeleteChild = false; + private boolean isModifyPosition = false; + private String addressId; + private String deviceIp = ""; + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.y76); + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtains); + initView(); + selectBlindByZi(); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + addressId = getIntent().getExtras().get("deviceAddress").toString(); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + mTitleView = (TitleView) findViewById(R.id.title_curtains); + mTitleView.setHead(R.string.curtains); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.clearBackGroud(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (isModifyPosition || isDeleteChild) { + if (isDeleteChild) { + isDeleteChild = false; + mCurtainsAdapter.setIsDelete(isDeleteChild); + mCurtainsAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setBackVisible(); + } + if (isModifyPosition) { + isModifyPosition = false; + mCurtainsAdapter.setIsLearn(isModifyPosition); + mCurtainsAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setBackVisible(); + } + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(CurtainNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + isDeleteChild = true; + mCurtainsAdapter.setIsDelete(isDeleteChild); + mCurtainsAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionGone(); + mTitleView.setBackGone(); + break; + case 2: + //添加窗帘 + if (DensityUtil.isNetworkConnected(CurtainNewActivity.this)) { + if (addressId.equals("14")) { + showPositionBottom(CURTAINS_TAG, "1", "0"); + } else { + showPositionBottom(CURTAINS_TAG, "1", addressId); + } + } else { + ToastUtil.show(CurtainNewActivity.this, R.string.net_error); + } + break; + case 3: + //语令说明 + Intent intent = new Intent(CurtainNewActivity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", CURTAINS_TAG); + startActivity(intent); + break; + case 4: + //修改窗帘位置信息 + isModifyPosition = true; + mCurtainsAdapter.setIsLearn(isModifyPosition); + mCurtainsAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionGone(); + mTitleView.setBackGone(); + break; + } + } + }); + dialog2.setContent("添加窗帘"); + dialog2.setLearnTxt(R.string.Modify_location_curtain); + dialog2.setSureBtnTxt("删除窗帘"); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + mdatas = new ArrayList<>(); + mCurtainsAdapter = new CurtainsNewAdapter(this, mdatas, isModifyPosition); + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_parent_device_list); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setItemViewCacheSize(0);//试图解决复用的问题 + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setSwipeMenuCreator(swipeMenuCreator); + // mRecyclerView.setSwipeMenuItemClickListener(mMenuItemClickListener); + mRecyclerView.setAdapter(mCurtainsAdapter); + mCurtainsAdapter.setOnItemLightClickListener(new LightAdapter.OnItemLightClickListener() { + @Override + public void onLearnLightClick(int position, int i) { + + } + + @Override + public void onLightOpenCloseClick(final int position, int i) { + //控制窗帘 + switch (i) { + case 0: + setShake(); + //关闭窗帘 + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(mdatas.get(position).getCloseCode().toString(), "02")); + } else + studyAndControllBlind(mdatas.get(position).getCloseCode().toString()); + break; + case 1: + setShake(); + //打开窗帘 + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(mdatas.get(position).getOpenCode().toString(), "02")); + } else + studyAndControllBlind(mdatas.get(position).getOpenCode().toString()); + break; + case 2: + setShake(); + //暂停 + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(mdatas.get(position).getStopCode().toString(), "05")); + } else + studyAndControllBlind(mdatas.get(position).getStopCode().toString()); + break; + case 3: + //删除窗帘 + ConfirmDialog dialog = new ConfirmDialog(CurtainNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + delBlindEntity(mdatas.get(position).getId().toString()); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 4: + if (mdatas.get(position).getAddressId().equals("14")) { + showPositionBottom(mdatas.get(position).getId().toString(), "0", "0"); + } else { + showPositionBottom(mdatas.get(position).getId().toString(), "0", mdatas.get(position).getAddressId()); + } + break; + } + } + + @Override + public void onVoiceClick(final int position, int voiceControlTag) { + final Handler ThreadHandler = new Handler(); + switch (voiceControlTag) { + case 1: + setShake(); + ConfirmDialog dialog = new ConfirmDialog(CurtainNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //获取编码,记录当前的位置 + voicePosition = position; + /*//设置定时器 + ThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + Message message = new Message(); + message.what = BLIND_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + }, 6000);*/ + allowVoiceControll(1, mdatas.get(position).getId()); + break; + } + } + }); + dialog.setContent("开启语音控制?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + setShake(); + ConfirmDialog dialog1 = new ConfirmDialog(CurtainNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //获取编码,记录当前的位置 + voicePosition = position; + /*//设置定时器 + ThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + Message message = new Message(); + message.what = BLIND_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + }, 6000);*/ + allowVoiceControll(0, mdatas.get(position).getId()); + break; + } + } + }); + dialog1.setContent("关闭语音控制?"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + break; + case 3: + ToastUtil.show(CurtainNewActivity.this, "请完成窗帘学习"); + break; + } + } + }); + ConnectNettyUtil.connectNetty(ziId,deviceIp,this); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (isLocalControl) { + NettyManager.closeCtx(); + } + } + + private void delBlindEntity(String id) { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", id); + map.put("deviceType", CURTAINS_TAG); + netWorkUtil.requestPostByAsynew(NetWorkUrl.DELBLIND_ENTITY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("delBlindEntity", "ShareDeviceActivity onSuccess()" + respone); + VoiceControllEntity obj = JSON.parseObject(respone, VoiceControllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELBLIND_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DELBLIND_ENTITY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DELBLIND_ENTITY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void allowVoiceControll(int controlFlag, String id) { + /* initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", id); + map.put("controlFlag", controlFlag + ""); + map.put("ziId", ziId); + netWorkUtil.requestPostByAsynew(NetWorkUrl.SENDVOICE_BLINDMSG, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("allowVoiceControll", "ShareDeviceActivity onSuccess()" + respone); + VoiceControllEntity obj = JSON.parseObject(respone, VoiceControllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SENDVOICE_BLINDMSG_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(SENDVOICE_BLINDMSG_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SENDVOICE_BLINDMSG_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void showPositionBottom(final String id, final String tag, String position) { + View rootview = LayoutInflater.from(CurtainNewActivity.this).inflate(R.layout.activity_curtains, null); + PositionPopupWindow popupWindow = new PositionPopupWindow(this, position, new PositionPopupWindow.OnCompleteListener() { + @Override + public void onComplete(String time, List conditionList) { + Log.i("showPositionBottom", "SwitcherActivity onComplete()" + time + conditionList.toString()); + switch (tag) { + case "0": + if (time.equals("13")) { + updateBlindEntityName("0", id); + } else { + updateBlindEntityName(String.valueOf(Integer.valueOf(time) + 1), id); + } + break; + case "1": + Intent intent = new Intent(CurtainNewActivity.this, CurtainsStepOneActivity.class); + intent.putExtra("isFirst", "0"); + if (time.equals("13")) { + intent.putExtra("addressId", "0"); + } else { + intent.putExtra("addressId", String.valueOf(Integer.valueOf(time) + 1)); + } + intent.putExtra("deviceAddress", addressId); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + } + } + }); + popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); + } + + private void updateBlindEntityName(String addressId, String id) { + /*NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("addressId", addressId); + map.put("id", id); + util.requestPostByAsynew(NetWorkUrl.UPDATE_BLINDENTITY_NAME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateBlindEntityName", "ShareDeviceActivity onSuccess()" + respone); + BlindTestEntity obj = JSON.parseObject(respone, BlindTestEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECTBLIND_BYZI_SUCCESS: + LightListEntity obj = (LightListEntity) msg.obj; + mdatas.clear(); + if (obj.getObj() != null) { + mdatas.addAll(0, obj.getObj()); + } else { + isDeleteChild = false; + mCurtainsAdapter.setIsDelete(isDeleteChild); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setBackVisible(); + } + mCurtainsAdapter.notifyDataSetChanged(); + break; + case SELECTBLIND_BYZI_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case DELBLIND_ENTITY_SUCCESS: + selectBlindByZi(); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + selectBlindByZi(); + break; + case SENDVOICE_BLINDMSG_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + if (mdatas.get(voicePosition).getVoiceFlag().equals("1")) { + mdatas.get(voicePosition).setVoiceFlag("0"); + ToastUtil.show(CurtainNewActivity.this, "关闭语音成功"); + } else { + mdatas.get(voicePosition).setVoiceFlag("1"); + ToastUtil.show(CurtainNewActivity.this, "开启语音成功"); + } + mCurtainsAdapter.notifyItemChanged(voicePosition); + break; + case SENDPID_STUDYBLIND_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void studyAndControllBlind(String order) { + + } + + private void selectBlindByZi() { + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("deviceType", CURTAINS_TAG); + netWorkUtil.requestPostByAsynew(NetWorkUrl.SELECTBLIND_BYZI, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("selectBlindByZi", "ShareDeviceActivity onSuccess()" + respone); + LightListEntity obj = JSON.parseObject(respone, LightListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECTBLIND_BYZI_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECTBLIND_BYZI_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECTBLIND_BYZI_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainOneActivity.java b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainOneActivity.java new file mode 100644 index 0000000..00cd438 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainOneActivity.java @@ -0,0 +1,119 @@ +package com.yonsz.z1.new433.curtain; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; + +/** + * Created by Administrator on 2018/7/9. + */ + +public class CurtainOneActivity extends BaseActivity { + private TitleView mTitleView; + private CheckBox cb_position0, cb_position1; + private Button nextConfig; + private String largeClass; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtain_one); + initView(); + initListener(); + } + + private void initListener() { + cb_position0.setOnClickListener(this); + cb_position1.setOnClickListener(this); + } + + private void initView() { + cb_position0 = (CheckBox) findViewById(R.id.cb_position0); + cb_position1 = (CheckBox) findViewById(R.id.cb_position1); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + //进入2/4界面 + // studyAndControllPlug(blindTestEntity.getObj().getOnInfrared().toString()); + Intent intent = new Intent(CurtainOneActivity.this, CurtainsStepOneActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", CURTAINS_TAG); + intent.putExtra("largeClass", largeClass); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + + intent.putExtra("isFirst", "1"); + intent.putExtra("deviceAddress", getIntent().getExtras().get("addressId").toString()); + startActivity(intent); + } + }); + mTitleView = (TitleView) findViewById(R.id.title_switcher_one); + mTitleView.setHead(R.string.select_smart_c); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_position0: + largeClass = "0"; + cb_position0.setChecked(true); + cb_position1.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + case R.id.cb_position1: + largeClass = "1"; + cb_position1.setChecked(true); + cb_position0.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainReAddFailActivity.java b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainReAddFailActivity.java new file mode 100644 index 0000000..0f2528b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainReAddFailActivity.java @@ -0,0 +1,75 @@ +package com.yonsz.z1.new433.curtain; + +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entity4.CloseActivityEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import de.greenrobot.event.EventBus; + +/** + * Created by Administrator on 2017/12/16. + */ + +public class CurtainReAddFailActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_sure_fail; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtains_learn_fail); + initView(); + } + + private void initView() { + bt_sure_fail = (Button) findViewById(R.id.bt_sure_fail); + mTitleView = (TitleView) findViewById(R.id.title_sure_light_fail); + mTitleView.setHead("添加帮助"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + + bt_sure_fail.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + EventBus.getDefault().post( + new CloseActivityEntity("CurtainsReAddTwoActivity")); + /*Intent intent = new Intent(CurtainReAddFailActivity.this, CurtainsReAddOneActivity.class); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("largeClass", getIntent().getExtras().get("largeClass").toString()); + startActivity(intent);*/ + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainTwoActivity.java b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainTwoActivity.java new file mode 100644 index 0000000..f0d906f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainTwoActivity.java @@ -0,0 +1,288 @@ +package com.yonsz.z1.new433.curtain; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; + +/** + * Created by Administrator on 2018/7/9. + */ + +public class CurtainTwoActivity extends BaseActivity implements CompoundButton.OnCheckedChangeListener { + private TitleView mTitleView; + private String largeClass; + private Button nextConfig; + + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String deviceAddress = "0"; + private List condition = new ArrayList<>(); + private String addressId; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtain_two); + initView(); + initListener(); + } + + private void initView() { + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + addressId = deviceAddress; + nextConfig = (Button) findViewById(R.id.bt_sure_config); + nextConfig.setOnClickListener(this); + largeClass = getIntent().getExtras().get("largeClass").toString(); + mTitleView = (TitleView) findViewById(R.id.title_switcher_two); + if (largeClass.equals("0")) { + mTitleView.setHead(R.string.add_smart_c); + } else { + mTitleView.setHead(R.string.add_smart_c_screen); + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(this); + } + + switch (deviceAddress) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + } + + private void initListener() { + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + Intent intent = new Intent(CurtainTwoActivity.this, CurtainsStepOneActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", CURTAINS_TAG); + intent.putExtra("largeClass", largeClass); + + intent.putExtra("isFirst", "1"); + intent.putExtra("addressId", "0"); + intent.putExtra("deviceAddress", deviceAddress); + if (addressId.equals("13")) { + intent.putExtra("addressId", "0"); + } else { + intent.putExtra("addressId", String.valueOf(Integer.valueOf(addressId) + 1)); + } + startActivity(intent); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + switch (id) { + case R.id.cb_position0: + if (isChecked) + addressId = "0"; + break; + case R.id.cb_position1: + if (isChecked) + addressId = "1"; + break; + case R.id.cb_position2: + if (isChecked) + addressId = "2"; + break; + case R.id.cb_position3: + if (isChecked) + addressId = "3"; + break; + case R.id.cb_position4: + if (isChecked) + addressId = "4"; + break; + case R.id.cb_position5: + if (isChecked) + addressId = "5"; + break; + case R.id.cb_position6: + if (isChecked) + addressId = "6"; + break; + case R.id.cb_position7: + if (isChecked) + addressId = "7"; + break; + case R.id.cb_position8: + if (isChecked) + addressId = "8"; + break; + case R.id.cb_position9: + if (isChecked) + addressId = "9"; + break; + case R.id.cb_position10: + if (isChecked) + addressId = "10"; + break; + case R.id.cb_position11: + if (isChecked) + addressId = "11"; + break; + case R.id.cb_position12: + if (isChecked) + addressId = "12"; + break; + case R.id.cb_position13: + if (isChecked) + addressId = "13"; + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsNewAdapter.java b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsNewAdapter.java new file mode 100644 index 0000000..f0bfe93 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsNewAdapter.java @@ -0,0 +1,178 @@ +package com.yonsz.z1.new433.curtain; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.device.light.LightAdapter; + +import java.util.List; + +/** + * Created by Administrator on 2017/12/16. + */ + +public class CurtainsNewAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mObjEntity; + private boolean isLearn; + private LightAdapter.OnItemLightClickListener mLightClickListener; + private boolean isDeleteChild; + + public CurtainsNewAdapter(Context mContext, List mObjEntity, boolean isLearn) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + this.isLearn = isLearn; + } + + public void setIsLearn(boolean isLearn1) { + isLearn = isLearn1; + } + + public void setIsDelete(boolean isDelete1) { + isDeleteChild = isDelete1; + } + + + @Override + public CurtainsNewAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_curtains_new, + parent, false); + return new CurtainsNewAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(CurtainsNewAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView curtainsRoom; + private TextView curtainsState; + private FrameLayout mCurtainsOpne, mCurtainsStop, mCurtainsClose; + private LinearLayout controlLl; + private ImageView deleteChild; + private ImageView editPosition; + + + public MessageViewHolder(View view) { + super(view); + curtainsRoom = (TextView) itemView.findViewById(R.id.tv_curtains_room); + curtainsState = (TextView) itemView.findViewById(R.id.tv_curtains_edit); + mCurtainsOpne = (FrameLayout) itemView.findViewById(R.id.fl_curtains_open); + mCurtainsClose = (FrameLayout) itemView.findViewById(R.id.fl_curtains_close); + mCurtainsStop = (FrameLayout) itemView.findViewById(R.id.fl_curtains_stop); + controlLl = (LinearLayout) itemView.findViewById(R.id.ll_curtains_top); + deleteChild = (ImageView) itemView.findViewById(R.id.iv_delete_child); + editPosition = (ImageView) itemView.findViewById(R.id.iv_edit_position); + } + + public void setViews(final int position) { + final LightDetaiEntity detaiEntity = mObjEntity.get(position); + if (isLearn) { + curtainsState.setVisibility(View.GONE); + editPosition.setVisibility(View.VISIBLE); + } else { + curtainsState.setVisibility(View.VISIBLE); + editPosition.setVisibility(View.GONE); + } + if (isDeleteChild) { + deleteChild.setVisibility(View.VISIBLE); + } else { + deleteChild.setVisibility(View.GONE); + } + + mCurtainsOpne.setAlpha(1.0f); + mCurtainsOpne.setEnabled(true); + mCurtainsClose.setAlpha(1.0f); + mCurtainsClose.setEnabled(true); + mCurtainsStop.setAlpha(1.0f); + mCurtainsStop.setEnabled(true); + + + controlLl.setVisibility(View.VISIBLE); + curtainsRoom.setVisibility(View.VISIBLE); + if (detaiEntity.getAddressName() != null) { + curtainsRoom.setText(detaiEntity.getAddressName()); + } + + if (detaiEntity.getVoiceFlag().equals("1")) { + detaiEntity.setVoiceControlTag(2); + curtainsState.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_on)); + } else { + detaiEntity.setVoiceControlTag(1); + curtainsState.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_off)); + } + + + curtainsState.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, detaiEntity.getVoiceControlTag()); + } + } + }); + + mCurtainsOpne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + }); + mCurtainsClose.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } + } + }); + mCurtainsStop.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 2); + } + } + }); + deleteChild.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 3); + } + } + }); + editPosition.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 4); + } + } + }); + + } + } + + public void setOnItemLightClickListener(LightAdapter.OnItemLightClickListener listener) { + this.mLightClickListener = listener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsReAddOneActivity.java b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsReAddOneActivity.java new file mode 100644 index 0000000..da9b841 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsReAddOneActivity.java @@ -0,0 +1,195 @@ +package com.yonsz.z1.new433.curtain; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entitya2.BlindTestEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + + +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.CREATE_TEST_BLIND_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_TEST_BLIND_SUCCESS; + +/** + * Created by Administrator on 2017/12/15. + */ + +public class CurtainsReAddOneActivity extends BaseActivity { + private TitleView mTitleViewl; + private Button nextConfig; + private CheckBox selectUnnorReveal; + private BlindTestEntity blindTestEntity = new BlindTestEntity(); + private String ziId; + private MediaPlayer mediaPlayer01; + private String deviceAddress; + private LoadingDialog mLoadingDialog; + private String largeClass; + private TextView tv_top_12; + private ImageView iv_bg; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtains_learn); + initView(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + private void initView() { + largeClass = getIntent().getExtras().get("largeClass").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + tv_top_12 = (TextView) findViewById(R.id.tv_top_12); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + selectUnnorReveal.setOnClickListener(this); + iv_bg = (ImageView) findViewById(R.id.iv_bg); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + // studyAndControllBlind(blindTestEntity.getObj().getOpenCode().toString()); + createTestBlind(); + } + }); + mTitleViewl = (TitleView) findViewById(R.id.title_light_learn); + if (largeClass.equals("1")) { + mTitleViewl.setHead(R.string.add_smart_c_screen); + iv_bg.setImageDrawable(getResources().getDrawable(R.drawable.pic_gauze_learn01)); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_65); + mediaPlayer01.start(); + } + } else { + mTitleViewl.setHead(R.string.add_smart_c); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_35); + mediaPlayer01.start(); + } + } + mTitleViewl.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + tv_top_12.setText("1/2"); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + } else { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + } + break; + } + } + + @Override + public void onResume() { + super.onResume(); + selectUnnorReveal.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CREATE_TEST_BLIND_SUCCESS: + blindTestEntity = (BlindTestEntity) msg.obj; + Intent intent = new Intent(CurtainsReAddOneActivity.this, CurtainsReAddTwoActivity.class); + if (blindTestEntity != null && blindTestEntity.getObj().getOpenCode() != null && blindTestEntity.getObj().getCloseCode() != null && blindTestEntity.getObj().getStopCode() != null) { + intent.putExtra("openCode", blindTestEntity.getObj().getOpenCode()); + intent.putExtra("closeCode", blindTestEntity.getObj().getCloseCode()); + intent.putExtra("stopCode", blindTestEntity.getObj().getStopCode()); + intent.putExtra("codePid", blindTestEntity.getObj().getCodePid()); + intent.putExtra("addressId", blindTestEntity.getObj().getAddressId()); + intent.putExtra("pid", blindTestEntity.getObj().getPid()); + intent.putExtra("ziId", ziId); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("largeClass", largeClass); + intent.putExtra("relatedId", getIntent().getExtras().get("relatedId").toString()); + intent.putExtra("openCode1", getIntent().getExtras().get("openCode").toString()); + intent.putExtra("closeCode1", getIntent().getExtras().get("closeCode").toString()); + intent.putExtra("stopCode1", getIntent().getExtras().get("stopCode").toString()); + startActivity(intent); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + // finish(); + } else { + Toast.makeText(CurtainsReAddOneActivity.this, "匹配未成功,请重试", Toast.LENGTH_SHORT).show(); + } + break; + case CREATE_TEST_BLIND_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + } + } + + private void createTestBlind() { + + } + +} diff --git a/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsReAddTwoActivity.java b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsReAddTwoActivity.java new file mode 100644 index 0000000..dea7651 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsReAddTwoActivity.java @@ -0,0 +1,316 @@ +package com.yonsz.z1.new433.curtain; + +import android.app.Service; +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.CloseActivityEntity; +import com.yonsz.z1.database.entity.entitya2.BlindTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.id.bt_sure_config; +import static com.yonsz.z1.net.Constans.ADD_BLIND_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADD_BLIND_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.REVERSE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.REVERSE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDPID_STUDYBLIND_FAIL; +import static com.yonsz.z1.net.Constans.SENDPID_STUDYBLIND_SUCCESS; + +/** + * Created by Administrator on 2017/12/15. + */ + +public class CurtainsReAddTwoActivity extends BaseActivity { + private TitleView mTitleView; + private Button sureBtn; + private RelativeLayout closeRl, opneRl, stopRl; + private String ziId; + private String openCode, closeCode, stopCode; + private String addressId, codePid; + private int pid; + private ImageView mLearnHelp; + private CheckBox selectUnnorReveal; + private boolean isFirst; + private MediaPlayer mediaPlayer01; + private String deviceAddress; + private String largeClass; + private TextView tv_top_number; + private TextView tv_guide1; + private TextView closeTv, opneTv, stopTv; + private LoadingDialog mLoadingDialog; + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sure_curtains_learn); + initView(); + initListener(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + public void onEventMainThread(CloseActivityEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("CurtainsReAddTwoActivity")) { + finish(); + } + } + + private void initView() { + largeClass = getIntent().getExtras().get("largeClass").toString(); + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + if (getIntent().getExtras().get("isFirst").toString().equals("1")) { + isFirst = true; + } else { + isFirst = false; + } + ziId = (String) getIntent().getExtras().get("ziId"); + openCode = (String) getIntent().getExtras().get("openCode"); + closeCode = (String) getIntent().getExtras().get("closeCode"); + stopCode = (String) getIntent().getExtras().get("stopCode"); + pid = (int) getIntent().getExtras().get("pid"); + addressId = (String) getIntent().getExtras().get("addressId"); + codePid = (String) getIntent().getExtras().get("codePid"); + tv_guide1 = (TextView) findViewById(R.id.tv_guide1); + closeTv = (TextView) findViewById(R.id.tv_close_curtains_below); + opneTv = (TextView) findViewById(R.id.tv_open_curtains_below); + stopTv = (TextView) findViewById(R.id.tv_stop_curtains_below); + tv_top_number = (TextView) findViewById(R.id.tv_top_number); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + closeRl = (RelativeLayout) findViewById(R.id.tv_close_curtains); + opneRl = (RelativeLayout) findViewById(R.id.tv_open_curtains); + stopRl = (RelativeLayout) findViewById(R.id.tv_stop_curtains); + mLearnHelp = (ImageView) findViewById(R.id.iv_learn_help); + sureBtn = (Button) findViewById(bt_sure_config); + mTitleView = (TitleView) findViewById(R.id.title_sure_light); + if (largeClass.equals("1")) { + mTitleView.setHead(R.string.add_smart_c); + tv_guide1.setText(R.string.try_button_c); + opneTv.setText(R.string.Open_Screen_curtain); + closeTv.setText(R.string.Close_screen_curtain); + stopTv.setText(R.string.Stop_screen_curtain); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_66); + mediaPlayer01.start(); + } + } else { + mTitleView.setHead(R.string.add_smart_c); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_36); + mediaPlayer01.start(); + } + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + tv_top_number.setText("2/2"); + studyAndControllBlind(openCode); + } + + private void initListener() { + sureBtn.setOnClickListener(this); + closeRl.setOnClickListener(this); + opneRl.setOnClickListener(this); + stopRl.setOnClickListener(this); + mLearnHelp.setOnClickListener(this); + selectUnnorReveal.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + //1.首先添加窗帘 + //2.添加子设备 + if (isFirst) { + addChildDevice(ziId, CURTAINS_TAG, "未知品牌"); + } else { + addBlindEntity(); + } + break; + case R.id.tv_close_curtains: + setShake(); + studyAndControllBlind(closeCode); + break; + case R.id.tv_open_curtains: + setShake(); + studyAndControllBlind(openCode); + break; + case R.id.tv_stop_curtains: + setShake(); + studyAndControllBlind(stopCode); + break; + case R.id.iv_learn_help: + Intent intent1 = new Intent(CurtainsReAddTwoActivity.this, CurtainReAddFailActivity.class); + intent1.putExtra("addressId", addressId); + intent1.putExtra("ziId", ziId); + intent1.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent1.putExtra("addressId", addressId); + intent1.putExtra("deviceAddress", deviceAddress); + intent1.putExtra("largeClass", largeClass); + startActivity(intent1); + } + } + + private void studyAndControllBlind(String order) { + + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SENDPID_STUDYBLIND_SUCCESS: + // Toast.makeText(CurtainsStepTwoActivity.this, "发送成功", Toast.LENGTH_SHORT).show(); + break; + case SENDPID_STUDYBLIND_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case ADD_CHILDDEVICE_SUCCESS: + addBlindEntity(); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case ADD_BLIND_ENTITY_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + BlindTestEntity blindTestEntity = (BlindTestEntity) msg.obj; + /* if (selectUnnorReveal.isChecked()) { + //窗帘翻转 + reverseBlindControl(blindTestEntity.getObj().getId().toString()); + } else {*/ + EventBus.getDefault().post( + new EventBusEntity("Curtai4Activity")); + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(this, DeviceControlActivity.class); + } + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", addressId); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("id", blindTestEntity.getObj().getRelatedId()); + intent.putExtra("addressName", blindTestEntity.getObj().getAddressName()); + intent.putExtra("voiceFlag", blindTestEntity.getObj().getVoiceFlag()); + intent.putExtra("openCodeX", blindTestEntity.getObj().getOpenCode()); + intent.putExtra("stopCodeX", blindTestEntity.getObj().getStopCode()); + intent.putExtra("closeCodeX", blindTestEntity.getObj().getCloseCode()); + intent.putExtra("blindType", largeClass); + intent.putExtra("relatedStatus", "1"); + intent.putExtra("openCode", getIntent().getExtras().get("openCode1").toString()); + intent.putExtra("closeCode", getIntent().getExtras().get("closeCode1").toString()); + intent.putExtra("stopCode", getIntent().getExtras().get("stopCode1").toString()); + startActivity(intent); + finish(); + // } + break; + case ADD_BLIND_ENTITY_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case REVERSE_CONTROL_SUCCESS: + /*if (!isFirst) { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + } + Intent intent = new Intent(this, CurtainNewActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", addressId); + startActivity(intent); + finish();*/ + break; + case REVERSE_CONTROL_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + } + } + + + private void addBlindEntity() { + + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsStepOneActivity.java b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsStepOneActivity.java new file mode 100644 index 0000000..971a20f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsStepOneActivity.java @@ -0,0 +1,277 @@ +package com.yonsz.z1.new433.curtain; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.BlindTestEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.curtainandWindow.CurtainAndWindowClickActivity; +import com.yonsz.z1.version5.curtainandWindow.CurtainAndWindowTestActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.io.Serializable; +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.CREATE_TEST_BLIND_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_TEST_BLIND_SUCCESS; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; + +/** + * Created by Administrator on 2017/12/15. + */ + +public class CurtainsStepOneActivity extends BaseActivity { + private TitleView mTitleViewl; + private Button nextConfig; + private CheckBox selectUnnorReveal; + private BlindTestEntity blindTestEntity = new BlindTestEntity(); + private String ziId; + private MediaPlayer mediaPlayer01; + private String deviceAddress; + private LoadingDialog mLoadingDialog; + private String largeClass; + // private ImageView iv_bg; + private String bodyMap = "{}"; + private String relatedId; + private boolean isReAddCurtain = false; + private TextView tv_choose_type; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtains_learn); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + selectUnnorReveal.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + private void initView() { + if (null != getIntent().getExtras().get("isReAddCurtain")) { + isReAddCurtain = true; + relatedId = getIntent().getExtras().get("relatedId").toString(); + } + largeClass = getIntent().getExtras().get("largeClass").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + selectUnnorReveal.setOnClickListener(this); + tv_choose_type = (TextView) findViewById(R.id.tv_choose_type); + nextConfig = (Button) findViewById(R.id.bt_start_config); + +// iv_bg = (ImageView) findViewById(R.id.iv_bg); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + // studyAndControllBlind(blindTestEntity.getObj().getOpenCode().toString()); +// createTestBlind(); + subsetStudy(); + } + }); + mTitleViewl = (TitleView) findViewById(R.id.title_light_learn); + if (largeClass.equals("1")) { + mTitleViewl.setHead(R.string.add_smart_c_screen); +// iv_bg.setImageDrawable(getResources().getDrawable(R.drawable.pic_gauze_learn01)); + tv_choose_type.setText("选择要学习的纱帘;"); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_65); + mediaPlayer01.start(); + } + } else { + mTitleViewl.setHead(R.string.add_smart_c); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_35); + mediaPlayer01.start(); + } + } + mTitleViewl.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + } else { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CREATE_TEST_BLIND_SUCCESS: + /*blindTestEntity = (BlindTestEntity) msg.obj; + Intent intent = new Intent(CurtainsStepOneActivity.this, CurtainsStepTwoActivity.class); + if (blindTestEntity != null && blindTestEntity.getObj().getOpenCode() != null && blindTestEntity.getObj().getCloseCode() != null && blindTestEntity.getObj().getStopCode() != null) { + intent.putExtra("openCode", blindTestEntity.getObj().getOpenCode().toString()); + intent.putExtra("closeCode", blindTestEntity.getObj().getCloseCode().toString()); + intent.putExtra("stopCode", blindTestEntity.getObj().getStopCode().toString()); + intent.putExtra("codePid", blindTestEntity.getObj().getCodePid().toString()); + intent.putExtra("addressId", blindTestEntity.getObj().getAddressId().toString()); + intent.putExtra("pid", blindTestEntity.getObj().getPid()); + intent.putExtra("ziId", ziId); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("largeClass", largeClass); + startActivity(intent); + // finish(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } else { + Toast.makeText(CurtainsStepOneActivity.this, "匹配未成功,请重试", Toast.LENGTH_SHORT).show(); + }*/ + break; + case CREATE_TEST_BLIND_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case UPDATE_BLINDENTITY_NAME_FAIL: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + BaseVersion5Entity entity = (BaseVersion5Entity) msg.obj; + Intent intent = new Intent(CurtainsStepOneActivity.this, CurtainAndWindowTestActivity.class); + intent.putExtra("deviceModel", "0"); + intent.putExtra("deviceType", CURTAINS_TAG); + intent.putExtra("ziId", ziId); + intent.putExtra("subtype", largeClass); + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("isReAddCurtain", isReAddCurtain); + if (isReAddCurtain) { + intent.putExtra("relatedId", relatedId); + } + Bundle bundle = new Bundle(); + bundle.putSerializable("body", (Serializable) entity.getData()); + intent.putExtras(bundle); + startActivity(intent); + break; + } + } + + private void subsetStudy() { + if (largeClass.equals("1")) { + bodyMap = "{\"subtype\":1}"; + } else { + bodyMap = "{\"subtype\":0}"; + } + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", "0"); + map.put("deviceType", CURTAINS_TAG); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_STUDY, map, bodyMap, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetStudy", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsStepTwoActivity.java b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsStepTwoActivity.java new file mode 100644 index 0000000..ee6c9c5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/curtain/CurtainsStepTwoActivity.java @@ -0,0 +1,310 @@ +package com.yonsz.z1.new433.curtain; + +import android.app.Service; +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.CloseActivityEntity; +import com.yonsz.z1.database.entity.entitya2.BlindTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.id.bt_sure_config; +import static com.yonsz.z1.net.Constans.ADD_BLIND_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADD_BLIND_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.REVERSE_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.REVERSE_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDPID_STUDYBLIND_FAIL; +import static com.yonsz.z1.net.Constans.SENDPID_STUDYBLIND_SUCCESS; + +/** + * Created by Administrator on 2017/12/15. + */ + +public class CurtainsStepTwoActivity extends BaseActivity { + private TitleView mTitleView; + private Button sureBtn; + private RelativeLayout closeRl, opneRl, stopRl; + private TextView closeTv, opneTv, stopTv; + private String ziId; + private String openCode, closeCode, stopCode; + private String addressId, codePid; + private int pid; + private ImageView mLearnHelp; + private CheckBox selectUnnorReveal; + private boolean isFirst; + private MediaPlayer mediaPlayer01; + private String deviceAddress; + private String largeClass; + private TextView tv_guide1; + private LoadingDialog mLoadingDialog; + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sure_curtains_learn); + initView(); + initListener(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + public void onEventMainThread(CloseActivityEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("CurtainsStepTwoActivity")) { + finish(); + } + } + + private void initView() { + largeClass = getIntent().getExtras().get("largeClass").toString(); + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + if (getIntent().getExtras().get("isFirst").toString().equals("1")) { + isFirst = true; + } else { + isFirst = false; + } + ziId = (String) getIntent().getExtras().get("ziId"); + openCode = (String) getIntent().getExtras().get("openCode"); + closeCode = (String) getIntent().getExtras().get("closeCode"); + stopCode = (String) getIntent().getExtras().get("stopCode"); + pid = (int) getIntent().getExtras().get("pid"); + addressId = (String) getIntent().getExtras().get("addressId"); + codePid = (String) getIntent().getExtras().get("codePid"); + tv_guide1 = (TextView) findViewById(R.id.tv_guide1); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + closeRl = (RelativeLayout) findViewById(R.id.tv_close_curtains); + opneRl = (RelativeLayout) findViewById(R.id.tv_open_curtains); + stopRl = (RelativeLayout) findViewById(R.id.tv_stop_curtains); + closeTv = (TextView) findViewById(R.id.tv_close_curtains_below); + opneTv = (TextView) findViewById(R.id.tv_open_curtains_below); + stopTv = (TextView) findViewById(R.id.tv_stop_curtains_below); + mLearnHelp = (ImageView) findViewById(R.id.iv_learn_help); + sureBtn = (Button) findViewById(bt_sure_config); + mTitleView = (TitleView) findViewById(R.id.title_sure_light); + if (largeClass.equals("1")) { + mTitleView.setHead(R.string.add_smart_c_screen); + tv_guide1.setText(R.string.try_button_c); + opneTv.setText(R.string.Open_Screen_curtain); + closeTv.setText(R.string.Close_screen_curtain); + stopTv.setText(R.string.Stop_the_curtain); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_66); + mediaPlayer01.start(); + } + } else { + mTitleView.setHead(R.string.add_smart_c); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_36); + mediaPlayer01.start(); + } + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + studyAndControllBlind(openCode); + } + + private void initListener() { + sureBtn.setOnClickListener(this); + closeRl.setOnClickListener(this); + opneRl.setOnClickListener(this); + stopRl.setOnClickListener(this); + mLearnHelp.setOnClickListener(this); + selectUnnorReveal.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + //1.首先添加窗帘 + //2.添加子设备 + if (isFirst) { + addChildDevice(ziId, CURTAINS_TAG, "未知品牌"); + } else { + addBlindEntity(); + } + break; + case R.id.tv_close_curtains: + setShake(); + studyAndControllBlind(closeCode); + break; + case R.id.tv_open_curtains: + setShake(); + studyAndControllBlind(openCode); + break; + case R.id.tv_stop_curtains: + setShake(); + studyAndControllBlind(stopCode); + break; + case R.id.iv_learn_help: + Intent intent1 = new Intent(CurtainsStepTwoActivity.this, CurtainFailActivity.class); + intent1.putExtra("addressId", addressId); + intent1.putExtra("ziId", ziId); + intent1.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent1.putExtra("addressId", addressId); + intent1.putExtra("deviceAddress", deviceAddress); + intent1.putExtra("largeClass", largeClass); + startActivity(intent1); + } + } + + private void studyAndControllBlind(String order) { + + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SENDPID_STUDYBLIND_SUCCESS: + // Toast.makeText(CurtainsStepTwoActivity.this, "发送成功", Toast.LENGTH_SHORT).show(); + break; + case SENDPID_STUDYBLIND_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case ADD_CHILDDEVICE_SUCCESS: + addBlindEntity(); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case ADD_BLIND_ENTITY_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + BlindTestEntity blindTestEntity = (BlindTestEntity) msg.obj; + /* if (selectUnnorReveal.isChecked()) { + //窗帘翻转 + reverseBlindControl(blindTestEntity.getObj().getId().toString()); + } else {*/ + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(this, DeviceControlActivity.class); + } + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", addressId); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("id", blindTestEntity.getObj().getId()); + intent.putExtra("addressName", blindTestEntity.getObj().getAddressName()); + intent.putExtra("voiceFlag", blindTestEntity.getObj().getVoiceFlag()); + intent.putExtra("openCode", blindTestEntity.getObj().getOpenCode()); + intent.putExtra("stopCode", blindTestEntity.getObj().getStopCode()); + intent.putExtra("closeCode", blindTestEntity.getObj().getCloseCode()); + intent.putExtra("blindType", largeClass); + intent.putExtra("relatedStatus", "-1"); + startActivity(intent); + finish(); + // } + break; + case ADD_BLIND_ENTITY_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case REVERSE_CONTROL_SUCCESS: + /*if (!isFirst) { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + } + Intent intent = new Intent(this, CurtainNewActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", addressId); + startActivity(intent); + finish();*/ + break; + case REVERSE_CONTROL_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + } + } + + private void addBlindEntity() { + + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/ColorTemperatureActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/ColorTemperatureActivity.java new file mode 100644 index 0000000..60365c5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/ColorTemperatureActivity.java @@ -0,0 +1,362 @@ +package com.yonsz.z1.new433.light; + +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.RelativeLayout; +import android.widget.SeekBar; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.bigkoo.pickerview.OptionsPickerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AdditionEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity5.ColorTemperatureEntity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.APP_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.SUBSETMODE_LIST; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_GETDETAIL; + +public class ColorTemperatureActivity extends BaseActivity { + private TitleView mTitleView; + private String deviceId, deviceModel, deviceType; + private LoadingDialog mLoadingDialog; + private List data = new ArrayList<>(); + private List bodyData = new ArrayList<>(); + private TextView warmBrightnessTv, warmColorTempTv, whiteBrightnessTv, whiteColorTempTv, wwBrightnessTv, wwColorTempTv; + private SeekBar warmBrightnessSb, warmColorTempSb, whiteBrightnessSb, whiteColorTempSb, wwBrightnessSb, wwColorTempSb; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_color_temperature); + initView(); + initListener(); + } + + private void initView() { + deviceId = getIntent().getExtras().get("deviceId").toString(); + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + deviceType = getIntent().getExtras().get("deviceType").toString(); + warmBrightnessTv = findViewById(R.id.tv_warm_brightness); + warmColorTempTv = findViewById(R.id.tv_warm_colorTemp); + whiteBrightnessTv = findViewById(R.id.tv_white_brightness); + whiteColorTempTv = findViewById(R.id.tv_white_colorTemp); + wwBrightnessTv = findViewById(R.id.tv_warm_white_brightness); + wwColorTempTv = findViewById(R.id.tv_warm_white_colorTemp); + + warmBrightnessSb = findViewById(R.id.sb_warm_brightness); + warmColorTempSb = findViewById(R.id.sb_warm_colorTemp); + whiteBrightnessSb = findViewById(R.id.sb_white_brightness); + whiteColorTempSb = findViewById(R.id.sb_white_colorTemp); + wwBrightnessSb = findViewById(R.id.sb_warm_white_brightness); + wwColorTempSb = findViewById(R.id.sb_warm_white_colorTemp); + + mTitleView = findViewById(R.id.title_response); + mTitleView.setHead("配置设备色温"); + mTitleView.setHeadFuntionTxtAndSise16("保存"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + subsetmodeSave(); + } + + @Override + public void onFunctionText() { + + } + }); + subsetGetDetail(); + } + + private void initListener() { + warmBrightnessSb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + warmBrightnessTv.setText(progress + "%"); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + bodyData.get(0).getAttrs().get(0).setValue(seekBar.getProgress() + ""); + } + }); + warmColorTempSb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + warmColorTempTv.setText(progress + "%"); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + bodyData.get(0).getAttrs().get(1).setValue(seekBar.getProgress() + ""); + } + }); + whiteBrightnessSb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + whiteBrightnessTv.setText(progress + "%"); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + bodyData.get(1).getAttrs().get(0).setValue(seekBar.getProgress() + ""); + } + }); + whiteColorTempSb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + whiteColorTempTv.setText(progress + "%"); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + bodyData.get(1).getAttrs().get(1).setValue(seekBar.getProgress() + ""); + } + }); + wwBrightnessSb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + wwBrightnessTv.setText(progress + "%"); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + bodyData.get(2).getAttrs().get(0).setValue(seekBar.getProgress() + ""); + } + }); + wwColorTempSb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + wwColorTempTv.setText(progress + "%"); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + bodyData.get(2).getAttrs().get(1).setValue(seekBar.getProgress() + ""); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(ColorTemperatureActivity.this); + mLoadingDialog.show(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_response_light: + + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECT_SAFETY_DETAIL_SUCCESS: + ColorTemperatureEntity entity = (ColorTemperatureEntity) msg.obj; + if (null != entity.getData() && entity.getData().size() != 0) { + bodyData.clear(); + data.clear(); + data.addAll(entity.getData()); + for (int i = 0; i < data.size(); i++) { + switch (data.get(i).getName()) { + case "warm": + ColorTemperatureEntity.DataBean dataBean = new ColorTemperatureEntity.DataBean(); + dataBean.setName(data.get(i).getName()); + dataBean.setAttrs(data.get(i).getAttrs()); + if (null != data.get(i).getId()) { + dataBean.setId(data.get(i).getId()); + } + bodyData.add(dataBean); + String value = data.get(i).getAttrs().get(0).getValue(); + warmBrightnessTv.setText(value + "%"); + warmBrightnessSb.setProgress(Integer.parseInt(value)); + String value1 = data.get(i).getAttrs().get(1).getValue(); + warmColorTempTv.setText(value1 + "%"); + warmColorTempSb.setProgress(Integer.parseInt(value1)); + break; + case "white": + ColorTemperatureEntity.DataBean dataBean1 = new ColorTemperatureEntity.DataBean(); + dataBean1.setName(data.get(i).getName()); + dataBean1.setAttrs(data.get(i).getAttrs()); + if (null != data.get(i).getId()) { + dataBean1.setId(data.get(i).getId()); + } + bodyData.add(dataBean1); + String value2 = data.get(i).getAttrs().get(0).getValue(); + whiteBrightnessTv.setText(value2 + "%"); + whiteBrightnessSb.setProgress(Integer.parseInt(value2)); + String value3 = data.get(i).getAttrs().get(1).getValue(); + whiteColorTempTv.setText(value3 + "%"); + whiteColorTempSb.setProgress(Integer.parseInt(value3)); + break; + case "warm_white": + ColorTemperatureEntity.DataBean dataBean2 = new ColorTemperatureEntity.DataBean(); + dataBean2.setName(data.get(i).getName()); + dataBean2.setAttrs(data.get(i).getAttrs()); + if (null != data.get(i).getId()) { + dataBean2.setId(data.get(i).getId()); + } + bodyData.add(dataBean2); + String value4 = data.get(i).getAttrs().get(0).getValue(); + wwBrightnessTv.setText(value4 + "%"); + wwBrightnessSb.setProgress(Integer.parseInt(value4)); + String value5 = data.get(i).getAttrs().get(1).getValue(); + wwColorTempTv.setText(value5 + "%"); + wwColorTempSb.setProgress(Integer.parseInt(value5)); + break; + case "cold": + ColorTemperatureEntity.DataBean dataBean3 = new ColorTemperatureEntity.DataBean(); + dataBean3.setName(data.get(i).getName()); + dataBean3.setAttrs(data.get(i).getAttrs()); + if (null != data.get(i).getId()) { + dataBean3.setId(data.get(i).getId()); + } + bodyData.add(dataBean3); + break; + } + } + } + break; + case SELECT_SAFETY_DETAIL_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, String.valueOf(msg.obj)); + break; + case APP_CONTROL_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, "保存成功"); + subsetGetDetail(); + break; + } + } + + private void subsetmodeSave() { + initLoadDialog(); + String body = JSONObject.toJSONString(bodyData); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + util.requestPostByAsyBody(NetWorkUrl.SUBSETMODE_SAVE, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetmodeSave", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(APP_CONTROL_SUCCESS); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetGetDetail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + netWorkUtil.requestGetByAsy(SUBSETMODE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("subsetGetDetail", "onSuccess()" + respone); + ColorTemperatureEntity obj = JSON.parseObject(respone, ColorTemperatureEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightFailActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightFailActivity.java new file mode 100644 index 0000000..cc113dc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightFailActivity.java @@ -0,0 +1,74 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import de.greenrobot.event.EventBus; + +/** + * Created by Administrator on 2017/12/16. + */ + +public class LightFailActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_sure_fail; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_fail); + initView(); + } + + private void initView() { + bt_sure_fail = (Button) findViewById(R.id.bt_sure_fail); + mTitleView = (TitleView) findViewById(R.id.title_sure_light_fail); + mTitleView.setHead("添加帮助"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + + bt_sure_fail.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(LightFailActivity.this, LightStepOneActivity.class); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addNum", getIntent().getExtras().get("addNum").toString()); + intent.putExtra("panelType", getIntent().getExtras().get("panelType").toString()); + startActivity(intent); + finish(); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightModifyActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightModifyActivity.java new file mode 100644 index 0000000..8dd579c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightModifyActivity.java @@ -0,0 +1,450 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.childdevice.Light4Activity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; + +/** + * Created by Administrator on 2018/7/9. + */ + +public class LightModifyActivity extends BaseActivity implements CompoundButton.OnCheckedChangeListener { + private TitleView mTitleView; + private ImageView dengGuangIv, tongDengIv, dengDaiIv, sheDengIv, biDengIv, diaoDengIv, langDengIv, paqiIv; + private ImageView dengGuangMark, tongDengMark, dengDaiMark, sheDengMark, biDengMark, diaoDengMark, langDengMark, paqiMark; + private String lightType1 = "0"; + + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String deviceAddress = "0"; + private List condition = new ArrayList<>(); + private String addressId; + private LoadingDialog mLoadingDialog; + private String lightId; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_modify); + initView(); + initListener(); + } + + private void initView() { + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + lightType1 = getIntent().getExtras().get("lightType").toString(); + lightId = getIntent().getExtras().get("lightId").toString(); + addressId = deviceAddress; + dengGuangIv = (ImageView) findViewById(R.id.iv_deng_guang); + tongDengIv = (ImageView) findViewById(R.id.iv_tong_deng); + dengDaiIv = (ImageView) findViewById(R.id.iv_deng_dai); + sheDengIv = (ImageView) findViewById(R.id.iv_she_deng); + biDengIv = (ImageView) findViewById(R.id.iv_bi_deng); + diaoDengIv = (ImageView) findViewById(R.id.iv_diao_deng); + langDengIv = (ImageView) findViewById(R.id.iv_lang_deng); + paqiIv = (ImageView) findViewById(R.id.iv_pai_qi); + + dengGuangMark = (ImageView) findViewById(R.id.iv_deng_guang_mark); + tongDengMark = (ImageView) findViewById(R.id.iv_tong_deng_mark); + dengDaiMark = (ImageView) findViewById(R.id.iv_deng_dai_mark); + sheDengMark = (ImageView) findViewById(R.id.iv_she_deng_mark); + biDengMark = (ImageView) findViewById(R.id.iv_bi_deng_mark); + diaoDengMark = (ImageView) findViewById(R.id.iv_diao_deng_mark); + langDengMark = (ImageView) findViewById(R.id.iv_lang_deng_mark); + paqiMark = (ImageView) findViewById(R.id.iv_pai_qi_mark); + mTitleView = (TitleView) findViewById(R.id.title_switcher_two); + mTitleView.setHead(R.string.Edit_smart_switch_panel); + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + updateLightEntityName(addressId, lightId); + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(this); + } + + switch (deviceAddress) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + + switch (lightType1) { + case "0": + dengGuangMark.setVisibility(View.VISIBLE); + break; + case "1": + tongDengMark.setVisibility(View.VISIBLE); + break; + case "2": + dengDaiMark.setVisibility(View.VISIBLE); + break; + case "3": + sheDengMark.setVisibility(View.VISIBLE); + break; + case "4": + biDengMark.setVisibility(View.VISIBLE); + break; + case "5": + diaoDengMark.setVisibility(View.VISIBLE); + break; + case "6": + langDengMark.setVisibility(View.VISIBLE); + break; + case "7": + paqiMark.setVisibility(View.VISIBLE); + break; + default: + dengGuangMark.setVisibility(View.VISIBLE); + break; + } + } + + private void initListener() { + dengGuangIv.setOnClickListener(this); + tongDengIv.setOnClickListener(this); + dengDaiIv.setOnClickListener(this); + sheDengIv.setOnClickListener(this); + biDengIv.setOnClickListener(this); + diaoDengIv.setOnClickListener(this); + langDengIv.setOnClickListener(this); + paqiIv.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_deng_guang: + lightType1 = "0"; + dengGuangMark.setVisibility(View.VISIBLE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_tong_deng: + lightType1 = "1"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.VISIBLE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_deng_dai: + lightType1 = "2"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.VISIBLE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_she_deng: + lightType1 = "3"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.VISIBLE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_bi_deng: + lightType1 = "4"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.VISIBLE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_diao_deng: + lightType1 = "5"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.VISIBLE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_lang_deng: + lightType1 = "6"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.VISIBLE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_pai_qi: + lightType1 = "7"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.VISIBLE); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_BLINDENTITY_NAME_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + LightEntity blindTestEntity = (LightEntity) msg.obj; + Intent intent = new Intent(LightModifyActivity.this, Light4Activity.class); + intent.putExtra("devicePosition", blindTestEntity.getObj().getAddressName().toString()); + intent.putExtra("lightType", blindTestEntity.getObj().getLightType().toString()); + intent.putExtra("addressId", blindTestEntity.getObj().getAddressId().toString()); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + break; + case UPDATE_BLINDENTITY_NAME_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + switch (id) { + case R.id.cb_position0: + if (isChecked) + addressId = "0"; + break; + case R.id.cb_position1: + if (isChecked) + addressId = "1"; + break; + case R.id.cb_position2: + if (isChecked) + addressId = "2"; + break; + case R.id.cb_position3: + if (isChecked) + addressId = "3"; + break; + case R.id.cb_position4: + if (isChecked) + addressId = "4"; + break; + case R.id.cb_position5: + if (isChecked) + addressId = "5"; + break; + case R.id.cb_position6: + if (isChecked) + addressId = "6"; + break; + case R.id.cb_position7: + if (isChecked) + addressId = "7"; + break; + case R.id.cb_position8: + if (isChecked) + addressId = "8"; + break; + case R.id.cb_position9: + if (isChecked) + addressId = "9"; + break; + case R.id.cb_position10: + if (isChecked) + addressId = "10"; + break; + case R.id.cb_position11: + if (isChecked) + addressId = "11"; + break; + case R.id.cb_position12: + if (isChecked) + addressId = "12"; + break; + case R.id.cb_position13: + if (isChecked) + addressId = "13"; + break; + } + } + + private void updateLightEntityName(String addressId, String id) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightNewActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightNewActivity.java new file mode 100644 index 0000000..0c9f20a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightNewActivity.java @@ -0,0 +1,595 @@ +package com.yonsz.z1.new433.light; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.database.entity.LightListEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.VoiceControllEntity; +import com.yonsz.z1.database.entity.entitya2.BlindTestEntity; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.LightPopupWindow; +import com.yonsz.z1.view.PositionPopupWindow; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.DELLIGHT_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.DELLIGHT_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.SELECTINFO_BYZI_FAIL; +import static com.yonsz.z1.net.Constans.SELECTINFO_BYZI_SUCCESS; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.isLocalControl; + +/** + * Created by Administrator on 2017/12/19. + */ + +public class LightNewActivity extends BaseActivity { + private TitleView mTitleView; + private LoadingDialog mLoadingDialog; + private SwipeMenuRecyclerView mRecyclerView; + private LightNewAdapter mLightAdapter; + private String ziId; + private String userId; + private int voicePosition, voiceChildPosition; + private boolean isDeleteChild = false; + private boolean isModifyPosition = false; + private List> mDatas; + private List mChildData = new ArrayList<>(); + private String addressId; + private String panelId; + + public static List removeDuplicate(List list) { + Set set = new LinkedHashSet(); + set.addAll(list); + list.clear(); + list.addAll(set); + return list; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtains); + initView(); + selectInfoByZi(); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + if (getIntent().getExtras().get("addressId").toString().equals("14")) { + addressId = "0"; + } else { + addressId = getIntent().getExtras().get("addressId").toString(); + } + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + mTitleView = (TitleView) findViewById(R.id.title_curtains); + mTitleView.setHead(R.string.light); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.clearBackGroud(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (isModifyPosition || isDeleteChild) { + if (isDeleteChild) { + isDeleteChild = false; + mLightAdapter.setIsDelete(isDeleteChild); + mLightAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setBackVisible(); + } + if (isModifyPosition) { + isModifyPosition = false; + mLightAdapter.setIsLearn(isModifyPosition); + mLightAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setBackVisible(); + } + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(LightNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + isDeleteChild = true; + mLightAdapter.setIsDelete(isDeleteChild); + mLightAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionGone(); + mTitleView.setBackGone(); + break; + case 2: + //添加灯光 + if (DensityUtil.isNetworkConnected(LightNewActivity.this)) { + showLightBottom(LIGHT_TAG); + } else { + ToastUtil.show(LightNewActivity.this, R.string.net_error); + } + break; + case 3: + //语令说明 + Intent intent = new Intent(LightNewActivity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", LIGHT_TAG); + startActivity(intent); + break; + case 4: + //修改窗帘位置信息 + isModifyPosition = true; + mLightAdapter.setIsLearn(isModifyPosition); + mLightAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionGone(); + mTitleView.setBackGone(); + break; + } + } + }); + dialog2.setContent(R.string.Add_Light); + dialog2.setLearnTxt(R.string.Modify_light_location); + dialog2.setSureBtnTxt(R.string.Delete_light); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + + @Override + public void onFunctionText() { + + } + }); + mDatas = new ArrayList<>(); + mLightAdapter = new LightNewAdapter(this, mDatas, isModifyPosition, isDeleteChild); + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_parent_device_list); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setItemViewCacheSize(0);//试图解决复用的问题 + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setAdapter(mLightAdapter); + + mLightAdapter.setOnItemLightClickListener(new LightNewAdapter.OnItemLightClickListener() { + @Override + public void onLearnLightClick(int position, int i, int j) { + switch (i) { + case 0: + setShake(); + //关灯 + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(mDatas.get(position).get(j).getOffInfrared(), "01")); + } else { + initLoadDialog(); + studyAndControllLight(mDatas.get(position).get(j).getOffInfrared()); + } + break; + case 1: + setShake(); + //开灯 + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(mDatas.get(position).get(j).getOnInfrared(), "01")); + } else { + initLoadDialog(); + studyAndControllLight(mDatas.get(position).get(j).getOnInfrared()); + } + break; + } + } + + @Override + public void onLightOpenCloseClick(final int position, final int i) { + //删除面板 + ConfirmDialog dialog = new ConfirmDialog(LightNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + delLightEntity(position, i); + /* mLightAdapter.setIsDelete(false); + mLightAdapter.notifyDataSetChanged();*/ + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + @Override + public void onVoiceClick(final int position, int voiceControlTag, final int childPostion) { + switch (voiceControlTag) { + case 1: + setShake(); + ConfirmDialog dialog = new ConfirmDialog(LightNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + voicePosition = position; + voiceChildPosition = childPostion; + allowVoiceControll(1, mDatas.get(position).get(childPostion).getId()); + break; + } + } + }); + dialog.setContent("开启语音控制?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + setShake(); + ConfirmDialog dialog1 = new ConfirmDialog(LightNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + voicePosition = position; + voiceChildPosition = childPostion; + allowVoiceControll(0, mDatas.get(position).get(childPostion).getId()); + break; + } + } + }); + dialog1.setContent("关闭语音控制?"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + break; + case 3: + if (mDatas.get(position).get(childPostion).getAddressId().equals("14")) { + showPositionBottom(mDatas.get(position).get(childPostion).getId().toString(), "0"); + } else { + showPositionBottom(mDatas.get(position).get(childPostion).getId().toString(), mDatas.get(position).get(childPostion).getAddressId()); + } + break; + case 4: + break; + } + } + }); + } + + private void showPositionBottom(final String id, String position) { + View rootview = LayoutInflater.from(LightNewActivity.this).inflate(R.layout.activity_curtains, null); + PositionPopupWindow popupWindow = new PositionPopupWindow(this, position, new PositionPopupWindow.OnCompleteListener() { + @Override + public void onComplete(String time, List conditionList) { + Log.i("showPositionBottom", "SwitcherActivity onComplete()" + time + conditionList.toString()); + if (time.equals("13")) { + updateLightEntityName("0", id); + } else { + updateLightEntityName(String.valueOf(Integer.valueOf(time) + 1), id); + } + } + }); + popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); + } + + private void showLightBottom(final String deviveType) { + + } + + private void updateLightEntityName(String addressId, String id) { + /*initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("addressId", addressId); + map.put("id", id); + map.put("ziId", ziId); + util.requestPostByAsynew(NetWorkUrl.UPDATE_LIGHTENTITY_NAME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateBlindEntityName", "ShareDeviceActivity onSuccess()" + respone); + BlindTestEntity obj = JSON.parseObject(respone, BlindTestEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void delLightEntity(int position, int number) { + /*initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("panelId", mDatas.get(position).get(0).getPanelId()); + map.put("ziId", ziId); + String addressIds = ""; + List strings = new ArrayList<>(); + for (int i = 0; i <= number; i++) { + strings.add(mDatas.get(position).get(i).getAddressId().toString()); + } + List stringList = removeDuplicate(strings); + for (int i = 0; i < stringList.size(); i++) { + addressIds += stringList.get(i).toString(); + if (i != stringList.size() - 1) { + addressIds += ","; + } + } + map.put("addressIds", addressIds); + netWorkUtil.requestPostByAsynew(NetWorkUrl.DEL_LIGHT_BYPANEL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("delLightEntity", "ShareDeviceActivity onSuccess()" + respone); + VoiceControllEntity obj = JSON.parseObject(respone, VoiceControllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELLIGHT_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DELLIGHT_ENTITY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DELLIGHT_ENTITY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECTINFO_BYZI_SUCCESS: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + LightListEntity mObjEntity = (LightListEntity) msg.obj; + if (mObjEntity.getObj() != null) { + + } else { + isDeleteChild = false; + mLightAdapter.setIsDelete(isDeleteChild); + mLightAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setBackVisible(); + } + //转换成需要的格式 + mDatas.clear(); + mDatas = convertList(mObjEntity.getObj()); + mLightAdapter.notifyDataSetChanged(); + break; + case STUDY_ANDCONTROLL_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + break; + case STUDY_ANDCONTROLL_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case ALLOW_VOICE_CONTROLL_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + if (mDatas.get(voicePosition).get(voiceChildPosition).getVoiceFlag().equals("1")) { + mDatas.get(voicePosition).get(voiceChildPosition).setVoiceFlag("0"); + ToastUtil.show(LightNewActivity.this, "关闭语音成功"); + } else { + mDatas.get(voicePosition).get(voiceChildPosition).setVoiceFlag("1"); + ToastUtil.show(LightNewActivity.this, "开启语音成功"); + } + mLightAdapter.notifyItemChanged(voicePosition); + break; + case DELLIGHT_ENTITY_SUCCESS: + selectInfoByZi(); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + selectInfoByZi(); + break; + } + } + + private List> convertList(List mObjEntity) { + if (mObjEntity != null) { + mChildData.clear(); + panelId = mObjEntity.get(0).getPanelId(); + for (int i = 0; i < mObjEntity.size(); i++) { + if (mObjEntity.get(i).getPanelId().equals(panelId)) { + mChildData.add(mObjEntity.get(i)); + } else { + panelId = mObjEntity.get(i).getPanelId().toString(); + mDatas.add(mChildData); + mChildData = new ArrayList<>(); + mChildData.add(mObjEntity.get(i)); + } + if (mChildData.size() == mObjEntity.size()) { + mDatas.add(mChildData); + } else if (i == mObjEntity.size() - 1) { + mDatas.add(mChildData); + } + } + } + return mDatas; + } + + private void allowVoiceControll(int i, String id) { + /*initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("idInfo", id); + map.put("ziId", ziId); + map.put("controlFlag", String.valueOf(i)); + netWorkUtil.requestPostByAsynew(NetWorkUrl.ALLOW_VOICE_CONTROLL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("allowVoiceControll", "ShareDeviceActivity onSuccess()" + respone); + VoiceControllEntity obj = JSON.parseObject(respone, VoiceControllEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void studyAndControllLight(String infrared) { + /*if (DensityUtil.isNetworkConnected(this)) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("sendMsg", infrared); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + util.requestPostByAsyn(ziId, NetWorkUrl.STUDY_ANDCONTROLL_LIGHT, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("studyAndControllLight", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } else { + ToastUtil.show(this, R.string.net_error); + }*/ + } + + private void selectInfoByZi() { + + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightNewAdapter.java b/app/src/main/java/com/yonsz/z1/new433/light/LightNewAdapter.java new file mode 100644 index 0000000..f7a840f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightNewAdapter.java @@ -0,0 +1,505 @@ +package com.yonsz.z1.new433.light; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AlphaAnimation; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.LightDetaiEntity; + +import java.util.List; + +/** + * Created by Administrator on 2017/12/20. + */ + +public class LightNewAdapter extends RecyclerView.Adapter { + private Context mContext; + private List> mObjEntity; + private boolean isLearn; + private OnItemLightClickListener mLightClickListener; + private boolean isDeleteChild; + + public LightNewAdapter(Context mContext, List> mObjEntity, boolean isLearn, boolean isDelete) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + this.isLearn = isLearn; + } + + public void setIsLearn(boolean isLearn1) { + isLearn = isLearn1; + } + + public void setIsDelete(boolean isDelete1) { + isDeleteChild = isDelete1; + } + + @Override + public LightNewAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = null; + switch (viewType) { + case 1: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_one, + parent, false); + break; + case 2: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_two, + parent, false); + break; + case 3: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_three, + parent, false); + break; + } + + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(LightNewAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemViewType(int position) { + if (mObjEntity != null && mObjEntity.get(position).size() == 1) { + return 1; + } else if (mObjEntity != null && mObjEntity.get(position).size() == 2) { + return 2; + } else { + return 3; + } + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private ImageView deleteOne, deleteTwo, deleteThree; + private TextView positionOne; + private TextView mLightOpenOne, mLightCloseOne; + private TextView lightEditOne; + + private TextView positionTwo1; + private TextView mLightOpenTwo1, mLightCloseTwo1; + private TextView lightEditTwo1; + + private TextView positionTwo2; + private TextView mLightOpenTwo2, mLightCloseTwo2; + private TextView lightEditTwo2; + + private TextView positionThree1; + private TextView mLightOpenThree1, mLightCloseThree1; + private TextView lightEditThree1; + + private TextView positionThree2; + private TextView mLightOpenThree2, mLightCloseThree2; + private TextView lightEditThree2; + + private TextView positionThree3; + private TextView mLightOpenThree3, mLightCloseThree3; + private TextView lightEditThree3; + + private ImageView position11, position21, position22, position31, position32, position33; + + + public MessageViewHolder(View view) { + super(view); + deleteOne = (ImageView) itemView.findViewById(R.id.iv_delete_child_one); + deleteTwo = (ImageView) itemView.findViewById(R.id.iv_delete_child_two); + deleteThree = (ImageView) itemView.findViewById(R.id.iv_delete_child_three); + + positionOne = (TextView) itemView.findViewById(R.id.tv_one_position); + mLightOpenOne = (TextView) itemView.findViewById(R.id.tv_one_open); + mLightCloseOne = (TextView) itemView.findViewById(R.id.tv_one_close); + lightEditOne = (TextView) itemView.findViewById(R.id.tv_one_edit); + + positionTwo1 = (TextView) itemView.findViewById(R.id.tv_two_position_one); + mLightOpenTwo1 = (TextView) itemView.findViewById(R.id.tv_two_open_one); + mLightCloseTwo1 = (TextView) itemView.findViewById(R.id.tv_two_close_one); + lightEditTwo1 = (TextView) itemView.findViewById(R.id.tv_two_edit_one); + + positionTwo2 = (TextView) itemView.findViewById(R.id.tv_two_position_two); + mLightOpenTwo2 = (TextView) itemView.findViewById(R.id.tv_two_open_two); + mLightCloseTwo2 = (TextView) itemView.findViewById(R.id.tv_two_close_two); + lightEditTwo2 = (TextView) itemView.findViewById(R.id.tv_two_edit_two); + + positionThree1 = (TextView) itemView.findViewById(R.id.tv_three_position_one); + mLightOpenThree1 = (TextView) itemView.findViewById(R.id.tv_three_open_one); + mLightCloseThree1 = (TextView) itemView.findViewById(R.id.tv_three_close_one); + lightEditThree1 = (TextView) itemView.findViewById(R.id.tv_three_edit_one); + + positionThree2 = (TextView) itemView.findViewById(R.id.tv_three_position_two); + mLightOpenThree2 = (TextView) itemView.findViewById(R.id.tv_three_open_two); + mLightCloseThree2 = (TextView) itemView.findViewById(R.id.tv_three_close_two); + lightEditThree2 = (TextView) itemView.findViewById(R.id.tv_three_edit_two); + + positionThree3 = (TextView) itemView.findViewById(R.id.tv_three_position_three); + mLightOpenThree3 = (TextView) itemView.findViewById(R.id.tv_three_open_three); + mLightCloseThree3 = (TextView) itemView.findViewById(R.id.tv_three_close_three); + lightEditThree3 = (TextView) itemView.findViewById(R.id.tv_three_edit_three); + + position11 = (ImageView) itemView.findViewById(R.id.iv_edit_position_11); + position21 = (ImageView) itemView.findViewById(R.id.iv_edit_position_21); + position22 = (ImageView) itemView.findViewById(R.id.iv_edit_position_22); + position31 = (ImageView) itemView.findViewById(R.id.iv_edit_position_31); + position32 = (ImageView) itemView.findViewById(R.id.iv_edit_position_32); + position33 = (ImageView) itemView.findViewById(R.id.iv_edit_position_33); + } + + public void setViews(final int position) { + if (mObjEntity.get(position).size() == 1) { + final LightDetaiEntity detaiEntity = mObjEntity.get(position).get(0); + if (isLearn) { + lightEditOne.setVisibility(View.GONE); + position11.setVisibility(View.VISIBLE); + } else { + lightEditOne.setVisibility(View.VISIBLE); + position11.setVisibility(View.GONE); + } + if (isDeleteChild) { + deleteOne.setVisibility(View.VISIBLE); + } else { + deleteOne.setVisibility(View.GONE); + } + positionOne.setText(detaiEntity.getAddressName().toString()); + //声控的状态 + if (detaiEntity.getVoiceFlag() != null && detaiEntity.getVoiceFlag().equals("1")) { + detaiEntity.setVoiceControlTag(2); + lightEditOne.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_on)); + } else { + detaiEntity.setVoiceControlTag(1); + lightEditOne.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_off)); + } + lightEditOne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, detaiEntity.getVoiceControlTag(), 0); + } + } + }); + mLightOpenOne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 0); + } + } + }); + mLightCloseOne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 0); + } + } + }); + deleteOne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } + } + }); + position11.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 3, 0); + } + } + }); + } else if (mObjEntity.get(position).size() == 2) { + final LightDetaiEntity lightOne = mObjEntity.get(position).get(0); + if (isLearn) { + lightEditTwo1.setVisibility(View.GONE); + lightEditTwo2.setVisibility(View.GONE); + position21.setVisibility(View.VISIBLE); + position22.setVisibility(View.VISIBLE); + } else { + lightEditTwo1.setVisibility(View.VISIBLE); + lightEditTwo2.setVisibility(View.VISIBLE); + position21.setVisibility(View.GONE); + position22.setVisibility(View.GONE); + } + if (isDeleteChild) { + deleteTwo.setVisibility(View.VISIBLE); + } else { + deleteTwo.setVisibility(View.GONE); + } + positionTwo1.setText(lightOne.getAddressName().toString()); + //声控的状态 + if (lightOne.getVoiceFlag() != null && lightOne.getVoiceFlag().equals("1")) { + lightOne.setVoiceControlTag(2); + lightEditTwo1.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_on)); + } else { + lightOne.setVoiceControlTag(1); + lightEditTwo1.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_off)); + } + lightEditTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, lightOne.getVoiceControlTag(), 0); + } + } + }); + final LightDetaiEntity lightTwo = mObjEntity.get(position).get(1); + positionTwo2.setText(lightTwo.getAddressName().toString()); + //声控的状态 + if (lightTwo.getVoiceFlag() != null && lightTwo.getVoiceFlag().equals("1")) { + lightTwo.setVoiceControlTag(2); + lightEditTwo2.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_on)); + } else { + lightTwo.setVoiceControlTag(1); + lightEditTwo2.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_off)); + } + lightEditTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, lightTwo.getVoiceControlTag(), 1); + } + } + }); + mLightOpenTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 0); + } + } + }); + mLightCloseTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 0); + } + } + }); + mLightOpenTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 1); + } + } + }); + mLightCloseTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 1); + } + } + }); + deleteTwo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + }); + position21.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 3, 0); + } + } + }); + position22.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 3, 1); + } + } + }); + } else { + final LightDetaiEntity lightOne = mObjEntity.get(position).get(0); + if (isLearn) { + lightEditThree1.setVisibility(View.GONE); + lightEditThree2.setVisibility(View.GONE); + lightEditThree3.setVisibility(View.GONE); + position31.setVisibility(View.VISIBLE); + position32.setVisibility(View.VISIBLE); + position33.setVisibility(View.VISIBLE); + } else { + lightEditThree1.setVisibility(View.VISIBLE); + lightEditThree2.setVisibility(View.VISIBLE); + lightEditThree3.setVisibility(View.VISIBLE); + position31.setVisibility(View.GONE); + position32.setVisibility(View.GONE); + position33.setVisibility(View.GONE); + } + if (isDeleteChild) { + deleteThree.setVisibility(View.VISIBLE); + } else { + deleteThree.setVisibility(View.GONE); + } + positionThree1.setText(lightOne.getAddressName().toString()); + //声控的状态 + if (lightOne.getVoiceFlag() != null && lightOne.getVoiceFlag().equals("1")) { + lightOne.setVoiceControlTag(2); + lightEditThree1.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_on)); + } else { + lightOne.setVoiceControlTag(1); + lightEditThree1.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_off)); + } + lightEditThree1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, lightOne.getVoiceControlTag(), 0); + } + } + }); + final LightDetaiEntity lightTwo = mObjEntity.get(position).get(1); + positionThree2.setText(lightTwo.getAddressName().toString()); + //声控的状态 + if (lightTwo.getVoiceFlag() != null && lightTwo.getVoiceFlag().equals("1")) { + lightTwo.setVoiceControlTag(2); + lightEditThree2.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_on)); + } else { + lightTwo.setVoiceControlTag(1); + lightEditThree2.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_off)); + } + lightEditThree2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, lightTwo.getVoiceControlTag(), 1); + } + } + }); + + final LightDetaiEntity lightThree = mObjEntity.get(position).get(2); + positionThree3.setText(lightThree.getAddressName().toString()); + //声控的状态 + if (lightThree.getVoiceFlag() != null && lightThree.getVoiceFlag().equals("1")) { + lightThree.setVoiceControlTag(2); + lightEditThree3.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_on)); + } else { + lightThree.setVoiceControlTag(1); + lightEditThree3.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_off)); + } + lightEditThree3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, lightThree.getVoiceControlTag(), 2); + } + } + }); + mLightOpenThree1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 0); + } + } + }); + mLightCloseThree1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 0); + } + } + }); + mLightOpenThree2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 1); + } + } + }); + mLightCloseThree2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 1); + } + } + }); + mLightOpenThree3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 2); + } + } + }); + mLightCloseThree3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 2); + } + } + }); + deleteThree.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 2); + } + } + }); + position31.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 3, 0); + } + } + }); + position32.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 3, 1); + } + } + }); + position33.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 3, 2); + } + } + }); + } + } + } + + + public void setOnItemLightClickListener(OnItemLightClickListener listener) { + this.mLightClickListener = listener; + } + + public interface OnItemLightClickListener { + + public void onLearnLightClick(int position, int i, int j); + + public void onLightOpenCloseClick(int position, int i); + + public void onVoiceClick(int position, int voiceControlTag, int childPosition); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightOneActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightOneActivity.java new file mode 100644 index 0000000..8b69754 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightOneActivity.java @@ -0,0 +1,125 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.version5.ChooseRoomActivity; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.LIGHT_TAG; + +/** + * Created by Administrator on 2018/7/9. + */ + +public class LightOneActivity extends BaseActivity { + private TitleView mTitleView; + private CheckBox cb_position0, cb_position1; + private Button nextConfig; + private String panelType; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_one); + initView(); + initListener(); + } + + private void initListener() { + cb_position0.setOnClickListener(this); + cb_position1.setOnClickListener(this); + } + + private void initView() { + cb_position0 = (CheckBox) findViewById(R.id.cb_position0); + cb_position1 = (CheckBox) findViewById(R.id.cb_position1); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + /*Intent intent = new Intent(LightOneActivity.this, LightTwoActivity.class); + intent.putExtra("isFirst", "1"); + intent.putExtra("panelType", panelType); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + startActivity(intent);*/ + Intent intent = new Intent(LightOneActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("deviceType", LIGHT_TAG); + intent.putExtra("deviceModel", panelType); + startActivity(intent); + } + }); + mTitleView = (TitleView) findViewById(R.id.title_light_one); + mTitleView.setHead(R.string.Select_smart_switch_panel_type); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_position0: + panelType = "0"; + cb_position0.setChecked(true); + cb_position1.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + case R.id.cb_position1: + panelType = "1"; + cb_position1.setChecked(true); + cb_position0.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightStepFive1Activity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightStepFive1Activity.java new file mode 100644 index 0000000..6d4804f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightStepFive1Activity.java @@ -0,0 +1,300 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.entitya2.LightTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_FAIL; +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_SUCCESS; + +/** + * Created by Administrator on 2018/6/7. + */ + +public class LightStepFive1Activity extends BaseActivity { + private TitleView mTitleView; + private ImageView dengGuangIv, tongDengIv, dengDaiIv, sheDengIv, biDengIv, diaoDengIv, langDengIv, paqiIv; + private ImageView dengGuangMark, tongDengMark, dengDaiMark, sheDengMark, biDengMark, diaoDengMark, langDengMark, paqiMark; + private String lightType3 = "0"; + private String lightType1; + private String lightType2; + + private String addNum; + private LightTestEntity mLightEntity; + private TextView stepThreeTv; + private CheckBox lightOne, lightTwo, lightThree; + private Button mButton; + private String ziId; + private LoadingDialog mLoadingDialog; + private TextView tv_guide_bottom; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_step_three1); + initView(); + initListener(); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + cancelAddLight(0); + } + + private void initView() { + if (null != getIntent().getExtras() && null != getIntent().getExtras().get("mLightEntity")) { + mLightEntity = (LightTestEntity) getIntent().getExtras().get("mLightEntity"); + } + addNum = getIntent().getExtras().get("addNum").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + lightType1 = getIntent().getExtras().get("lightType1").toString(); + lightType2 = getIntent().getExtras().get("lightType2").toString(); + + tv_guide_bottom = (TextView) findViewById(R.id.tv_guide_bottom); + lightOne = (CheckBox) findViewById(R.id.cb_position0); + lightTwo = (CheckBox) findViewById(R.id.cb_position1); + lightThree = (CheckBox) findViewById(R.id.cb_position2); + mButton = (Button) findViewById(R.id.bt_sure_config); + stepThreeTv = (TextView) findViewById(R.id.tv_light_step_three); + dengGuangIv = (ImageView) findViewById(R.id.iv_deng_guang); + tongDengIv = (ImageView) findViewById(R.id.iv_tong_deng); + dengDaiIv = (ImageView) findViewById(R.id.iv_deng_dai); + sheDengIv = (ImageView) findViewById(R.id.iv_she_deng); + biDengIv = (ImageView) findViewById(R.id.iv_bi_deng); + diaoDengIv = (ImageView) findViewById(R.id.iv_diao_deng); + langDengIv = (ImageView) findViewById(R.id.iv_lang_deng); + paqiIv = (ImageView) findViewById(R.id.iv_pai_qi); + + dengGuangMark = (ImageView) findViewById(R.id.iv_deng_guang_mark); + tongDengMark = (ImageView) findViewById(R.id.iv_tong_deng_mark); + dengDaiMark = (ImageView) findViewById(R.id.iv_deng_dai_mark); + sheDengMark = (ImageView) findViewById(R.id.iv_she_deng_mark); + biDengMark = (ImageView) findViewById(R.id.iv_bi_deng_mark); + diaoDengMark = (ImageView) findViewById(R.id.iv_diao_deng_mark); + langDengMark = (ImageView) findViewById(R.id.iv_lang_deng_mark); + paqiMark = (ImageView) findViewById(R.id.iv_pai_qi_mark); + + mTitleView = (TitleView) findViewById(R.id.title_type_light); + mTitleView.setHead(R.string.Add_smart_switch_panel); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + cancelAddLight(0); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + tv_guide_bottom.setText(R.string.third_switch_button); + switch (addNum) { + case "1": + stepThreeTv.setText("5/5"); + lightOne.setChecked(false); + lightThree.setChecked(true); + break; + case "2": + break; + case "3": + break; + } + } + + private void initListener() { + dengGuangIv.setOnClickListener(this); + tongDengIv.setOnClickListener(this); + dengDaiIv.setOnClickListener(this); + sheDengIv.setOnClickListener(this); + biDengIv.setOnClickListener(this); + diaoDengIv.setOnClickListener(this); + langDengIv.setOnClickListener(this); + paqiIv.setOnClickListener(this); + mButton.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_deng_guang: + lightType3 = "0"; + dengGuangMark.setVisibility(View.VISIBLE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_tong_deng: + lightType3 = "1"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.VISIBLE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_deng_dai: + lightType3 = "2"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.VISIBLE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_she_deng: + lightType3 = "3"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.VISIBLE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_bi_deng: + lightType3 = "4"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.VISIBLE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_diao_deng: + lightType3 = "5"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.VISIBLE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_lang_deng: + lightType3 = "6"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.VISIBLE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_pai_qi: + lightType3 = "7"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.VISIBLE); + break; + case R.id.bt_sure_config: + Intent intent; + Bundle bundle = new Bundle(); + bundle.putSerializable("mLightEntity", mLightEntity); + switch (addNum) { + case "1": + updateLightType4Add(); + break; + case "2": + finish(); + break; + case "3": + finish(); + break; + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CANCEL_ADD_LIGHT_SUCCESS: + finish(); + break; + case CANCEL_ADD_LIGHT_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_LIGHTTYPE4_ADD_SUCCESS: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + break; + case UPDATE_LIGHTTYPE4_ADD_FAIL: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void updateLightType4Add() { + + } + + private void cancelAddLight(final int i) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} + diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightStepFiveActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightStepFiveActivity.java new file mode 100644 index 0000000..f4f62e5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightStepFiveActivity.java @@ -0,0 +1,300 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.entitya2.LightTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_FAIL; +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_SUCCESS; + +/** + * Created by Administrator on 2018/6/7. + */ + +public class LightStepFiveActivity extends BaseActivity { + private TitleView mTitleView; + private ImageView dengGuangIv, tongDengIv, dengDaiIv, sheDengIv, biDengIv, diaoDengIv, langDengIv, paqiIv; + private ImageView dengGuangMark, tongDengMark, dengDaiMark, sheDengMark, biDengMark, diaoDengMark, langDengMark, paqiMark; + private String lightType3 = "0"; + private String lightType1; + private String lightType2; + + private String addNum; + private LightTestEntity mLightEntity; + private TextView stepThreeTv; + private CheckBox lightOne, lightTwo, lightThree; + private Button mButton; + private String ziId; + private LoadingDialog mLoadingDialog; + private TextView tv_guide_bottom; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_step_three); + initView(); + initListener(); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + cancelAddLight(0); + } + + private void initView() { + if (null != getIntent().getExtras() && null != getIntent().getExtras().get("mLightEntity")) { + mLightEntity = (LightTestEntity) getIntent().getExtras().get("mLightEntity"); + } + addNum = getIntent().getExtras().get("addNum").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + lightType1 = getIntent().getExtras().get("lightType1").toString(); + lightType2 = getIntent().getExtras().get("lightType2").toString(); + + tv_guide_bottom = (TextView) findViewById(R.id.tv_guide_bottom); + lightOne = (CheckBox) findViewById(R.id.cb_position0); + lightTwo = (CheckBox) findViewById(R.id.cb_position1); + lightThree = (CheckBox) findViewById(R.id.cb_position2); + mButton = (Button) findViewById(R.id.bt_sure_config); + stepThreeTv = (TextView) findViewById(R.id.tv_light_step_three); + dengGuangIv = (ImageView) findViewById(R.id.iv_deng_guang); + tongDengIv = (ImageView) findViewById(R.id.iv_tong_deng); + dengDaiIv = (ImageView) findViewById(R.id.iv_deng_dai); + sheDengIv = (ImageView) findViewById(R.id.iv_she_deng); + biDengIv = (ImageView) findViewById(R.id.iv_bi_deng); + diaoDengIv = (ImageView) findViewById(R.id.iv_diao_deng); + langDengIv = (ImageView) findViewById(R.id.iv_lang_deng); + paqiIv = (ImageView) findViewById(R.id.iv_pai_qi); + + dengGuangMark = (ImageView) findViewById(R.id.iv_deng_guang_mark); + tongDengMark = (ImageView) findViewById(R.id.iv_tong_deng_mark); + dengDaiMark = (ImageView) findViewById(R.id.iv_deng_dai_mark); + sheDengMark = (ImageView) findViewById(R.id.iv_she_deng_mark); + biDengMark = (ImageView) findViewById(R.id.iv_bi_deng_mark); + diaoDengMark = (ImageView) findViewById(R.id.iv_diao_deng_mark); + langDengMark = (ImageView) findViewById(R.id.iv_lang_deng_mark); + paqiMark = (ImageView) findViewById(R.id.iv_pai_qi_mark); + + mTitleView = (TitleView) findViewById(R.id.title_type_light); + mTitleView.setHead(R.string.Add_smart_switch_panel); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + cancelAddLight(0); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + tv_guide_bottom.setText(R.string.third_switch_button); + switch (addNum) { + case "1": + stepThreeTv.setText("5/5"); + lightOne.setChecked(false); + lightThree.setChecked(true); + break; + case "2": + break; + case "3": + break; + } + } + + private void initListener() { + dengGuangIv.setOnClickListener(this); + tongDengIv.setOnClickListener(this); + dengDaiIv.setOnClickListener(this); + sheDengIv.setOnClickListener(this); + biDengIv.setOnClickListener(this); + diaoDengIv.setOnClickListener(this); + langDengIv.setOnClickListener(this); + paqiIv.setOnClickListener(this); + mButton.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_deng_guang: + lightType3 = "0"; + dengGuangMark.setVisibility(View.VISIBLE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_tong_deng: + lightType3 = "1"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.VISIBLE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_deng_dai: + lightType3 = "2"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.VISIBLE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_she_deng: + lightType3 = "3"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.VISIBLE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_bi_deng: + lightType3 = "4"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.VISIBLE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_diao_deng: + lightType3 = "5"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.VISIBLE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_lang_deng: + lightType3 = "6"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.VISIBLE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_pai_qi: + lightType3 = "7"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.VISIBLE); + break; + case R.id.bt_sure_config: + Intent intent; + Bundle bundle = new Bundle(); + bundle.putSerializable("mLightEntity", mLightEntity); + switch (addNum) { + case "1": + updateLightType4Add(); + break; + case "2": + finish(); + break; + case "3": + finish(); + break; + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CANCEL_ADD_LIGHT_SUCCESS: + finish(); + break; + case CANCEL_ADD_LIGHT_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_LIGHTTYPE4_ADD_SUCCESS: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + break; + case UPDATE_LIGHTTYPE4_ADD_FAIL: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void updateLightType4Add() { + + } + + private void cancelAddLight(final int i) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} + diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightStepFour1Activity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightStepFour1Activity.java new file mode 100644 index 0000000..5cd28bd --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightStepFour1Activity.java @@ -0,0 +1,313 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.entitya2.LightTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_FAIL; +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_SUCCESS; + +/** + * Created by Administrator on 2018/6/7. + */ + +public class LightStepFour1Activity extends BaseActivity { + private TitleView mTitleView; + private ImageView dengGuangIv, tongDengIv, dengDaiIv, sheDengIv, biDengIv, diaoDengIv, langDengIv, paqiIv; + private ImageView dengGuangMark, tongDengMark, dengDaiMark, sheDengMark, biDengMark, diaoDengMark, langDengMark, paqiMark; + private String lightType2 = "0"; + private String lightType1; + + private String addNum; + private LightTestEntity mLightEntity; + private TextView stepThreeTv; + private CheckBox lightOne, lightTwo, lightThree; + private Button mButton; + private String ziId; + private LoadingDialog mLoadingDialog; + private TextView tv_guide_bottom; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_step_three1); + initView(); + initListener(); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + cancelAddLight(0); + } + + private void initView() { + if (null != getIntent().getExtras() && null != getIntent().getExtras().get("mLightEntity")) { + mLightEntity = (LightTestEntity) getIntent().getExtras().get("mLightEntity"); + } + addNum = getIntent().getExtras().get("addNum").toString(); + lightType1 = getIntent().getExtras().get("lightType1").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + + tv_guide_bottom = (TextView)findViewById(R.id.tv_guide_bottom); + lightOne = (CheckBox) findViewById(R.id.cb_position0); + lightTwo = (CheckBox) findViewById(R.id.cb_position1); + lightThree = (CheckBox) findViewById(R.id.cb_position2); + mButton = (Button) findViewById(R.id.bt_sure_config); + stepThreeTv = (TextView) findViewById(R.id.tv_light_step_three); + dengGuangIv = (ImageView) findViewById(R.id.iv_deng_guang); + tongDengIv = (ImageView) findViewById(R.id.iv_tong_deng); + dengDaiIv = (ImageView) findViewById(R.id.iv_deng_dai); + sheDengIv = (ImageView) findViewById(R.id.iv_she_deng); + biDengIv = (ImageView) findViewById(R.id.iv_bi_deng); + diaoDengIv = (ImageView) findViewById(R.id.iv_diao_deng); + langDengIv = (ImageView) findViewById(R.id.iv_lang_deng); + paqiIv = (ImageView) findViewById(R.id.iv_pai_qi); + + dengGuangMark = (ImageView) findViewById(R.id.iv_deng_guang_mark); + tongDengMark = (ImageView) findViewById(R.id.iv_tong_deng_mark); + dengDaiMark = (ImageView) findViewById(R.id.iv_deng_dai_mark); + sheDengMark = (ImageView) findViewById(R.id.iv_she_deng_mark); + biDengMark = (ImageView) findViewById(R.id.iv_bi_deng_mark); + diaoDengMark = (ImageView) findViewById(R.id.iv_diao_deng_mark); + langDengMark = (ImageView) findViewById(R.id.iv_lang_deng_mark); + paqiMark = (ImageView) findViewById(R.id.iv_pai_qi_mark); + + mTitleView = (TitleView) findViewById(R.id.title_type_light); + mTitleView.setHead(R.string.Add_smart_switch_panel); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + cancelAddLight(0); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + tv_guide_bottom.setText(R.string.second_switch_button); + switch (addNum) { + case "1": + stepThreeTv.setText("4/5"); + mButton.setText(R.string.next); + lightOne.setChecked(false); + lightTwo.setChecked(true); + break; + case "2": + stepThreeTv.setText("4/4"); + lightThree.setVisibility(View.GONE); + lightOne.setChecked(false); + lightTwo.setChecked(true); + break; + case "3": + break; + } + } + + private void initListener() { + dengGuangIv.setOnClickListener(this); + tongDengIv.setOnClickListener(this); + dengDaiIv.setOnClickListener(this); + sheDengIv.setOnClickListener(this); + biDengIv.setOnClickListener(this); + diaoDengIv.setOnClickListener(this); + langDengIv.setOnClickListener(this); + paqiIv.setOnClickListener(this); + mButton.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_deng_guang: + lightType2 = "0"; + dengGuangMark.setVisibility(View.VISIBLE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_tong_deng: + lightType2 = "1"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.VISIBLE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_deng_dai: + lightType2 = "2"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.VISIBLE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_she_deng: + lightType2 = "3"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.VISIBLE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_bi_deng: + lightType2 = "4"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.VISIBLE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_diao_deng: + lightType2 = "5"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.VISIBLE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_lang_deng: + lightType2 = "6"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.VISIBLE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_pai_qi: + lightType2 = "7"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.VISIBLE); + break; + case R.id.bt_sure_config: + Intent intent; + Bundle bundle = new Bundle(); + bundle.putSerializable("mLightEntity", mLightEntity); + switch (addNum) { + case "1": + intent = new Intent(LightStepFour1Activity.this, LightStepFive1Activity.class); + intent.putExtra("lightStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtras(bundle); + intent.putExtra("addNum", addNum); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("lightType1", lightType1); + intent.putExtra("lightType2", lightType2); + startActivity(intent); + finish(); + break; + case "2": + updateLightType4Add(); + break; + case "3": + finish(); + break; + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CANCEL_ADD_LIGHT_SUCCESS: + finish(); + break; + case CANCEL_ADD_LIGHT_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_LIGHTTYPE4_ADD_SUCCESS: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + break; + case UPDATE_LIGHTTYPE4_ADD_FAIL: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void updateLightType4Add() { + + } + + private void cancelAddLight(final int i) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} + diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightStepFourActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightStepFourActivity.java new file mode 100644 index 0000000..340eb46 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightStepFourActivity.java @@ -0,0 +1,313 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.entitya2.LightTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_FAIL; +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_SUCCESS; + +/** + * Created by Administrator on 2018/6/7. + */ + +public class LightStepFourActivity extends BaseActivity { + private TitleView mTitleView; + private ImageView dengGuangIv, tongDengIv, dengDaiIv, sheDengIv, biDengIv, diaoDengIv, langDengIv, paqiIv; + private ImageView dengGuangMark, tongDengMark, dengDaiMark, sheDengMark, biDengMark, diaoDengMark, langDengMark, paqiMark; + private String lightType2 = "0"; + private String lightType1; + + private String addNum; + private LightTestEntity mLightEntity; + private TextView stepThreeTv; + private CheckBox lightOne, lightTwo, lightThree; + private Button mButton; + private String ziId; + private LoadingDialog mLoadingDialog; + private TextView tv_guide_bottom; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_step_three); + initView(); + initListener(); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + cancelAddLight(0); + } + + private void initView() { + if (null != getIntent().getExtras() && null != getIntent().getExtras().get("mLightEntity")) { + mLightEntity = (LightTestEntity) getIntent().getExtras().get("mLightEntity"); + } + addNum = getIntent().getExtras().get("addNum").toString(); + lightType1 = getIntent().getExtras().get("lightType1").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + + tv_guide_bottom = (TextView)findViewById(R.id.tv_guide_bottom); + lightOne = (CheckBox) findViewById(R.id.cb_position0); + lightTwo = (CheckBox) findViewById(R.id.cb_position1); + lightThree = (CheckBox) findViewById(R.id.cb_position2); + mButton = (Button) findViewById(R.id.bt_sure_config); + stepThreeTv = (TextView) findViewById(R.id.tv_light_step_three); + dengGuangIv = (ImageView) findViewById(R.id.iv_deng_guang); + tongDengIv = (ImageView) findViewById(R.id.iv_tong_deng); + dengDaiIv = (ImageView) findViewById(R.id.iv_deng_dai); + sheDengIv = (ImageView) findViewById(R.id.iv_she_deng); + biDengIv = (ImageView) findViewById(R.id.iv_bi_deng); + diaoDengIv = (ImageView) findViewById(R.id.iv_diao_deng); + langDengIv = (ImageView) findViewById(R.id.iv_lang_deng); + paqiIv = (ImageView) findViewById(R.id.iv_pai_qi); + + dengGuangMark = (ImageView) findViewById(R.id.iv_deng_guang_mark); + tongDengMark = (ImageView) findViewById(R.id.iv_tong_deng_mark); + dengDaiMark = (ImageView) findViewById(R.id.iv_deng_dai_mark); + sheDengMark = (ImageView) findViewById(R.id.iv_she_deng_mark); + biDengMark = (ImageView) findViewById(R.id.iv_bi_deng_mark); + diaoDengMark = (ImageView) findViewById(R.id.iv_diao_deng_mark); + langDengMark = (ImageView) findViewById(R.id.iv_lang_deng_mark); + paqiMark = (ImageView) findViewById(R.id.iv_pai_qi_mark); + + mTitleView = (TitleView) findViewById(R.id.title_type_light); + mTitleView.setHead(R.string.Add_smart_switch_panel); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + cancelAddLight(0); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + tv_guide_bottom.setText(R.string.second_switch_button); + switch (addNum) { + case "1": + stepThreeTv.setText("4/5"); + mButton.setText(R.string.next); + lightOne.setChecked(false); + lightTwo.setChecked(true); + break; + case "2": + stepThreeTv.setText("4/4"); + lightThree.setVisibility(View.GONE); + lightOne.setChecked(false); + lightTwo.setChecked(true); + break; + case "3": + break; + } + } + + private void initListener() { + dengGuangIv.setOnClickListener(this); + tongDengIv.setOnClickListener(this); + dengDaiIv.setOnClickListener(this); + sheDengIv.setOnClickListener(this); + biDengIv.setOnClickListener(this); + diaoDengIv.setOnClickListener(this); + langDengIv.setOnClickListener(this); + paqiIv.setOnClickListener(this); + mButton.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_deng_guang: + lightType2 = "0"; + dengGuangMark.setVisibility(View.VISIBLE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_tong_deng: + lightType2 = "1"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.VISIBLE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_deng_dai: + lightType2 = "2"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.VISIBLE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_she_deng: + lightType2 = "3"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.VISIBLE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_bi_deng: + lightType2 = "4"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.VISIBLE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_diao_deng: + lightType2 = "5"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.VISIBLE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_lang_deng: + lightType2 = "6"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.VISIBLE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_pai_qi: + lightType2 = "7"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.VISIBLE); + break; + case R.id.bt_sure_config: + Intent intent; + Bundle bundle = new Bundle(); + bundle.putSerializable("mLightEntity", mLightEntity); + switch (addNum) { + case "1": + intent = new Intent(LightStepFourActivity.this, LightStepFiveActivity.class); + intent.putExtra("lightStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtras(bundle); + intent.putExtra("addNum", addNum); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("lightType1", lightType1); + intent.putExtra("lightType2", lightType2); + startActivity(intent); + finish(); + break; + case "2": + updateLightType4Add(); + break; + case "3": + finish(); + break; + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CANCEL_ADD_LIGHT_SUCCESS: + finish(); + break; + case CANCEL_ADD_LIGHT_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_LIGHTTYPE4_ADD_SUCCESS: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + break; + case UPDATE_LIGHTTYPE4_ADD_FAIL: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void updateLightType4Add() { + + } + + private void cancelAddLight(final int i) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} + diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightStepOneActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightStepOneActivity.java new file mode 100644 index 0000000..8262dd9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightStepOneActivity.java @@ -0,0 +1,299 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.entitya2.LightTestEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.ADD_LIGHT_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADD_LIGHT_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_FAIL; +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_SUCCESS; + +/** + * Created by Administrator on 2017/12/19. + */ + +public class LightStepOneActivity extends BaseActivity { + private TitleView mTitleViewl; + private ImageView topBgIv, lightNumIv; + private String addNum; + private Button nextConfig; + private CheckBox selectUnnorReveal; + private LightTestEntity mLightEntity; + private String addressId; + private MediaPlayer mediaPlayer01; + private LoadingDialog mLoadingDialog; + private TextView tv_top_12; + private String panelType; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_step_one); + initView(); + addLightEntity(); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + cancelAddLight(); + } + + private void initView() { + addNum = getIntent().getExtras().get("addNum").toString(); + panelType = getIntent().getExtras().get("panelType").toString(); + addressId = getIntent().getExtras().get("addressId").toString(); + topBgIv = (ImageView) findViewById(R.id.iv_bg_top); + lightNumIv = (ImageView) findViewById(R.id.iv_light_addNum); + tv_top_12 = (TextView) findViewById(R.id.tv_top_12); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + selectUnnorReveal.setOnClickListener(this); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + Intent intent; + if (panelType.equals("1")) { + intent = new Intent(LightStepOneActivity.this, LightStepTwo1Activity.class); + } else + intent = new Intent(LightStepOneActivity.this, LightStepTwoActivity.class); + Bundle bundle = new Bundle(); + if (null != mLightEntity) { + bundle.putSerializable("mLightEntity", mLightEntity); + } else { + return; + } + intent.putExtras(bundle); + intent.putExtra("addNum", addNum); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("addressId", addressId); + intent.putExtra("panelType", panelType); + startActivity(intent); + finish(); + } + }); + mTitleViewl = (TitleView) findViewById(R.id.title_light_learn); + mTitleViewl.setHead(R.string.Add_smart_switch_panel); + mTitleViewl.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + cancelAddLight(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + switch (addNum) { + case "1": + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_38); + mediaPlayer01.start(); + } + tv_top_12.setText("1/5"); + if (panelType.equals("1")) { + topBgIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_panel_words_two)); + lightNumIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_panel_three1)); + } else + lightNumIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_panel_three)); + break; + case "2": + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_38); + mediaPlayer01.start(); + } + tv_top_12.setText("1/4"); + if (panelType.equals("1")) { + topBgIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_panel_words_two)); + lightNumIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_panel_two1)); + } else + lightNumIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_panel_two)); + break; + case "3": + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_38); + mediaPlayer01.start(); + } + tv_top_12.setText("1/3"); + if (panelType.equals("1")) { + topBgIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_panel_words_two)); + lightNumIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_panel_one1)); + } else + lightNumIv.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_panel_one)); + break; + } + } + + private void addLightEntity() { + /*initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("addressId", addressId); + map.put("delFlag", "1"); + map.put("panelType", panelType); + switch (addNum) { + case "1": + map.put("addNum", "3"); + break; + case "2": + map.put("addNum", "2"); + break; + case "3": + map.put("addNum", "1"); + break; + } + netWorkUtil.requestPostByAsynew(ADD_LIGHT_ENTITY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addLightEntity", "ShareDeviceActivity onSuccess()" + respone); + LightTestEntity obj = JSON.parseObject(respone, LightTestEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_LIGHT_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_LIGHT_ENTITY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Log.i("createTestBlind", "ShareDeviceActivity onSuccess()" + message); + Message msg = mHandler.obtainMessage(ADD_LIGHT_ENTITY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void cancelAddLight() { + /* NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (null != mLightEntity) { + map.put("panelId", mLightEntity.getObj().get(0).getPanelId().toString()); + } + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestPostByAsynew(CANCEL_ADD_LIGHT, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("cancelAddLight", "ShareDeviceActivity onSuccess()" + respone); + LightEntity obj = JSON.parseObject(respone, LightEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(CANCEL_ADD_LIGHT_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(CANCEL_ADD_LIGHT_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Log.i("createTestBlind", "ShareDeviceActivity onSuccess()" + message); + Message msg = mHandler.obtainMessage(CANCEL_ADD_LIGHT_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + } else { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + } + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_LIGHT_ENTITY_SUCCESS: + mLightEntity = (LightTestEntity) msg.obj; + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + break; + case ADD_LIGHT_ENTITY_FAIL: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + case CANCEL_ADD_LIGHT_SUCCESS: + finish(); + break; + case CANCEL_ADD_LIGHT_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightStepThree1Activity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightStepThree1Activity.java new file mode 100644 index 0000000..b98859d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightStepThree1Activity.java @@ -0,0 +1,315 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.entitya2.LightTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_FAIL; +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_SUCCESS; + +/** + * Created by Administrator on 2018/6/6. + */ + +public class LightStepThree1Activity extends BaseActivity { + private TitleView mTitleView; + private ImageView dengGuangIv, tongDengIv, dengDaiIv, sheDengIv, biDengIv, diaoDengIv, langDengIv, paqiIv; + private ImageView dengGuangMark, tongDengMark, dengDaiMark, sheDengMark, biDengMark, diaoDengMark, langDengMark, paqiMark; + private String lightType1 = "0"; + + private String addNum; + private LightTestEntity mLightEntity; + private TextView stepThreeTv; + private CheckBox lightOne, lightTwo, lightThree; + private Button mButton; + private String ziId; + private LoadingDialog mLoadingDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_step_three1); + initView(); + initListener(); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + cancelAddLight(0); + } + + private void initView() { + if (null != getIntent().getExtras() && null != getIntent().getExtras().get("mLightEntity")) { + mLightEntity = (LightTestEntity) getIntent().getExtras().get("mLightEntity"); + } + addNum = getIntent().getExtras().get("addNum").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + + lightOne = (CheckBox) findViewById(R.id.cb_position0); + lightTwo = (CheckBox) findViewById(R.id.cb_position1); + lightThree = (CheckBox) findViewById(R.id.cb_position2); + mButton = (Button) findViewById(R.id.bt_sure_config); + stepThreeTv = (TextView) findViewById(R.id.tv_light_step_three); + dengGuangIv = (ImageView) findViewById(R.id.iv_deng_guang); + tongDengIv = (ImageView) findViewById(R.id.iv_tong_deng); + dengDaiIv = (ImageView) findViewById(R.id.iv_deng_dai); + sheDengIv = (ImageView) findViewById(R.id.iv_she_deng); + biDengIv = (ImageView) findViewById(R.id.iv_bi_deng); + diaoDengIv = (ImageView) findViewById(R.id.iv_diao_deng); + langDengIv = (ImageView) findViewById(R.id.iv_lang_deng); + paqiIv = (ImageView) findViewById(R.id.iv_pai_qi); + + dengGuangMark = (ImageView) findViewById(R.id.iv_deng_guang_mark); + tongDengMark = (ImageView) findViewById(R.id.iv_tong_deng_mark); + dengDaiMark = (ImageView) findViewById(R.id.iv_deng_dai_mark); + sheDengMark = (ImageView) findViewById(R.id.iv_she_deng_mark); + biDengMark = (ImageView) findViewById(R.id.iv_bi_deng_mark); + diaoDengMark = (ImageView) findViewById(R.id.iv_diao_deng_mark); + langDengMark = (ImageView) findViewById(R.id.iv_lang_deng_mark); + paqiMark = (ImageView) findViewById(R.id.iv_pai_qi_mark); + + mTitleView = (TitleView) findViewById(R.id.title_type_light); + mTitleView.setHead(R.string.Add_smart_switch_panel); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + cancelAddLight(0); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + switch (addNum) { + case "1": + stepThreeTv.setText("3/5"); + mButton.setText(R.string.next); + break; + case "2": + stepThreeTv.setText("3/4"); + lightThree.setVisibility(View.GONE); + mButton.setText(R.string.next); + break; + case "3": + stepThreeTv.setText("3/3"); + lightTwo.setVisibility(View.GONE); + lightThree.setVisibility(View.GONE); + break; + } + } + + private void initListener() { + dengGuangIv.setOnClickListener(this); + tongDengIv.setOnClickListener(this); + dengDaiIv.setOnClickListener(this); + sheDengIv.setOnClickListener(this); + biDengIv.setOnClickListener(this); + diaoDengIv.setOnClickListener(this); + langDengIv.setOnClickListener(this); + paqiIv.setOnClickListener(this); + mButton.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_deng_guang: + lightType1 = "0"; + dengGuangMark.setVisibility(View.VISIBLE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_tong_deng: + lightType1 = "1"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.VISIBLE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_deng_dai: + lightType1 = "2"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.VISIBLE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_she_deng: + lightType1 = "3"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.VISIBLE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_bi_deng: + lightType1 = "4"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.VISIBLE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_diao_deng: + lightType1 = "5"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.VISIBLE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_lang_deng: + lightType1 = "6"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.VISIBLE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_pai_qi: + lightType1 = "7"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.VISIBLE); + break; + case R.id.bt_sure_config: + Intent intent; + Bundle bundle = new Bundle(); + bundle.putSerializable("mLightEntity", mLightEntity); + switch (addNum) { + case "1": + intent = new Intent(LightStepThree1Activity.this, LightStepFour1Activity.class); + intent.putExtra("lightStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtras(bundle); + intent.putExtra("addNum", addNum); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("lightType1", lightType1); + startActivity(intent); + finish(); + break; + case "2": + intent = new Intent(LightStepThree1Activity.this, LightStepFour1Activity.class); + intent.putExtra("lightStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtras(bundle); + intent.putExtra("addNum", addNum); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("lightType1", lightType1); + startActivity(intent); + finish(); + break; + case "3": + updateLightType4Add(); + break; + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CANCEL_ADD_LIGHT_SUCCESS: + finish(); + break; + case CANCEL_ADD_LIGHT_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_LIGHTTYPE4_ADD_SUCCESS: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + break; + case UPDATE_LIGHTTYPE4_ADD_FAIL: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void updateLightType4Add() { + + } + + private void cancelAddLight(final int i) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightStepThreeActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightStepThreeActivity.java new file mode 100644 index 0000000..dd29933 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightStepThreeActivity.java @@ -0,0 +1,315 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.entitya2.LightTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_FAIL; +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_LIGHTTYPE4_ADD_SUCCESS; + +/** + * Created by Administrator on 2018/6/6. + */ + +public class LightStepThreeActivity extends BaseActivity { + private TitleView mTitleView; + private ImageView dengGuangIv, tongDengIv, dengDaiIv, sheDengIv, biDengIv, diaoDengIv, langDengIv, paqiIv; + private ImageView dengGuangMark, tongDengMark, dengDaiMark, sheDengMark, biDengMark, diaoDengMark, langDengMark, paqiMark; + private String lightType1 = "0"; + + private String addNum; + private LightTestEntity mLightEntity; + private TextView stepThreeTv; + private CheckBox lightOne, lightTwo, lightThree; + private Button mButton; + private String ziId; + private LoadingDialog mLoadingDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_step_three); + initView(); + initListener(); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + cancelAddLight(0); + } + + private void initView() { + if (null != getIntent().getExtras() && null != getIntent().getExtras().get("mLightEntity")) { + mLightEntity = (LightTestEntity) getIntent().getExtras().get("mLightEntity"); + } + addNum = getIntent().getExtras().get("addNum").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + + lightOne = (CheckBox) findViewById(R.id.cb_position0); + lightTwo = (CheckBox) findViewById(R.id.cb_position1); + lightThree = (CheckBox) findViewById(R.id.cb_position2); + mButton = (Button) findViewById(R.id.bt_sure_config); + stepThreeTv = (TextView) findViewById(R.id.tv_light_step_three); + dengGuangIv = (ImageView) findViewById(R.id.iv_deng_guang); + tongDengIv = (ImageView) findViewById(R.id.iv_tong_deng); + dengDaiIv = (ImageView) findViewById(R.id.iv_deng_dai); + sheDengIv = (ImageView) findViewById(R.id.iv_she_deng); + biDengIv = (ImageView) findViewById(R.id.iv_bi_deng); + diaoDengIv = (ImageView) findViewById(R.id.iv_diao_deng); + langDengIv = (ImageView) findViewById(R.id.iv_lang_deng); + paqiIv = (ImageView) findViewById(R.id.iv_pai_qi); + + dengGuangMark = (ImageView) findViewById(R.id.iv_deng_guang_mark); + tongDengMark = (ImageView) findViewById(R.id.iv_tong_deng_mark); + dengDaiMark = (ImageView) findViewById(R.id.iv_deng_dai_mark); + sheDengMark = (ImageView) findViewById(R.id.iv_she_deng_mark); + biDengMark = (ImageView) findViewById(R.id.iv_bi_deng_mark); + diaoDengMark = (ImageView) findViewById(R.id.iv_diao_deng_mark); + langDengMark = (ImageView) findViewById(R.id.iv_lang_deng_mark); + paqiMark = (ImageView) findViewById(R.id.iv_pai_qi_mark); + + mTitleView = (TitleView) findViewById(R.id.title_type_light); + mTitleView.setHead(R.string.Add_smart_switch_panel); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + cancelAddLight(0); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + switch (addNum) { + case "1": + stepThreeTv.setText("3/5"); + mButton.setText(R.string.next); + break; + case "2": + stepThreeTv.setText("3/4"); + lightThree.setVisibility(View.GONE); + mButton.setText(R.string.next); + break; + case "3": + stepThreeTv.setText("3/3"); + lightTwo.setVisibility(View.GONE); + lightThree.setVisibility(View.GONE); + break; + } + } + + private void initListener() { + dengGuangIv.setOnClickListener(this); + tongDengIv.setOnClickListener(this); + dengDaiIv.setOnClickListener(this); + sheDengIv.setOnClickListener(this); + biDengIv.setOnClickListener(this); + diaoDengIv.setOnClickListener(this); + langDengIv.setOnClickListener(this); + paqiIv.setOnClickListener(this); + mButton.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_deng_guang: + lightType1 = "0"; + dengGuangMark.setVisibility(View.VISIBLE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_tong_deng: + lightType1 = "1"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.VISIBLE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_deng_dai: + lightType1 = "2"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.VISIBLE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_she_deng: + lightType1 = "3"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.VISIBLE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_bi_deng: + lightType1 = "4"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.VISIBLE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_diao_deng: + lightType1 = "5"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.VISIBLE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_lang_deng: + lightType1 = "6"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.VISIBLE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_pai_qi: + lightType1 = "7"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.VISIBLE); + break; + case R.id.bt_sure_config: + Intent intent; + Bundle bundle = new Bundle(); + bundle.putSerializable("mLightEntity", mLightEntity); + switch (addNum) { + case "1": + intent = new Intent(LightStepThreeActivity.this, LightStepFourActivity.class); + intent.putExtra("lightStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtras(bundle); + intent.putExtra("addNum", addNum); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("lightType1", lightType1); + startActivity(intent); + finish(); + break; + case "2": + intent = new Intent(LightStepThreeActivity.this, LightStepFourActivity.class); + intent.putExtra("lightStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtras(bundle); + intent.putExtra("addNum", addNum); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("lightType1", lightType1); + startActivity(intent); + finish(); + break; + case "3": + updateLightType4Add(); + break; + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CANCEL_ADD_LIGHT_SUCCESS: + finish(); + break; + case CANCEL_ADD_LIGHT_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_LIGHTTYPE4_ADD_SUCCESS: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + break; + case UPDATE_LIGHTTYPE4_ADD_FAIL: + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void updateLightType4Add() { + + } + + private void cancelAddLight(final int i) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightStepTwo1Activity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightStepTwo1Activity.java new file mode 100644 index 0000000..f6b3ce3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightStepTwo1Activity.java @@ -0,0 +1,267 @@ +package com.yonsz.z1.new433.light; + +import android.app.Service; +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entitya2.LightTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_FAIL; +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.SUREADD_SENDVOIC_MSG_SUCCESS; + +/** + * Created by Administrator on 2017/12/19. + */ + +public class LightStepTwo1Activity extends BaseActivity { + private TitleView mTitleView; + private String addNum; + private CheckBox lightOne, lightTwo, lightThree; + private String ziId; + private TextView noUse; + private Button sureBtn; + private LightTestEntity mLightEntity; + private LoadingDialog mLoadingDialog; + private MediaPlayer mediaPlayer01; + private TextView tv_top_22; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_step_two1); + initView(); + initListener(); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_39); + mediaPlayer01.start(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + cancelAddLight(0); + } + + private void initView() { + if (getIntent().getExtras() != null && getIntent().getExtras().get("mLightEntity") != null) { + mLightEntity = (LightTestEntity) getIntent().getExtras().get("mLightEntity"); + } + addNum = getIntent().getExtras().get("addNum").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + lightOne = (CheckBox) findViewById(R.id.cb_position0); + lightTwo = (CheckBox) findViewById(R.id.cb_position1); + lightThree = (CheckBox) findViewById(R.id.cb_position2); + tv_top_22 = (TextView) findViewById(R.id.tv_top_22); + noUse = (TextView) findViewById(R.id.tv_no_use); + sureBtn = (Button) findViewById(R.id.bt_sure_config); + mTitleView = (TitleView) findViewById(R.id.title_sure_light); + mTitleView.setHead(R.string.Add_smart_switch_panel); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + cancelAddLight(0); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (addNum) { + case "1": + tv_top_22.setText("2/5"); + studyAndControllLight(mLightEntity.getObj().get(2).getId(), "1"); + break; + case "2": + tv_top_22.setText("2/4"); + lightThree.setVisibility(View.GONE); + studyAndControllLight(mLightEntity.getObj().get(1).getId(), "1"); + break; + case "3": + tv_top_22.setText("2/3"); + lightTwo.setVisibility(View.GONE); + lightThree.setVisibility(View.GONE); + studyAndControllLight(mLightEntity.getObj().get(0).getId(), "1"); + break; + } + } + + private void initListener() { + lightOne.setOnClickListener(this); + lightTwo.setOnClickListener(this); + lightThree.setOnClickListener(this); + noUse.setOnClickListener(this); + sureBtn.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_position0: + if (lightOne.isChecked()) { + //关灯 + studyAndControllLight(mLightEntity.getObj().get(0).getId(), "0"); + } else { + //开灯 + studyAndControllLight(mLightEntity.getObj().get(0).getId(), "1"); + } + break; + case R.id.cb_position1: + if (lightTwo.isChecked()) { + //关灯 + studyAndControllLight(mLightEntity.getObj().get(1).getId(), "0"); + } else { + //开灯 + studyAndControllLight(mLightEntity.getObj().get(1).getId(), "1"); + } + break; + case R.id.cb_position2: + if (lightThree.isChecked()) { + //关灯 + studyAndControllLight(mLightEntity.getObj().get(2).getId(), "0"); + } else { + //开灯 + studyAndControllLight(mLightEntity.getObj().get(2).getId(), "1"); + } + break; + case R.id.tv_no_use: + cancelAddLight(1); + break; + case R.id.bt_sure_config: + // sureAddSendVoicMsg(); + + Intent intent = new Intent(LightStepTwo1Activity.this, LightStepThree1Activity.class); + intent.putExtra("lightStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + + Bundle bundle = new Bundle(); + bundle.putSerializable("mLightEntity", mLightEntity); + intent.putExtras(bundle); + intent.putExtra("addNum", addNum); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + startActivity(intent); + finish(); + break; + } + } + + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case SUREADD_SENDVOIC_MSG_SUCCESS: + LightEntity obj = (LightEntity) msg.obj; + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + intent = new Intent(LightStepTwo1Activity.this, LightStepThree1Activity.class); + intent.putExtra("lightStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + Bundle bundle = new Bundle(); + bundle.putSerializable("mLightEntity", mLightEntity); + intent.putExtras(bundle); + intent.putExtra("addNum", addNum); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + startActivity(intent); + finish(); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case CANCEL_ADD_LIGHT_SUCCESS: + int arg1 = msg.arg1; + if (arg1 == 1) { + intent = new Intent(LightStepTwo1Activity.this, LightStepOneActivity.class); + intent.putExtra("addNum", addNum); + intent.putExtra("ziId", ziId); + intent.putExtra("isFirst", "1"); + intent.putExtra("panelType", getIntent().getExtras().get("panelType").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + startActivity(intent); + finish(); + } else { + finish(); + } + break; + case CANCEL_ADD_LIGHT_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void cancelAddLight(final int i) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void studyAndControllLight(String lightId, String openFlag) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightStepTwoActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightStepTwoActivity.java new file mode 100644 index 0000000..046aee0 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightStepTwoActivity.java @@ -0,0 +1,296 @@ +package com.yonsz.z1.new433.light; + +import android.app.Service; +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entitya2.LightTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_FAIL; +import static com.yonsz.z1.net.Constans.CANCEL_ADD_LIGHT_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.SUREADD_SENDVOIC_MSG_SUCCESS; + +/** + * Created by Administrator on 2017/12/19. + */ + +public class LightStepTwoActivity extends BaseActivity { + private TitleView mTitleView; + private String addNum; + private CheckBox lightOne, lightTwo, lightThree; + private String ziId; + private TextView noUse; + private Button sureBtn; + private LightTestEntity mLightEntity; + private LoadingDialog mLoadingDialog; + private MediaPlayer mediaPlayer01; + private TextView tv_top_22; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_step_two); + initView(); + initListener(); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_39); + mediaPlayer01.start(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + cancelAddLight(0); + } + + private void initView() { + if (getIntent().getExtras() != null && getIntent().getExtras().get("mLightEntity") != null) { + mLightEntity = (LightTestEntity) getIntent().getExtras().get("mLightEntity"); + } + addNum = getIntent().getExtras().get("addNum").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + lightOne = (CheckBox) findViewById(R.id.cb_position0); + lightTwo = (CheckBox) findViewById(R.id.cb_position1); + lightThree = (CheckBox) findViewById(R.id.cb_position2); + tv_top_22 = (TextView) findViewById(R.id.tv_top_22); + noUse = (TextView) findViewById(R.id.tv_no_use); + sureBtn = (Button) findViewById(R.id.bt_sure_config); + mTitleView = (TitleView) findViewById(R.id.title_sure_light); + mTitleView.setHead(R.string.Add_smart_switch_panel); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + cancelAddLight(0); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (addNum) { + case "1": + tv_top_22.setText("2/5"); + studyAndControllLight(mLightEntity.getObj().get(2).getOnInfrared()); + break; + case "2": + tv_top_22.setText("2/4"); + lightThree.setVisibility(View.GONE); + studyAndControllLight(mLightEntity.getObj().get(1).getOnInfrared()); + break; + case "3": + tv_top_22.setText("2/3"); + lightTwo.setVisibility(View.GONE); + lightThree.setVisibility(View.GONE); + studyAndControllLight(mLightEntity.getObj().get(0).getOnInfrared()); + break; + } + } + + private void initListener() { + lightOne.setOnClickListener(this); + lightTwo.setOnClickListener(this); + lightThree.setOnClickListener(this); + noUse.setOnClickListener(this); + sureBtn.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_position0: + if (lightOne.isChecked()) { + //关灯 + studyAndControllLight(mLightEntity.getObj().get(0).getOffInfrared()); + } else { + //开灯 + studyAndControllLight(mLightEntity.getObj().get(0).getOnInfrared()); + } + break; + case R.id.cb_position1: + if (lightTwo.isChecked()) { + //关灯 + studyAndControllLight(mLightEntity.getObj().get(1).getOffInfrared()); + } else { + //开灯 + studyAndControllLight(mLightEntity.getObj().get(1).getOnInfrared()); + } + break; + case R.id.cb_position2: + if (lightThree.isChecked()) { + //关灯 + studyAndControllLight(mLightEntity.getObj().get(2).getOffInfrared()); + } else { + //开灯 + studyAndControllLight(mLightEntity.getObj().get(2).getOnInfrared()); + } + break; + case R.id.tv_no_use: + cancelAddLight(1); + break; + case R.id.bt_sure_config: + // sureAddSendVoicMsg(); + + Intent intent = new Intent(LightStepTwoActivity.this, LightStepThreeActivity.class); + intent.putExtra("lightStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + + Bundle bundle = new Bundle(); + bundle.putSerializable("mLightEntity", mLightEntity); + intent.putExtras(bundle); + intent.putExtra("addNum", addNum); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + startActivity(intent); + finish(); + break; + } + } + + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case SUREADD_SENDVOIC_MSG_SUCCESS: + LightEntity obj = (LightEntity) msg.obj; + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (mLoadingDialog != null) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + intent = new Intent(LightStepTwoActivity.this, LightStepThreeActivity.class); + intent.putExtra("lightStateTag", "1"); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + Bundle bundle = new Bundle(); + bundle.putSerializable("mLightEntity", mLightEntity); + intent.putExtras(bundle); + intent.putExtra("addNum", addNum); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + startActivity(intent); + finish(); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case CANCEL_ADD_LIGHT_SUCCESS: + int arg1 = msg.arg1; + if (arg1 == 1) { + intent = new Intent(LightStepTwoActivity.this, LightStepOneActivity.class); + intent.putExtra("addNum", addNum); + intent.putExtra("ziId", ziId); + intent.putExtra("isFirst", "1"); + intent.putExtra("panelType", getIntent().getExtras().get("panelType").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + startActivity(intent); + finish(); + } else { + finish(); + } + break; + case CANCEL_ADD_LIGHT_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void cancelAddLight(final int i) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void studyAndControllLight(String order) { + /*setShake(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("sendMsg", order); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + util.requestPostByAsyn(ziId, NetWorkUrl.STUDY_ANDCONTROLL_LIGHT, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("studyAndControllLight", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (5003 == obj.getFlag()) { + NettyHandlerUtil.getInstance(); + } else { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(STUDY_ANDCONTROLL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/LightTwoActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/LightTwoActivity.java new file mode 100644 index 0000000..c508a4c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/LightTwoActivity.java @@ -0,0 +1,156 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.version5.light.LightClickActivity; +import com.yonsz.z1.version5.light.LightT3TypeActivity; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2018/7/9. + */ + +public class LightTwoActivity extends BaseActivity { + private TitleView mTitleView; + private CheckBox cb_position0, cb_position1, cb_position2; + private Button nextConfig; + private String addNum, panelType; + private ImageView panelOneIv, panelTwoIv, panelThreeIv; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_two); + initView(); + initListener(); + } + + private void initListener() { + cb_position0.setOnClickListener(this); + cb_position1.setOnClickListener(this); + cb_position2.setOnClickListener(this); + } + + private void initView() { + panelType = getIntent().getExtras().get("panelType").toString(); + cb_position0 = (CheckBox) findViewById(R.id.cb_position0); + cb_position1 = (CheckBox) findViewById(R.id.cb_position1); + cb_position2 = (CheckBox) findViewById(R.id.cb_position2); + panelOneIv = (ImageView) findViewById(R.id.iv_panel_one); + panelTwoIv = (ImageView) findViewById(R.id.iv_panel_two); + panelThreeIv = (ImageView) findViewById(R.id.iv_panel_three); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + //进入2/4界面 + // studyAndControllPlug(blindTestEntity.getObj().getOnInfrared().toString()); + /*Intent intent = new Intent(LightTwoActivity.this, LightStepOneActivity.class); + intent.putExtra("isFirst", "1"); + intent.putExtra("addNum", addNum); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("panelType", panelType); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + startActivity(intent);*/ + + Intent intent = new Intent(LightTwoActivity.this, LightClickActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + if (TextUtils.isEmpty(addNum)) { + return; + } + intent.putExtra("lightNumber", addNum); + startActivity(intent); + } + }); + mTitleView = (TitleView) findViewById(R.id.title_light_one); + mTitleView.setHead(R.string.Select_smart_switch_panel_type); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + if (panelType.equals("1")) { + panelOneIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_panel_one1)); + panelTwoIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_panel_two1)); + panelThreeIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_panel_three1)); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_position0: + addNum = "3"; + cb_position0.setChecked(true); + cb_position1.setChecked(false); + cb_position2.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + case R.id.cb_position1: + addNum = "2"; + cb_position1.setChecked(true); + cb_position0.setChecked(false); + cb_position2.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + case R.id.cb_position2: + addNum = "1"; + cb_position1.setChecked(false); + cb_position0.setChecked(false); + cb_position2.setChecked(true); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/light/ResponseActivity.java b/app/src/main/java/com/yonsz/z1/new433/light/ResponseActivity.java new file mode 100644 index 0000000..648465b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/light/ResponseActivity.java @@ -0,0 +1,393 @@ +package com.yonsz.z1.new433.light; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.RelativeLayout; +import android.widget.SeekBar; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.bigkoo.pickerview.OptionsPickerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AdditionEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.gateway.TemporaryKeySetActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.APP_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_GETDETAIL; + +public class ResponseActivity extends BaseActivity { + private TitleView mTitleView; + private CheckBox lightCb, actionCb; + private TextView lightTv, actionTv; + private SeekBar lightSb, actionSb; + private String deviceId, deviceModel, deviceType; + private RelativeLayout recoveryRl, rl_delay_first, rl_delay_brightness, rl_delay_second; + private TextView delayFirstTv, delayBrightnessTv, delaySecondTv, getSamplingTv; + private LoadingDialog mLoadingDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_response_setting); + initView(); + initListener(); + } + + private void initView() { + deviceId = getIntent().getExtras().get("deviceId").toString(); + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + deviceType = getIntent().getExtras().get("deviceType").toString(); + recoveryRl = findViewById(R.id.rl_recovery); + rl_delay_first = findViewById(R.id.rl_delay_first); + rl_delay_brightness = findViewById(R.id.rl_delay_brightness); + rl_delay_second = findViewById(R.id.rl_delay_second); + lightTv = findViewById(R.id.tv_light); + actionTv = findViewById(R.id.tv_action); + delayFirstTv = findViewById(R.id.tv_delay_first); + delaySecondTv = findViewById(R.id.tv_delay_second); + getSamplingTv = findViewById(R.id.tv_getSampling); + delayBrightnessTv = findViewById(R.id.tv_delay_brightness); + lightSb = findViewById(R.id.sb_light); + actionSb = findViewById(R.id.sb_action); + lightCb = findViewById(R.id.cb_response_light); + actionCb = findViewById(R.id.cb_response_action); + mTitleView = findViewById(R.id.title_response); + mTitleView.setHead("感应设置"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + subsetGetDetail(); + } + + private void initListener() { + lightCb.setOnClickListener(this); + actionCb.setOnClickListener(this); + recoveryRl.setOnClickListener(this); + rl_delay_first.setOnClickListener(this); + rl_delay_second.setOnClickListener(this); + rl_delay_brightness.setOnClickListener(this); + getSamplingTv.setOnClickListener(this); + lightSb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + lightTv.setText(progress * 30 + ""); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + subsetControl("light_source", seekBar.getProgress() * 30 + ""); + } + }); + actionSb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + actionTv.setText(progress + "%"); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + subsetControl("motion_sensitivity", seekBar.getProgress() + ""); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(ResponseActivity.this); + mLoadingDialog.show(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_response_light: + if (lightCb.isChecked()) { + subsetControl("light_sensation_open", ""); + } else { + subsetControl("light_sensation_close", ""); + } + break; + case R.id.cb_response_action: + if (actionCb.isChecked()) { + subsetControl("motion_open", ""); + } else { + subsetControl("motion_close", ""); + } + break; + case R.id.rl_recovery: + ConfirmDialog dialog = new ConfirmDialog(ResponseActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + subsetExtend("resetFactory"); + break; + } + } + }); + dialog.setContent("是否恢复默认值?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.rl_delay_first: + setTime(delayFirstTv, "delay_first", "分钟"); +// subsetControl("delay_first", "6"); + break; + case R.id.rl_delay_second: + setTime(delaySecondTv, "delay_second", "分钟"); +// subsetControl("delay_second", "7"); + break; + case R.id.rl_delay_brightness: + setTime(delayBrightnessTv, "delay_brightness", "%"); +// subsetControl("delay_brightness", "20"); + break; + case R.id.tv_getSampling: + subsetExtend("getSampling"); + break; + } + } + + private void setTime(final TextView textView, String order, String type) { + final List options1Items = new ArrayList<>(); + options1Items.clear(); + int times = 60; + if (order.equals("delay_brightness")) { + times = 100; + } + for (int i = 0; i < times; i++) { + options1Items.add(i + ""); + } + OptionsPickerView pvOptions = new OptionsPickerView.Builder(ResponseActivity.this, new OptionsPickerView.OnOptionsSelectListener() { + @Override + public void onOptionsSelect(int options1, int option2, int options3, View v) { + //返回的分别是三个级别的选中位置 + String s = options1Items.get(options1); + textView.setVisibility(View.VISIBLE); + textView.setText(s + type); + subsetControl(order, s); + } + }) + .setTextColorCenter(Color.BLACK)//设置选中项的颜色 + .build(); + pvOptions.setPicker(options1Items); + pvOptions.show(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECT_SAFETY_DETAIL_SUCCESS: + SafeVoiceEntity safeVoiceEntity = (SafeVoiceEntity) msg.obj; + SafeVoiceEntity.DataBean.SettingBean setting = safeVoiceEntity.getData().getSetting(); + if (null != setting) { + if (setting.getMotion().equals("0")) { + actionCb.setChecked(false); + } else { + actionCb.setChecked(true); + } + if (setting.getLightSensation().equals("0")) { + lightCb.setChecked(false); + } else { + lightCb.setChecked(true); + } + actionTv.setText(setting.getMotionSensitivity() + "%"); + actionSb.setProgress(Integer.parseInt(setting.getMotionSensitivity())); + lightTv.setText(setting.getLightSource()); + lightSb.setProgress(Integer.parseInt(setting.getLightSource()) / 30); + + delayFirstTv.setText(setting.getDelayFirst() + "分钟"); + delaySecondTv.setText(setting.getDelaySecond() + "分钟"); + delayBrightnessTv.setText(setting.getDelayBrightness() + "%"); + } + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + if (msg.arg1 == 1) { + SimpleEntty obj = (SimpleEntty) msg.obj; + lightTv.setText(obj.getData()); + lightSb.setProgress(Integer.parseInt(obj.getData()) / 30); + } else { + subsetGetDetail(); + } + break; + case SELECT_SAFETY_DETAIL_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, String.valueOf(msg.obj)); + break; + case APP_CONTROL_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + break; + } + } + + private void subsetControl(String key, String brightness) { + initLoadDialog(); + String body = "{}"; + if (!brightness.isEmpty()) { + AdditionEntity addition = new AdditionEntity(); + addition.setValue(brightness); + body = JSONObject.toJSONString(addition); + } + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("oper", key); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_CONTROL, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetControl", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(APP_CONTROL_SUCCESS); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetGetDetail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestGetByAsy(SUBSET_GETDETAIL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("subsetGetDetail", "onSuccess()" + respone); + SafeVoiceEntity obj = JSON.parseObject(respone, SafeVoiceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + + private void subsetExtend(String method) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("deviceModel", deviceModel); + map.put("method", method); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_EXTEND, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetExtend", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + if (method.equals("getSampling")) { + msg.arg1 = 1; + } else { + msg.arg1 = 0; + } + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherModifyActivity.java b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherModifyActivity.java new file mode 100644 index 0000000..8c6985e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherModifyActivity.java @@ -0,0 +1,531 @@ +package com.yonsz.z1.new433.switcher; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.fragment.SwitchFragment; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; + +/** + * Created by Administrator on 2018/7/9. + */ + +public class SwitcherModifyActivity extends BaseActivity implements CompoundButton.OnCheckedChangeListener { + private TitleView mTitleView; + private String largeClass; + private ImageView chazuoIv, taidengIv, chudianIv, qiangbiIv, reshuihuIv, qunuanqiIv, dwxIv, xiaoduIv, zidingyiIv; + private ImageView chazuoMark, taidengMark, chudianMark, qiangbiMark, reshuihuMark, qunuanqiMark, dwxMark, xiaoduMark; + private String plugType = "254"; + + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String deviceAddress = "0"; + private List condition = new ArrayList<>(); + private String addressId; + private LoadingDialog mLoadingDialog; + private String switcherId; + private RelativeLayout rl_switch_type; + private Button mButton; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_switcher_modify); + initView(); + initListener(); + } + + private void initView() { + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + plugType = getIntent().getExtras().get("plugType").toString(); + largeClass = getIntent().getExtras().get("largeClass").toString(); + switcherId = getIntent().getExtras().get("switcherId").toString(); + addressId = deviceAddress; + mButton = (Button) findViewById(R.id.bt_sure_config); + rl_switch_type = (RelativeLayout) findViewById(R.id.rl_switch_type); + chazuoIv = (ImageView) findViewById(R.id.iv_nothing); + taidengIv = (ImageView) findViewById(R.id.iv_taideng); + chudianIv = (ImageView) findViewById(R.id.iv_chudian); + reshuihuIv = (ImageView) findViewById(R.id.iv_reshuihu); + qunuanqiIv = (ImageView) findViewById(R.id.iv_qunuanqi); + dwxIv = (ImageView) findViewById(R.id.iv_dwx); + xiaoduIv = (ImageView) findViewById(R.id.iv_xiaodu); + zidingyiIv = (ImageView) findViewById(R.id.iv_position); + + chazuoMark = (ImageView) findViewById(R.id.iv_nothing_mark); + taidengMark = (ImageView) findViewById(R.id.iv_taideng_mark); + chudianMark = (ImageView) findViewById(R.id.iv_chudian_mark); + reshuihuMark = (ImageView) findViewById(R.id.iv_reshuihu_mark); + qunuanqiMark = (ImageView) findViewById(R.id.iv_qunuanqi_mark); + dwxMark = (ImageView) findViewById(R.id.iv_dwx_mark); + xiaoduMark = (ImageView) findViewById(R.id.iv_xiaodu_mark); + mTitleView = (TitleView) findViewById(R.id.title_switcher_two); + mTitleView.setHead("修改类型"); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(this); + } + + switch (deviceAddress) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + + switch (plugType) { + case "0": + chazuoMark.setVisibility(View.VISIBLE); + break; + case "1": + taidengMark.setVisibility(View.VISIBLE); + break; + case "2": + chudianMark.setVisibility(View.VISIBLE); + break; + case "3": + chazuoMark.setVisibility(View.VISIBLE); + break; + case "4": + reshuihuMark.setVisibility(View.VISIBLE); + break; + case "5": + qunuanqiMark.setVisibility(View.VISIBLE); + break; + case "6": + dwxMark.setVisibility(View.VISIBLE); + break; + case "7": + xiaoduMark.setVisibility(View.VISIBLE); + break; + default: + + break; + } + + switch (largeClass) { + case "0": + chazuoIv.setImageResource(R.drawable.icon_device_plug_t1); + zidingyiIv.setImageResource(R.drawable.icon_device_plug_t1); + break; + case "1": + chazuoIv.setImageResource(R.drawable.icon_device_wallsocket_t2); + zidingyiIv.setImageResource(R.drawable.icon_device_wallsocket_t2); + break; + case "2": + chazuoIv.setImageResource(R.drawable.icon_device_plug_t4); + zidingyiIv.setImageResource(R.drawable.icon_device_plug_t4); + break; + case "4": + chazuoIv.setImageResource(R.drawable.icon_device_wifi_socket); + zidingyiIv.setImageResource(R.drawable.icon_device_wifi_socket); + break; + default: + chazuoIv.setImageResource(R.drawable.icon_chazuo); + zidingyiIv.setImageResource(R.drawable.icon_chazuo); + break; + } + } + + private void initListener() { + chazuoIv.setOnClickListener(this); + taidengIv.setOnClickListener(this); + chudianIv.setOnClickListener(this); + reshuihuIv.setOnClickListener(this); + qunuanqiIv.setOnClickListener(this); + dwxIv.setOnClickListener(this); + xiaoduIv.setOnClickListener(this); + rl_switch_type.setOnClickListener(this); + mButton.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_nothing: + plugType = "0"; + chazuoMark.setVisibility(View.VISIBLE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_taideng: + plugType = "1"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.VISIBLE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_chudian: + plugType = "2"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.VISIBLE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_reshuihu: + plugType = "4"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.VISIBLE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_qunuanqi: + plugType = "5"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.VISIBLE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_dwx: + plugType = "6"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.VISIBLE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_xiaodu: + plugType = "7"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.VISIBLE); + break; + case R.id.rl_switch_type: + RenameNameDialog dialog = new RenameNameDialog(SwitcherModifyActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + plugType = "254"; + subsetModify(positioName); + break; + } + } + }); + dialog.setHintName(""); + dialog.setContent("设置接入电器名称"); + dialog.setMaxEms(10); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.bt_sure_config: + if (null != switcherId) { + subsetModify(""); + } + break; + } + } + + private void subsetModify(String deviceName) { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", switcherId); + map.put("deviceModel", largeClass); + map.put("deviceType", SWITCH_TAG); + map.put("subtype", plugType); + if (!TextUtils.isEmpty(deviceName)) { + map.put("name", deviceName); + } + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_MODIFY, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetModify", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ALLOW_VOICE_CONTROLL_FAIL: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case ALLOW_VOICE_CONTROLL_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + BaseVersion5Entity entity = (BaseVersion5Entity) msg.obj; + Intent intent = new Intent(SwitcherModifyActivity.this, SwitchFragment.class); + intent.putExtra("plugType", entity.getData().getSubType()); + intent.putExtra("plugName", entity.getData().getName()); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + break; + } + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + switch (id) { + case R.id.cb_position0: + if (isChecked) + addressId = "0"; + break; + case R.id.cb_position1: + if (isChecked) + addressId = "1"; + break; + case R.id.cb_position2: + if (isChecked) + addressId = "2"; + break; + case R.id.cb_position3: + if (isChecked) + addressId = "3"; + break; + case R.id.cb_position4: + if (isChecked) + addressId = "4"; + break; + case R.id.cb_position5: + if (isChecked) + addressId = "5"; + break; + case R.id.cb_position6: + if (isChecked) + addressId = "6"; + break; + case R.id.cb_position7: + if (isChecked) + addressId = "7"; + break; + case R.id.cb_position8: + if (isChecked) + addressId = "8"; + break; + case R.id.cb_position9: + if (isChecked) + addressId = "9"; + break; + case R.id.cb_position10: + if (isChecked) + addressId = "10"; + break; + case R.id.cb_position11: + if (isChecked) + addressId = "11"; + break; + case R.id.cb_position12: + if (isChecked) + addressId = "12"; + break; + case R.id.cb_position13: + if (isChecked) + addressId = "13"; + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherNewActivity.java b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherNewActivity.java new file mode 100644 index 0000000..32d28ea --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherNewActivity.java @@ -0,0 +1,462 @@ +package com.yonsz.z1.new433.switcher; + +import android.app.Service; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Vibrator; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.database.entity.LightListEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.VoiceControllEntity; +import com.yonsz.z1.database.entity.entitya2.BlindTestEntity; +import com.yonsz.z1.device.VoiceDeclareActivity; +import com.yonsz.z1.device.light.LightAdapter; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.tcpudp.NettyManager; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.utils.ToolsUtil; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.PositionPopupWindow; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.DELBLIND_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.DELBLIND_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECTBLIND_BYZI_FAIL; +import static com.yonsz.z1.net.Constans.SELECTBLIND_BYZI_SUCCESS; +import static com.yonsz.z1.net.Constans.SENDVOICE_BLINDMSG_FAIL; +import static com.yonsz.z1.net.Constans.SENDVOICE_BLINDMSG_SUCCESS; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.isLocalControl; + +/** + * Created by Administrator on 2017/12/15. + */ + +public class SwitcherNewActivity extends BaseActivity { + private TitleView mTitleView; + private LoadingDialog mLoadingDialog; + private SwipeMenuRecyclerView mRecyclerView; + private SwitcherNewAdapter mSwitcherNewAdapter; + private List mdatas; + private String ziId; + private String userId; + private int voicePosition; + private boolean isDeleteChild = false; + private boolean isModifyPosition = false; + private String addressId; + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.y76); + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_curtains); + initView(); + selectInfoByZi(); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + addressId = getIntent().getExtras().get("deviceAddress").toString(); + userId = SharedpreferencesUtil.get(Constans.USERPHONE, ""); + mTitleView = (TitleView) findViewById(R.id.title_curtains); + mTitleView.setHead(R.string.chazuo); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.clearBackGroud(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + if (isModifyPosition || isDeleteChild) { + if (isDeleteChild) { + isDeleteChild = false; + mSwitcherNewAdapter.setIsDelete(isDeleteChild); + mSwitcherNewAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setBackVisible(); + } + if (isModifyPosition) { + isModifyPosition = false; + mSwitcherNewAdapter.setIsLearn(isModifyPosition); + mSwitcherNewAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setBackVisible(); + } + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(SwitcherNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + //取消 + break; + case 1: + //删除电视 + isDeleteChild = true; + mSwitcherNewAdapter.setIsDelete(isDeleteChild); + mSwitcherNewAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionGone(); + mTitleView.setBackGone(); + break; + case 2: + //添加窗帘 + if (DensityUtil.isNetworkConnected(SwitcherNewActivity.this)) { + if (addressId.equals("14")) { + showPositionBottom(SWITCH_TAG, "1", "0"); + } else { + showPositionBottom(SWITCH_TAG, "1", addressId); + } + } else { + ToastUtil.show(SwitcherNewActivity.this, R.string.net_error); + } + break; + case 3: + //语令说明 + Intent intent = new Intent(SwitcherNewActivity.this, VoiceDeclareActivity.class); + intent.putExtra("tag", SWITCH_TAG); + startActivity(intent); + break; + case 4: + //修改窗帘位置信息 + isModifyPosition = true; + mSwitcherNewAdapter.setIsLearn(isModifyPosition); + mSwitcherNewAdapter.notifyDataSetChanged(); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionGone(); + mTitleView.setBackGone(); + break; + } + } + }); + dialog2.setContent(R.string.Add_socket); + dialog2.setLearnTxt(R.string.Modify_socket_location); + dialog2.setSureBtnTxt(R.string.Delete_socket); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + mdatas = new ArrayList<>(); + mSwitcherNewAdapter = new SwitcherNewAdapter(this, mdatas, isModifyPosition); + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_parent_device_list); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setItemViewCacheSize(0);//试图解决复用的问题 + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setSwipeMenuCreator(swipeMenuCreator); + // mRecyclerView.setSwipeMenuItemClickListener(mMenuItemClickListener); + mRecyclerView.setAdapter(mSwitcherNewAdapter); + mSwitcherNewAdapter.setOnItemLightClickListener(new LightAdapter.OnItemLightClickListener() { + @Override + public void onLearnLightClick(int position, int i) { + + } + + @Override + public void onLightOpenCloseClick(final int position, int i) { + //控制窗帘 + switch (i) { + case 0: + setShake(); + //关闭插座 + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(mdatas.get(position).getOffInfrared().toString(), "05")); + } else { + studyAndControllPlug(mdatas.get(position).getOffInfrared().toString()); + } + break; + case 1: + break; + case 2: + setShake(); + //打开插座 + if (isLocalControl) { + NettyManager.sendBleMsg2Server(ToolsUtil.completeAiInfo(mdatas.get(position).getOnInfrared().toString(), "05")); + } else { + studyAndControllPlug(mdatas.get(position).getOnInfrared().toString()); + } + break; + case 3: + //删除插座 + ConfirmDialog dialog = new ConfirmDialog(SwitcherNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + delBlindEntity(mdatas.get(position).getId().toString()); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 4: + if (mdatas.get(position).getAddressId().equals("14")) { + showPositionBottom(mdatas.get(position).getId().toString(), "0", "0"); + } else { + showPositionBottom(mdatas.get(position).getId().toString(), "0", mdatas.get(position).getAddressId()); + } + break; + } + } + + @Override + public void onVoiceClick(final int position, int voiceControlTag) { + final Handler ThreadHandler = new Handler(); + switch (voiceControlTag) { + case 1: + setShake(); + ConfirmDialog dialog = new ConfirmDialog(SwitcherNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //获取编码,记录当前的位置 + voicePosition = position; + /*//设置定时器 + ThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + Message message = new Message(); + message.what = BLIND_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + }, 6000);*/ + allowVoiceControll(1, mdatas.get(position).getId()); + break; + } + } + }); + dialog.setContent("开启语音控制?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + setShake(); + ConfirmDialog dialog1 = new ConfirmDialog(SwitcherNewActivity.this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //获取编码,记录当前的位置 + voicePosition = position; + /*//设置定时器 + ThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + Message message = new Message(); + message.what = BLIND_LEARN_SUCCESS; + mHandler.sendMessage(message); + } + }, 6000);*/ + allowVoiceControll(0, mdatas.get(position).getId()); + break; + } + } + }); + dialog1.setContent("关闭语音控制?"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + break; + case 3: + ToastUtil.show(SwitcherNewActivity.this, "请完成窗帘学习"); + break; + } + } + }); + } + + private void delBlindEntity(String id) { + } + + private void allowVoiceControll(int controlFlag, String id) { + } + + private void showPositionBottom(final String id, final String tag, String position) { + View rootview = LayoutInflater.from(SwitcherNewActivity.this).inflate(R.layout.activity_curtains, null); + PositionPopupWindow popupWindow = new PositionPopupWindow(this, position, new PositionPopupWindow.OnCompleteListener() { + @Override + public void onComplete(String time, List conditionList) { + Log.i("showPositionBottom", "SwitcherActivity onComplete()" + time + conditionList.toString()); + switch (tag) { + case "0": + if (time.equals("13")) { + updateBlindEntityName("0", id); + } else { + updateBlindEntityName(String.valueOf(Integer.valueOf(time) + 1), id); + } + break; + case "1": + Intent intent = new Intent(SwitcherNewActivity.this, SwitcherStepOneActivity.class); + intent.putExtra("isFirst", "0"); + if (time.equals("13")) { + intent.putExtra("addressId", "0"); + } else { + intent.putExtra("addressId", String.valueOf(Integer.valueOf(time) + 1)); + } + intent.putExtra("deviceAddress", addressId); + intent.putExtra("ziId", ziId); + startActivity(intent); + break; + } + } + }); + popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); + } + + private void updateBlindEntityName(String addressId, String id) { + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECTBLIND_BYZI_SUCCESS: + LightListEntity obj = (LightListEntity) msg.obj; + mdatas.clear(); + if (obj.getObj() != null) { + mdatas.addAll(0, obj.getObj()); + } else { + isDeleteChild = false; + mSwitcherNewAdapter.setIsDelete(isDeleteChild); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setBackVisible(); + } + mSwitcherNewAdapter.notifyDataSetChanged(); + break; + case SELECTBLIND_BYZI_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case DELBLIND_ENTITY_SUCCESS: + selectInfoByZi(); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + selectInfoByZi(); + break; + case SENDVOICE_BLINDMSG_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + if (mdatas.get(voicePosition).getVoiceFlag().equals("1")) { + mdatas.get(voicePosition).setVoiceFlag("0"); + ToastUtil.show(SwitcherNewActivity.this, "关闭语音成功"); + } else { + mdatas.get(voicePosition).setVoiceFlag("1"); + ToastUtil.show(SwitcherNewActivity.this, "开启语音成功"); + } + // mSwitcherNewAdapter.notifyItemChanged(voicePosition); + mSwitcherNewAdapter.notifyDataSetChanged(); + break; + case STUDY_ANDCONTROLL_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void studyAndControllPlug(String infrared) { + + } + + private void selectInfoByZi() { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherNewAdapter.java b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherNewAdapter.java new file mode 100644 index 0000000..42cefea --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherNewAdapter.java @@ -0,0 +1,172 @@ +package com.yonsz.z1.new433.switcher; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.LightDetaiEntity; +import com.yonsz.z1.device.light.LightAdapter; + +import java.util.List; + +/** + * Created by Administrator on 2017/12/16. + */ + +public class SwitcherNewAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mObjEntity; + private boolean isLearn; + private LightAdapter.OnItemLightClickListener mLightClickListener; + private boolean isDeleteChild; + + public SwitcherNewAdapter(Context mContext, List mObjEntity, boolean isLearn) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + this.isLearn = isLearn; + } + + public void setIsLearn(boolean isLearn1) { + isLearn = isLearn1; + } + + public void setIsDelete(boolean isDelete1) { + isDeleteChild = isDelete1; + } + + + @Override + public SwitcherNewAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_switcher_new, + parent, false); + return new SwitcherNewAdapter.MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(SwitcherNewAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView curtainsRoom; + private TextView curtainsState; + private FrameLayout mCurtainsStop, mCurtainsClose; + private LinearLayout controlLl; + private ImageView deleteChild; + private ImageView editPosition; + private TextView tv_curtains_open; + + + public MessageViewHolder(View view) { + super(view); + curtainsRoom = (TextView) itemView.findViewById(R.id.tv_curtains_room); + curtainsState = (TextView) itemView.findViewById(R.id.tv_curtains_edit); + mCurtainsClose = (FrameLayout) itemView.findViewById(R.id.fl_curtains_close); + mCurtainsStop = (FrameLayout) itemView.findViewById(R.id.fl_curtains_stop); + controlLl = (LinearLayout) itemView.findViewById(R.id.ll_curtains_top); + deleteChild = (ImageView) itemView.findViewById(R.id.iv_delete_child); + editPosition = (ImageView) itemView.findViewById(R.id.iv_edit_position); + tv_curtains_open = (TextView) itemView.findViewById(R.id.tv_curtains_open); + } + + public void setViews(final int position) { + final LightDetaiEntity detaiEntity = mObjEntity.get(position); + if (isLearn) { + curtainsState.setVisibility(View.GONE); + editPosition.setVisibility(View.VISIBLE); + } else { + curtainsState.setVisibility(View.VISIBLE); + editPosition.setVisibility(View.GONE); + } + if (isDeleteChild) { + deleteChild.setVisibility(View.VISIBLE); + } else { + deleteChild.setVisibility(View.GONE); + } + + mCurtainsClose.setAlpha(1.0f); + mCurtainsClose.setEnabled(true); + mCurtainsStop.setAlpha(1.0f); + mCurtainsStop.setEnabled(true); + + + controlLl.setVisibility(View.VISIBLE); + curtainsRoom.setVisibility(View.VISIBLE); + if (detaiEntity.getAddressName() != null) { + curtainsRoom.setText(detaiEntity.getAddressName()); + } + + if (detaiEntity.getVoiceFlag().equals("1")) { + detaiEntity.setVoiceControlTag(2); + curtainsState.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_on)); + } else { + detaiEntity.setVoiceControlTag(1); + curtainsState.setBackground(mContext.getResources().getDrawable(R.drawable.icon_voice_off)); + } + + + curtainsState.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, detaiEntity.getVoiceControlTag()); + } + } + }); + + + mCurtainsClose.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 0); + tv_curtains_open.setBackground(mContext.getResources().getDrawable(R.drawable.icon_index_chazuo02)); + } + } + }); + mCurtainsStop.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 2); + tv_curtains_open.setBackground(mContext.getResources().getDrawable(R.drawable.icon_index_chazuo_on)); + } + } + }); + deleteChild.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 3); + } + } + }); + editPosition.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLightOpenCloseClick(position, 4); + } + } + }); + + } + } + + public void setOnItemLightClickListener(LightAdapter.OnItemLightClickListener listener) { + this.mLightClickListener = listener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherOneActivity.java b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherOneActivity.java new file mode 100644 index 0000000..50acc82 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherOneActivity.java @@ -0,0 +1,128 @@ +package com.yonsz.z1.new433.switcher; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.version5.ChooseRoomActivity; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.SWITCH_TAG; + +/** + * Created by Administrator on 2018/7/9. + */ + +public class SwitcherOneActivity extends BaseActivity { + private TitleView mTitleView; + private CheckBox cb_position0, cb_position1; + private Button nextConfig; + private String largeClass; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_switcher_one); + initView(); + initListener(); + } + + private void initListener() { + cb_position0.setOnClickListener(this); + cb_position1.setOnClickListener(this); + } + + private void initView() { + cb_position0 = (CheckBox) findViewById(R.id.cb_position0); + cb_position1 = (CheckBox) findViewById(R.id.cb_position1); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + //进入2/4界面 + // studyAndControllPlug(blindTestEntity.getObj().getOnInfrared().toString()); + /*Intent intent = new Intent(SwitcherOneActivity.this, SwitcherTwoActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("largeClass", largeClass); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + startActivity(intent);*/ + + Intent intent = new Intent(SwitcherOneActivity.this, ChooseRoomActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceModel", largeClass); + startActivity(intent); + } + }); + mTitleView = (TitleView) findViewById(R.id.title_switcher_one); + mTitleView.setHead(R.string.Selection_Socket); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_position0: + largeClass = "0"; + cb_position0.setChecked(true); + cb_position1.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + case R.id.cb_position1: + largeClass = "1"; + cb_position1.setChecked(true); + cb_position0.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherStepOneActivity.java b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherStepOneActivity.java new file mode 100644 index 0000000..8dbd671 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherStepOneActivity.java @@ -0,0 +1,438 @@ +package com.yonsz.z1.new433.switcher; + +import android.content.Intent; +import android.graphics.Color; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity4.YblLightEvent; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.BlindTestEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.panel485.Panel485SetCodeActivity; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.Set; + +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.CREATE_TEST_BLIND_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_TEST_BLIND_SUCCESS; +import static com.yonsz.z1.net.Constans.EXECUTE_PHONE_FAIL; +import static com.yonsz.z1.net.Constans.SERVICE_PANEL_485; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.NetWorkUrl.YBL_SEARCH; + +/** + * Created by Administrator on 2017/12/15. + */ + +public class SwitcherStepOneActivity extends BaseActivity { + private Set mNettyEntities = new LinkedHashSet<>(); + private YblEntity nettyEntity; + private TitleView mTitleView; + private Button nextConfig; + private CheckBox selectUnnorReveal; + private BlindTestEntity blindTestEntity = new BlindTestEntity(); + private String ziId; + private MediaPlayer mediaPlayer01; + private String deviceAddress; + private LoadingDialog mLoadingDialog; + private String largeClass; + private ImageView iv_bg; + private String bodyMap = "{}"; + private LinearLayout ll_bootom, ll_check; + private TextView tv_chazuo, tv_chazuo_wait, tv_top_12; + private StateButton mStateButton; + private int sec = 60; + private boolean isSearchEnd = false; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + public void onEventMainThread(YblLightEvent event) { + if (isSearchEnd) { + return; + } + String msg = event.getMsg(); + Log.e("nettyUtil", msg + msg.length()); + if (msg.equals("搜索完成")) { + isSearchEnd = true; + } else { + if (msg.length() < 188) { + nettyEntity = JSON.parseObject(msg, YblEntity.class); + if (mNettyEntities.contains(nettyEntity)) { + ToastUtil.show(this, "发现一个重复的控制器"); + } + if (nettyEntity.getYblType().equals("01") || nettyEntity.getYblType().equals("1f")) { + mNettyEntities.add(nettyEntity); + } + Log.e("nettyUtil", mNettyEntities.size() + ""); + if (mNettyEntities.size() > 0) { + isSearchEnd = true; + } + } + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_switcher_step_one); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + selectUnnorReveal.setChecked(false); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + } + + @Override + public void onPause() { + super.onPause(); + yblSearch("301"); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + private void initView() { + ziId = getIntent().getExtras().get("ziId").toString(); + largeClass = getIntent().getExtras().get("largeClass").toString(); + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + selectUnnorReveal.setOnClickListener(this); + iv_bg = (ImageView) findViewById(R.id.iv_bg); + ll_bootom = (LinearLayout) findViewById(R.id.linearLayout); + ll_check = (LinearLayout) findViewById(R.id.tv_top); + tv_chazuo = (TextView) findViewById(R.id.tv_chazuo); + tv_top_12 = (TextView) findViewById(R.id.tv_top_12); + tv_chazuo_wait = (TextView) findViewById(R.id.tv_chazuo_wait); + mStateButton = (StateButton) findViewById(R.id.bt_sec); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + // createAddPlug(); + if (getIntent().getExtras().get("deviceType").toString().equals(SERVICE_PANEL_485)) { + Intent intent = new Intent(SwitcherStepOneActivity.this, Panel485SetCodeActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", SERVICE_PANEL_485); + intent.putExtra("largeClass", "5"); + intent.putExtra("isFirst", "1"); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("plugType", "0"); + intent.putExtra("addressId", deviceAddress); + intent.putExtra("code", getIntent().getExtras().get("code").toString()); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("codeList", getIntent().getStringArrayListExtra("codeList")); + startActivity(intent); + finish(); + } else if (largeClass.equals("3") || largeClass.equals("5")) { + sec = 60; + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + ll_bootom.setVisibility(View.INVISIBLE); + yblSearch("3"); + mStateButton.setVisibility(View.VISIBLE); + } else { + subsetStudy(); + } + } + }); + mTitleView = (TitleView) findViewById(R.id.title_light_learn); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + if (SharedpreferencesUtil.get(Constans.VOICE) && !largeClass.equals("3") && !largeClass.equals("5")) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_100); + mediaPlayer01.start(); + } + if (getIntent().getExtras().get("deviceType").toString().equals(SERVICE_PANEL_485) && getIntent().getExtras().get("deviceModel").toString().equals("0")) { + mTitleView.setHead("添加设备"); + tv_chazuo.setText("长按每个面板左侧第一个开关键20秒"); + tv_chazuo_wait.setText("等待指示灯闪烁"); + tv_top_12.setVisibility(View.GONE); + iv_bg.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_485)); + } else if (getIntent().getExtras().get("deviceType").toString().equals(SERVICE_PANEL_485) && getIntent().getExtras().get("deviceModel").toString().equals("1")) { + mTitleView.setHead("添加设备"); + tv_chazuo.setText("先拔掉其他面板线路,保留要添加面板的\n" + + "线路,后去设置序号(地址码)"); + tv_chazuo_wait.setVisibility(View.GONE); + tv_top_12.setVisibility(View.GONE); + iv_bg.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_485_1)); + } else if (largeClass.equals("0")) { + mTitleView.setHead(R.string.Add_socket); + } else if (largeClass.equals("3") || largeClass.equals("5")) { + yblSearch("3"); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mTitleView.setHead("添加设备"); + ll_bootom.setVisibility(View.INVISIBLE); + ll_check.setVisibility(View.INVISIBLE); + nextConfig.setVisibility(View.GONE); + mStateButton.setVisibility(View.VISIBLE); + tv_chazuo.setText("按一下智能插座上的开关键"); + tv_chazuo_wait.setText("并等待匹配"); + iv_bg.setImageDrawable(getResources().getDrawable(R.drawable.pic_manual_add_socket)); + } else { + mTitleView.setHead(R.string.Add_Wall_socket); + iv_bg.setImageDrawable(getResources().getDrawable(R.drawable.pic_wallsocket)); + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + } else { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CREATE_TEST_BLIND_SUCCESS: + /*blindTestEntity = (BlindTestEntity) msg.obj; + Intent intent = new Intent(SwitcherStepOneActivity.this, SwitcherStepTwoActivity.class); + if (blindTestEntity != null && blindTestEntity.getObj().getOnInfrared() != null && blindTestEntity.getObj().getOffInfrared() != null) { + intent.putExtra("addressId", blindTestEntity.getObj().getAddressId().toString()); + intent.putExtra("offInfrared", blindTestEntity.getObj().getOffInfrared()); + intent.putExtra("onInfrared", blindTestEntity.getObj().getOnInfrared()); + intent.putExtra("ziId", ziId); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("plugType", getIntent().getExtras().get("plugType").toString()); + intent.putExtra("largeClass", largeClass); + startActivity(intent); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } else { + Toast.makeText(SwitcherStepOneActivity.this, "匹配未成功,请重试", Toast.LENGTH_SHORT).show(); + }*/ + break; + case CREATE_TEST_BLIND_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + BaseVersion5Entity entity = (BaseVersion5Entity) msg.obj; + Intent intent = new Intent(SwitcherStepOneActivity.this, SwitcherStepTwoActivity.class); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("offInfrared", ""); + intent.putExtra("onInfrared", ""); + intent.putExtra("ziId", ziId); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("plugType", getIntent().getExtras().get("plugType").toString()); + intent.putExtra("largeClass", largeClass); + if (null != getIntent().getExtras().get("name")) { + intent.putExtra("name", getIntent().getExtras().get("name").toString()); + } + Bundle bundle = new Bundle(); + bundle.putSerializable("body", (Serializable) entity.getData()); + intent.putExtras(bundle); + startActivity(intent); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + break; + case UPDATE_SEC: + if (sec > 1) { + if (isSearchEnd && mNettyEntities.size() > 0) { + Intent intent1 = new Intent(SwitcherStepOneActivity.this, SwitcherStepTwoActivity.class); + intent1.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent1.putExtra("offInfrared", ""); + intent1.putExtra("onInfrared", ""); + intent1.putExtra("ziId", ziId); + intent1.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent1.putExtra("deviceAddress", deviceAddress); + intent1.putExtra("plugType", getIntent().getExtras().get("plugType").toString()); + intent1.putExtra("largeClass", largeClass); + if (null != getIntent().getExtras().get("name")) { + intent1.putExtra("name", getIntent().getExtras().get("name").toString()); + } + Bundle bundle1 = new Bundle(); + bundle1.putSerializable("body", (Serializable) nettyEntity); + intent1.putExtras(bundle1); + startActivity(intent1); + finish(); + } else { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } + } else { + if (mNettyEntities.size() > 0) { + Intent intent1 = new Intent(SwitcherStepOneActivity.this, SwitcherStepTwoActivity.class); + intent1.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent1.putExtra("offInfrared", ""); + intent1.putExtra("onInfrared", ""); + intent1.putExtra("ziId", ziId); + intent1.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent1.putExtra("deviceAddress", deviceAddress); + intent1.putExtra("plugType", getIntent().getExtras().get("plugType").toString()); + intent1.putExtra("largeClass", largeClass); + if (null != getIntent().getExtras().get("name")) { + intent1.putExtra("name", getIntent().getExtras().get("name").toString()); + } + Bundle bundle1 = new Bundle(); + bundle1.putSerializable("body", (Serializable) nettyEntity); + intent1.putExtras(bundle1); + startActivity(intent1); + finish(); + } else { + ll_bootom.setVisibility(View.VISIBLE); + mStateButton.setVisibility(View.GONE); + nextConfig.setVisibility(View.VISIBLE); + nextConfig.setText("重试"); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + // finish(); + } + } + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void subsetStudy() { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", largeClass); + map.put("deviceType", SWITCH_TAG); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_STUDY, map, bodyMap, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetStudy", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void yblSearch(String type) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("type", type); + netWorkUtil.requestPostByAsynewApi(YBL_SEARCH, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("yblSearch", "onSuccess()" + respone); + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherStepThreeActivity.java b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherStepThreeActivity.java new file mode 100644 index 0000000..3366a2d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherStepThreeActivity.java @@ -0,0 +1,218 @@ +package com.yonsz.z1.new433.switcher; + +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.entitya2.BlindTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.ADD_BLIND_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADD_BLIND_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; + +/** + * Created by Administrator on 2018/6/6. + */ + +public class SwitcherStepThreeActivity extends BaseActivity { + private TitleView mTitleView; + private ImageView chazuoIv, taidengIv, chudianIv, qiangbiIv, reshuihuIv, qunuanqiIv, dwxIv; + private ImageView chazuoMark, taidengMark, chudianMark, qiangbiMark, reshuihuMark, qunuanqiMark, dwxMark; + private String plugType = "0"; + + private Button mButton; + private String ziId; + private boolean isFirst; + private String offInfrared, onInfrared; + private String addressId; + private LoadingDialog mLoadingDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sure_switch_type); + initView(); + initListener(); + } + + private void initView() { + if (getIntent().getExtras().get("isFirst").toString().equals("1")) { + isFirst = true; + } else { + isFirst = false; + } + offInfrared = (String) getIntent().getExtras().get("offInfrared"); + onInfrared = (String) getIntent().getExtras().get("onInfrared"); + ziId = (String) getIntent().getExtras().get("ziId"); + addressId = (String) getIntent().getExtras().get("addressId"); + ziId = getIntent().getExtras().get("ziId").toString(); + mButton = (Button) findViewById(R.id.bt_sure_config); + chazuoIv = (ImageView) findViewById(R.id.iv_nothing); + taidengIv = (ImageView) findViewById(R.id.iv_taideng); + chudianIv = (ImageView) findViewById(R.id.iv_chudian); + reshuihuIv = (ImageView) findViewById(R.id.iv_reshuihu); + qunuanqiIv = (ImageView) findViewById(R.id.iv_qunuanqi); + dwxIv = (ImageView) findViewById(R.id.iv_dwx); + + chazuoMark = (ImageView) findViewById(R.id.iv_nothing_mark); + taidengMark = (ImageView) findViewById(R.id.iv_taideng_mark); + chudianMark = (ImageView) findViewById(R.id.iv_chudian_mark); + reshuihuMark = (ImageView) findViewById(R.id.iv_reshuihu_mark); + qunuanqiMark = (ImageView) findViewById(R.id.iv_qunuanqi_mark); + dwxMark = (ImageView) findViewById(R.id.iv_dwx_mark); + + + mTitleView = (TitleView) findViewById(R.id.title_switcher_three); + mTitleView.setHead(R.string.Add_socket); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + private void initListener() { + chazuoIv.setOnClickListener(this); + taidengIv.setOnClickListener(this); + chudianIv.setOnClickListener(this); + reshuihuIv.setOnClickListener(this); + qunuanqiIv.setOnClickListener(this); + dwxIv.setOnClickListener(this); + mButton.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_nothing: + plugType = "0"; + chazuoMark.setVisibility(View.VISIBLE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + break; + case R.id.iv_taideng: + plugType = "1"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.VISIBLE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + break; + case R.id.iv_chudian: + plugType = "2"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.VISIBLE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + break; + case R.id.iv_reshuihu: + plugType = "4"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.VISIBLE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + break; + case R.id.iv_qunuanqi: + plugType = "5"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.VISIBLE); + dwxMark.setVisibility(View.GONE); + break; + case R.id.iv_dwx: + plugType = "6"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.VISIBLE); + break; + case R.id.bt_sure_config: + //1.首先添加窗帘 + //2.添加子设备 + if (isFirst) { + addChildDevice(ziId, SWITCH_TAG, "未知品牌"); + } else { + addPlugEntity(); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_CHILDDEVICE_SUCCESS: + addPlugEntity(); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case ADD_BLIND_ENTITY_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + finish(); + break; + case ADD_BLIND_ENTITY_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + + private void addPlugEntity() { + + } + + private void addChildDevice(String ziId, String deviceType, String deviceBrand) { + + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherStepTwoActivity.java b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherStepTwoActivity.java new file mode 100644 index 0000000..ad6a2ed --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherStepTwoActivity.java @@ -0,0 +1,363 @@ +package com.yonsz.z1.new433.switcher; + +import android.app.Service; +import android.content.Intent; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Message; +import android.os.Vibrator; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.BlindTestEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.id.bt_sure_config; +import static com.yonsz.z1.net.Constans.ADD_BLIND_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADD_BLIND_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.POWER; +import static com.yonsz.z1.net.Constans.POWEROFF; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.STUDY_ANDCONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; + +/** + * Created by Administrator on 2017/12/15. + */ + +public class SwitcherStepTwoActivity extends BaseActivity { + private TitleView mTitleView; + private Button sureBtn; + private String ziId; + private String addressId; + private boolean isFirst; + private TextView noUse; + private String offInfrared, onInfrared; + private TextView openSwitcher; + private boolean isOpen = true; + private MediaPlayer mediaPlayer01; + private String deviceAddress; + private LoadingDialog mLoadingDialog; + private String plugType; + private String largeClass; + private String body; + private BaseVersion5Entity.DataBean dataBean; + private YblEntity dataBean1; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sure_switch_learn); + initView(); + initListener(); + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mediaPlayer01 = MediaPlayer.create(this, R.raw.recording_101); + mediaPlayer01.start(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer01 != null) { + mediaPlayer01.release(); + } + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + private void initView() { + body = JSONObject.toJSONString(getIntent().getSerializableExtra("body")); + largeClass = getIntent().getExtras().get("largeClass").toString(); + plugType = getIntent().getExtras().get("plugType").toString(); + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + if (getIntent().getExtras().get("isFirst").toString().equals("1")) { + isFirst = true; + } else { + isFirst = false; + } + ziId = (String) getIntent().getExtras().get("ziId"); + offInfrared = (String) getIntent().getExtras().get("offInfrared"); + onInfrared = (String) getIntent().getExtras().get("onInfrared"); + ziId = (String) getIntent().getExtras().get("ziId"); + addressId = (String) getIntent().getExtras().get("addressId"); + noUse = (TextView) findViewById(R.id.tv_no_use); + sureBtn = (Button) findViewById(bt_sure_config); + openSwitcher = (TextView) findViewById(R.id.tv_open_light); + mTitleView = (TitleView) findViewById(R.id.title_sure_light); + if (largeClass.equals("0")) { + mTitleView.setHead(R.string.Add_socket); + } else if (largeClass.equals("3") || largeClass.equals("5")) { + mTitleView.setHead("添加设备"); + } else { + mTitleView.setHead(R.string.Add_Wall_socket); + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + // studyAndControllPlug(onInfrared); + } + + private void initListener() { + sureBtn.setOnClickListener(this); + noUse.setOnClickListener(this); + openSwitcher.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + /*//1.首先添加窗帘 + //2.添加子设备 + if (isFirst) { + addChildDevice(ziId, SWITCH_TAG, "未知品牌"); + } else { + addPlugEntity(); + }*/ + subsetAdd(); + + /*Intent intent = new Intent(this, SwitcherStepThreeActivity.class); + intent.putExtra("addressId", addressId); + intent.putExtra("offInfrared", getIntent().getExtras().get("offInfrared").toString()); + intent.putExtra("onInfrared", getIntent().getExtras().get("onInfrared").toString()); + intent.putExtra("ziId", ziId); + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("deviceAddress", deviceAddress); + startActivity(intent); + finish();*/ + break; + case R.id.tv_no_use: + /*Intent intent1 = new Intent(SwitcherStepTwoActivity.this, SwitcherStepOneActivity.class); + intent1.putExtra("addressId", addressId); + intent1.putExtra("ziId", ziId); + intent1.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent1.putExtra("deviceAddress", deviceAddress); + intent1.putExtra("plugType", getIntent().getExtras().get("plugType").toString()); + intent1.putExtra("largeClass", largeClass); + startActivity(intent1);*/ + finish(); + break; + case R.id.tv_open_light: + if (isOpen) { + setShake(); + // studyAndControllPlug(offInfrared); + subsetTest(POWEROFF); + } else { + setShake(); + // studyAndControllPlug(onInfrared); + subsetTest(POWER); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + Intent intent; + switch (msg.what) { + case STUDY_ANDCONTROLL_SUCCESS: + // Toast.makeText(CurtainsStepTwoActivity.this, "发送成功", Toast.LENGTH_SHORT).show(); + break; + case STUDY_ANDCONTROLL_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case ADD_CHILDDEVICE_SUCCESS: + addPlugEntity(); + break; + case ADD_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case ADD_BLIND_ENTITY_SUCCESS: + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + if (mLoadingDialog != null && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + BaseVersion5Entity entity = (BaseVersion5Entity) msg.obj; + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(this, DeviceControlActivity.class); + } + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", addressId); + intent.putExtra("deviceAddress", deviceAddress); + intent.putExtra("id", entity.getData().getId()); + /*intent.putExtra("addressName", blindTestEntity.getObj().getAddressName()); + intent.putExtra("voiceFlag", blindTestEntity.getObj().getVoiceFlag()); + intent.putExtra("onInfrared", blindTestEntity.getObj().getOnInfrared()); + intent.putExtra("offInfrared", blindTestEntity.getObj().getOffInfrared());*/ + intent.putExtra("isFirst", getIntent().getExtras().get("isFirst").toString()); + intent.putExtra("plugType", plugType); + intent.putExtra("largeClass", largeClass); + startActivity(intent); + finish(); + break; + case ADD_BLIND_ENTITY_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case UPDATE_BLINDENTITY_NAME_FAIL: + if (mLoadingDialog != null && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + + private void addPlugEntity() { + } + + private void setShake() { + Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void subsetAdd() { + if (largeClass.equals("3") || largeClass.equals("5")) { + dataBean1 = JSON.parseObject(body, YblEntity.class); + if (null != getIntent().getExtras().get("name")) { + dataBean1.setDeviceName(getIntent().getExtras().get("name").toString()); + } + body = JSONObject.toJSONString(dataBean1); + } else { + dataBean = JSON.parseObject(body, BaseVersion5Entity.DataBean.class); + if (null != getIntent().getExtras().get("name")) { + dataBean.setDeviceName(getIntent().getExtras().get("name").toString()); + dataBean.setName(getIntent().getExtras().get("name").toString()); + } + body = JSONObject.toJSONString(dataBean); + } + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", largeClass); + map.put("deviceType", SWITCH_TAG); + map.put("ziId", ziId); + map.put("subtype", plugType); + map.put("addressId", addressId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetTest(final String key) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", largeClass); + map.put("deviceType", SWITCH_TAG); + map.put("ziId", ziId); + map.put("oper", key); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_TEST, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetTest", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + if (key.equals("power")) { + isOpen = true; + } else { + isOpen = false; + } + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherTwoActivity.java b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherTwoActivity.java new file mode 100644 index 0000000..57641c1 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/new433/switcher/SwitcherTwoActivity.java @@ -0,0 +1,357 @@ +package com.yonsz.z1.new433.switcher; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.device.deviceadd.ConnectWifiActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; + +/** + * Created by Administrator on 2018/7/9. + */ + +public class SwitcherTwoActivity extends BaseActivity implements CompoundButton.OnCheckedChangeListener { + private TitleView mTitleView; + private String largeClass, deviceModel; + private Button nextConfig; + private ImageView chazuoIv, taidengIv, chudianIv, qiangbiIv, reshuihuIv, qunuanqiIv, dwxIv, xiaoduIv, zidingyiIv; + private ImageView chazuoMark, taidengMark, chudianMark, qiangbiMark, reshuihuMark, qunuanqiMark, dwxMark, xiaoduMark; + private String plugType = "0"; + + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String deviceAddress = "0"; + private List condition = new ArrayList<>(); + private String addressId; + private RelativeLayout rl_switch_type; + private TextView tv_top_number; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_switcher_two); + initView(); + initListener(); + } + + private void initView() { + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + addressId = deviceAddress; + rl_switch_type = (RelativeLayout) findViewById(R.id.rl_switch_type); + tv_top_number = (TextView) findViewById(R.id.tv_top_number); + chazuoIv = (ImageView) findViewById(R.id.iv_nothing); + taidengIv = (ImageView) findViewById(R.id.iv_taideng); + chudianIv = (ImageView) findViewById(R.id.iv_chudian); + reshuihuIv = (ImageView) findViewById(R.id.iv_reshuihu); + qunuanqiIv = (ImageView) findViewById(R.id.iv_qunuanqi); + dwxIv = (ImageView) findViewById(R.id.iv_dwx); + xiaoduIv = (ImageView) findViewById(R.id.iv_xiaodu); + zidingyiIv = (ImageView) findViewById(R.id.iv_position); + + chazuoMark = (ImageView) findViewById(R.id.iv_nothing_mark); + taidengMark = (ImageView) findViewById(R.id.iv_taideng_mark); + chudianMark = (ImageView) findViewById(R.id.iv_chudian_mark); + reshuihuMark = (ImageView) findViewById(R.id.iv_reshuihu_mark); + qunuanqiMark = (ImageView) findViewById(R.id.iv_qunuanqi_mark); + dwxMark = (ImageView) findViewById(R.id.iv_dwx_mark); + xiaoduMark = (ImageView) findViewById(R.id.iv_xiaodu_mark); + nextConfig = (Button) findViewById(R.id.bt_sure_config); + nextConfig.setOnClickListener(this); + largeClass = getIntent().getExtras().get("largeClass").toString(); + deviceModel = getIntent().getExtras().get("largeClass").toString(); + mTitleView = (TitleView) findViewById(R.id.title_switcher_two); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + if (largeClass.equals("0")) { + mTitleView.setHead(R.string.Add_socket); + } else if (largeClass.equals("3")||largeClass.equals("5")) { + mTitleView.setHead("添加设备"); + } else if (largeClass.equals("4")) { + mTitleView.setHead("添加设备"); + tv_top_number.setVisibility(View.GONE); + } else { + mTitleView.setHead(R.string.Add_Wall_socket); + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(this); + } + + switch (getIntent().getExtras().get("deviceModel").toString()) { + case "0": + chazuoIv.setImageResource(R.drawable.icon_device_plug_t1); + zidingyiIv.setImageResource(R.drawable.icon_device_plug_t1); + break; + case "1": + chazuoIv.setImageResource(R.drawable.icon_device_wallsocket_t2); + zidingyiIv.setImageResource(R.drawable.icon_device_wallsocket_t2); + break; + case "2": + chazuoIv.setImageResource(R.drawable.icon_device_plug_t4); + zidingyiIv.setImageResource(R.drawable.icon_device_plug_t4); + break; + case "4": + chazuoIv.setImageResource(R.drawable.icon_device_wifi_socket); + zidingyiIv.setImageResource(R.drawable.icon_device_wifi_socket); + break; + default: + chazuoIv.setImageResource(R.drawable.icon_chazuo); + zidingyiIv.setImageResource(R.drawable.icon_chazuo); + break; + } + } + + private void initListener() { + chazuoIv.setOnClickListener(this); + taidengIv.setOnClickListener(this); + chudianIv.setOnClickListener(this); + reshuihuIv.setOnClickListener(this); + qunuanqiIv.setOnClickListener(this); + dwxIv.setOnClickListener(this); + xiaoduIv.setOnClickListener(this); + rl_switch_type.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bt_sure_config: + Intent intent; + if (largeClass.equals("4")) { + intent = new Intent(SwitcherTwoActivity.this, ConnectWifiActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("from", "SwitcherTwoActivity"); + intent.putExtra("addressTypeCode", deviceAddress); + intent.putExtra("icon", ""); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + } else { + intent = new Intent(SwitcherTwoActivity.this, SwitcherStepOneActivity.class); + } + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("largeClass", largeClass); + intent.putExtra("isFirst", "1"); + intent.putExtra("deviceAddress", deviceAddress); + if (plugType.equals("0") && largeClass.equals("1")) { + intent.putExtra("plugType", "3"); + } else { + intent.putExtra("plugType", plugType); + + } + intent.putExtra("addressId", addressId); + startActivity(intent); + break; + case R.id.iv_nothing: + plugType = "0"; + chazuoMark.setVisibility(View.VISIBLE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_taideng: + plugType = "1"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.VISIBLE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_chudian: + plugType = "2"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.VISIBLE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_reshuihu: + plugType = "4"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.VISIBLE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_qunuanqi: + plugType = "5"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.VISIBLE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_dwx: + plugType = "6"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.VISIBLE); + xiaoduMark.setVisibility(View.GONE); + break; + case R.id.iv_xiaodu: + plugType = "7"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + xiaoduMark.setVisibility(View.VISIBLE); + break; + case R.id.rl_switch_type: + RenameNameDialog dialog = new RenameNameDialog(SwitcherTwoActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + Intent intent1; + if (largeClass.equals("4")) { + intent1 = new Intent(SwitcherTwoActivity.this, ConnectWifiActivity.class); + intent1.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent1.putExtra("from", "SwitcherTwoActivity"); + intent1.putExtra("addressTypeCode", deviceAddress); + intent1.putExtra("icon", ""); + if (null != getIntent().getExtras().get("floor")) { + intent1.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + } else { + intent1 = new Intent(SwitcherTwoActivity.this, SwitcherStepOneActivity.class); + } + intent1.putExtra("name", positioName); + intent1.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent1.putExtra("deviceType", SWITCH_TAG); + intent1.putExtra("largeClass", largeClass); + intent1.putExtra("isFirst", "1"); + intent1.putExtra("deviceAddress", deviceAddress); + intent1.putExtra("plugType", "254"); + intent1.putExtra("addressId", addressId); + startActivity(intent1); + break; + } + } + }); + dialog.setHintName(""); + dialog.setContent("设置接入电器名称"); + dialog.setMaxEms(10); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/panel485/AddressNoAdapter.java b/app/src/main/java/com/yonsz/z1/panel485/AddressNoAdapter.java new file mode 100644 index 0000000..1054bc9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/panel485/AddressNoAdapter.java @@ -0,0 +1,67 @@ +package com.yonsz.z1.panel485; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.listener.OnRecyclerClickListener; + +import java.util.List; + + +public class AddressNoAdapter extends RecyclerView.Adapter { + private List mDataBeans; + private Context mContext; + private int nowPosition = 0; + private OnRecyclerClickListener mOnItemClickListener; + + public AddressNoAdapter(Context context, List mDataBeans) { + this.mDataBeans = mDataBeans; + this.mContext = context; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_address_no, parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDataBeans == null ? 0 : mDataBeans.size(); + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + public void setNowPosition(int position) { + notifyDataSetChanged(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView nameTv; + private TextView addressNoTv; + + public MessageViewHolder(View view) { + super(view); + nameTv = (TextView) view.findViewById(R.id.tv_name); + addressNoTv = (TextView) view.findViewById(R.id.tv_address); + } + + public void setViews(final int position) { + nameTv.setText(mDataBeans.get(position).getName()); + addressNoTv.setText(mDataBeans.get(position).getAddressNo()); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/panel485/Child485Adapter.java b/app/src/main/java/com/yonsz/z1/panel485/Child485Adapter.java new file mode 100644 index 0000000..93ecd14 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/panel485/Child485Adapter.java @@ -0,0 +1,103 @@ +package com.yonsz.z1.panel485; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by gavin + * Created date 17/6/5 + * Created log + */ + +public class Child485Adapter extends RecyclerView.Adapter { + private List mDataBeans; + private Context mContext; + private int nowPosition = 0; + private OnRecyclerClickListener mOnItemClickListener; + + public Child485Adapter(Context context, List mDataBeans) { + this.mDataBeans = mDataBeans; + this.mContext = context; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_choose_485_child, parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDataBeans == null ? 0 : mDataBeans.size(); + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + public void setNowPosition(int position) { + nowPosition = position; + notifyDataSetChanged(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.iv_deng_guang) + ImageView mIvHousePic; + @BindView(R.id.tv_deng_guang) + TextView mTvHouseYype; + @BindView(R.id.iv_deng_guang_mark) + ImageView mLlBg; + + public MessageViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final int position) { + if (!TextUtils.isEmpty(mDataBeans.get(position).getIcon())) { + ImageLoader.getInstance().displayImage(mDataBeans.get(position).getIcon(), mIvHousePic, UniKongApp.getHiApp().getImageLoaderOption()); + } else { + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_room)); + } + mTvHouseYype.setText(mDataBeans.get(position).getName()); + + if (nowPosition == position) { + mLlBg.setVisibility(View.VISIBLE); + } else { + mLlBg.setVisibility(View.GONE); + } + + mIvHousePic.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/panel485/Child485DetailAdapter.java b/app/src/main/java/com/yonsz/z1/panel485/Child485DetailAdapter.java new file mode 100644 index 0000000..e8c2c5e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/panel485/Child485DetailAdapter.java @@ -0,0 +1,146 @@ +package com.yonsz.z1.panel485; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.SITUATIONAL_PANEL; + +/** + * Created by gavin + * Created date 17/6/5 + * Created log + */ + +public class Child485DetailAdapter extends RecyclerView.Adapter { + private List mDataBeans; + private Context mContext; + private int nowPosition = 0; + private OnRecyclerClickListener mOnItemClickListener; + + public Child485DetailAdapter(Context context, List mDataBeans) { + this.mDataBeans = mDataBeans; + this.mContext = context; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_choose_485_child, parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mDataBeans == null ? 0 : mDataBeans.size(); + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + public void setNowPosition(int position) { + nowPosition = position; + notifyDataSetChanged(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @BindView(R.id.iv_deng_guang) + ImageView mIvHousePic; + @BindView(R.id.tv_deng_guang) + TextView mTvHouseYype; + @BindView(R.id.iv_deng_guang_mark) + ImageView mLlBg; + + public MessageViewHolder(View view) { + super(view); + ButterKnife.bind(this, view); + } + + public void setViews(final int position) { + switch (mDataBeans.get(position).getDeviceType()) { + case LIGHT_TAG: + switch (position) { + case 0: + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_485_panel_1)); + break; + case 1: + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_485_panel_2)); + break; + case 2: + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_485_panel_3)); + break; + case 3: + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_485_panel_4)); + break; + } + break; + case SITUATIONAL_PANEL: + if (mDataBeans.size() == 2) { + switch (position) { + case 0: + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_485_scene_four)); + break; + case 1: + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_485_scene_six)); + break; + } + } else { + switch (position) { + case 0: + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_485_panel_1)); + break; + case 1: + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_485_panel_2)); + break; + case 2: + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_485_panel_3)); + break; + case 3: + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_485_panel_4)); + break; + case 4: + mIvHousePic.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_485_scene_six)); + break; + } + } + break; + } + mTvHouseYype.setText(mDataBeans.get(position).getName()); + + if (nowPosition == position) { + mLlBg.setVisibility(View.VISIBLE); + } else { + mLlBg.setVisibility(View.GONE); + } + + mIvHousePic.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/panel485/Choose485ChildActivity.java b/app/src/main/java/com/yonsz/z1/panel485/Choose485ChildActivity.java new file mode 100644 index 0000000..1cfda84 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/panel485/Choose485ChildActivity.java @@ -0,0 +1,229 @@ +package com.yonsz.z1.panel485; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import android.widget.Button; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.curtainandWindow.Window2TestActivity; +import com.yonsz.z1.view.TitleView; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_FAIL; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.SERVICE_PANEL_485; +import static com.yonsz.z1.net.NetWorkUrl.GET_LIST_BYPARENTID; + +/** + * Created by Administrator on 2019/3/26. + */ + +public class Choose485ChildActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_start_config; + private RecyclerView chooseHouseTypeRv; + private Child485Adapter mAdapter; + private List dataList = new ArrayList(); + private int nowPosition; + private Set mNettyEntities = new LinkedHashSet<>(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_choose_485_child); + + initView(); + initListener(); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + private void initView() { + bt_start_config = (Button) findViewById(R.id.bt_start_config); + chooseHouseTypeRv = (RecyclerView) findViewById(R.id.rv_choose_house_type); + mTitleView = (TitleView) findViewById(R.id.title_house_name); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setHead("添加设备"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + getListByParentid(); + } + + private void initListener() { + bt_start_config.setText(R.string.next); + bt_start_config.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent; + if (dataList.get(nowPosition).getPostStatus().equals("1")) { + if (dataList.get(nowPosition).getDeviceTypeCode().equals(LIGHT_TAG) && (dataList.get(nowPosition).getCode().equals("6") || dataList.get(nowPosition).getCode().equals("7"))) { + YblEntity nettyEntity = new YblEntity(); + nettyEntity.setLightCount(1); + nettyEntity.setYblId(1 + ""); + mNettyEntities.add(nettyEntity); + intent = new Intent(Choose485ChildActivity.this, Light485ListActivity.class); + intent.putExtra("mNettyEntities", (Serializable) mNettyEntities); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("deviceModel", "6"); + intent.putExtra("deviceType", LIGHT_TAG); + intent.putExtra("code", getIntent().getExtras().get("code").toString()); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("addressNo", getIntent().getExtras().get("addressNo").toString()); + intent.putExtra("deviceCount", 1 + ""); + startActivity(intent); + } else if (dataList.get(nowPosition).getDeviceTypeCode().equals(CURTAINS_TAG)) { + intent = new Intent(Choose485ChildActivity.this, Window2TestActivity.class); + intent.putExtra("deviceModel", dataList.get(nowPosition).getCode()); + intent.putExtra("deviceType", CURTAINS_TAG); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("subtype", "10"); + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("isReAddCurtain", false); + BaseVersion5Entity.DataBean entity = new BaseVersion5Entity.DataBean(); + entity.setCode(getIntent().getExtras().get("code").toString()); + entity.setAddressNo(getIntent().getExtras().get("addressNo").toString()); + entity.setParentId(getIntent().getExtras().get("deviceId").toString()); + /*List itemsBeanList = new ArrayList<>(); + BaseVersion5Entity.DataBean.ItemsBean itemsBean1 = new BaseVersion5Entity.DataBean.ItemsBean(); + itemsBean1.setSubtype("0"); + itemsBean1.setAddressId("1"); + BaseVersion5Entity.DataBean.ItemsBean itemsBean2 = new BaseVersion5Entity.DataBean.ItemsBean(); + itemsBean2.setSubtype("1"); + itemsBean2.setAddressId("1"); + itemsBeanList.add(itemsBean1); + itemsBeanList.add(itemsBean2); + entity.setItems(itemsBeanList);*/ + Bundle bundle = new Bundle(); + bundle.putSerializable("body", (Serializable) entity); + intent.putExtras(bundle); + startActivity(intent); + } else { + intent = new Intent(Choose485ChildActivity.this, Choose485ChildDetailActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", SERVICE_PANEL_485); + intent.putExtra("deviceTypeCode", dataList.get(nowPosition).getDeviceTypeCode()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("dataList", dataList.get(nowPosition)); + intent.putExtra("code", getIntent().getExtras().get("code").toString()); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("addressNo", getIntent().getExtras().get("addressNo").toString()); + if (null != getIntent().getExtras().get("sendSetAddress")) { + intent.putExtra("sendSetAddress", getIntent().getExtras().get("sendSetAddress").toString()); + } + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + startActivity(intent); + } + } else { + ToastUtil.show(Choose485ChildActivity.this, "暂未开放"); + } + } + }); + } + + private void getListByParentid() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + /*if (AppIdUtil.isChuangWei()) { + map.put("parentId", "303"); + } else { + map.put("parentId", "178"); + }*/ + map.put("parentDeviceModel", getIntent().getExtras().get("deviceModel").toString()); + map.put("parentDeviceType", getIntent().getExtras().get("deviceType").toString()); + netWorkUtil.requestGetByAsy(GET_LIST_BYPARENTID, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("getListByParentid", "onSuccess()" + respone); + HouseEntity obj = JSON.parseObject(respone, HouseEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(HOUSE_TYPE_LIST_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case HOUSE_TYPE_LIST_SUCCESS: + HouseEntity houseEntity = (HouseEntity) msg.obj; + dataList = houseEntity.getData(); + GridLayoutManager manager = new GridLayoutManager(this, 3); + chooseHouseTypeRv.setLayoutManager(manager); + mAdapter = new Child485Adapter(this, dataList); + chooseHouseTypeRv.setAdapter(mAdapter); + + mAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + nowPosition = position; + mAdapter.setNowPosition(position); + } + }); + break; + case HOUSE_TYPE_LIST_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/panel485/Choose485ChildDetailActivity.java b/app/src/main/java/com/yonsz/z1/panel485/Choose485ChildDetailActivity.java new file mode 100644 index 0000000..9d94567 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/panel485/Choose485ChildDetailActivity.java @@ -0,0 +1,305 @@ +package com.yonsz.z1.panel485; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import android.widget.Button; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.HouseEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entity5.YBLBodyEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; +import com.yonsz.z1.ybl.panel.YblPanelDetailActivity; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_FAIL; +import static com.yonsz.z1.net.Constans.HOUSE_TYPE_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.SITUATIONAL_PANEL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; + +/** + * Created by Administrator on 2019/3/26. + */ + +public class Choose485ChildDetailActivity extends BaseActivity { + private TitleView mTitleView; + private Button bt_start_config; + private RecyclerView chooseHouseTypeRv; + private Child485DetailAdapter mAdapter; + private List dataList = new ArrayList(); + private int nowPosition; + private Set mNettyEntities = new LinkedHashSet<>(); + private String deviceTypeCode; + private LoadingDialog mLoadingDialog; + private String deviceModel = "0"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_choose_485_child); + initView(); + initListener(); + } + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + private void initView() { + if (null != getIntent().getExtras().get("deviceModel")) { + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + } + deviceTypeCode = getIntent().getExtras().get("deviceTypeCode").toString(); + bt_start_config = (Button) findViewById(R.id.bt_start_config); + chooseHouseTypeRv = (RecyclerView) findViewById(R.id.rv_choose_house_type); + mTitleView = (TitleView) findViewById(R.id.title_house_name); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setHead("选择开关面板类型"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + getListByParentid(); + } + + private void initListener() { + bt_start_config.setText(R.string.next); + bt_start_config.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent; + switch (deviceTypeCode) { + case LIGHT_TAG: + mNettyEntities.clear(); + for (int i = 0; i < nowPosition + 1; i++) { + YblEntity nettyEntity = new YblEntity(); + nettyEntity.setLightCount(1); + nettyEntity.setYblId((i + 1) + ""); + mNettyEntities.add(nettyEntity); + } + intent = new Intent(Choose485ChildDetailActivity.this, Light485ListActivity.class); + intent.putExtra("mNettyEntities", (Serializable) mNettyEntities); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("deviceModel", "5"); + intent.putExtra("deviceType", deviceTypeCode); + intent.putExtra("code", getIntent().getExtras().get("code").toString()); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("addressNo", getIntent().getExtras().get("addressNo").toString()); + intent.putExtra("deviceCount", (nowPosition + 1) + ""); + startActivity(intent); + break; + case SITUATIONAL_PANEL: + subsetAdd(); + break; + } + } + }); + } + + private void getListByParentid() { + HouseEntity.DataBean dataBean1 = new HouseEntity.DataBean(); + dataBean1.setName("一位"); + dataBean1.setCode("1"); + dataBean1.setDeviceType(deviceTypeCode); + HouseEntity.DataBean dataBean2 = new HouseEntity.DataBean(); + dataBean2.setName("二位"); + dataBean2.setCode("2"); + dataBean2.setDeviceType(deviceTypeCode); + HouseEntity.DataBean dataBean3 = new HouseEntity.DataBean(); + dataBean3.setName("三位"); + dataBean3.setCode("3"); + dataBean3.setDeviceType(deviceTypeCode); + switch (deviceTypeCode) { + case LIGHT_TAG: + HouseEntity.DataBean dataBean4 = new HouseEntity.DataBean(); + dataBean4.setName("四位"); + dataBean4.setCode("4"); + dataBean4.setDeviceType(deviceTypeCode); + dataList.add(dataBean1); + dataList.add(dataBean2); + dataList.add(dataBean3); + dataList.add(dataBean4); + break; + case SITUATIONAL_PANEL: + if (1 == 1) { + HouseEntity.DataBean dataBean5 = new HouseEntity.DataBean(); + dataBean5.setName("四位"); + dataBean5.setDeviceType(deviceTypeCode); + dataBean5.setCode("4"); + HouseEntity.DataBean dataBean6 = new HouseEntity.DataBean(); + dataBean6.setName("六位"); + dataBean6.setDeviceType(deviceTypeCode); + dataBean6.setCode("6"); + dataList.add(dataBean1); + dataList.add(dataBean2); + dataList.add(dataBean3); + dataList.add(dataBean5); + dataList.add(dataBean6); + } else { + HouseEntity.DataBean dataBean5 = new HouseEntity.DataBean(); + dataBean5.setName("四位"); + dataBean5.setDeviceType(deviceTypeCode); + dataBean5.setCode("4"); + HouseEntity.DataBean dataBean6 = new HouseEntity.DataBean(); + dataBean6.setName("六位"); + dataBean6.setDeviceType(deviceTypeCode); + dataBean6.setCode("6"); + dataList.add(dataBean5); + dataList.add(dataBean6); + } + break; + } + GridLayoutManager manager = new GridLayoutManager(this, 3); + chooseHouseTypeRv.setLayoutManager(manager); + mAdapter = new Child485DetailAdapter(this, dataList); + chooseHouseTypeRv.setAdapter(mAdapter); + + mAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + nowPosition = position; + mAdapter.setNowPosition(position); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case HOUSE_TYPE_LIST_SUCCESS: + HouseEntity houseEntity = (HouseEntity) msg.obj; + dataList = houseEntity.getData(); + GridLayoutManager manager = new GridLayoutManager(this, 3); + chooseHouseTypeRv.setLayoutManager(manager); + mAdapter = new Child485DetailAdapter(this, dataList); + chooseHouseTypeRv.setAdapter(mAdapter); + + mAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + nowPosition = position; + mAdapter.setNowPosition(position); + } + }); + break; + case HOUSE_TYPE_LIST_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + + case UPDATE_BLINDENTITY_NAME_SUCCESS: + if (mLoadingDialog != null && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + BaseVersion5Entity entity = (BaseVersion5Entity) msg.obj; + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(Choose485ChildDetailActivity.this, YblPanelDetailActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceModel", "3"); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("id", entity.getData().getId()); + intent.putExtra("panelType", dataList.get(nowPosition).getCode()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("from", "PanelTestAndAddActivity"); + startActivity(intent); + break; + case UPDATE_BLINDENTITY_NAME_FAIL: + if (mLoadingDialog != null && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + + private void subsetAdd() { + initLoadDialog(); + YBLBodyEntity yblBodyEntity = new YBLBodyEntity(); + yblBodyEntity.setDeviceCount(dataList.get(nowPosition).getCode()); + yblBodyEntity.setAddressNo(getIntent().getExtras().get("addressNo").toString()); + yblBodyEntity.setParentId(getIntent().getExtras().get("deviceId").toString()); + if (null != getIntent().getExtras().get("sendSetAddress")) { + yblBodyEntity.setSendSetAddress(getIntent().getExtras().get("sendSetAddress").toString()); + } + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", "3"); + map.put("deviceType", deviceTypeCode); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("subtype", dataList.get(nowPosition).getCode()); + map.put("addressId", getIntent().getExtras().get("addressId").toString()); + map.put("modelId", "153"); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, JSONObject.toJSONString(yblBodyEntity), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/panel485/Light485Adapter.java b/app/src/main/java/com/yonsz/z1/panel485/Light485Adapter.java new file mode 100644 index 0000000..56ec674 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/panel485/Light485Adapter.java @@ -0,0 +1,732 @@ +package com.yonsz.z1.panel485; + +import android.content.Context; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.ybl.light.LightItemAdpter; + +import java.util.List; + +/** + * Created by Administrator on 2017/12/20. + */ + +public class Light485Adapter extends RecyclerView.Adapter { + private Context mContext; + private List mObjEntity; + private boolean isLearn; + private OnItemLightClickListener mLightClickListener; + private boolean isDeleteChild; + private LightItemAdpter lightItemAdpter; + + public Light485Adapter(Context mContext, List mObjEntity, boolean isLearn, boolean isDelete) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + this.isLearn = isLearn; + } + + public void setIsLearn(boolean isLearn1) { + isLearn = isLearn1; + } + + public void setIsDelete(boolean isDelete1) { + isDeleteChild = isDelete1; + } + + @Override + public Light485Adapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = null; + switch (viewType) { + case 1: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_485_one, + parent, false); + break; + case 2: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl_two, + parent, false); + break; + case 3: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl_three, + parent, false); + break; + case 5: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl_multi_control, + parent, false); + break; + case 6: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl, + parent, false); + break; + default: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl_one, + parent, false); + break; + } + + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(Light485Adapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemViewType(int position) { + if (mObjEntity != null && mObjEntity.get(position).getLightCount() == 1) { + if (mObjEntity != null && mObjEntity.get(position).getYblType().equals("12")) { + return 5; + } else { + return 1; + } + } else if (mObjEntity != null && mObjEntity.get(position).getLightCount() == 2) { + return 2; + } else if (mObjEntity != null && mObjEntity.get(position).getLightCount() == 3) { + return 3; + } else if (mObjEntity != null && mObjEntity.get(position).getYblType().equals("04")) { + //多功能控制器,暂定为5 + return 5; + } else if (mObjEntity != null && mObjEntity.get(position).getYblType().equals("12")) { + //FSK窗帘,暂定为4 + return 5; + } else if (mObjEntity != null && mObjEntity.get(position).getYblType().equals("10")) { + //FSK窗帘,暂定为4 + return 6; + } else { + return 7; + } + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + public void setOnItemLightClickListener(OnItemLightClickListener listener) { + this.mLightClickListener = listener; + } + + private void setLightIcon(ImageView yblLightIcon, int lightType) { + switch (String.valueOf(lightType)) { + case "0"://灯光 + yblLightIcon.setImageResource(R.drawable.icon_light); + break; + case "1"://筒灯 + yblLightIcon.setImageResource(R.drawable.icon_tubelamp); + break; + case "2"://灯带 + yblLightIcon.setImageResource(R.drawable.icon_lightbelt); + break; + case "3"://射灯 + yblLightIcon.setImageResource(R.drawable.icon_lamp); + break; + case "4"://壁灯 + yblLightIcon.setImageResource(R.drawable.icon_walllamp); + break; + case "5"://吊灯 + yblLightIcon.setImageResource(R.drawable.icon_chandelier); + break; + case "6"://廊灯 + yblLightIcon.setImageResource(R.drawable.icon_porchlamp); + break; + case "7"://排气扇 + yblLightIcon.setImageResource(R.drawable.icon_exhaust); + break; + default: + yblLightIcon.setImageResource(R.drawable.icon_light); + break; + } + } + + private void setMulticontrolTypePic(ImageView yblLightIcon, String subType) { + switch (subType) { + case "0": + yblLightIcon.setImageResource(R.drawable.pic_curtain_open_close); + break; + case "1": + yblLightIcon.setImageResource(R.drawable.pic_shalian_open_close); + break; + case "2": + yblLightIcon.setImageResource(R.drawable.pic_window_open_close); + break; + case "3": + yblLightIcon.setImageResource(R.drawable.icon_garage); + break; + case "4": + yblLightIcon.setImageResource(R.drawable.icon_sunshade); + break; + case "5": + yblLightIcon.setImageResource(R.drawable.icon_autogate); + break; + case "6": + yblLightIcon.setImageResource(R.drawable.icon_elevator); + break; + case "7": + yblLightIcon.setImageResource(R.drawable.icon_curtain_elevator); + break; + case "8": + yblLightIcon.setImageResource(R.drawable.icon_spray); + break; + case "9": + yblLightIcon.setImageResource(R.drawable.icon_window_opener); + break; + default: + yblLightIcon.setImageResource(R.drawable.pic_multifunctional); + break; + } + } + + private void setCurtainType(TextView yblNameTwo1, String subType) { + switch (subType) { + case "0": + yblNameTwo1.setText("窗帘"); + break; + case "1": + yblNameTwo1.setText("纱帘"); + break; + case "2": + yblNameTwo1.setText("开窗器"); + break; + case "3": + yblNameTwo1.setText("左窗帘"); + break; + case "4": + yblNameTwo1.setText("右窗帘"); + break; + case "5": + yblNameTwo1.setText("左纱帘"); + break; + case "6": + yblNameTwo1.setText("右纱帘"); + break; + default: + yblNameTwo1.setText("窗帘"); + break; + } + } + + public interface OnItemLightClickListener { + + public void onLearnLightClick(int position, int i, int j); + + public void onLightOpenCloseClick(int position, int i); + + public void onVoiceClick(int position, int voiceControlTag, int childPosition); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView yblNameOne; + private CheckBox lightChooseOne; + private ImageView yblOneIcon, positionIcon; + private TextView positionOne, mLightOpenOne, mLightCloseOne, mLightType; + private RelativeLayout yblOneTop; + + private TextView yblNameTWo; + private CheckBox lightChooseTWo; + private ImageView yblIconTwo1, positionIcon1; + private TextView yblNameTwo1, yblNameTwo2, yblNameTwo3; + private ImageView yblIconTwo2, positionIcon2, positionIcon3, yblIconTwo3; + private TextView positionTwo1, mLightOpenTwo1, mLightCloseTwo1, mLightOpenTwo3, mLightCloseTwo3; + private TextView positionTwo2, mLightOpenTwo2, mLightCloseTwo2; + private RelativeLayout yblTwoTop; + private RecyclerView rv_light; + + + public MessageViewHolder(View view) { + super(view); + yblNameOne = (TextView) itemView.findViewById(R.id.tv_ybl_name_one); + lightChooseOne = (CheckBox) itemView.findViewById(R.id.cb_device_choose_one); + yblOneIcon = (ImageView) itemView.findViewById(R.id.tv_one_ybl_icon); + mLightType = (TextView) itemView.findViewById(R.id.tv_one_ybl_type); + positionOne = (TextView) itemView.findViewById(R.id.tv_one_position); + mLightOpenOne = (TextView) itemView.findViewById(R.id.tv_one_open); + mLightCloseOne = (TextView) itemView.findViewById(R.id.tv_one_close); + yblOneTop = (RelativeLayout) itemView.findViewById(R.id.ll_ybl_one_top); + positionIcon = (ImageView) itemView.findViewById(R.id.tv_one_position_icon); + + + yblNameTWo = (TextView) itemView.findViewById(R.id.tv_ybl_name_two); + lightChooseTWo = (CheckBox) itemView.findViewById(R.id.cb_device_choose2); + yblIconTwo1 = (ImageView) itemView.findViewById(R.id.tv_two_ybl_icon1); + yblIconTwo2 = (ImageView) itemView.findViewById(R.id.tv_two_ybl_icon2); + yblNameTwo1 = (TextView) itemView.findViewById(R.id.tv_two_ybl_type1); + yblNameTwo2 = (TextView) itemView.findViewById(R.id.tv_two_ybl_type2); + positionTwo1 = (TextView) itemView.findViewById(R.id.tv_two_position1); + mLightOpenTwo1 = (TextView) itemView.findViewById(R.id.tv_two_open1); + mLightCloseTwo1 = (TextView) itemView.findViewById(R.id.tv_two_close1); + positionTwo2 = (TextView) itemView.findViewById(R.id.tv_two_position2); + mLightOpenTwo2 = (TextView) itemView.findViewById(R.id.tv_two_open2); + mLightCloseTwo2 = (TextView) itemView.findViewById(R.id.tv_two_close2); + yblTwoTop = (RelativeLayout) itemView.findViewById(R.id.ll_ybl_two_top); + positionIcon1 = (ImageView) itemView.findViewById(R.id.tv_one_position_icon1); + positionIcon2 = (ImageView) itemView.findViewById(R.id.tv_one_position_icon2); + + yblNameTwo3 = (TextView) itemView.findViewById(R.id.tv_two_ybl_type3); + mLightOpenTwo3 = (TextView) itemView.findViewById(R.id.tv_three_open2); + mLightCloseTwo3 = (TextView) itemView.findViewById(R.id.tv_three_close2); + positionIcon3 = (ImageView) itemView.findViewById(R.id.tv_three_position_icon2); + yblIconTwo3 = (ImageView) itemView.findViewById(R.id.tv_three_ybl_icon2); + rv_light = (RecyclerView) itemView.findViewById(R.id.rv_light); + } + + public void setViews(final int position) { + if ((mObjEntity.get(position).getLightCount() == 1 || mObjEntity.get(position).getYblType().equals("1f")) && !mObjEntity.get(position).getYblType().equals("12")) { + final YblEntity detaiEntity = mObjEntity.get(position); + yblNameOne.setText(detaiEntity.getYblLabel()); + /*String addressName = AddressNameUtil.getAddressName(detaiEntity.getLights().get(0).getAddressId()); + positionOne.setText(addressName);*/ + AddressNameUtil.setAddressIcon(mContext, positionIcon, detaiEntity.getLights().get(0).getAddressId()); + + setLightIcon(yblOneIcon, detaiEntity.getLights().get(0).getLightType()); + if (!detaiEntity.getLights().get(0).getDeviceName().isEmpty()) { + mLightType.setText(detaiEntity.getLights().get(0).getDeviceName()); + } + + mLightOpenOne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 0); + } + } + }); + mLightCloseOne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 0); + } + } + }); + + lightChooseOne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + if (lightChooseOne.isChecked()) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } else { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + } + }); + + positionIcon.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + yblOneIcon.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + mLightType.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblOneTop.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + } + }); + } else if (mObjEntity.get(position).getLightCount() == 2) { + final YblEntity detaiEntity = mObjEntity.get(position); + yblNameTWo.setText(detaiEntity.getYblLabel()); + /* String addressName1 = AddressNameUtil.getAddressName(detaiEntity.getLights().get(0).getAddressId()); + positionTwo1.setText(addressName1); + String addressName2 = AddressNameUtil.getAddressName(detaiEntity.getLights().get(1).getAddressId()); + positionTwo2.setText(addressName2);*/ + /*AddressNameUtil.setAddressIcon(mContext, positionIcon1, detaiEntity.getLights().get(0).getAddressId()); + AddressNameUtil.setAddressIcon(mContext, positionIcon2, detaiEntity.getLights().get(1).getAddressId());*/ + + /*setLightIcon(yblIconTwo1, detaiEntity.getLights().get(0).getLightType()); + setLightIcon(yblIconTwo2, detaiEntity.getLights().get(1).getLightType());*/ + if (!detaiEntity.getLights().get(0).getDeviceName().isEmpty()) { + yblNameTwo1.setText(detaiEntity.getLights().get(0).getDeviceName()); + } + if (!detaiEntity.getLights().get(1).getDeviceName().isEmpty()) { + yblNameTwo2.setText(detaiEntity.getLights().get(1).getDeviceName()); + } + + mLightOpenTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 0); + } + } + }); + mLightOpenTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 1); + } + } + }); + mLightCloseTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 0); + } + } + }); + mLightCloseTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 1); + } + } + }); + + lightChooseTWo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + if (lightChooseTWo.isChecked()) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } else { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + } + }); + + positionIcon1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + positionIcon2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 1); + } + } + }); + yblIconTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblIconTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 1); + } + } + }); + yblNameTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblNameTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 1); + } + } + }); + yblTwoTop.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + } + }); + } else if (mObjEntity.get(position).getLightCount() == 3) { + final YblEntity detaiEntity = mObjEntity.get(position); + yblNameTWo.setText(detaiEntity.getYblLabel()); + /* String addressName1 = AddressNameUtil.getAddressName(detaiEntity.getLights().get(0).getAddressId()); + positionTwo1.setText(addressName1); + String addressName2 = AddressNameUtil.getAddressName(detaiEntity.getLights().get(1).getAddressId()); + positionTwo2.setText(addressName2);*/ + /*AddressNameUtil.setAddressIcon(mContext, positionIcon1, detaiEntity.getLights().get(0).getAddressId()); + AddressNameUtil.setAddressIcon(mContext, positionIcon2, detaiEntity.getLights().get(1).getAddressId()); + AddressNameUtil.setAddressIcon(mContext, positionIcon3, detaiEntity.getLights().get(2).getAddressId());*/ + + /*setLightIcon(yblIconTwo1, detaiEntity.getLights().get(0).getLightType()); + setLightIcon(yblIconTwo2, detaiEntity.getLights().get(1).getLightType()); + setLightIcon(yblIconTwo3, detaiEntity.getLights().get(2).getLightType());*/ + if (!detaiEntity.getLights().get(0).getDeviceName().isEmpty()) { + yblNameTwo1.setText(detaiEntity.getLights().get(0).getDeviceName()); + } + if (!detaiEntity.getLights().get(1).getDeviceName().isEmpty()) { + yblNameTwo2.setText(detaiEntity.getLights().get(1).getDeviceName()); + } + if (!detaiEntity.getLights().get(2).getDeviceName().isEmpty()) { + yblNameTwo3.setText(detaiEntity.getLights().get(2).getDeviceName()); + } + + mLightOpenTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 0); + } + } + }); + mLightOpenTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 1); + } + } + }); + mLightOpenTwo3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 2); + } + } + }); + mLightCloseTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 0); + } + } + }); + mLightCloseTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 1); + } + } + }); + mLightCloseTwo3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 2); + } + } + }); + + lightChooseTWo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + if (lightChooseTWo.isChecked()) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } else { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + } + }); + + positionIcon1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + positionIcon2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 1); + } + } + }); + positionIcon3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 2); + } + } + }); + yblNameTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblNameTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 1); + } + } + }); + yblNameTwo3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 2); + } + } + }); + yblTwoTop.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + } + }); + } else if (mObjEntity.get(position).getYblType().equals("04") || mObjEntity.get(position).getYblType().equals("12")) { + final YblEntity detaiEntity = mObjEntity.get(position); + yblNameTWo.setText(detaiEntity.getYblLabel()); + AddressNameUtil.setAddressIcon(mContext, positionIcon1, detaiEntity.getLights().get(0).getAddressId()); + if (mObjEntity.get(position).getYblType().equals("12")) { + if (detaiEntity.getSubType().equals("1")) { + // yblIconTwo1.setImageResource(R.drawable.icon_gauze); + yblNameTwo1.setText("纱帘"); + } else { + // yblIconTwo1.setImageResource(R.drawable.icon_curtains); + yblNameTwo1.setText("窗帘"); + } + setCurtainType(yblNameTwo1, detaiEntity.getSubType()); + mLightCloseTwo2.setText("反向"); + mLightCloseTwo2.setBackgroundResource(R.drawable.btn_round_360dp_blue); + } else { + setMulticontrolTypePic(yblIconTwo1, detaiEntity.getSubType()); + } + + mLightOpenTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 0); + } + } + }); + mLightOpenTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 1); + } + } + }); + mLightCloseTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 0); + } + } + }); + mLightCloseTwo2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 1); + } + } + }); + + lightChooseTWo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + if (lightChooseTWo.isChecked()) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } else { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + } + }); + positionIcon1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + yblIconTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblNameTwo1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblTwoTop.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + } + }); + } else if (mObjEntity.get(position).getYblType().equals("10")) { + yblNameTWo.setText(mObjEntity.get(position).getYblLabel()); + + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext); + linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + rv_light.setLayoutManager(linearLayoutManager); + lightItemAdpter = new LightItemAdpter(mContext, mObjEntity.get(position), position); + rv_light.setAdapter(lightItemAdpter); + + lightChooseTWo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + if (lightChooseTWo.isChecked()) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } else { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + } + }); + } + } + } + +} diff --git a/app/src/main/java/com/yonsz/z1/panel485/Light485ListActivity.java b/app/src/main/java/com/yonsz/z1/panel485/Light485ListActivity.java new file mode 100644 index 0000000..b6e36e2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/panel485/Light485ListActivity.java @@ -0,0 +1,399 @@ +package com.yonsz.z1.panel485; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entity5.BaseVersionMultiEntity; +import com.yonsz.z1.database.entity.entity5.YBLBodyEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ShakeUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.version5.light.ModifyLightTypeActivity; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Set; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.GET_SWITCHER_CHANGE_INFO; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.MULTIFUNCTIONAL_CONTROLLER; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.YBL_ADD_FAIL; +import static com.yonsz.z1.net.Constans.YBL_ADD_SUCCESS; + +/** + * Created by Administrator on 2019/1/8. + */ + +public class Light485ListActivity extends BaseActivity { + private TitleView mTitleView; + private SwipeMenuRecyclerView mRecyclerView; + private List mNettyEntities = new ArrayList<>(); + private List yblDevices = new ArrayList<>(); + private Light485Adapter mLightAdapter; + private String deviceAddress, subtype = "0"; + private int modifyPosition, modifyChildPosition; + private LoadingDialog mLoadingDialog; + private Button nextButton; + private TextView tv_air_declare; + private String deviceType; + private YblEntity body = new YblEntity(); + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ybl_light_list); + NettyHandlerUtil.getInstance(); + initView(); + initListener(); + } + + private void initView() { + if (null != getIntent().getExtras().get("deviceType")) { + deviceType = getIntent().getExtras().get("deviceType").toString(); + } + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + Set yblEntities = (Set) getIntent().getSerializableExtra("mNettyEntities"); + nextButton = (Button) findViewById(R.id.bt_restart_config); + mNettyEntities = new ArrayList<>(yblEntities); + tv_air_declare = (TextView) findViewById(R.id.tv_air_declare); + tv_air_declare.setText("尝试以下按钮是否可用,并修改灯光类型"); + mTitleView = (TitleView) findViewById(R.id.title_air_list); + mTitleView.setHead("添加开关面板"); + setInitAddressAndType(mNettyEntities); + mTitleView.setHeadFuntionGone(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mLightAdapter = new Light485Adapter(this, mNettyEntities, false, false); + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_child_device_list); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setItemViewCacheSize(0);//试图解决复用的问题 + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setAdapter(mLightAdapter); + + } + + private void setInitAddressAndType(List nettyEntities) { + for (int i = 0; i < nettyEntities.size(); i++) { + List lights = new ArrayList<>(); + if (nettyEntities.get(i).getLightCount() != 0) { + for (int j = 0; j < nettyEntities.get(i).getLightCount(); j++) { + YblEntity.LightsBean lightsBean = new YblEntity.LightsBean(); + lightsBean.setAddressId(deviceAddress); + setInitDeviceName(lightsBean); + lightsBean.setLightType(0); + lights.add(lightsBean); + } + } else { + YblEntity.LightsBean lightsBean = new YblEntity.LightsBean(); + lightsBean.setAddressId(deviceAddress); + setInitDeviceName(lightsBean); + lightsBean.setLightType(0); + lights.add(lightsBean); + } + + if (deviceType.equals(MULTIFUNCTIONAL_CONTROLLER)) { + mNettyEntities.get(i).setSubType("254"); + mNettyEntities.get(i).setYblLabel(mTitleView.getHead().substring(2, mTitleView.getHead().length())); + } + mNettyEntities.get(i).setLights(lights); + } + } + + private void setInitDeviceName(YblEntity.LightsBean lightsBean1) { + if (deviceType.equals(LIGHT_TAG)) { + lightsBean1.setDeviceName("灯光"); + } else if (deviceType.equals(SWITCH_TAG)) { + lightsBean1.setDeviceName("插座"); + } + } + + private void initListener() { + nextButton.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + for (int i = 0; i < mNettyEntities.size(); i++) { + yblDevices.add(mNettyEntities.get(i)); + } + subsetAddmulti(); + } + }); + mLightAdapter.setOnItemLightClickListener(new Light485Adapter.OnItemLightClickListener() { + @Override + public void onLearnLightClick(int position, int i, int j) { + ShakeUtil.setShake(getApplicationContext()); + switch (i) { + case 0: + subsetTest("poweroff", position); + break; + case 1: + subsetTest("power", position); + break; + } + } + + @Override + public void onLightOpenCloseClick(int position, int i) { + } + + @Override + public void onVoiceClick(int position, int voiceControlTag, int childPosition) { + //修改位置和图标 + modifyPosition = position; + modifyChildPosition = childPosition; + if (voiceControlTag == 0) { + Intent intent1 = new Intent(Light485ListActivity.this, ModifyLightTypeActivity.class); + if (mNettyEntities.get(position).getLights().get(childPosition).getDeviceName().isEmpty()) { + intent1.putExtra("deviceName", "灯光"); + } else { + intent1.putExtra("deviceName", mNettyEntities.get(position).getLights().get(childPosition).getDeviceName()); + } + intent1.putExtra("lightType", mNettyEntities.get(position).getLights().get(childPosition).getLightType()); + intent1.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent1.putExtra("deviceType", LIGHT_TAG); + intent1.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + startActivityForResult(intent1, MODIFY_DEVICE_NAME); + } else if (voiceControlTag == 1) { + Intent intent1 = new Intent(Light485ListActivity.this, ModifyRoomActivity.class); + intent1.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent1.putExtra("deviceType", LIGHT_TAG); + intent1.putExtra("deviceModel", ""); + intent1.putExtra("addressId", mNettyEntities.get(position).getLights().get(childPosition).getAddressId()); + startActivityForResult(intent1, MODIFY_DEVICE_NAME); + } + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case YBL_ADD_SUCCESS: + case UPDATE_BLINDENTITY_NAME_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, "添加成功"); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 2000); + break; + case YBL_ADD_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case GET_SWITCHER_CHANGE_INFO: + if (data != null && data.getExtras().get("lightType") != null) { + int lightType = Integer.parseInt(data.getExtras().get("lightType").toString()); + String addressId = data.getExtras().get("addressId").toString(); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setLightType(lightType); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setAddressId(addressId); + mLightAdapter.notifyDataSetChanged(); + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + String addressId = data.getExtras().get("addressId").toString(); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setAddressId(addressId); + mLightAdapter.notifyDataSetChanged(); + } + if (data != null && data.getExtras().get("lightType") != null) { + int lightType = Integer.parseInt(data.getExtras().get("lightType").toString()); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setLightType(lightType); + if (null != data.getExtras().get("lightName")) { + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setDeviceName(data.getExtras().get("lightName").toString()); + } + mLightAdapter.notifyDataSetChanged(); + } + if (data != null && data.getExtras().get("deviceName") != null) { + String deviceName = data.getExtras().get("deviceName").toString(); + int deviceNamePosition = (int) data.getExtras().get("deviceNamePosition"); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setDeviceName(deviceName); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setLightType(deviceNamePosition); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setSubType(String.valueOf(deviceNamePosition)); + mNettyEntities.get(modifyPosition).setSubType(String.valueOf(deviceNamePosition)); + if (deviceType.equals(MULTIFUNCTIONAL_CONTROLLER)) { + mNettyEntities.get(modifyPosition).setYblLabel(deviceName); + } + mLightAdapter.notifyDataSetChanged(); + } + if (data != null && data.getExtras().get("plugType") != null) { + mNettyEntities.get(modifyPosition).setYblLabel(data.getExtras().get("plugName").toString()); + mNettyEntities.get(modifyPosition).setSubType(data.getExtras().get("plugType").toString()); + mLightAdapter.notifyDataSetChanged(); + } + + if (yblDevices.contains(mNettyEntities.get(modifyPosition))) { + if (data != null && data.getExtras().get("plugType") != null) { + subtype = data.getExtras().get("plugType").toString(); + } + if (data != null && data.getExtras().get("deviceNamePosition") != null) { + subtype = data.getExtras().get("deviceNamePosition").toString(); + } + } + break; + } + } + + private void subsetTest(String key, int position) { + YblEntity yblEntity = new YblEntity(); + yblEntity.setCode(getIntent().getExtras().get("code").toString()); + yblEntity.setOrder((position + 1) + ""); + yblEntity.setAddressNo(getIntent().getExtras().get("addressNo").toString()); + // yblEntity.setAddressNo("02"); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("oper", key); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_TEST, map, JSONObject.toJSONString(yblEntity), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetTest", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetAddmulti() { + initLoadDialog(); + YBLBodyEntity yblBodyEntity = new YBLBodyEntity(); + yblBodyEntity.setDeviceCount(getIntent().getExtras().get("deviceCount").toString()); + yblBodyEntity.setAddressNo(getIntent().getExtras().get("addressNo").toString()); + yblBodyEntity.setParentId(getIntent().getExtras().get("deviceId").toString()); + List itemsBeans = new ArrayList<>(); + for (int i = 0; i < yblDevices.size(); i++) { + /*YBLBodyEntity.ItemsBean itemsBean = new YBLBodyEntity.ItemsBean(); + itemsBean.setAddressId("1"); + itemsBean.setSubtype(yblDevices.get(i).getSubType()); + if (null != yblDevices.get(i).getSubType() && !yblDevices.get(i).getSubType().isEmpty()) { + int subType = Integer.parseInt(yblDevices.get(i).getSubType()); + if (deviceType.equals(LIGHT_TAG) && (subType > 37 && subType < 200)) { + itemsBean.setModeId(AddressNameUtil.getModelId(AddressNameUtil.getModelList().get(subType - 38))); + } + } + itemsBean.setAddressId(yblDevices.get(i).getLights().get(j).getAddressId()); + itemsBean.setDeviceName(yblDevices.get(i).getLights().get(j).getDeviceName()); + itemsBean.setSubtype(String.valueOf(yblDevices.get(i).getLights().get(j).getLightType())); + itemsBeans.add(itemsBean);*/ + + yblBodyEntity.setYblId(yblDevices.get(i).getYblId()); + yblBodyEntity.setYblType(yblDevices.get(i).getYblType()); + yblBodyEntity.setZiId(getIntent().getExtras().get("ziId").toString()); + for (int j = 0; j < yblDevices.get(i).getLights().size(); j++) { + YBLBodyEntity.ItemsBean itemsBean = new YBLBodyEntity.ItemsBean(); + itemsBean.setAddressId(yblDevices.get(i).getLights().get(j).getAddressId()); + itemsBean.setDeviceName(yblDevices.get(i).getLights().get(j).getDeviceName()); + itemsBean.setSubtype(String.valueOf(yblDevices.get(i).getLights().get(j).getLightType())); + itemsBeans.add(itemsBean); + } + } + yblBodyEntity.setItems(itemsBeans); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADDMULTI, map, JSONObject.toJSONString(yblBodyEntity), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAddmulti", "ShareDeviceActivity onSuccess()" + respone); + BaseVersionMultiEntity obj = JSON.parseObject(respone, BaseVersionMultiEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/panel485/Panel485Activity.java b/app/src/main/java/com/yonsz/z1/panel485/Panel485Activity.java new file mode 100644 index 0000000..1f3fbeb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/panel485/Panel485Activity.java @@ -0,0 +1,529 @@ +package com.yonsz.z1.panel485; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEntity; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEvent; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNextDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.new433.switcher.SwitcherStepOneActivity; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.ShakeUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.DEL_SAFETY_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.SAFE_VOICE_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_SAFETY_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.SERVICE_PANEL_485; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_GETDETAIL; + + +/** + * Created by Administrator on 2018/8/8. + */ + +public class Panel485Activity extends BaseActivity { + private TitleView mTitleView; + private ImageView safeImage; + private TextView safeTypeName, safeTypeNameM; + private TextView deleteTv, tv_local_stage, devicePositionTv; + private CheckBox mCheckBox; + private LoadingDialog mLoadingDialog; + private boolean isDelete = false; + private Button bt_add; + private RecyclerView verticalRecyclerView; + private List addressNoInfoListBeans = new ArrayList<>(); + private AddressNoAdapter mVerticalAdapter; + private String code = "", deviceId = ""; + private ArrayList codeList = new ArrayList<>(); + private RelativeLayout devicePositionRl, panelNameRl; + private String addressId = "1", deviceModel; + private String deviceNameM = "485转换器"; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_panel_485); + initView(); + initListener(); + } + + + @Override + public void onResume() { + super.onResume(); + subsetGetDetail(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + } + + public void onEventMainThread(SafeVoiceEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = mHandler.obtainMessage(SAFE_VOICE_SUCCESS); + mHandler.sendMessage(message); + } + + public void onEventMainThread(EventBusEntity event) { + subsetGetDetail(); + } + + private void initView() { + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + bt_add = (Button) findViewById(R.id.bt_add); + mCheckBox = (CheckBox) findViewById(R.id.cb_bg_light); + deleteTv = (TextView) findViewById(R.id.btn_exit); + tv_local_stage = (TextView) findViewById(R.id.tv_local_stage); + verticalRecyclerView = (RecyclerView) findViewById(R.id.vertical_RecyclerView); + safeImage = (ImageView) findViewById(R.id.iv_safe_image); + safeTypeName = (TextView) findViewById(R.id.iv_safe_name); + safeTypeNameM = (TextView) findViewById(R.id.tv_panel_name); + devicePositionTv = (TextView) findViewById(R.id.tv_device_address); + devicePositionRl = (RelativeLayout) findViewById(R.id.rl_device_position); + panelNameRl = (RelativeLayout) findViewById(R.id.rl_panel_name); + mTitleView = (TitleView) findViewById(R.id.title_safe_detail); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setHead("485转换器"); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setHeadFuntion(R.drawable.icon_nav_add_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + toAddChildDevice(); + } + + @Override + public void onFunctionText() { + + } + }); + + + mVerticalAdapter = new AddressNoAdapter(this, addressNoInfoListBeans); + RecyclerViewNoBugLinearLayoutManager manage1 = new RecyclerViewNoBugLinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + verticalRecyclerView.setHasFixedSize(true); + verticalRecyclerView.setLayoutManager(manage1); + verticalRecyclerView.setAdapter(mVerticalAdapter); + + if (deviceModel.equals("1")) { + safeImage.setImageResource(R.drawable.icon_485_12v); + } + + if (null != getIntent().getExtras().get("deviceName")) { + deviceNameM = getIntent().getExtras().get("deviceName").toString(); + mTitleView.setHead(deviceNameM); + safeTypeName.setText(deviceNameM); + safeTypeNameM.setText(deviceNameM); + } + } + + private void toAddChildDevice() { +// Intent intent = new Intent(Panel485Activity.this, SwitcherStepOneActivity.class); + Intent intent = new Intent(Panel485Activity.this, Panel485SetCodeActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", SERVICE_PANEL_485); + intent.putExtra("largeClass", "5"); + intent.putExtra("isFirst", "1"); + intent.putExtra("deviceAddress", addressId); + intent.putExtra("plugType", "0"); + intent.putExtra("addressId", addressId); + intent.putExtra("code", code); + intent.putStringArrayListExtra("codeList", codeList); + intent.putExtra("deviceId", deviceId); + intent.putExtra("deviceModel", deviceModel); + startActivity(intent); + } + + private void initListener() { + deleteTv.setOnClickListener(this); + mCheckBox.setOnClickListener(this); + bt_add.setOnClickListener(this); + devicePositionRl.setOnClickListener(this); + panelNameRl.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.btn_exit: + ConfirmNextDialog dialog = new ConfirmNextDialog(this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + isDelete = true; + subsetDelete(); + break; + } + } + }); + dialog.setTopTxt("确定是否删除?"); + dialog.setContent("是否删除?删除该设备后,连接的全部设备也会删除?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.cb_bg_light: + if (mCheckBox.isChecked()) { + subsetControl("back_light_open"); + tv_local_stage.setText("背光灯已打开"); + } else { + subsetControl("back_light_close"); + tv_local_stage.setText("背光灯已关闭"); + } + break; + case R.id.bt_add: + toAddChildDevice(); + break; + case R.id.rl_device_position: + intent = new Intent(getActivity(), ModifyRoomActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", SERVICE_PANEL_485); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("addressId", addressId); + intent.putExtra("deviceId", deviceId); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + break; + case R.id.rl_panel_name: + subsetModifyName(); + break; + } + } + + private void subsetModifyName() { + //修改名字 + ConfirmNameDialog dialog1 = new ConfirmNameDialog(this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + subsetModify(positioName); + break; + } + } + }); + dialog1.setMaxEms(12); + dialog1.setOldName(mTitleView.getHead()); + dialog1.setContent("修改设备名称"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + } + + private void subsetModify(String deviceName) { + // initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getIntent().getExtras().get("id").toString()); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("deviceModel", deviceModel); + map.put("deviceType", SERVICE_PANEL_485); + if (!TextUtils.isEmpty(deviceName)) { + map.put("name", deviceName); + } + util.requestPostByAsyBody(NetWorkUrl.SUBSET_MODIFY, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetModify", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + deviceNameM = deviceName; + Message msg = mHandler.obtainMessage(MODIFY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(MODIFY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(MODIFY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetControl(String key) { + String body = "{}"; + ShakeUtil.setShake(this); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getIntent().getExtras().get("id").toString()); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("deviceModel", deviceModel); + map.put("deviceType", SERVICE_PANEL_485); + map.put("oper", key); + map.put("waitReturn", "true"); + map.put("sync", "true"); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_CONTROL, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetControl", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + /*if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + }*/ + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case DEL_SAFETY_ENTITY_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, R.string.Delete_successful); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + break; + case CHECK_USER_BIND_FAIL: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + case SELECT_SAFETY_DETAIL_FAIL: + break; + case SELECT_SAFETY_DETAIL_SUCCESS: + SafeVoiceEntity safeVoiceEntity = (SafeVoiceEntity) msg.obj; + code = safeVoiceEntity.getData().getTarget().getCode(); + deviceId = safeVoiceEntity.getData().getTarget().getId(); + addressId = safeVoiceEntity.getData().getTarget().getAddressId(); + devicePositionTv.setText(AddressNameUtil.getAddressName(addressId)); + String backLight = safeVoiceEntity.getData().getBackLight(); + if (backLight.equals("true")) { + mCheckBox.setChecked(true); + tv_local_stage.setText("背光灯已打开"); + } else { + mCheckBox.setChecked(false); + tv_local_stage.setText("背光灯已关闭"); + } + List addressNoInfoList = safeVoiceEntity.getData().getAddressNoInfoList(); + if (addressNoInfoList.size() == 0) { + bt_add.setVisibility(View.VISIBLE); + } else { + codeList.clear(); + for (int i = 0; i < addressNoInfoList.size(); i++) { + codeList.add(addressNoInfoList.get(i).getAddressNo()); + } + if (codeList.size() >= 16) { + mTitleView.setHeadFuntionGone(); + } + bt_add.setVisibility(View.GONE); + addressNoInfoListBeans.clear(); + addressNoInfoListBeans.addAll(addressNoInfoList); + mVerticalAdapter.notifyDataSetChanged(); + } + break; + case MODIFY_NAME_SUCCESS: + mTitleView.setHead(deviceNameM); + safeTypeName.setText(deviceNameM); + safeTypeNameM.setText(deviceNameM); + break; + case MODIFY_NAME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_ADDRESS_RESULT: + + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + addressId = data.getExtras().get("addressId").toString(); + devicePositionTv.setText(AddressNameUtil.getAddressName(addressId)); + } + break; + } + } + + /*private synchronized void getDeviceInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", homeListEntity.getData().get(deviceNumListPosition).getId()); + map.put("deviceId", id); + netWorkUtil.requestGetByAsy(GET_LC_DEVICE_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getDeviceInfo", "onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + }*/ + + private void subsetDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getIntent().getExtras().get("id").toString()); + map.put("deviceModel", deviceModel); + map.put("deviceType", SERVICE_PANEL_485); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + finish(); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetGetDetail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getIntent().getExtras().get("id").toString()); + map.put("deviceModel", deviceModel); + map.put("deviceType", SERVICE_PANEL_485); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestGetByAsy(SUBSET_GETDETAIL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("subsetGetDetail", "onSuccess()" + respone); + SafeVoiceEntity obj = JSON.parseObject(respone, SafeVoiceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_SAFETY_DETAIL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/panel485/Panel485Fragment.java b/app/src/main/java/com/yonsz/z1/panel485/Panel485Fragment.java new file mode 100644 index 0000000..64e8325 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/panel485/Panel485Fragment.java @@ -0,0 +1,772 @@ +package com.yonsz.z1.panel485; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.YblPanelControlEvent; +import com.yonsz.z1.database.entity.entity5.AllDeviceEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.ShakeUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.DeviceOtherNameActivity; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.version5.light.ModifyLightTypeActivity; +import com.yonsz.z1.view.TextViewVertical; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_FAIL; +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.APP_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.SHOW_LOCAL_CONTROL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; + +/** + * Created by Administrator on 2018/8/8. + */ + +public class Panel485Fragment extends BaseFragment implements View.OnClickListener { + private View fragView; + private UIHandle mHandler; + private DeviceEntityV4.DataBean.DevicesBean devicesBean; + private TitleView mTitleView; + private String ziId; + private String id; + private ImageView localControlIv; + private LoadingDialog mLoadingDialog; + + private RelativeLayout[] mRelativeLayouts = new RelativeLayout[5]; + private CheckBox[] timeCheckBox = new CheckBox[5]; + private TextView[] mTextPosition = new TextView[5]; + private TextViewVertical[] mTextViewVerticals = new TextViewVertical[5]; + private ImageView[] ivModifys = new ImageView[5]; + private List positionIds = new ArrayList<>(); + private List mTextPositionIds = new ArrayList<>(); + private List mTextViewVerticalsIds = new ArrayList<>(); + private List mRelativeLayoutsIds = new ArrayList<>(); + private List ivModifysIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private List condition = new ArrayList<>(); + private int deviceCount = 1; + private LinearLayout sixPanelLl; + private String panelType; + private TextView panelPosition, tv_child_position, aiNameAndState; + private String allDate; + private LinearLayout ll_bg; + private List childrenBeans; + private boolean isModify = false; + private int modifyPosition; + + public static Panel485Fragment getInstance(DeviceEntityV4.DataBean.DevicesBean devicesBean) { + Panel485Fragment fragment = new Panel485Fragment(); + fragment.devicesBean = devicesBean; + return fragment; + } + + public void onEventMainThread(YblPanelControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg + msg.length()); + } + + public void onEventMainThread(AppControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = APP_CONTROL_SUCCESS; + message.obj = msg; + mHandler.sendMessage(message); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_panel_485_light, null); + initView(fragView); + initListener(); + return fragView; + } + + /*@Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (isVisibleToUser) { + // 相当于onResume()方法--获取焦点 + if (null != devicesBean && null != devicesBean.getChildren() && null != childrenBeans) { + setShowState(); + } + } else { + // 相当于onpause()方法---失去焦点 + } + }*/ + + private void initView(View fragView) { + childrenBeans = devicesBean.getChildren(); + id = devicesBean.getId(); + ziId = devicesBean.getZiId(); + panelType = String.valueOf(devicesBean.getDeviceCount()); + deviceCount = devicesBean.getDeviceCount(); + ll_bg = (LinearLayout) fragView.findViewById(R.id.ll_bg); + panelPosition = (TextView) fragView.findViewById(R.id.tv_panel_position); + aiNameAndState = (TextView) fragView.findViewById(R.id.tv_ai_state); + localControlIv = (ImageView) fragView.findViewById(R.id.iv_local_control); + sixPanelLl = (LinearLayout) fragView.findViewById(R.id.ll_six_panel); + mTitleView = (TitleView) fragView.findViewById(R.id.title_music); + mTitleView.setHead(devicesBean.getDeviceName()); + mTitleView.clearBackGroud(); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + getActivity().finish(); + } + + @Override + public void onFunction() { + if (isModify) { + isModify = false; + mTitleView.setHeadFuntionTxtGone(); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + setModifyState(isModify); + } else { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //删除 + ConfirmDialog dialog = new ConfirmDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + // deleteChildDevice(); + subsetDelete(); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + + break; + case 3: + /*//语令说明 + Intent intent = new Intent(getContext(), Panel485ModifyActivity.class); + intent.putExtra("id", devicesBean.getId()); + intent.putExtra("ziId", devicesBean.getZiId()); + intent.putExtra("deviceAddress", devicesBean.getAddressId()); + intent.putExtra("panelType", devicesBean.getDeviceCount()); + intent.putExtra("deviceModel", devicesBean.getDeviceModel()); + intent.putExtra("from", "YblPanelFragment"); + intent.putExtra("devicesBean", (Serializable) devicesBean); + startActivityForResult(intent, MODIFY_ADDRESS_RESULT);*/ + isModify = true; + mTitleView.setHeadFuntionGone(); + mTitleView.setHeadFuntionTxtAndSise16("确定"); + setModifyState(isModify); + break; + case 4: + break; + case 5: + if (AddressNameUtil.isVirtual(ziId)) { + ToastUtil.show(getContext(), "虚拟家庭不支持该操作"); + return; + } + //修改名字 + ConfirmNameDialog dialog1 = new ConfirmNameDialog(getContext(), new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + subsetModify(positioName); + break; + } + } + }); + dialog1.setMaxEms(12); + dialog1.setOldName(mTitleView.getHead()); + dialog1.setContent("修改设备名称"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + break; + case 7: + Intent intent = new Intent(getContext(), DeviceOtherNameActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", devicesBean.getDeviceType()); + intent.putExtra("deviceModel", devicesBean.getDeviceModel()); + intent.putExtra("addressId", devicesBean.getAddressId()); + intent.putExtra("deviceId", devicesBean.getId()); + startActivity(intent); + break; + } + } + }); + dialog2.setTop("编辑修改类型位置"); + dialog2.setSureBtnTxt("删除开关面板"); + dialog2.setContent(); + dialog2.setLearn(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + if (AppIdUtil.isZhiKong()) { + switch (deviceCount) { + case 1: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene); + break; + case 2: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene2); + break; + case 3: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene3); + break; + case 4: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene4_485); + break; + } + } + panelPosition.setText(AddressNameUtil.getAddressName(devicesBean.getAddressId())); + aiNameAndState.setText(AddressNameUtil.getAiNameAndState(ziId)); + positionIds.add(R.id.rb_panel_1); + positionIds.add(R.id.rb_panel_2); + positionIds.add(R.id.rb_panel_3); + positionIds.add(R.id.rb_panel_31); + positionIds.add(R.id.rb_panel_4); + mTextPositionIds.add(R.id.tv_panel_position_1); + mTextPositionIds.add(R.id.tv_panel_position_2); + mTextPositionIds.add(R.id.tv_panel_position_3); + mTextPositionIds.add(R.id.tv_panel_position_31); + mTextPositionIds.add(R.id.tv_panel_position_4); + mTextViewVerticalsIds.add(R.id.tv_panel_1); + mTextViewVerticalsIds.add(R.id.tv_panel_2); + mTextViewVerticalsIds.add(R.id.tv_panel_3); + mTextViewVerticalsIds.add(R.id.tv_panel_31); + mTextViewVerticalsIds.add(R.id.tv_panel_4); + mRelativeLayoutsIds.add(R.id.rl_panel_1); + mRelativeLayoutsIds.add(R.id.rl_panel_2); + mRelativeLayoutsIds.add(R.id.rl_panel_3); + mRelativeLayoutsIds.add(R.id.rl_panel_31); + mRelativeLayoutsIds.add(R.id.rl_panel_4); + ivModifysIds.add(R.id.iv_panel_1); + ivModifysIds.add(R.id.iv_panel_2); + ivModifysIds.add(R.id.iv_panel_3); + ivModifysIds.add(R.id.iv_panel_31); + ivModifysIds.add(R.id.iv_panel_4); + for (int i = 0; i < positionIds.size(); i++) { + if (i >= 5) { + return; + } + mRelativeLayouts[i] = (RelativeLayout) fragView.findViewById(mRelativeLayoutsIds.get(i)); + timeCheckBox[i] = (CheckBox) fragView.findViewById(positionIds.get(i)); + mTextPosition[i] = (TextView) fragView.findViewById(mTextPositionIds.get(i)); + mTextViewVerticals[i] = (TextViewVertical) fragView.findViewById(mTextViewVerticalsIds.get(i)); + ivModifys[i] = (ImageView) fragView.findViewById(ivModifysIds.get(i)); + timeCheckBox[i].setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rb_panel_1: + subsetControl(0); + break; + case R.id.rb_panel_2: + subsetControl(1); + break; + case R.id.rb_panel_3: + subsetControl(2); + break; + case R.id.rb_panel_31: + subsetControl(2); + break; + case R.id.rb_panel_4: + subsetControl(3); + break; + } + } + }); + int finalI = i; + ivModifys[i].setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_panel_1: + case R.id.iv_panel_2: + case R.id.iv_panel_3: + case R.id.iv_panel_31: + case R.id.iv_panel_4: + toModifyType(finalI); + break; + } + } + }); + } + + setShowState(); + } + + private void setModifyState(boolean isModify) { + for (int i = 0; i < ivModifysIds.size(); i++) { + if (i >= 5) { + return; + } + if (isModify) { + ivModifys[i].setVisibility(View.VISIBLE); + } else { + ivModifys[i].setVisibility(View.GONE); + } + } + } + + private void toModifyType(int i) { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + modifyPosition = i; + Intent intent2 = new Intent(getContext(), ModifyLightTypeActivity.class); + intent2.putExtra("lightType", childrenBeans.get(i).getSubType()); + intent2.putExtra("ziId", ziId); + intent2.putExtra("deviceType", LIGHT_TAG); + intent2.putExtra("deviceModel", childrenBeans.get(i).getDeviceModel()); + intent2.putExtra("addressId", childrenBeans.get(i).getAddressId()); + intent2.putExtra("deviceId", childrenBeans.get(i).getId()); + if (devicesBean.getDeviceName().isEmpty()) { + intent2.putExtra("deviceName", "灯光"); + } else { + intent2.putExtra("deviceName", devicesBean.getDeviceName()); + } + startActivityForResult(intent2, MODIFY_DEVICE_NAME); + break; + case 2: + break; + case 3: + modifyPosition = i; + Intent intent = new Intent(getContext(), ModifyRoomActivity.class); + intent.putExtra("lightType", childrenBeans.get(i).getSubType()); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", LIGHT_TAG); + intent.putExtra("deviceModel", childrenBeans.get(i).getDeviceModel()); + intent.putExtra("addressId", childrenBeans.get(i).getAddressId()); + intent.putExtra("deviceId", childrenBeans.get(i).getId()); + if (devicesBean.getDeviceName().isEmpty()) { + intent.putExtra("deviceName", "灯光"); + } else { + intent.putExtra("deviceName", devicesBean.getDeviceName()); + } + startActivityForResult(intent, MODIFY_DEVICE_NAME); + break; + case 4: + break; + case 7: + intent = new Intent(getContext(), DeviceOtherNameActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", devicesBean.getDeviceType()); + intent.putExtra("deviceModel", devicesBean.getDeviceModel()); + intent.putExtra("addressId", devicesBean.getAddressId()); + intent.putExtra("deviceId", devicesBean.getId()); + startActivity(intent); + break; + } + } + }); + dialog2.setTop("修改设备位置"); + dialog2.setBottom("修改开关面板类型"); + dialog2.setContent(); + dialog2.setLearn(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + + private void setShowState() { + switch (deviceCount) { + case 1: + sixPanelLl.setVisibility(View.GONE); + mRelativeLayouts[1].setVisibility(View.GONE); + mRelativeLayouts[2].setVisibility(View.GONE); + break; + case 2: + sixPanelLl.setVisibility(View.GONE); + mRelativeLayouts[2].setVisibility(View.GONE); + break; + case 3: + sixPanelLl.setVisibility(View.GONE); + break; + case 4: + sixPanelLl.setVisibility(View.VISIBLE); + mRelativeLayouts[2].setVisibility(View.GONE); + break; + } + for (int i = 0; i < childrenBeans.size(); i++) { + if (deviceCount == 4) { + if (i == 3) { + setItemName(i, 4); + } else if (i == 2) { + setItemName(i, 3); + } else { + setItemName(i, i); + } + } else { + setItemName(i, i); + } + } + } + + private void setItemName(int i, int j) { + if (childrenBeans.get(i).getName().isEmpty()) { + mTextViewVerticals[j].setText("未设置"); + } else { + mTextViewVerticals[j].setText(childrenBeans.get(i).getName()); + } + mTextPosition[j].setText(AddressNameUtil.getAddressName(childrenBeans.get(i).getAddressId())); + timeCheckBox[j].setEnabled(true); + if (null != childrenBeans.get(i).getLastInfo()) { + String openFlag = childrenBeans.get(i).getLastInfo().getOpenFlag(); + if (openFlag.equals("1")) { + timeCheckBox[j].setChecked(true); + mTextPosition[j].setTextColor(getResources().getColor(R.color.z1_control)); + mTextViewVerticals[j].setTextColor(getResources().getColor(R.color.z1_control)); + } else { + timeCheckBox[j].setChecked(false); + mTextPosition[j].setTextColor(getResources().getColor(R.color.z1_999999)); + mTextViewVerticals[j].setTextColor(getResources().getColor(R.color.z1_999999)); + } + } else { + timeCheckBox[j].setChecked(false); + } + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + private void initListener() { + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + } + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case DELETE_CHILDDEVICE_SUCCESS: + ToastUtil.show(getContext(), "删除成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }, 2000); + break; + case DELETE_CHILDDEVICE_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + case SHOW_LOCAL_CONTROL: + String obj = (String) msg.obj; + if (obj.equals("1")) { + localControlIv.setVisibility(View.VISIBLE); + } else { + localControlIv.setVisibility(View.GONE); + } + break; + case APP_CONTROL_SUCCESS: + NettyEntity nettyEntity = JSON.parseObject(msg.obj.toString(), NettyEntity.class); + if (nettyEntity.getDeviceType().equals(LIGHT_TAG)) { + boolean isChange = false; + String deviceIds = nettyEntity.getDeviceIds(); + List result = Arrays.asList(deviceIds.split(",")); + for (int i = 0; i < childrenBeans.size(); i++) { + if (result.contains(childrenBeans.get(i).getId())) { + isChange = true; + AllDeviceEntity.DataBean.DeviceBean.ChildrenBean.LastInfoBean lastInfoBean = new AllDeviceEntity.DataBean.DeviceBean.ChildrenBean.LastInfoBean(); + lastInfoBean.setOpenFlag(nettyEntity.getOpenFlag()); + childrenBeans.get(i).setLastInfo(lastInfoBean); + } + } + if (isChange) { + setShowState(); + } + } + break; + case ALLOW_VOICE_CONTROLL_SUCCESS: + mTitleView.setHead(devicesBean.getDeviceName()); + break; + case ALLOW_VOICE_CONTROLL_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } + + private void subsetModify(String deviceName) { + // initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", devicesBean.getDeviceType()); + map.put("ziId", ziId); + if (!TextUtils.isEmpty(deviceName)) { + map.put("name", deviceName); + } + util.requestPostByAsyBody(NetWorkUrl.SUBSET_MODIFY, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetModify", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + devicesBean.setDeviceName(deviceName); + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetControl(int scenekey) { + String key = "power"; + if (null != childrenBeans.get(scenekey).getLastInfo()) { + String openFlag = childrenBeans.get(scenekey).getLastInfo().getOpenFlag(); + if (openFlag.equals("1")) { + key = "poweroff"; + childrenBeans.get(scenekey).getLastInfo().setOpenFlag("0"); + } else { + key = "power"; + childrenBeans.get(scenekey).getLastInfo().setOpenFlag("1"); + } + } else { + key = "power"; + AllDeviceEntity.DataBean.DeviceBean.ChildrenBean.LastInfoBean lastInfoBean = new AllDeviceEntity.DataBean.DeviceBean.ChildrenBean.LastInfoBean(); + lastInfoBean.setOpenFlag("1"); + childrenBeans.get(scenekey).setLastInfo(lastInfoBean); + } + String body = "{}"; + ShakeUtil.setShake(getContext()); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", childrenBeans.get(scenekey).getId()); + map.put("deviceModel", childrenBeans.get(scenekey).getDeviceModel()); + map.put("deviceType", LIGHT_TAG); + map.put("ziId", ziId); + map.put("oper", key); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_CONTROL, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetControl", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", LIGHT_TAG); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_ADDRESS_RESULT: + if (data != null && data.getExtras().get("data") != null) { + devicesBean.setAddressId((String) data.getExtras().get("data")); + panelPosition.setText(AddressNameUtil.getAddressName((String) data.getExtras().get("data"))); + } + if (data != null && data.getSerializableExtra("devicesBean") != null) { + devicesBean = (DeviceEntityV4.DataBean.DevicesBean) data.getSerializableExtra("devicesBean"); + childrenBeans.clear(); + childrenBeans = devicesBean.getChildren(); + setShowState(); + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + String addressId = data.getExtras().get("addressId").toString(); + childrenBeans.get(modifyPosition).setAddressId(addressId); + mTextPosition[modifyPosition].setText(AddressNameUtil.getAddressName(addressId)); + } + if (data != null && data.getExtras().get("lightType") != null) { + String lightType = data.getExtras().get("lightType").toString(); + String lightName = data.getExtras().get("lightName").toString(); + childrenBeans.get(modifyPosition).setSubType(lightType); + mTextViewVerticals[modifyPosition].setText(lightName); + } + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(getContext()); + mLoadingDialog.show(); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(Panel485Fragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + Panel485Fragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/panel485/Panel485ModifyActivity.java b/app/src/main/java/com/yonsz/z1/panel485/Panel485ModifyActivity.java new file mode 100644 index 0000000..57bd734 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/panel485/Panel485ModifyActivity.java @@ -0,0 +1,423 @@ +package com.yonsz.z1.panel485; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.util.Log; +import android.view.View; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.YblPanelControlEvent; +import com.yonsz.z1.database.entity.entity5.AllDeviceEntity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.ShakeUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ModifyTypeActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.io.Serializable; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.SHOW_LOCAL_CONTROL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; + +/** + * Created by Administrator on 2018/8/8. + */ + +public class Panel485ModifyActivity extends BaseActivity { + private DeviceEntityV4.DataBean.DevicesBean devicesBean; + private TitleView mTitleView; + private String ziId; + private String id; + private ImageView localControlIv; + private LoadingDialog mLoadingDialog; + + private RelativeLayout[] timeCheckBox = new RelativeLayout[5]; + private TextView[] lightNames = new TextView[5]; + private List positionIds = new ArrayList<>(); + private List nameIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private List condition = new ArrayList<>(); + private int deviceCount = 1; + private LinearLayout sixPanelLl; + private String panelType; + private TextView panelPosition, tv_child_position, aiNameAndState; + private String allDate; + private LinearLayout ll_bg; + private List childrenBeans; + private int modifyPosition = 0; + + public static Panel485ModifyActivity getInstance(DeviceEntityV4.DataBean.DevicesBean devicesBean) { + Panel485ModifyActivity fragment = new Panel485ModifyActivity(); + fragment.devicesBean = devicesBean; + return fragment; + } + + public void onEventMainThread(YblPanelControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg + msg.length()); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.acyivity_panel_485_light_modify); + initView(); + initListener(); + } + + private void initView() { + devicesBean = (DeviceEntityV4.DataBean.DevicesBean) getIntent().getSerializableExtra("devicesBean"); + childrenBeans = devicesBean.getChildren(); + id = devicesBean.getId(); + ziId = devicesBean.getZiId(); + panelType = String.valueOf(devicesBean.getDeviceCount()); + deviceCount = devicesBean.getDeviceCount(); + ll_bg = (LinearLayout) findViewById(R.id.ll_bg); + panelPosition = (TextView) findViewById(R.id.tv_panel_position); + aiNameAndState = (TextView) findViewById(R.id.tv_ai_state); + localControlIv = (ImageView) findViewById(R.id.iv_local_control); + sixPanelLl = (LinearLayout) findViewById(R.id.ll_six_panel); + mTitleView = (TitleView) findViewById(R.id.title_music); + mTitleView.setHead("修改开关面板类型"); + mTitleView.clearBackGroud(); + mTitleView.setHeadFuntionGone(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + Intent intent = new Intent(Panel485ModifyActivity.this, Panel485Fragment.class); + intent.putExtra("devicesBean", (Serializable) devicesBean); + setResult(MODIFY_ADDRESS_RESULT, intent); + finish(); + } + + @Override + public void onFunction() { + } + + @Override + public void onFunctionText() { + + } + }); + + if (AppIdUtil.isHotel()) { + switch (deviceCount) { + case 1: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene); + break; + case 2: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene2); + break; + case 3: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene3); + break; + case 4: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene4_485); + break; + } + } + /*panelPosition.setText(AddressNameUtil.getAddressName(devicesBean.getAddressId())); + aiNameAndState.setText(AddressNameUtil.getAiNameAndState(ziId));*/ + positionIds.add(R.id.rb_panel_1); + positionIds.add(R.id.rb_panel_2); + positionIds.add(R.id.rb_panel_3); + positionIds.add(R.id.rb_panel_31); + positionIds.add(R.id.rb_panel_4); + + nameIds.add(R.id.tv_name1); + nameIds.add(R.id.tv_name2); + nameIds.add(R.id.tv_name3); + nameIds.add(R.id.tv_name31); + nameIds.add(R.id.tv_name4); + + for (int i = 0; i < positionIds.size(); i++) { + if (i >= 5) { + return; + } + lightNames[i] = (TextView) findViewById(nameIds.get(i)); + timeCheckBox[i] = (RelativeLayout) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rb_panel_1: + toModifyType(0); + break; + case R.id.rb_panel_2: + toModifyType(1); + break; + case R.id.rb_panel_3: + toModifyType(2); + break; + case R.id.rb_panel_31: + toModifyType(2); + break; + case R.id.rb_panel_4: + toModifyType(3); + break; + } + } + }); + } + switch (deviceCount) { + case 1: + sixPanelLl.setVisibility(View.GONE); + timeCheckBox[1].setVisibility(View.GONE); + timeCheckBox[2].setVisibility(View.GONE); + break; + case 2: + sixPanelLl.setVisibility(View.GONE); + timeCheckBox[2].setVisibility(View.GONE); + break; + case 3: + sixPanelLl.setVisibility(View.GONE); + break; + case 4: + sixPanelLl.setVisibility(View.VISIBLE); + timeCheckBox[2].setVisibility(View.GONE); + break; + } + + for (int i = 0; i < childrenBeans.size(); i++) { + if (deviceCount == 4) { + if (i == 3) { + setItemName(i, 4); + } else if (i == 2) { + setItemName(i, 3); + } else { + setItemName(i, i); + } + } else { + setItemName(i, i); + } + } + } + + @Override + public void onBackPressed() { + Intent intent = new Intent(Panel485ModifyActivity.this, Panel485Fragment.class); + intent.putExtra("devicesBean", (Serializable) devicesBean); + setResult(MODIFY_ADDRESS_RESULT, intent); + finish(); + } + + private void setItemName(int i, int j) { + lightNames[j].setText(childrenBeans.get(i).getName()); + lightNames[j].setEnabled(true); + } + + private void toModifyType(int i) { + modifyPosition = i; + Intent intent2 = new Intent(Panel485ModifyActivity.this, ModifyTypeActivity.class); + intent2.putExtra("lightType", childrenBeans.get(i).getSubType()); + intent2.putExtra("ziId", ziId); + intent2.putExtra("deviceType", LIGHT_TAG); + intent2.putExtra("deviceModel", childrenBeans.get(i).getDeviceModel()); + intent2.putExtra("addressId", "1"); + intent2.putExtra("deviceId", childrenBeans.get(i).getId()); + if (devicesBean.getDeviceName().isEmpty()) { + intent2.putExtra("deviceName", "灯光"); + } else { + intent2.putExtra("deviceName", devicesBean.getDeviceName()); + } + startActivityForResult(intent2, MODIFY_DEVICE_NAME); + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + private void initListener() { + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case DELETE_CHILDDEVICE_SUCCESS: + ToastUtil.show(this, "删除成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 2000); + break; + case DELETE_CHILDDEVICE_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case SHOW_LOCAL_CONTROL: + String obj = (String) msg.obj; + if (obj.equals("1")) { + localControlIv.setVisibility(View.VISIBLE); + } else { + localControlIv.setVisibility(View.GONE); + } + break; + } + } + + private void subsetControl(int scenekey) { + String key = "power"; + if (null != childrenBeans.get(scenekey).getLastInfo()) { + String openFlag = childrenBeans.get(scenekey).getLastInfo().getOpenFlag(); + if (openFlag.equals("1")) { + key = "poweroff"; + childrenBeans.get(scenekey).getLastInfo().setOpenFlag("0"); + } else { + key = "power"; + childrenBeans.get(scenekey).getLastInfo().setOpenFlag("1"); + } + } else { + key = "power"; + AllDeviceEntity.DataBean.DeviceBean.ChildrenBean.LastInfoBean lastInfoBean = new AllDeviceEntity.DataBean.DeviceBean.ChildrenBean.LastInfoBean(); + lastInfoBean.setOpenFlag("1"); + childrenBeans.get(scenekey).setLastInfo(lastInfoBean); + } + String body = "{}"; + ShakeUtil.setShake(this); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", childrenBeans.get(scenekey).getId()); + map.put("deviceModel", childrenBeans.get(scenekey).getDeviceModel()); + map.put("deviceType", LIGHT_TAG); + map.put("ziId", ziId); + map.put("oper", key); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_CONTROL, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetControl", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", LIGHT_TAG); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_ADDRESS_RESULT: + if (data != null && data.getExtras().get("data") != null) { + devicesBean.setAddressId((String) data.getExtras().get("data")); + panelPosition.setText(AddressNameUtil.getAddressName((String) data.getExtras().get("data"))); + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("deviceName") != null) { + String deviceName = data.getExtras().get("deviceName").toString(); + lightNames[modifyPosition].setText(deviceName); + devicesBean.getChildren().get(modifyPosition).setName(deviceName); + } + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(Panel485ModifyActivity activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + Panel485ModifyActivity activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/panel485/Panel485SetCodeActivity.java b/app/src/main/java/com/yonsz/z1/panel485/Panel485SetCodeActivity.java new file mode 100644 index 0000000..d5a8b77 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/panel485/Panel485SetCodeActivity.java @@ -0,0 +1,288 @@ +package com.yonsz.z1.panel485; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.bigkoo.pickerview.OptionsPickerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity4.YblLightEvent; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import static com.yonsz.z1.net.Constans.CLOSE_THIS_ACTIVITY; +import static com.yonsz.z1.net.Constans.CREATE_TEST_BLIND_FAIL; +import static com.yonsz.z1.net.Constans.CREATE_TEST_BLIND_SUCCESS; +import static com.yonsz.z1.net.Constans.SERVICE_PANEL_485; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * Created by Administrator on 2017/12/15. + */ + +public class Panel485SetCodeActivity extends BaseActivity { + private static final List options1Items = new ArrayList<>(); + private Set mNettyEntities = new LinkedHashSet<>(); + private YblEntity nettyEntity; + private TitleView mTitleView; + private Button nextConfig; + private String ziId; + private LoadingDialog mLoadingDialog; + private ImageView iv_bg; + private String bodyMap = "{}"; + private boolean isSearchEnd = false; + private TextView setAddressTv; + private ArrayList codeList; + private CheckBox iv_select_unnor_reveal; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + Message message = new Message(); + message.what = CLOSE_THIS_ACTIVITY; + mHandler.sendMessage(message); + } + + public void onEventMainThread(YblLightEvent event) { + if (isSearchEnd) { + return; + } + String msg = event.getMsg(); + Log.e("nettyUtil", msg + msg.length()); + if (msg.equals("搜索完成")) { + isSearchEnd = true; + } else { + if (msg.length() < 188) { + nettyEntity = JSON.parseObject(msg, YblEntity.class); + if (mNettyEntities.contains(nettyEntity)) { + ToastUtil.show(this, "发现一个重复的控制器"); + } + if (nettyEntity.getYblType().equals("01") || nettyEntity.getYblType().equals("1f")) { + mNettyEntities.add(nettyEntity); + } + Log.e("nettyUtil", mNettyEntities.size() + ""); + if (mNettyEntities.size() > 0) { + isSearchEnd = true; + } + } + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_panel485_setcode); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + public void onPause() { + super.onPause(); +// yblSearch("301"); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + private void initView() { + codeList = getIntent().getStringArrayListExtra("codeList"); + ziId = getIntent().getExtras().get("ziId").toString(); + iv_bg = (ImageView) findViewById(R.id.iv_bg); + setAddressTv = (TextView) findViewById(R.id.tv_set_address); + setAddressTv.setOnClickListener(this); + iv_select_unnor_reveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + iv_select_unnor_reveal.setOnClickListener(this); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + if (iv_select_unnor_reveal.isChecked()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = "已勾选"; + mHandler.sendMessage(msg); + } else { + subsetExtend(); + } + } + }); + mTitleView = (TitleView) findViewById(R.id.title_light_learn); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setHead("添加设备"); + iv_bg.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_485)); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + List strings = new ArrayList<>(); + for (int i = 1; i < 17; i++) { + if (!codeList.contains(String.valueOf(i))) { + strings.add(i + ""); + } + } + setAddressTv.setText(strings.get(0)); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_set_address: + setCode(setAddressTv); + break; + } + } + + private void setCode(final TextView textView) { + options1Items.clear(); + for (int i = 1; i < 17; i++) { + if (!codeList.contains(String.valueOf(i))) { + options1Items.add(i + ""); + } + } + OptionsPickerView pvOptions = new OptionsPickerView.Builder(Panel485SetCodeActivity.this, new OptionsPickerView.OnOptionsSelectListener() { + @Override + public void onOptionsSelect(int options1, int option2, int options3, View v) { + //返回的分别是三个级别的选中位置 + String s = options1Items.get(options1); + textView.setText(s); + } + }) + .setTextColorCenter(Color.BLACK)//设置选中项的颜色 + .build(); + pvOptions.setPicker(options1Items); + pvOptions.show(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case CREATE_TEST_BLIND_SUCCESS: + break; + case CREATE_TEST_BLIND_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + case CLOSE_THIS_ACTIVITY: + finish(); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + Intent intent = new Intent(Panel485SetCodeActivity.this, Choose485ChildActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceType", SERVICE_PANEL_485); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("largeClass", "5"); + intent.putExtra("isFirst", "1"); + intent.putExtra("deviceAddress", "1"); + intent.putExtra("plugType", "0"); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("code", getIntent().getExtras().get("code").toString()); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + if (iv_select_unnor_reveal.isChecked()) { + intent.putExtra("sendSetAddress", "false"); + } else { + intent.putExtra("sendSetAddress", "true"); + } + intent.putExtra("addressNo", setAddressTv.getText().toString()); + startActivity(intent); + break; + case UPDATE_SEC: + break; + } + } + + private void subsetExtend() { + initLoadDialog(); + String body = "{\"addressNo\":\"" + setAddressTv.getText().toString() + "\"}"; + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", getIntent().getExtras().get("deviceId").toString()); + map.put("deviceType", SERVICE_PANEL_485); + map.put("ziId", ziId); + map.put("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + map.put("method", "bindAddress"); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_EXTEND, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetExtend", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/service/UploadHeadIconService.java b/app/src/main/java/com/yonsz/z1/service/UploadHeadIconService.java new file mode 100644 index 0000000..7bfd953 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/service/UploadHeadIconService.java @@ -0,0 +1,104 @@ +package com.yonsz.z1.service; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.support.annotation.Nullable; +import android.util.Log; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +import java.util.List; + +import de.greenrobot.event.EventBus; + +/** + * Created by Administrator on 2017/2/11 0011. + */ + +public class UploadHeadIconService extends Service { + + private static final String TAG = "uploadImg"; + private String picTag = "1", picPosition = "0"; + + @Override + public void onCreate() { + Log.i(TAG, "ExampleService-onCreate"); + super.onCreate(); + } + + @Override + public void onStart(Intent intent, int startId) { + Log.i(TAG, "ExampleService-onStart"); + super.onStart(intent, startId); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.i(TAG, "onStartCommand: start"); + List files = (List) intent.getExtras().get("data"); + Log.i("gaojie", "UploadHeadIconService onStartCommand()" + files.size() + "---" + files.get(0).toString()); + String id = intent.getStringExtra("parentId"); + if (null != intent.getStringExtra("TAG")) { + picTag = intent.getStringExtra("TAG"); + } + if (files != null && files.size() > 0) { + startUpload(files, id, intent); + } + return super.onStartCommand(intent, flags, startId); + } + + private void startUpload(List files, String parentId, final Intent intent) { + StringBuffer url = new StringBuffer(); + if (picTag.equals("1")) { + url.append(NetWorkUrl.ADD_TALK_IMG); + url.append("parentId=" + parentId); + url.append("&type=avatar"); + url.append("&avatar"); + } else if (picTag.equals("4")) { + url.append(NetWorkUrl.FEEDBACK_UPLOAD); + url.append("parentId=" + parentId); + url.append("&type=attachment"); + url.append("&attachment"); + } + url.append("&tokenId=" + SharedpreferencesUtil.get(Constans.TOKENID, "null")); + url.append("&session=" + SharedpreferencesUtil.get(Constans.SEESSIONID, "null")); + NetWorkUtil.instans().uploadImg(files, url.toString(), picTag, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("gaojie", "UploadHeadIconService onSuccess()" + "123456789次" + respone); + if (picTag.equals("1")) { + SharedpreferencesUtil.save(Constans.USERICON, ""); + } else if (picTag.equals("4")) { + SimpleEntty simpleEntty = JSON.parseObject(respone, SimpleEntty.class); + if (1 == (int) intent.getExtras().get("mDatas")) { + EventBus.getDefault().post( + new EventBusEntity(simpleEntty.getData() + ";")); + } else { + EventBus.getDefault().post( + new EventBusEntity(simpleEntty.getData() + ";")); + } + } + stopSelf(); + } + + @Override + public void onFail(String message) { + Log.i("gaojie", "UploadHeadIconService onSuccess()" + "1234次" + message); + stopSelf(); + } + }); + } + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/ChannelCache.java b/app/src/main/java/com/yonsz/z1/tcpudp/ChannelCache.java new file mode 100644 index 0000000..53b6374 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/ChannelCache.java @@ -0,0 +1,125 @@ +package com.yonsz.z1.tcpudp; + +import java.util.Date; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import io.netty.channel.Channel; +import io.netty.channel.socket.SocketChannel; + +public class ChannelCache { + + private static final String KEY_CHANNEL = "ChannelCache"; + private static final String KEY_SESSION ="sessionId"; + private static final String KEY_LOGINID = "loginId"; + private static final String KEY_CREATEDATE = "createDate"; + + + private volatile static ChannelCache mapCache;// 缓存实例对象 + + + + //private static Map map=new ConcurrentHashMap(); + private static Map> map=new ConcurrentHashMap<>(); + + public static int getCount(){ + if(map!=null){ + return map.size(); + } + return 0; + } + public static ChannelCache getInstance() { + if (null == mapCache) { + synchronized (ChannelCache.class) { + if (null == mapCache) { + mapCache = new ChannelCache(); + } + } + } + return mapCache; + } + + public static void add(String uuid,SocketChannel socketChannel){ + if(map.get(uuid)==null){ + Map obj = new ConcurrentHashMap(); + obj.put(KEY_CHANNEL, socketChannel); + map.put(uuid,obj); + } + } + + + public static boolean setSessionInfo(String uuid, String sessionId, String loginId){ + Map obj = map.get(uuid); + if(null!=obj){ + if (null!=sessionId) obj.put(KEY_SESSION, sessionId); + if (null!=loginId) obj.put(KEY_LOGINID, loginId); + obj.put(KEY_CREATEDATE, new Date()); + map.put(uuid,obj); + return true; + } + return false; + } + + public static String getLoginId(String uuid){ + Map obj = map.get(uuid); + if (null!=obj) { + if(null!=obj.get(KEY_LOGINID)){ + return (String) obj.get(KEY_LOGINID); + } + } + return null; + } + public static Date getCreateDate(String clientId){ + Map obj = map.get(clientId); + if (null!=obj) { + if(null!=obj.get(KEY_CREATEDATE)){ + return (Date) obj.get(KEY_CREATEDATE); + } + } + return null; + } + public static String getSessionId(String uuid){ + Map obj = map.get(uuid); + if (null!=obj) { + if(null!=obj.get(KEY_SESSION)){ + return (String) obj.get(KEY_SESSION); + } + } + return null; + } + public static Channel get(String uuid){ + Map obj = map.get(uuid); + if (null!=obj) { + if(null!=obj.get(KEY_CHANNEL)){ + return (SocketChannel) obj.get(KEY_CHANNEL); + } + } + return null; + //return map.get(clientId); + } + + /** + public static void remove(SocketChannel socketChannel){ + for (Map.Entry entry:map.entrySet()){ + if (entry.getValue()==socketChannel){ + map.remove(entry.getKey()); + } + } + } + **/ + + public static Set getClientIds(){ + Set ret = map.keySet(); + return ret; + } + + public boolean remove(String uuid) { + if (map.containsKey(uuid)) { + map.remove(uuid); + return true; + } + return false; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/INettyReadDataListener.java b/app/src/main/java/com/yonsz/z1/tcpudp/INettyReadDataListener.java new file mode 100644 index 0000000..85f6754 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/INettyReadDataListener.java @@ -0,0 +1,9 @@ +package com.yonsz.z1.tcpudp; + +/** + * Created by Administrator on 2018/3/21. + */ + +public interface INettyReadDataListener { + public void read(byte[] bytes); +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/NettyManager.java b/app/src/main/java/com/yonsz/z1/tcpudp/NettyManager.java new file mode 100644 index 0000000..ae91f0b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/NettyManager.java @@ -0,0 +1,264 @@ +package com.yonsz.z1.tcpudp; + +import android.util.Log; + +import com.yonsz.z1.database.entity.entity4.LocalControlEvent; +import com.yonsz.z1.utils.BytesUtil; + +import de.greenrobot.event.EventBus; +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.timeout.IdleStateEvent; +import io.netty.handler.timeout.IdleStateHandler; + +import static com.yonsz.z1.net.Constans.isLocalControl; + +public class NettyManager { + protected static String TAG = "NettyManager"; + private static NettyManager nettyManager; + private static NettyClientHandler mNettyClientHandler; + private static Channel channel; + private static String host; + private static int port = 8899; + private static boolean isReConn = true; + private NioEventLoopGroup mGroup; + private Bootstrap mBootstrap; + private int times = 0; + + public static NettyManager getInstance(String deviceIp) { + host = deviceIp; + /*if (null == nettyManager) { + synchronized (NettyManager.class) { + if (nettyManager == null) {*/ + nettyManager = new NettyManager(); + nettyManager.onCreate(); + /*} + } + }*/ + return nettyManager; + } + + /** + * 发送消息给设备 + * + * @param order + */ + public static void sendBleMsg2Server(String order) { + Log.i("NettyManager", "NettyManager sendBleMsg2Server()" + order); + if (mNettyClientHandler == null) + return; + try { + ChannelHandlerContext ctx = mNettyClientHandler.getCtx(); + byte[] bytes = BytesUtil.hexStringToBytes(order); + ByteBuf buf = ctx.alloc().buffer(bytes.length); + buf.writeBytes(bytes); + ctx.writeAndFlush(buf); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void closeCtx() { + + new Thread(new Runnable() { + @Override + public void run() { + try { + if (mNettyClientHandler == null) { + return; + } else { + ChannelHandlerContext ctx = mNettyClientHandler.getCtx(); + ctx.close(); + isReConn = false; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + + private void onCreate() { + this.initNetty(); + doConnect(); + } + + private void initNetty() { + if (mBootstrap != null) { + return; + } + mGroup = new NioEventLoopGroup(); + mBootstrap = new Bootstrap(); + String targetVersion = "1.233333A";//TODO 获取设备的版本号 + String newProtecolVersionA1 = "1.5.180719B";//设备1 新协议的版本号 + String newProtecolVersionA2 = "2.5.180719B";//设备2 新协议的版本号 + boolean useNewProtecol = false; + int i = targetVersion.compareTo(newProtecolVersionA1); + if (i >= 0) { + useNewProtecol = true; + } + final boolean finalUseNewProtecol = useNewProtecol; + mBootstrap.group(mGroup).channel(NioSocketChannel.class) + .option(ChannelOption.TCP_NODELAY, true) + .handler(new ChannelInitializer() { + + @Override + protected void initChannel(SocketChannel ch) throws Exception { + //参数1:read空闲时间, 参数2:写的空闲时间, 参数3:读和写的空闲时间 + ch.pipeline().addLast(new IdleStateHandler(0, 30, 0)); + // ch.pipeline().addLast(new CommandDecoder()); + mNettyClientHandler = new NettyClientHandler(); + + //新的处理方式 + /*if(finalUseNewProtecol){ + ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE,0,2,0,2)); + }*/ + ch.pipeline().addLast(mNettyClientHandler); + + } + }); + + } + + protected void doConnect() { + + if (channel != null && channel.isActive()) { + return; + } + ChannelFuture future = mBootstrap.connect(host, port); + + future.addListener(new ChannelFutureListener() { + public void operationComplete(ChannelFuture futureListener) throws Exception { + if (futureListener.isSuccess()) { + times++; + channel = futureListener.channel(); + Log.i(TAG, "Connect to server successfully!"); + EventBus.getDefault().post( + new LocalControlEvent("1")); + } else { + /*Log.i(TAG, "Failed to connect to server, try connect after 5s"); + futureListener.channel().eventLoop().schedule(new Runnable() { + @Override + public void run() { + if (times < 5) { + doConnect(); + } else { + times = 0; + } + } + }, 5, TimeUnit.SECONDS);*/ + } + } + }); + /*try { + future.await(); + } catch (InterruptedException e) { + mGroup.shutdownGracefully(); + }*/ + } + + private class NettyClientHandler extends ChannelInboundHandlerAdapter { + private ChannelHandlerContext mCtx; + private long last_send_time = 0; + + public ChannelHandlerContext getCtx() { + return mCtx; + } + + @Override + public void channelActive(ChannelHandlerContext ctx) { + mCtx = ctx; + //通道激活后,发送一条包含蓝牙设备address的任意命令给服务器 + //表示设备上线0 + try { + super.channelActive(ctx); + // channelGroup.add(mCtx.channel()); + // CenterService.isNettyInit = true; + // sendMsgNotifyServerDevOnLine(ctx); + isLocalControl = true; + Log.i(TAG, "Netty通道已经激活成功" + mCtx.channel().remoteAddress()); + } catch (Exception arg_e) { + Log.i(TAG, "激活netty连接失败"); + isLocalControl = false; + } + } + + /** + * 链接关闭的方法 + * + * @param ctx + * @throws Exception + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + ctx.close(); + EventBus.getDefault().post( + new LocalControlEvent("0")); + isLocalControl = false; + Log.i(TAG, "链接关闭的方法"); + if (isReConn) { + doConnect(); + } + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + // final byte[] bytes = (byte[]) msg; + // Log.i(TAG, "netty接受到的数据:" + BytesUtil.bytesToHexString(bytes)); + /* long diff = System.currentTimeMillis() - last_send_time; + if (diff < 20) SystemClock.sleep(diff);*/ + /*if (mReadDataListener != null) { + mReadDataListener.read(bytes); + }*/ + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + // 在read空闲时候或者是write时候或者是read和write空闲的手就会调用这个方法 + if (evt instanceof IdleStateEvent) { + IdleStateEvent e = (IdleStateEvent) evt; + switch (e.state()) { + case WRITER_IDLE: + /*ByteBuf buf = ctx.alloc().buffer(0); + buf.writeBytes(new byte[]{(byte) 0xFF}); + ctx.writeAndFlush(buf);*/ + break; + case READER_IDLE: + case ALL_IDLE: + default: + break; + } + } + + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + // Log.i(TAG, "Netty异常退出catch到" + cause.toString()); + // ctx.close(); + // doConnect(); + // cause.printStackTrace(); + // isLocalControl = false; + EventBus.getDefault().post( + new LocalControlEvent("1")); + Channel incoming = ctx.channel(); + if (!incoming.isActive()) + System.out.println("SimpleClient:" + incoming.remoteAddress() + + "异常"); + + cause.printStackTrace(); + ctx.close(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/NettyManagerSolid.java b/app/src/main/java/com/yonsz/z1/tcpudp/NettyManagerSolid.java new file mode 100644 index 0000000..10e5149 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/NettyManagerSolid.java @@ -0,0 +1,235 @@ +package com.yonsz.z1.tcpudp; + +import android.util.Log; + +import com.yonsz.z1.tcpudp.ymodem.YModem; + +import java.util.concurrent.TimeUnit; + +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.group.ChannelGroup; +import io.netty.channel.group.DefaultChannelGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.timeout.IdleStateEvent; +import io.netty.handler.timeout.IdleStateHandler; +import io.netty.util.concurrent.GlobalEventExecutor; + +import static com.yonsz.z1.utils.NettyHandlerUtilTry.RECEIVE_FROM_SEVICE; + +public class NettyManagerSolid { + public static final ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); + protected static String TAG = "NettyManagerSolid"; + private static NettyManagerSolid nettyManager; + private static NettyClientHandler mNettyClientHandler; + private static Channel channel; + private static String host; + private static int port = 8899; + private static YModem mYModem; + private NioEventLoopGroup mGroup; + private Bootstrap mBootstrap; + private INettyReadDataListener mReadDataListener; + private int i = 0; + + public static NettyManagerSolid getInstance(String deviceIp, YModem ymodem) { + host = deviceIp; + mYModem = ymodem; + if (null == nettyManager) { + synchronized (NettyManagerSolid.class) { + if (nettyManager == null) { + nettyManager = new NettyManagerSolid(); + nettyManager.onCreate(); + } + } + } + return nettyManager; + } + + /** + * 发送消息给设备 + * + * @param + */ + /*public static void sendBleMsg2Server(byte[] bytes) { + Log.i("nettyUtil", "NettyManager sendBleMsg2Server()" + BytesUtil.bytesToHexString(bytes)); + if (mNettyClientHandler == null) + return; + try { + ChannelHandlerContext ctx = mNettyClientHandler.getCtx(); + ByteBuf buf = ctx.alloc().buffer(bytes.length); + buf.writeBytes(bytes); + ctx.writeAndFlush(buf); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void sendBleMsg2Server(String order) { + Log.i("nettyUtil", "NettyManager sendBleMsg2Server()" + order); + if (mNettyClientHandler == null) + return; + try { + ChannelHandlerContext ctx = mNettyClientHandler.getCtx(); + byte[] bytes = BytesUtil.hexStringToBytes(order); + ByteBuf buf = ctx.alloc().buffer(bytes.length); + buf.writeBytes(bytes); + ctx.writeAndFlush(buf); + } catch (Exception e) { + e.printStackTrace(); + } + }*/ + public void setReadDataListener(INettyReadDataListener readDataListener) { + mReadDataListener = readDataListener; + } + + private void onCreate() { + + mGroup = new NioEventLoopGroup(); + mBootstrap = new Bootstrap(); + mBootstrap.group(mGroup).channel(NioSocketChannel.class) + .option(ChannelOption.TCP_NODELAY, true) + .handler(new ChannelInitializer() { + + @Override + protected void initChannel(SocketChannel ch) throws Exception { + //参数1:read空闲时间, 参数2:写的空闲时间, 参数3:读和写的空闲时间 + ch.pipeline().addLast(new IdleStateHandler(0, 30, 0)); + // ch.pipeline().addLast(new CommandDecoder()); + mNettyClientHandler = new NettyClientHandler(); + ch.pipeline().addLast(mNettyClientHandler); + + } + }); + doConnect(); + } + + protected void doConnect() { + /*if (channel != null && channel.isActive()) { + return; + }*/ + ChannelFuture future = mBootstrap.connect(host, port); + + future.addListener(new ChannelFutureListener() { + public void operationComplete(ChannelFuture futureListener) throws Exception { + if (futureListener.isSuccess()) { + channel = futureListener.channel(); + Log.i(TAG, "Connect to server successfully!"); + } else { + Log.i(TAG, "Failed to connect to server, try connect after 5s"); + futureListener.channel().eventLoop().schedule(new Runnable() { + @Override + public void run() { + doConnect(); + } + }, 5, TimeUnit.SECONDS); + } + } + }); + /*try { + future.await(); + } catch (InterruptedException e) { + mGroup.shutdownGracefully(); + }*/ + } + + private class NettyClientHandler extends ChannelInboundHandlerAdapter { + private ChannelHandlerContext mCtx; + private long last_send_time = 0; + + public ChannelHandlerContext getCtx() { + return mCtx; + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + // 在read空闲时候或者是write时候或者是read和write空闲的手就会调用这个方法 + if (evt instanceof IdleStateEvent) { + IdleStateEvent e = (IdleStateEvent) evt; + switch (e.state()) { + case WRITER_IDLE: + /*ByteBuf buf = ctx.alloc().buffer(0); + buf.writeBytes(new byte[]{(byte) 0xFF}); + ctx.writeAndFlush(buf);*/ + break; + case READER_IDLE: + case ALL_IDLE: + default: + break; + } + } + + } + + @Override + public void channelActive(ChannelHandlerContext ctx) { + mCtx = ctx; + //通道激活后,发送一条包含蓝牙设备address的任意命令给服务器 + //表示设备上线0 + try { + super.channelActive(ctx); + // channelGroup.add(mCtx.channel()); + // CenterService.isNettyInit = true; + // sendMsgNotifyServerDevOnLine(ctx); + Log.i(TAG, "Netty通道已经激活成功" + mCtx.channel().remoteAddress()); + while (i < 30) { + i++; + Thread.sleep(100); + // sendBleMsg2Server("64"); + } + } catch (Exception arg_e) { + Log.i(TAG, "激活netty连接失败"); + } + } + + /** + * 链接关闭的方法 + * + * @param ctx + * @throws Exception + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + ctx.close(); + Log.i(TAG, "链接关闭的方法"); + doConnect(); + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + ByteBuf byteBuf = (ByteBuf) msg; + int len = byteBuf.readableBytes(); + byte[] bytes = new byte[len]; + byteBuf.readBytes(bytes); + String replace = new String(bytes, "GBK"); + RECEIVE_FROM_SEVICE = replace.replace("}" + "{", ","); + // System.err.println(new Date().toLocaleString() + "\t" + BytesUtil.bytesToHexString(bytes) + "---" + RECEIVE_FROM_SEVICE); + Log.i(TAG, "NettyHandlerUtil channelRead()" + RECEIVE_FROM_SEVICE); + mYModem.onReceiveData(bytes); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + Log.i(TAG, "Netty异常退出catch到"); + ctx.close(); + // doConnect(); + // cause.printStackTrace(); + } + } + + + /*public void sendMsgNotifyServerDevOnLine(String macAddress) { + byte[] bytes = BytesUtil.method_String2Byte(new StringBuffer().append("0F02FF").append(macAddress).append("6400000000").toString()); + LogUtils.i(TAG, "第一次发出去的数据: " + new StringBuffer().append("0F02FF").append(macAddress).append("6400000000").toString()); + sendBleMsg2Server(bytes); + }*/ +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/android/AccessPoint.java b/app/src/main/java/com/yonsz/z1/tcpudp/android/AccessPoint.java new file mode 100644 index 0000000..44ce9c5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/android/AccessPoint.java @@ -0,0 +1,380 @@ +package com.yonsz.z1.tcpudp.android; + +import android.content.Context; +import android.net.NetworkInfo.DetailedState; +import android.net.wifi.ScanResult; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiConfiguration.KeyMgmt; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; + +import com.yonsz.z1.R; + +import java.util.List; + +public class AccessPoint implements Comparable { + + public static final int[] STATE_SECURED = {R.attr.state_encrypted}; + public static final int[] STATE_NONE = {}; + + public static final int SECURITY_NONE = 0; + public static final int SECURITY_WEP = 1; + public static final int SECURITY_PSK = 2; + public static final int SECURITY_EAP = 3; + + private final String ssid; + private final int security; + private final int networkId; + + private Context mContext; + private WifiConfiguration mConfig; + private ScanResult mScanResult; + private WifiInfo mInfo; + private DetailedState mState; + private int mRssi; + private String mSummary; + private String mCapabilites; + private String mBSSID; + + public static String getSecurity(int security) { + + String name = null; + switch (security) { + case SECURITY_NONE: + name = "open,none"; + break; + case SECURITY_WEP: + name = "open,wep"; + break; + case SECURITY_PSK: + name = "OPEN/WEP"; + break; + case SECURITY_EAP: + name = "OPEN/WEP"; + break; + + default: + break; + } + + return name; + } + + public static int getSecurity(WifiConfiguration config) { + + if (config.allowedKeyManagement.get(KeyMgmt.WPA_PSK)) { + return SECURITY_PSK; + } + + if (config.allowedKeyManagement.get(KeyMgmt.WPA_EAP) || + config.allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { + return SECURITY_EAP; + } + + return (config.wepKeys[0] != null) ? SECURITY_WEP : SECURITY_NONE; + } + + private static int getSecurity(ScanResult result) { + if (result.capabilities.contains("WEP")) { + return SECURITY_WEP; + } else if (result.capabilities.contains("PSK")) { + return SECURITY_PSK; + } else if (result.capabilities.contains("EAP")) { + return SECURITY_EAP; + } + return SECURITY_NONE; + } + + /** + * @return the ssid + */ + public String getSsid() { + return ssid; + } + + /** + * @return the networkId + */ + public int getNetworkId() { + return networkId; + } + + /** + * @return the security + */ + public int getSecurity() { + return security; + } + + /** + * @return the mRssi + */ + public int getRssi() { + return mRssi; + } + + public AccessPoint(Context context, WifiConfiguration config) { + mContext = context; + ssid = (config.SSID == null ? "" : removeDoubleQuotes(config.SSID)); + security = getSecurity(config); + networkId = config.networkId; + mConfig = config; + mRssi = Integer.MAX_VALUE; + } + + public AccessPoint(Context context, ScanResult result) { + mContext = context; + ssid = result.SSID; + security = getSecurity(result); + networkId = -1; + mRssi = result.level; + mScanResult = result; + mCapabilites = result.capabilities; + mBSSID = result.BSSID; + } + + @Override + public int compareTo(AccessPoint other) { + + // Active one goes first. + if (mInfo != other.mInfo) { + return (mInfo != null) ? -1 : 1; + } + // Reachable one goes before unreachable one. + if ((mRssi ^ other.mRssi) < 0) { + return (mRssi != Integer.MAX_VALUE) ? -1 : 1; + } + // Configured one goes before unconfigured one. + if ((networkId ^ other.networkId) < 0) { + return (networkId != -1) ? -1 : 1; + } + // Sort by signal strength. + int difference = WifiManager.compareSignalLevel(other.mRssi, mRssi); + if (difference != 0) { + return difference; + } + // Sort by ssid. + return ssid.compareToIgnoreCase(other.ssid); + } + + public boolean update(ScanResult result) { + //only has the same ssid and the same security + if (ssid.equals(result.SSID) && security == getSecurity(result)) { + if (WifiManager.compareSignalLevel(result.level, mRssi) > 0) { + mRssi = result.level; + } + return true; + } + return false; + } + + public void update(WifiInfo info, DetailedState state) { + if (info != null && networkId != -1 && networkId == info.getNetworkId()) { + mRssi = info.getRssi(); + mInfo = info; + mState = state; + refreshSummary(); + } else if (mInfo != null) { + mInfo = null; + mState = null; + refreshSummary(); + } + } + // + // public void update(AccessPoint accessPoint) { + // if (accessPoint != null) { + // if (accessPoint.mConfig != null) { + // + // mContext = mContext; + // ssid = (accessPoint.mConfig.SSID == null ? "" : removeDoubleQuotes(accessPoint.mConfig.SSID)); + // security = getSecurity(accessPoint.mConfig); + // networkId = accessPoint.mConfig.networkId; + // mConfig = accessPoint.mConfig; + // mRssi = Integer.MAX_VALUE; + // }else if (accessPoint.mScanResult != null) { + // + // mContext = mContext; + // ssid = accessPoint.mScanResult.SSID; + // security = getSecurity(accessPoint.mScanResult); + // networkId = -1; + // mRssi = accessPoint.mScanResult.level; + // mScanResult = accessPoint.mScanResult; + // mCapabilites = accessPoint.mScanResult.capabilities; + // mBSSID = accessPoint.mScanResult.BSSID; + // } + // } + // } + + /** + * The level is in 0~3 + * + * @return if -1 error + */ + int getLevel() { + if (mRssi == Integer.MAX_VALUE) { + return -1; + } + return WifiManager.calculateSignalLevel(mRssi, 4); + } + + public WifiConfiguration getConfig() { + return mConfig; + } + + /** + * @return the mScanResult + */ + public ScanResult getScanResult() { + return mScanResult; + } + + WifiInfo getInfo() { + return mInfo; + } + + DetailedState getState() { + return mState; + } + + /** + * @return the mCapabilite + */ + public String getCapabilite() { + return mCapabilites; + } + + /** + * @return the mBSSID + */ + public String getBSSID() { + return mBSSID; + } + + /** + * 去掉两头的双引号 + * + * @param string + * @return + */ + public static String removeDoubleQuotes(String string) { + if (string == null) { + return null; + } + int length = string.length(); + if ((length > 1) && (string.charAt(0) == '"') + && (string.charAt(length - 1) == '"')) { + return string.substring(1, length - 1); + } + return string; + } + + /** + * 给两头加上双引号 + * + * @param string + * @return + */ + public static String convertToQuotedString(String string) { + return "\"" + string + "\""; + } + + private void refreshSummary() { + + if (mState != null) { + setSummary(Summary.get(mContext, mState)); + } else { + String status = null; + if (mRssi == Integer.MAX_VALUE) { + status = mContext.getString(R.string.wifi_not_in_range); + } else if (mConfig != null) { + status = mContext.getString((mConfig.status == WifiConfiguration.Status.DISABLED) ? + R.string.wifi_disabled : R.string.wifi_remembered); + } + + if (security == SECURITY_NONE) { + setSummary(status); + } else { + String format = mContext.getString((status == null) ? + R.string.wifi_secured : R.string.wifi_secured_with_status); + String[] type = mContext.getResources().getStringArray(R.array.wifi_security); + setSummary(String.format(format, type[security], status)); + } + } + } + + private void setSummary(String text) { + this.mSummary = text; + } + + /** + * It will refresh the sumary and return it + * + * @return the summary + * @see #refreshSummary() + */ + public String getSummary() { + refreshSummary(); + return mSummary; + } + + @Override + public String toString() { + return "AccessPoint [ssid=" + ssid + ", security=" + security + + ", networkId=" + networkId + ", mRssi=" + mRssi + + ", mSummary=" + mSummary + "]"; + } + + public boolean scanedConnectInfoEquals(AccessPoint accessPoint) { + + try { + if (accessPoint != null && accessPoint.getScanResult() != null && mScanResult != null) { + if (accessPoint.ssid.trim().equals(ssid.trim()) && accessPoint.mBSSID.trim().equals(mBSSID.trim()) && + accessPoint.mCapabilites.trim().equals(mCapabilites.trim())) { + return true; + } + } + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + return false; + } + + public int indexInList(List accessPoints) { + + if (accessPoints != null) { + for (int i = 0; i < accessPoints.size(); i++) { + if (this.scanedConnectInfoEquals(accessPoints.get(i))) { + return i; + } + } + } + + return -1; + } + + public synchronized static final boolean accessPointsEquals(List one, List other) { + + if (one != null && other != null && one.size() == other.size()) { + for (AccessPoint accessPoint : one) { + + int count = 0; + for (AccessPoint accessPoint2 : other) { + if (accessPoint.scanedConnectInfoEquals(accessPoint2)) { + break; + } + count++; + } + + if (count == other.size()) { + return false; + } + } + + return true; + } + + return false; + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/android/Repeater.java b/app/src/main/java/com/yonsz/z1/tcpudp/android/Repeater.java new file mode 100644 index 0000000..c4825a4 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/android/Repeater.java @@ -0,0 +1,40 @@ +package com.yonsz.z1.tcpudp.android; + +import android.os.Handler; +import android.os.Message; + +public abstract class Repeater extends Handler { + + private long delay; + + public Repeater(long delay) { + super(); + this.delay = delay; + } + + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + repeateAction(); + sendEmptyMessageDelayed(0, delay); + } + + public void resumeWithDelay() { + if (!hasMessages(0)) { + sendEmptyMessageDelayed(0, delay); + } + } + + public void resume() { + if (!hasMessages(0)) { + sendEmptyMessage(0); + } + } + + public void pause() { + removeMessages(0); + } + + public abstract void repeateAction(); +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/android/Scanner.java b/app/src/main/java/com/yonsz/z1/tcpudp/android/Scanner.java new file mode 100644 index 0000000..f60b084 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/android/Scanner.java @@ -0,0 +1,51 @@ +package com.yonsz.z1.tcpudp.android; + +import android.content.Context; +import android.net.wifi.WifiManager; +import android.os.Handler; +import android.os.Message; +import android.widget.Toast; + +import com.yonsz.z1.R; + +/** + * A scanner to scan the wifi access point + * + * @author ZhangGuoYin + */ +public class Scanner extends Handler { + + private Context context; + private WifiManager wifiManager; + private int retry = 0; + + public Scanner(Context context) { + this.context = context; + wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + } + + public void resume() { + if (!hasMessages(0)) { + sendEmptyMessage(0); + } + } + + public void pause() { + retry = 0; + removeMessages(0); + } + + @Override + public void handleMessage(Message message) { + + if (wifiManager.startScan()) { + retry = 0; + } else if (++retry >= 3) { + retry = 0; + Toast.makeText(context, R.string.wifi_fail_to_scan, + Toast.LENGTH_LONG).show(); + return; + } + sendEmptyMessageDelayed(0, 6000); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/android/Summary.java b/app/src/main/java/com/yonsz/z1/tcpudp/android/Summary.java new file mode 100644 index 0000000..4fafc75 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/android/Summary.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * 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.yonsz.z1.tcpudp.android; + +import android.content.Context; +import android.net.NetworkInfo.DetailedState; + +import com.yonsz.z1.R; + +class Summary { + static String get(Context context, String ssid, DetailedState state) { + String[] formats = context.getResources().getStringArray((ssid == null) + ? R.array.wifi_status : R.array.wifi_status_with_ssid); + int index = state.ordinal(); + + if (index >= formats.length || formats[index].length() == 0) { + return null; + } + return String.format(formats[index], ssid); + } + + static String get(Context context, DetailedState state) { + return get(context, null, state); + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/android/WifiAutomaticConnecter.java b/app/src/main/java/com/yonsz/z1/tcpudp/android/WifiAutomaticConnecter.java new file mode 100644 index 0000000..fcb5688 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/android/WifiAutomaticConnecter.java @@ -0,0 +1,209 @@ +package com.yonsz.z1.tcpudp.android; + +import android.content.Context; +import android.net.wifi.ScanResult; +import android.net.wifi.SupplicantState; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiConfiguration.KeyMgmt; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Handler; +import android.os.Message; +import android.util.Log; + +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.tcpudp.utils.Utils; + +import java.util.List; + +public abstract class WifiAutomaticConnecter extends Handler { + + private static final String TAG = Constants.TAG + "WifiAutomaticConnecter"; + private Context context; + private String ssid; + private WifiManager wifiManager; + private boolean useDefault; + + public WifiAutomaticConnecter(Context context, String ssid) { + super(); + this.context = context; + this.ssid = ssid; + wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + useDefault = false; + } + + /** + * It will use SSID setting in local + * + * @param context + * @see Utils#getSettingApSSID(Context) + */ + public WifiAutomaticConnecter(Context context) { + super(); + this.context = context; + wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + useDefault = true; + } + + /** + * @return the ssid + */ + String getSsid() { + return ssid; + } + + public void connectNow(String ssid) { + this.ssid = ssid; + sendEmptyMessage(0); + useDefault = false; + } + + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + + if (useDefault) { + ssid = Utils.getSettingApSSID(context); + } + + if (ssid == null || ((ssid = ssid.trim()).length() == 0)) { + return; + } + + //remove all of wifi configuration which has the same ssid + List configs = wifiManager.getConfiguredNetworks(); + //disable others network except the default ap, and set the priority low + if (configs != null) { + for (WifiConfiguration wifiConfiguration : configs) { + if (!AccessPoint.removeDoubleQuotes(wifiConfiguration.SSID).equals(ssid)) { + wifiConfiguration.priority = 0; + wifiManager.disableNetwork(wifiConfiguration.networkId); + wifiManager.updateNetwork(wifiConfiguration); + } + } + } + wifiManager.saveConfiguration(); + + WifiInfo currWifiInfo = wifiManager.getConnectionInfo(); + String currSSID = currWifiInfo.getSSID(); + // Log.d(TAG, "The current connection ssid is " + currSSID); + if (currWifiInfo != null && currWifiInfo.getNetworkId() != -1 && currSSID != null + && !AccessPoint.removeDoubleQuotes(currSSID).equals(ssid)) { + Log.d(TAG, "Disconnect AP-" + currSSID); + wifiManager.disconnect(); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + List results = wifiManager.getScanResults(); + if (results == null) { + retry(); + return; + } + + AccessPoint accessPoint = null; + for (ScanResult result : results) { + // Ignore hidden and ad-hoc networks. + if (result.SSID == null || result.SSID.length() == 0 || + result.capabilities.contains("[IBSS]")) { + continue; + } + + if (result.SSID.equals(ssid)) { + accessPoint = new AccessPoint(context, result); + break; + } + } + + if (accessPoint != null) { + + currWifiInfo = wifiManager.getConnectionInfo(); + currSSID = currWifiInfo.getSSID(); + Log.d(TAG, "The current connection ssid is " + currWifiInfo); + + if (currSSID == null && currWifiInfo.getSupplicantState().compareTo(SupplicantState.ASSOCIATING) >= 0 && + currWifiInfo.getSupplicantState().compareTo(SupplicantState.COMPLETED) <= 0) { + sendEmptyMessageDelayed(0, 2000); + return; + } + + //if the current connection ap is not the given ssid, try to connect the given ssid + if (!(currWifiInfo != null && currWifiInfo.getNetworkId() != -1 && + currSSID != null && AccessPoint.removeDoubleQuotes(currSSID).equals(ssid))) { + //remove all of wifi configuration which has the same ssid + configs = wifiManager.getConfiguredNetworks(); + if (null != configs && configs.size() != 0) { + for (WifiConfiguration wifiConfiguration : configs) { + if (AccessPoint.removeDoubleQuotes(wifiConfiguration.SSID).equals(ssid)) { + wifiManager.removeNetwork(wifiConfiguration.networkId); + } + } + } + wifiManager.saveConfiguration(); + wifiManager.disconnect(); + + if (accessPoint.getSecurity() == AccessPoint.SECURITY_NONE) { + // Shortcut for open networks. + Log.d(TAG, "try to connect open none wifi :" + ssid); + WifiConfiguration config = new WifiConfiguration(); + config.SSID = AccessPoint.convertToQuotedString(accessPoint.getSsid()); + config.allowedKeyManagement.set(KeyMgmt.NONE); + config.priority = Integer.MAX_VALUE; + int networkId = wifiManager.addNetwork(config); + wifiManager.enableNetwork(networkId, true); + wifiManager.saveConfiguration(); + wifiManager.reconnect(); + } else { + Log.d(TAG, "try to connect security wifi :" + ssid); + connectSecurity(accessPoint); + } + } + } else { + onSsidNotFind(); + } + + retry(); + } + + private void retry() { + sendEmptyMessageDelayed(0, 8000); + } + + /** + * connect the specific security wifi, it needs password + * + * @param accessPoint + */ + public abstract void connectSecurity(AccessPoint accessPoint); + + /** + * the wifi with the specific ssid is not find + * + * @see #WifiAutomaticConnecter(Context, String) + */ + public void onSsidNotFind() { + + } + + public void resume() { + if (!hasMessages(0)) { + sendEmptyMessage(0); + } + } + + public void pause() { + removeMessages(0); + } + + /** + * connect to the open none wifi, it doesn't need password + * + * @param accessPoint + * @param networkId + */ + public abstract void connectOpenNone(AccessPoint accessPoint, int networkId); +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/android/WifiEnabler.java b/app/src/main/java/com/yonsz/z1/tcpudp/android/WifiEnabler.java new file mode 100644 index 0000000..5916176 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/android/WifiEnabler.java @@ -0,0 +1,211 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * 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.yonsz.z1.tcpudp.android; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.NetworkInfo; +import android.net.wifi.SupplicantState; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.AsyncTask; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.TextView; + +import com.yonsz.z1.R; + +public class WifiEnabler implements OnCheckedChangeListener { + + private final Context mContext; + // private final ToggleButton mToggleButton; + private final CheckBox mToggleButton; + private final TextView mTextView; + private final CharSequence mOriginalSummary; + + private final WifiManager mWifiManager; + private final IntentFilter mIntentFilter; + private boolean valid = true; + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) { + handleWifiStateChanged(intent.getIntExtra( + WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN)); + } else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) { + handleStateChanged(WifiInfo.getDetailedStateOf((SupplicantState) + intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE))); + } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) { + handleStateChanged(((NetworkInfo) intent.getParcelableExtra( + WifiManager.EXTRA_NETWORK_INFO)).getDetailedState()); + } + } + }; + + public WifiEnabler(Context context, CheckBox toggleButton, TextView textView) { + mContext = context; + mToggleButton = toggleButton; + mTextView = textView; + mOriginalSummary = mTextView.getText(); + + mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION); + // The order matters! We really should not depend on this. :( + mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); + mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); + } + + public void resume() { + // Wi-Fi state is sticky, so just let the receiver update UI + mContext.registerReceiver(mReceiver, mIntentFilter); + mToggleButton.setOnCheckedChangeListener(this); + } + + public void pause() { + try { + mContext.unregisterReceiver(mReceiver); + } catch (Exception e) { + } + mToggleButton.setOnCheckedChangeListener(null); + } + + private void handleWifiStateChanged(int state) { + switch (state) { + case WifiManager.WIFI_STATE_ENABLING: + mTextView.setText(R.string.wifi_starting); + mToggleButton.setEnabled(false); + break; + case WifiManager.WIFI_STATE_ENABLED: + setToggleBtnCheckedWithNoAction(true); + mTextView.setText(null); + mToggleButton.setEnabled(true); + break; + case WifiManager.WIFI_STATE_DISABLING: + mTextView.setText(R.string.wifi_stopping); + mToggleButton.setEnabled(false); + break; + case WifiManager.WIFI_STATE_DISABLED: + setToggleBtnCheckedWithNoAction(false); + mTextView.setText(mOriginalSummary); + mToggleButton.setEnabled(true); + break; + default: + setToggleBtnCheckedWithNoAction(false); + mTextView.setText(R.string.wifi_error); + mToggleButton.setEnabled(true); + } + + valid = true; + } + + private void setToggleBtnCheckedWithNoAction(boolean checked) { + mToggleButton.setOnCheckedChangeListener(null); + mToggleButton.setChecked(checked); + mToggleButton.setOnCheckedChangeListener(this); + } + + private void handleStateChanged(NetworkInfo.DetailedState state) { + // WifiInfo is valid if and only if Wi-Fi is enabled. + // Here we use the state of the check box as an optimization. + if (state != null && mToggleButton.isChecked()) { + WifiInfo info = mWifiManager.getConnectionInfo(); + if (info != null) { + mTextView.setText(Summary.get(mContext, info.getSSID(), state)); + } + } + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, final boolean isChecked) { + /**by guoyin* + setToggleBtnCheckedWithNoAction(!isChecked); + // Log.d("123", isChecked+""); + // if (!valid) { + // return; + // } + + boolean enable = isChecked;//(Boolean) value; + + // Show toast message if Wi-Fi is not allowed in airplane mode + // if (enable && !WirelessSettings + // .isRadioAllowed(mContext, Settings.System.RADIO_WIFI)) { + // if(2==2){ + // Toast.makeText(mContext, R.string.wifi_in_airplane_mode, + // Toast.LENGTH_SHORT).show(); + // setToggleBtnCheckedWithNoAction(false); + // return; + // } + + *//** + * Disable tethering if enabling Wifi + *//* + int wifiApState = mWifiManager.getWifiApState(); + if (enable && ((wifiApState == WifiManager.WIFI_AP_STATE_ENABLING) || + (wifiApState == WifiManager.WIFI_AP_STATE_ENABLED))) { + mWifiManager.setWifiApEnabled(null, false); + } + if (mWifiManager.setWifiEnabled(enable)) { + mToggleButton.setEnabled(false); + } else { + mTextView.setText(R.string.wifi_error); + } + + valid = false; + // Don't update UI to opposite state until we're sure + //return false; +***by guoyin***/ + + new AsyncTask() { + + @Override + protected Boolean doInBackground(Void... params) { + boolean enable = isChecked; + + /** + * Disable tethering if enabling Wifi + */ + /*int wifiApState = mWifiManager.getWifiApState(); + if (enable && ((wifiApState == WifiManager.WIFI_AP_STATE_ENABLING) || + (wifiApState == WifiManager.WIFI_AP_STATE_ENABLED))) { + mWifiManager.setWifiApEnabled(null, false); + }*/ + + return mWifiManager.setWifiEnabled(enable); + } + + @Override + protected void onPreExecute() { + setToggleBtnCheckedWithNoAction(!isChecked); + } + + @Override + protected void onPostExecute(Boolean result) { + if (result != null && result) { + mToggleButton.setEnabled(false); + } else { + mTextView.setText(R.string.wifi_error); + } + + valid = false; + } + }.execute(null, null, null); + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/model/ATCommand.java b/app/src/main/java/com/yonsz/z1/tcpudp/model/ATCommand.java new file mode 100644 index 0000000..4f8960f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/model/ATCommand.java @@ -0,0 +1,604 @@ +package com.yonsz.z1.tcpudp.model; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; + +import com.yonsz.z1.tcpudp.net.UdpUnicast; +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.tcpudp.utils.Utils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; + +public class ATCommand { + + private static final String TAG = "ATCommand"; + private static final String RESPONSE = "RESPONSE"; + + private static final int CODE_ENTER_CMD_MODE_SUCCESS = 1; + private static final int CODE_ENTER_CMD_MODE_FAILURE = 2; + private static final int CODE_EXIT_CMD_MODE_SUCCESS = 3; + private static final int CODE_EXIT_CMD_MODE_FAILURE = 4; + private static final int CODE_RELOAD_SUCCESS = 5; + private static final int CODE_RELOAD_FAILURE = 6; + private static final int CODE_RESET_SUCCESS = 7; + private static final int CODE_RESET_FAILURE = 8; + private static final int CODE_CMD = 9; + private static final int CODE_SEND_CMD_FILE_SUCCESS = 10; + private static final int CODE_SEND_CMD_FILE_FAILURE = 11; + private static final int CODE_SEND_CMD_FILE_RESPONSE = 12; + + private ATCommandListener listener; + private UdpUnicast udpUnicast; + private Handler handler; + private boolean isCommonCMD; + + private String enterCMDModeResponse; + private String exitCMDModeResponse; + private String sendCMDFileResponse; + private String reloadResponse; + private String resetResponse; + private String tryEnterCMDModeResponse; + private String response; + private int timesToTry; + private int times; + private NetworkProtocol protocol; + + public ATCommand() { + super(); + + timesToTry = 2; + handler = new Handler() { + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case CODE_ENTER_CMD_MODE_SUCCESS: + onEnterCMDMode(true); + break; + case CODE_ENTER_CMD_MODE_FAILURE: + onEnterCMDMode(false); + break; + case CODE_EXIT_CMD_MODE_SUCCESS: + onExitCMDMode(true, protocol); + break; + case CODE_EXIT_CMD_MODE_FAILURE: + onExitCMDMode(false, null); + break; + case CODE_RELOAD_SUCCESS: + onReload(true); + break; + case CODE_RELOAD_FAILURE: + onReload(false); + break; + case CODE_RESET_SUCCESS: + onReset(true); + break; + case CODE_RESET_FAILURE: + onReset(false); + break; + case CODE_CMD: + onResponse(msg.getData().getString(RESPONSE)); + break; + case CODE_SEND_CMD_FILE_SUCCESS: + onSendFile(true); + break; + case CODE_SEND_CMD_FILE_FAILURE: + onSendFile(false); + break; + case CODE_SEND_CMD_FILE_RESPONSE: + onResponseOfSendFile(msg.getData().getString(RESPONSE)); + break; + default: + break; + } + } + }; + } + + public ATCommand(UdpUnicast udpUnicast) { + this(); + this.udpUnicast = udpUnicast; + } + + /** + * @param listener the listener to set + */ + public void setListener(ATCommandListener listener) { + this.listener = listener; + } + + /** + * @param udpUnicast the udpUnicast to set + */ + public void setUdpUnicast(UdpUnicast udpUnicast) { + this.udpUnicast = udpUnicast; + } + + /** + * send a common command + * + * @param cmd + */ + public void send(String cmd) { + if (!isCommonCMD) { + udpUnicast.setListener(new UdpUnicast.UdpUnicastListener() { + + @Override + public void onReceived(byte[] data, int length) { + + Log.d(TAG, "onReceived[send]:" + new String(data, 0, length)); + + Message msg = handler.obtainMessage(CODE_CMD); + Bundle bundle = new Bundle(); + bundle.putString(RESPONSE, new String(data, 0, length)); + msg.setData(bundle); + handler.sendMessage(msg); + } + }); + isCommonCMD = true; + } + udpUnicast.send(cmd); + } + + /** + * Send a commmand file to device + * + * @param file + */ + public void sendFile(final File file) { + + times++; + isCommonCMD = false; + sendCMDFileResponse = null; + + //send a test cmd to verify the module is in cmd mode + udpUnicast.setListener(new UdpUnicast.UdpUnicastListener() { + + @Override + public void onReceived(byte[] data, int length) { + response = new String(data, 0, length); + sendCMDFileResponse = response.trim(); + } + }); + if (!udpUnicast.send(Constants.CMD_TEST)) { + handler.sendEmptyMessage(CODE_SEND_CMD_FILE_FAILURE); + return; + } + + waitReceiveResponse(3500, sendCMDFileResponse); + + Log.d(TAG, "Response of No." + times + " times to test cmd mode:" + sendCMDFileResponse); + + if (sendCMDFileResponse == null) { + //if there's no response, set the module enter cmd mode + + if (times < timesToTry) { + + //try to enter cmd mode + new CMDModeTryer() { + + @Override + void onResult(boolean success) { + if (success) { + //try send again + sendFile(file); + } else { + handler.sendEmptyMessage(CODE_SEND_CMD_FILE_FAILURE); + } + } + }.toTry(true); + } else { + handler.sendEmptyMessage(CODE_SEND_CMD_FILE_FAILURE); + } + } else if (sendCMDFileResponse.equals(Constants.RESPONSE_OK)) { + //if it's in cmd mode, start a thread to send file + + new Thread(new Runnable() { + + @Override + public void run() { + + try { + + BufferedReader reader = new BufferedReader(new FileReader(file)); + boolean success = true; + String cmd = null; + while ((cmd = reader.readLine()) != null) { + + cmd = cmd.trim(); + sendCMDFileResponse = null; + Log.d(TAG, "send cmd:" + cmd); + routeResponse(">" + cmd + "\n"); + if (!udpUnicast.send(Utils.gernerateCMD(cmd))) { + Log.w(TAG, "Send cmd fail!"); + handler.sendEmptyMessage(CODE_SEND_CMD_FILE_FAILURE); + success = false; + break; + } else { + waitReceiveResponse(6000, sendCMDFileResponse); + + Log.d(TAG, "Response of cmd[" + cmd + "]:" + sendCMDFileResponse); + + if (sendCMDFileResponse != null) { + routeResponse(response); + } + + if (sendCMDFileResponse == null || !sendCMDFileResponse.startsWith(Constants.RESPONSE_OK)) { + handler.sendEmptyMessage(CODE_SEND_CMD_FILE_FAILURE); + success = false; + break; + } + } + } + + if (success) { + handler.sendEmptyMessage(CODE_SEND_CMD_FILE_SUCCESS); + } + } catch (Exception e) { + e.printStackTrace(); + handler.sendEmptyMessage(CODE_SEND_CMD_FILE_FAILURE); + } + } + }).start(); + } else { + //if the response means it error + handler.sendEmptyMessage(CODE_SEND_CMD_FILE_FAILURE); + } + + } + + /** + * enter to command mode + */ + public void enterCMDMode() { + + isCommonCMD = false; + enterCMDModeResponse = null; + + //send a test cmd to verify the module is in cmd mode + udpUnicast.setListener(new UdpUnicast.UdpUnicastListener() { + + @Override + public void onReceived(byte[] data, int length) { + enterCMDModeResponse = new String(data, 0, length).trim(); + } + }); + if (!udpUnicast.send(Constants.CMD_TEST)) { + handler.sendEmptyMessage(CODE_ENTER_CMD_MODE_FAILURE); + return; + } + + waitReceiveResponse(3500, enterCMDModeResponse); + + Log.d(TAG, "Response of test cmd mode:" + enterCMDModeResponse); + + if (enterCMDModeResponse == null) { + //if there's no response, set the module enter cmd mode + //try to enter cmd mode + new CMDModeTryer() { + + @Override + void onResult(boolean success) { + if (success) { + handler.sendEmptyMessage(CODE_ENTER_CMD_MODE_SUCCESS); + } else { + handler.sendEmptyMessage(CODE_ENTER_CMD_MODE_FAILURE); + } + } + }.toTry(true); + } else { + handler.sendEmptyMessage(CODE_ENTER_CMD_MODE_SUCCESS); + } + } + + /** + * exit from command mode + */ + public void exitCMDMode() { + + times++; + isCommonCMD = false; + exitCMDModeResponse = null; + + //send a test cmd to verify the module is in cmd mode + udpUnicast.setListener(new UdpUnicast.UdpUnicastListener() { + + @Override + public void onReceived(byte[] data, int length) { + exitCMDModeResponse = new String(data, 0, length).trim(); + } + }); + if (!udpUnicast.send(Constants.CMD_NETWORK_PROTOCOL)) { + handler.sendEmptyMessage(CODE_EXIT_CMD_MODE_FAILURE); + return; + } + + waitReceiveResponse(4000, exitCMDModeResponse); + + Log.d(TAG, "Response of get protocol info:" + exitCMDModeResponse); + + if (exitCMDModeResponse == null) { + //if there's no response, try again + if (times < timesToTry) { + + exitCMDMode(); + } else { + handler.sendEmptyMessage(CODE_EXIT_CMD_MODE_FAILURE); + } + } else if (exitCMDModeResponse.startsWith(Constants.RESPONSE_OK_OPTION)) { + /**if the response start with "+ok="**/ + + exitCMDModeResponse = exitCMDModeResponse.substring(4); + protocol = Utils.decodeProtocol(exitCMDModeResponse); + if (protocol == null) { + handler.sendEmptyMessage(CODE_EXIT_CMD_MODE_FAILURE); + return; + } + + /**try to set device into transparent transmission mode**/ + exitCMDModeResponse = null; + if (udpUnicast.send(Constants.CMD_TRANSPARENT_TRANSMISSION)) { + + waitReceiveResponse(5000, exitCMDModeResponse); + + Log.d(TAG, "Response of set transparent transmission mode:" + exitCMDModeResponse); + + if (exitCMDModeResponse == null || !exitCMDModeResponse.equals(Constants.RESPONSE_OK)) { + handler.sendEmptyMessage(CODE_EXIT_CMD_MODE_FAILURE); + } else if (exitCMDModeResponse.equals(Constants.RESPONSE_OK)) { + //set device into transparent transmission mode success + if (udpUnicast.send(Constants.CMD_EXIT_CMD_MODE)) { + handler.sendEmptyMessage(CODE_EXIT_CMD_MODE_SUCCESS); + } else { + handler.sendEmptyMessage(CODE_EXIT_CMD_MODE_FAILURE); + } + } + } else { + handler.sendEmptyMessage(CODE_EXIT_CMD_MODE_FAILURE); + } + } else { + //if the response means it error + handler.sendEmptyMessage(CODE_EXIT_CMD_MODE_FAILURE); + } + } + + /** + * reload module to reset settings + */ + public void reload() { + + times++; + isCommonCMD = false; + reloadResponse = null; + + //send a test cmd to verify the module is in cmd mode + udpUnicast.setListener(new UdpUnicast.UdpUnicastListener() { + + @Override + public void onReceived(byte[] data, int length) { + reloadResponse = new String(data, 0, length).trim(); + } + }); + if (!udpUnicast.send(Constants.CMD_TEST)) { + handler.sendEmptyMessage(CODE_RELOAD_FAILURE); + return; + } + + waitReceiveResponse(3500, reloadResponse); + + Log.d(TAG, "Response of No." + times + " times to test cmd mode:" + reloadResponse); + + if (reloadResponse == null) { + //if there's no response, set the module enter cmd mode + + if (times < timesToTry) { + + //try to enter cmd mode + new CMDModeTryer() { + + @Override + void onResult(boolean success) { + if (success) { + //try reload again + reload(); + } else { + handler.sendEmptyMessage(CODE_RELOAD_FAILURE); + } + } + }.toTry(true); + } else { + handler.sendEmptyMessage(CODE_RELOAD_FAILURE); + } + } else if (reloadResponse.equals(Constants.RESPONSE_OK)) { + //if it's in cmd mode, send reload command + + reloadResponse = null; + if (udpUnicast.send(Constants.CMD_RELOAD)) { + + waitReceiveResponse(10000, reloadResponse); + + Log.d(TAG, "Response of reload cmd:" + reloadResponse); + + if (reloadResponse == null || !reloadResponse.startsWith(Constants.RESPONSE_REBOOT_OK)) { + handler.sendEmptyMessage(CODE_RELOAD_FAILURE); + } else if (reloadResponse.startsWith(Constants.RESPONSE_REBOOT_OK)) { + handler.sendEmptyMessage(CODE_RELOAD_SUCCESS); + } + } else { + handler.sendEmptyMessage(CODE_RELOAD_FAILURE); + } + } else { + //if the response means it error + handler.sendEmptyMessage(CODE_RELOAD_FAILURE); + } + } + + /** + * restart module + */ + public synchronized void reset() { + + times++; + isCommonCMD = false; + resetResponse = null; + + udpUnicast.setListener(new UdpUnicast.UdpUnicastListener() { + + @Override + public void onReceived(byte[] data, int length) { + resetResponse = new String(data, 0, length).trim(); + } + }); + if (!udpUnicast.send(Constants.CMD_TEST)) { + handler.sendEmptyMessage(CODE_RESET_FAILURE); + return; + } + + waitReceiveResponse(3500, resetResponse); + + Log.d(TAG, "Response of No." + times + " times to test cmd mode:" + resetResponse); + + if (resetResponse == null) { + + if (times < timesToTry) { + + //try to enter cmd mode + new CMDModeTryer() { + + @Override + void onResult(boolean success) { + if (success) { + reset(); + } else { + handler.sendEmptyMessage(CODE_RESET_FAILURE); + } + } + }.toTry(true); + } else { + handler.sendEmptyMessage(CODE_RESET_FAILURE); + } + } else if (resetResponse.equals(Constants.RESPONSE_OK)) { + if (udpUnicast.send(Constants.CMD_RESET)) { + handler.sendEmptyMessage(CODE_RESET_SUCCESS); + } else { + handler.sendEmptyMessage(CODE_RESET_FAILURE); + } + } else { + handler.sendEmptyMessage(CODE_RESET_FAILURE); + } + } + + private void onEnterCMDMode(boolean success) { + if (listener != null) { + listener.onEnterCMDMode(success); + } + } + + private void onExitCMDMode(boolean success, NetworkProtocol protocol) { + if (listener != null) { + listener.onExitCMDMode(success, protocol); + } + } + + private void onReload(boolean success) { + if (listener != null) { + listener.onReload(success); + } + } + + private void onReset(boolean success) { + if (listener != null) { + listener.onReset(success); + } + } + + private void onResponse(String response) { + if (listener != null) { + listener.onResponse(response); + } + } + + private void onSendFile(boolean success) { + if (listener != null) { + listener.onSendFile(success); + } + } + + private void onResponseOfSendFile(String response) { + if (listener != null) { + listener.onResponseOfSendFile(response); + } + } + + private abstract class CMDModeTryer { + + void toTry(boolean enter) { + + tryEnterCMDModeResponse = null; + + if (enter) { + + udpUnicast.setListener(new UdpUnicast.UdpUnicastListener() { + + @Override + public void onReceived(byte[] data, int length) { + + tryEnterCMDModeResponse = new String(data, 0, length); + } + }); + if (!udpUnicast.send(Constants.CMD_SCAN_MODULES)) { + onResult(false); + return; + } + + waitReceiveResponse(5000, tryEnterCMDModeResponse); + + Log.d(TAG, "Response when to try enter:" + tryEnterCMDModeResponse); + if (tryEnterCMDModeResponse == null) { + onResult(false); + } else { + String[] array = tryEnterCMDModeResponse.split(","); + if (array != null && array.length > 0 && Utils.isIP(array[0])) { + if (udpUnicast.send(Constants.CMD_ENTER_CMD_MODE)) { + onResult(true); + } else { + onResult(false); + } + } else { + onResult(false); + } + } + } + } + + abstract void onResult(boolean success); + } + + public void resetTimes() { + times = 0; + } + + private void waitReceiveResponse(long wait, String response) { + + long start = System.currentTimeMillis(); + while (System.currentTimeMillis() - start < wait && response == null) { + try { + Thread.sleep(50); + } catch (InterruptedException e) { + } + } + } + + private void routeResponse(String response) { + + Message msg = handler.obtainMessage(CODE_SEND_CMD_FILE_RESPONSE); + Bundle bundle = new Bundle(); + bundle.putString(RESPONSE, response); + msg.setData(bundle); + handler.sendMessage(msg); + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/model/ATCommandListener.java b/app/src/main/java/com/yonsz/z1/tcpudp/model/ATCommandListener.java new file mode 100644 index 0000000..04a503f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/model/ATCommandListener.java @@ -0,0 +1,12 @@ +package com.yonsz.z1.tcpudp.model; + +public interface ATCommandListener { + + public void onEnterCMDMode(boolean success); + public void onExitCMDMode(boolean success, NetworkProtocol protocol); + public void onSendFile(boolean success); + public void onReload(boolean success); + public void onReset(boolean success); + public void onResponse(String response); + public void onResponseOfSendFile(String response); +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/model/Module.java b/app/src/main/java/com/yonsz/z1/tcpudp/model/Module.java new file mode 100644 index 0000000..fa3e43b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/model/Module.java @@ -0,0 +1,78 @@ +package com.yonsz.z1.tcpudp.model; + +import java.text.DecimalFormat; + +public class Module { + + private int id; + private String mac; + private String ip; + private String moduleID; + private DecimalFormat format = new DecimalFormat("00"); + + /** + * @return the id + */ + public int getId() { + return id; + } + /** + * @param id the id to set + */ + public void setId(int id) { + this.id = id; + } + /** + * @return the mac + */ + public String getMac() { + return mac; + } + /** + * @param mac the mac to set + */ + public void setMac(String mac) { + this.mac = mac; + } + /** + * @return the ip + */ + public String getIp() { + return ip; + } + /** + * @param ip the ip to set + */ + public void setIp(String ip) { + this.ip = ip; + } + /** + * @return the moduleID + */ + public String getModuleID() { + return moduleID; + } + /** + * @param moduleID the moduleID to set + */ + public void setModuleID(String moduleID) { + this.moduleID = moduleID; + } + + public Module(int id, String mac, String ip, String moduleID) { + super(); + this.id = id; + this.mac = mac; + this.ip = ip; + this.moduleID = moduleID; + } + + public Module() { + super(); + } + + @Override + public String toString() { + return String.format("%s. %s %s %s", format.format(id), mac, ip, moduleID == null ? "" : moduleID); + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/model/NetworkProtocol.java b/app/src/main/java/com/yonsz/z1/tcpudp/model/NetworkProtocol.java new file mode 100644 index 0000000..7c9016a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/model/NetworkProtocol.java @@ -0,0 +1,105 @@ +package com.yonsz.z1.tcpudp.model; + +import java.io.Serializable; + +public class NetworkProtocol implements Serializable { + private static final long serialVersionUID = 1L; + public static final int PROTOCAL_TCP_SERVER = 1; + public static final int PROTOCAL_TCP_CLIENT = 2; + public static final int PROTOCAL_UDP = 3; + private String protocol; + private String server; + private int port; + private String ip; + + /** + * @return the protocol + */ + public String getProtocol() { + return protocol; + } + /** + * @param protocol the protocol to set + */ + public void setProtocol(String protocol) { + this.protocol = protocol; + } + /** + * @return the port + */ + public int getPort() { + return port; + } + /** + * @param port the port to set + */ + public void setPort(int port) { + this.port = port; + } + /** + * @return the ip + */ + public String getIp() { + return ip; + } + /** + * @param ip the ip to set + */ + public void setIp(String ip) { + this.ip = ip; + } + + /** + * @return the server + */ + public String getServer() { + return server; + } + /** + * @param server the server to set + */ + public void setServer(String server) { + this.server = server; + } + public NetworkProtocol() { + super(); + } + + public NetworkProtocol(String protocol, String server, String ip, int port) { + super(); + this.protocol = protocol; + this.server = server; + this.ip = ip; + this.port = port; + } + + @Override + public String toString() { + // TODO Auto-generated method stub + return String.format("Name:%s Server:%s IP:%s Port:%d", protocol, server, ip, port); + } + + public int getType() { + + if (protocol == null) { + return 0; + } + + if (protocol.equals("TCP")) { + + if (server == null) { + return 0; + }else if (server.equals("Server")) { + return PROTOCAL_TCP_SERVER; + }else if (server.equals("Client")) { + return PROTOCAL_TCP_CLIENT; + }else { + return 0; + } + }else if (protocol.equals("UDP")) { + return PROTOCAL_UDP; + }else { + return 0; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/model/TransparentTransmission.java b/app/src/main/java/com/yonsz/z1/tcpudp/model/TransparentTransmission.java new file mode 100644 index 0000000..3a9ed30 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/model/TransparentTransmission.java @@ -0,0 +1,177 @@ +package com.yonsz.z1.tcpudp.model; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; + +import com.yonsz.z1.tcpudp.net.INetworkTransmission; +import com.yonsz.z1.tcpudp.net.TCPClient; +import com.yonsz.z1.tcpudp.net.TCPServer; +import com.yonsz.z1.tcpudp.net.UdpUnicast; + +public class TransparentTransmission { + + private static final String KEY_BUFFER = "KEY_BUFFER"; + private static final String KEY_LENGTH = "KEY_LENGTH"; + private static final String KEY_TCPCLIENT_OPEN = "KEY_TCPCLIENT_OPEN"; + private static final int MSG_DATA = 1; + private static final int MSG_TCPCLIENT = 2; + + private NetworkProtocol protocol; + private TransparentTransmissionListener listener; + private INetworkTransmission transmission; + private Handler handler; + + /** + * @return the protocol + */ + public NetworkProtocol getProtocol() { + return protocol; + } + + /** + * @param protocol the protocol to set + */ + public void setProtocol(NetworkProtocol protocol) { + this.protocol = protocol; + } + + /** + * @return the listener + */ + public TransparentTransmissionListener getListener() { + return listener; + } + + /** + * @param listener the listener to set + */ + public void setListener(TransparentTransmissionListener listener) { + this.listener = listener; + } + + public TransparentTransmission() { + super(); + handler = new Handler() { + + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + switch (msg.what) { + case MSG_DATA: + + if (listener != null) { + listener.onReceive( + msg.getData().getByteArray(KEY_BUFFER), msg.getData().getInt(KEY_LENGTH)); + } + break; + case MSG_TCPCLIENT: + + if (listener != null) { + listener.onOpen(msg.getData().getBoolean(KEY_TCPCLIENT_OPEN)); + } + break; + + default: + break; + } + } + }; + } + + public boolean init() { + int type = protocol.getType(); + if (type == 0) { + return false; + }else if (type == NetworkProtocol.PROTOCAL_TCP_SERVER) { + + transmission = new TCPClient(protocol.getIp(), protocol.getPort()); + TCPClient tcpClient = (TCPClient)transmission; + tcpClient.setListener(new TCPClient.TCPClientListener() { + + @Override + public void onReceive(byte[] buffer, int length) { + handleData(buffer, length); + } + + @Override + public void onConnect(boolean success) { + + Message message = handler.obtainMessage(MSG_TCPCLIENT); + Bundle bundle = new Bundle(); + bundle.putBoolean(KEY_TCPCLIENT_OPEN, success); + message.setData(bundle); + handler.sendMessage(message); + } + }); + + return true; + }else if (type == NetworkProtocol.PROTOCAL_TCP_CLIENT) { + + transmission = new TCPServer(protocol.getIp(), protocol.getPort()); + TCPServer tcpServer = (TCPServer)transmission; + tcpServer.setListener(new TCPServer.TCPServerListener() { + + @Override + public void onReceive(byte[] buffer, int length) { + handleData(buffer, length); + } + }); + + return true; + }else if (type == NetworkProtocol.PROTOCAL_UDP) { + + transmission = new UdpUnicast(protocol.getIp(), protocol.getPort()); + UdpUnicast udpUnicast = (UdpUnicast)transmission; + udpUnicast.setListener(new UdpUnicast.UdpUnicastListener() { + + @Override + public void onReceived(byte[] data, int length) { + handleData(data, length); + } + }); + + return true; + }else { + return false; + } + } + + public boolean open() { + + transmission.setParameters(protocol.getIp(), protocol.getPort()); + boolean success = transmission.open(); + if (transmission instanceof TCPServer || transmission instanceof UdpUnicast) { + if (listener != null) { + listener.onOpen(success); + } + }/*else if (transmission instanceof TCPClient) { + + }*/ + + return success; + } + + public void close() { + transmission.close(); + } + + public boolean send(String text) { + return transmission.send(text); + } + + /** + * Handle data received from read thread + * @param data + * @param length + */ + private void handleData(byte[] data, int length) { + Message message = handler.obtainMessage(MSG_DATA); + Bundle bundle = new Bundle(); + bundle.putByteArray(KEY_BUFFER, data); + bundle.putInt(KEY_LENGTH, length); + message.setData(bundle); + handler.sendMessage(message); + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/model/TransparentTransmissionListener.java b/app/src/main/java/com/yonsz/z1/tcpudp/model/TransparentTransmissionListener.java new file mode 100644 index 0000000..2748e30 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/model/TransparentTransmissionListener.java @@ -0,0 +1,8 @@ +package com.yonsz.z1.tcpudp.model; + +public interface TransparentTransmissionListener { + + public void onOpen(boolean success); +// public void onClose(boolean success); + public void onReceive(byte[] data, int length); +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/model/WifiStatus.java b/app/src/main/java/com/yonsz/z1/tcpudp/model/WifiStatus.java new file mode 100644 index 0000000..3d56006 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/model/WifiStatus.java @@ -0,0 +1,144 @@ +package com.yonsz.z1.tcpudp.model; + +import android.content.Context; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import com.yonsz.z1.tcpudp.utils.Utils; + +import java.util.List; + +public class WifiStatus { + + private boolean enable; + private String ssid; + private String BSSID; + private int networkId = Integer.MIN_VALUE; + private WifiManager wifiManager; + + public WifiStatus(Context context) { + wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); + } + + /** + * @return the enable + */ + public boolean isEnable() { + return enable; + } + /** + * @param enable the enable to set + */ + public void setEnable(boolean enable) { + this.enable = enable; + } + + /** + * @return the ssid + */ + public String getSsid() { + return ssid; + } + /** + * @param ssid the ssid to set + */ + public void setSsid(String ssid) { + this.ssid = ssid; + } + /** + * @return the networkId + */ + public int getNetworkId() { + return networkId; + } + /** + * @param networkId the networkId to set + */ + public void setNetworkId(int networkId) { + this.networkId = networkId; + } + + /** + * @return the bSSID + */ + public String getBSSID() { + return BSSID; + } + + /** + * @param bSSID the bSSID to set + */ + public void setBSSID(String bSSID) { + BSSID = bSSID; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "WifiStatus [enable=" + enable + ", ssid=" + ssid + ", BSSID=" + + BSSID + ", networkId=" + networkId + ", wifiManager=" + + wifiManager + "]"; + } + + public void load() { + + enable = wifiManager.isWifiEnabled(); + WifiInfo wifiInfo = wifiManager.getConnectionInfo(); + if (wifiInfo != null) { + BSSID = wifiInfo.getBSSID(); + ssid = wifiInfo.getSSID()==null ? null : wifiInfo.getSSID().trim(); + networkId = wifiInfo.getNetworkId(); + } + } + + public void reload() { + + if (!enable) { + wifiManager.setWifiEnabled(false); + }else { + + if (!wifiManager.isWifiEnabled()) { + wifiManager.setWifiEnabled(true); + } + + WifiInfo current = wifiManager.getConnectionInfo(); + if (current!=null && current.getBSSID()!=null && current.getBSSID().equals(BSSID)) { + return; + } + wifiManager.disconnect(); + + List configurations = wifiManager.getConfiguredNetworks(); + if (configurations != null) { + + WifiConfiguration bestConfiguration = null; + WifiConfiguration betterConfiguration = null; + WifiConfiguration goodConfiguration = null; + boolean networkIdFind = false; + boolean ssidFind = false; + for (WifiConfiguration wifiConfiguration : configurations) { + + networkIdFind = wifiConfiguration.networkId==networkId; + ssidFind = Utils.removeDoubleQuotes(wifiConfiguration.SSID).equals(ssid); + if (networkIdFind && ssidFind) { + bestConfiguration = wifiConfiguration; + break; + }else if (networkIdFind) { + betterConfiguration = wifiConfiguration; + }else if (ssidFind) { + goodConfiguration = wifiConfiguration; + } + } + + if (bestConfiguration != null) { + wifiManager.enableNetwork(bestConfiguration.networkId, true); + }else if (betterConfiguration != null) { + wifiManager.enableNetwork(betterConfiguration.networkId, true); + }else if (goodConfiguration != null) { + wifiManager.enableNetwork(goodConfiguration.networkId, true); + } + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/net/APUdpBroadcast.java b/app/src/main/java/com/yonsz/z1/tcpudp/net/APUdpBroadcast.java new file mode 100644 index 0000000..5e35f0e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/net/APUdpBroadcast.java @@ -0,0 +1,179 @@ +package com.yonsz.z1.tcpudp.net; + +import android.util.Log; + +import com.yonsz.z1.tcpudp.utils.Constants; +import com.yonsz.z1.tcpudp.utils.Utils; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.SocketException; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; + +public abstract class APUdpBroadcast { + + private static final String TAG = "APUdpBroadcast"; + private static final int BUFFER_SIZE = 100; + + private int port = Constants.UDP_PORT; + private DatagramSocket socket; + private DatagramPacket packetToSend; + private InetAddress inetAddress; + private ReceiveData receiveData; + + public void setPort(int port) { + this.port = port; + } + + public APUdpBroadcast() { + super(); + try { + inetAddress = InetAddress.getByName("255.255.255.255"); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + Utils.forceStrictMode(); + } + + /** + * Open udp socket + */ + public void open() { + + try { + socket = new DatagramSocket(port); + socket.setBroadcast(true); + } catch (SocketException e) { + // TODO Auto-generated catch block + Log.i("UdpBroadcast", "UdpBroadcast open()" + e.getMessage()); + e.printStackTrace(); + } + } + + /** + * Close udp socket + */ + public void close() { + stopReceive(); + if (socket != null) { + socket.close(); + } + } + + /** + * broadcast message + * + * @param text the message to broadcast + */ + public void send(String text) { + if (socket == null || text == null) { + return; + } + + text = text.trim(); + packetToSend = new DatagramPacket( + text.getBytes(), text.getBytes().length, inetAddress, port); + + try { + socket.setSoTimeout(200); + stopReceive(); + + new Thread() { + @Override + public void run() { + + //remove the data in read chanel + DatagramPacket packet = new DatagramPacket(new byte[BUFFER_SIZE], BUFFER_SIZE); + long time = System.currentTimeMillis(); + while (System.currentTimeMillis() - time < 300) { + try { + socket.receive(packet); + } catch (Exception e) { + break; + } + } + + //send data + try { + socket.setSoTimeout(10500); + socket.send(packetToSend); + } catch (IOException e) { + e.printStackTrace(); + } + + //receive response + receiveData = new ReceiveData(); + receiveData.start(); + } + }.start(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Stop to receive + */ + public void stopReceive() { + + if (receiveData != null && !receiveData.isStoped()) { + receiveData.stop(); + } + } + + public abstract void onReceived(List packets); + + private class ReceiveData implements Runnable { + + private boolean stop; + private Thread thread; + private List packets; + + private ReceiveData() { + thread = new Thread(this); + packets = new ArrayList(); + } + + @Override + public void run() { + + stop = false; + + while (!stop) { + try { + DatagramPacket packetToReceive = new DatagramPacket(new byte[BUFFER_SIZE], BUFFER_SIZE); + socket.receive(packetToReceive); + packets.add(packetToReceive); + } catch (SocketTimeoutException e) { + Log.w(TAG, "Receive packet timeout!"); + break; + } catch (Exception e) { + e.printStackTrace(); + break; + } + } + + if (!stop) { + onReceived(packets); + } + stop = true; + } + + void start() { + thread.start(); + } + + void stop() { + stop = true; + } + + boolean isStoped() { + return stop; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/net/INetworkTransmission.java b/app/src/main/java/com/yonsz/z1/tcpudp/net/INetworkTransmission.java new file mode 100644 index 0000000..dabd1e3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/net/INetworkTransmission.java @@ -0,0 +1,10 @@ +package com.yonsz.z1.tcpudp.net; + +public interface INetworkTransmission { + + public void setParameters(String ip, int port); + public boolean open(); + public void close(); + public boolean send(String text); + public void onReceive(byte[] buffer, int length); +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/net/TCPClient.java b/app/src/main/java/com/yonsz/z1/tcpudp/net/TCPClient.java new file mode 100644 index 0000000..e5cca31 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/net/TCPClient.java @@ -0,0 +1,132 @@ +package com.yonsz.z1.tcpudp.net; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Socket; + +public class TCPClient implements INetworkTransmission{ + + private String ip; + private int port; + private Socket socket; + private BufferedInputStream inputStream; + private BufferedOutputStream outputStream; + private TCPClientListener listener; + private byte[] buffer; + + public TCPClient(String ip, int port) { + super(); + this.ip = ip; + this.port = port; + buffer = new byte[1024]; + } + + @Override + public void setParameters(String ip, int port) { + // TODO Auto-generated method stub + this.ip = ip; + this.port = port; + } + + /** + * @return the listener + */ + public TCPClientListener getListener() { + return listener; + } + + /** + * @param listener the listener to set + */ + public void setListener(TCPClientListener listener) { + this.listener = listener; + } + + @Override + public synchronized boolean open() { + + socket = new Socket(); + new Thread(new Runnable() { + + @Override + public void run() { + try { + socket.connect(new InetSocketAddress(ip, port), 5000); + + inputStream = new BufferedInputStream(socket.getInputStream()); + outputStream = new BufferedOutputStream(socket.getOutputStream()); + if (listener != null) { + listener.onConnect(true); + } + + int length; + while (true) { + + try { + + length = inputStream.read(buffer); + if (length > 0) { + onReceive(buffer, length); + } + } catch (Exception e) { + break; + } + + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + listener.onConnect(false); + } + } + }).start(); + return true; + } + + @Override + public void close() { + if (socket != null) { + try { + socket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @Override + public synchronized boolean send(String text) { + + if (outputStream != null) { + try { + outputStream.write(text.getBytes(), 0, text.getBytes().length); + outputStream.flush(); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + return false; + } + + @Override + public void onReceive(byte[] buffer, int length) { + if (listener != null) { + listener.onReceive(buffer, length); + } + } + + public interface TCPClientListener { + public void onConnect(boolean success); + public void onReceive(byte[] buffer, int length); + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/net/TCPServer.java b/app/src/main/java/com/yonsz/z1/tcpudp/net/TCPServer.java new file mode 100644 index 0000000..c46e863 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/net/TCPServer.java @@ -0,0 +1,149 @@ +package com.yonsz.z1.tcpudp.net; + +import android.util.Log; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.UnknownHostException; + +public class TCPServer implements INetworkTransmission{ + + private String ip; + private int port; + private boolean stop; + private ServerSocket server; + private Socket socket; + private BufferedInputStream inputStream; + private BufferedOutputStream outputStream; + private TCPServerListener listener; + private byte[] buffer; + + public TCPServer(String ip, int port) { + super(); + this.ip = ip; + this.port = port; + buffer = new byte[1024]; + } + + @Override + public void setParameters(String ip, int port) { + // TODO Auto-generated method stub + this.ip = ip; + this.port = port; + } + + /** + * @return the listener + */ + public TCPServerListener getListener() { + return listener; + } + + /** + * @param listener the listener to set + */ + public void setListener(TCPServerListener listener) { + this.listener = listener; + } + + @Override + public synchronized boolean open() { + + try { + server = new ServerSocket(port, 1, InetAddress.getByName(ip)); + server.setSoTimeout(5000); + new Thread(new Runnable() { + + @Override + public void run() { + + while (!stop) { + try { + socket = server.accept(); + inputStream = new BufferedInputStream(socket.getInputStream()); + outputStream = new BufferedOutputStream(socket.getOutputStream()); + + int length; + while (true) { + length = inputStream.read(buffer); + if (length > 0) { + onReceive(buffer, length); + } + + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }).start(); + return true; + } catch (UnknownHostException e) { + e.printStackTrace(); + return false; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + @Override + public void close() { + stop = true; + if (socket != null) { + try { + socket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (server != null) { + try { + server.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @Override + public synchronized boolean send(String text) { + + Log.d("outputStream:", outputStream.toString()); + + if (outputStream != null) { + try { + Log.d("TCP Server Send:", text); + outputStream.write(text.getBytes(), 0, text.getBytes().length); + outputStream.flush(); + Log.d("TCP Server Send2:", text); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + return false; + } + + @Override + public void onReceive(byte[] buffer, int length) { + if (listener != null) { + listener.onReceive(buffer, length); + } + } + + public interface TCPServerListener { + public void onReceive(byte[] buffer, int length); + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/net/Udp1Broadcast.java b/app/src/main/java/com/yonsz/z1/tcpudp/net/Udp1Broadcast.java new file mode 100644 index 0000000..3178f62 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/net/Udp1Broadcast.java @@ -0,0 +1,177 @@ +package com.yonsz.z1.tcpudp.net; + +import android.util.Log; + +import com.yonsz.z1.tcpudp.utils.Constants; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.SocketException; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; + +public abstract class Udp1Broadcast { + + private static final String TAG = "UdpBroadcast1"; + private static final int BUFFER_SIZE = 1000; + + // private int port = Constants.UDP_PORT; + private int port = Constants.UDP_PORT_H3E; + private DatagramSocket socket; + private DatagramPacket packetToSend; + private InetAddress inetAddress; + private ReceiveData receiveData; + + public Udp1Broadcast(int port) { + super(); + try { + this.port = port; + inetAddress = InetAddress.getByName("255.255.255.255"); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + } + + /** + * Open udp socket + */ + public void open() { + try { + Log.i("UdpBroadcast1", "UdpBroadcast open()"); + socket = new DatagramSocket(port); + socket.setBroadcast(true); + } catch (SocketException e) { + // TODO Auto-generated catch block + Log.i("UdpBroadcast1", "UdpBroadcast open()" + e.getMessage()); + e.printStackTrace(); + } + } + + /** + * Close udp socket + */ + public void close() { + stopReceive(); + if (socket != null) { + socket.close(); + } + } + + /** + * broadcast message + * + * @param text the message to broadcast + */ + public void send(String text) { + if (socket == null || text == null) { + return; + } + + text = text.trim(); + packetToSend = new DatagramPacket( + text.getBytes(), text.getBytes().length, inetAddress, port); + + + try { + new Thread() { + @Override + public void run() { + try { + socket.setSoTimeout(200); + } catch (SocketException e) { + e.printStackTrace(); + } + stopReceive(); + //remove the data in read chanel + DatagramPacket packet = new DatagramPacket(new byte[BUFFER_SIZE], BUFFER_SIZE); + while (true) { + try { + socket.receive(packet); + } catch (Exception e) { + break; + } + } + + //send data + try { + socket.setSoTimeout(5000); + socket.send(packetToSend); + } catch (IOException e) { + e.printStackTrace(); + } + + //receive response + receiveData = new ReceiveData(); + receiveData.start(); + } + }.start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Stop to receive + */ + public void stopReceive() { + + if (receiveData != null && !receiveData.isStoped()) { + receiveData.stop(); + } + } + + public abstract void onReceived(List packets); + + private class ReceiveData implements Runnable { + + private boolean stop; + private Thread thread; + private List packets; + + private ReceiveData() { + thread = new Thread(this); + packets = new ArrayList(); + } + + @Override + public void run() { + + long time = System.currentTimeMillis(); + + while (System.currentTimeMillis() - time < 5000 && !stop) { + Log.i(TAG, "try to receive"); + try { + DatagramPacket packetToReceive = new DatagramPacket(new byte[BUFFER_SIZE], BUFFER_SIZE); + socket.receive(packetToReceive); + packets.add(packetToReceive); + } catch (SocketTimeoutException e) { + Log.i(TAG, "Receive packet timeout!"); + break; + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + if (!stop) { + stop = true; + onReceived(packets); + } + } + + void start() { + thread.start(); + } + + void stop() { + stop = true; + } + + boolean isStoped() { + return stop; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/net/Udp2Broadcast.java b/app/src/main/java/com/yonsz/z1/tcpudp/net/Udp2Broadcast.java new file mode 100644 index 0000000..6587cd6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/net/Udp2Broadcast.java @@ -0,0 +1,177 @@ +package com.yonsz.z1.tcpudp.net; + +import android.util.Log; + +import com.yonsz.z1.tcpudp.utils.Constants; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.SocketException; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; + +public abstract class Udp2Broadcast { + private DatagramSocket socket; + + private static final String TAG = "UdpBroadcast2"; + private static final int BUFFER_SIZE = 1000; + + // private int port = Constants.UDP_PORT; + private int port = Constants.UDP_PORT; + private DatagramPacket packetToSend; + private InetAddress inetAddress; + private ReceiveData receiveData; + + public Udp2Broadcast(int port) { + super(); + try { + this.port = port; + inetAddress = InetAddress.getByName("255.255.255.255"); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + } + + /** + * Open udp socket + */ + public void open() { + try { + Log.i("UdpBroadcast2", "UdpBroadcast open()"); + socket = new DatagramSocket(port); + socket.setBroadcast(true); + } catch (SocketException e) { + // TODO Auto-generated catch block + Log.i("UdpBroadcast2", "UdpBroadcast open()" + e.getMessage()); + e.printStackTrace(); + } + } + + /** + * Close udp socket + */ + public void close() { + stopReceive(); + if (socket != null) { + socket.close(); + } + } + + /** + * broadcast message + * + * @param text the message to broadcast + */ + public void send(String text) { + if (socket == null || text == null) { + return; + } + + text = text.trim(); + packetToSend = new DatagramPacket( + text.getBytes(), text.getBytes().length, inetAddress, port); + + + try { + new Thread() { + @Override + public void run() { + try { + socket.setSoTimeout(200); + } catch (SocketException e) { + e.printStackTrace(); + } + stopReceive(); + //remove the data in read chanel + DatagramPacket packet = new DatagramPacket(new byte[BUFFER_SIZE], BUFFER_SIZE); + while (true) { + try { + socket.receive(packet); + } catch (Exception e) { + break; + } + } + + //send data + try { + socket.setSoTimeout(5000); + socket.send(packetToSend); + } catch (IOException e) { + e.printStackTrace(); + } + + //receive response + receiveData = new ReceiveData(); + receiveData.start(); + } + }.start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Stop to receive + */ + public void stopReceive() { + + if (receiveData != null && !receiveData.isStoped()) { + receiveData.stop(); + } + } + + public abstract void onReceived(List packets); + + private class ReceiveData implements Runnable { + + private boolean stop; + private Thread thread; + private List packets; + + private ReceiveData() { + thread = new Thread(this); + packets = new ArrayList(); + } + + @Override + public void run() { + + long time = System.currentTimeMillis(); + + while (System.currentTimeMillis() - time < 5000 && !stop) { + Log.i(TAG, "try to receive"); + try { + DatagramPacket packetToReceive = new DatagramPacket(new byte[BUFFER_SIZE], BUFFER_SIZE); + socket.receive(packetToReceive); + packets.add(packetToReceive); + } catch (SocketTimeoutException e) { + Log.i(TAG, "Receive packet timeout!"); + break; + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + if (!stop) { + stop = true; + onReceived(packets); + } + } + + void start() { + thread.start(); + } + + void stop() { + stop = true; + } + + boolean isStoped() { + return stop; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/net/UdpBroadcast.java b/app/src/main/java/com/yonsz/z1/tcpudp/net/UdpBroadcast.java new file mode 100644 index 0000000..b501830 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/net/UdpBroadcast.java @@ -0,0 +1,199 @@ +package com.yonsz.z1.tcpudp.net; + +import android.util.Log; + +import com.google.zxing.common.StringUtils; +import com.yonsz.z1.tcpudp.utils.Constants; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketException; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioDatagramChannel; +import io.netty.util.CharsetUtil; + +public abstract class UdpBroadcast { + + private static final String TAG = "UdpBroadcast"; + private static final int BUFFER_SIZE = 1000; + + // private int port = Constants.UDP_PORT; + private int port = Constants.UDP_PORT_H3E; + private DatagramSocket socket; + private DatagramPacket packetToSend; + private InetAddress inetAddress; + private ReceiveData receiveData; + + public UdpBroadcast(int port, String host) { + super(); + try { + String hostname; + if (!host.isEmpty()) { + // 向网段内的所有机器广播 + String[] ipArr = host.split("\\."); + hostname = ipArr[0] + "." + ipArr[1] + "." + ipArr[2] + ".255"; + } else { + // 全网广播 + hostname = "255.255.255.255"; + } +// hostname = "255.255.255.255"; + this.port = port; + inetAddress = InetAddress.getByName(hostname); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + } + + /** + * Open udp socket + */ + public void open() { + try { + Log.i("UdpBroadcast", "UdpBroadcast open()"); + socket = new DatagramSocket(port); + socket.setBroadcast(true); + } catch (SocketException e) { + // TODO Auto-generated catch block + Log.i("UdpBroadcast", "UdpBroadcast open()" + e.getMessage()); + e.printStackTrace(); + } + } + + /** + * Close udp socket + */ + public void close() { + stopReceive(); + if (socket != null) { + socket.close(); + } + } + + /** + * broadcast message + * + * @param text the message to broadcast + */ + public void send(String text) { + if (socket == null || text == null) { + return; + } + + text = text.trim(); + packetToSend = new DatagramPacket( + text.getBytes(), text.getBytes().length, inetAddress, port); + + + try { + new Thread() { + @Override + public void run() { + try { + socket.setSoTimeout(200); + } catch (SocketException e) { + e.printStackTrace(); + } + stopReceive(); + //remove the data in read chanel + DatagramPacket packet = new DatagramPacket(new byte[BUFFER_SIZE], BUFFER_SIZE); + while (true) { + try { + socket.receive(packet); + } catch (Exception e) { + break; + } + } + + //send data + try { + socket.setSoTimeout(5000); + socket.send(packetToSend); + } catch (IOException e) { + e.printStackTrace(); + } + + //receive response + receiveData = new ReceiveData(); + receiveData.start(); + } + }.start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Stop to receive + */ + public void stopReceive() { + + if (receiveData != null && !receiveData.isStoped()) { + receiveData.stop(); + } + } + + public abstract void onReceived(List packets); + + private class ReceiveData implements Runnable { + + private boolean stop; + private Thread thread; + private List packets; + + private ReceiveData() { + thread = new Thread(this); + packets = new ArrayList(); + } + + @Override + public void run() { + + long time = System.currentTimeMillis(); + + while (System.currentTimeMillis() - time < 5000 && !stop) { + Log.i(TAG, "try to receive"); + try { + DatagramPacket packetToReceive = new DatagramPacket(new byte[BUFFER_SIZE], BUFFER_SIZE); + socket.receive(packetToReceive); + packets.add(packetToReceive); + } catch (SocketTimeoutException e) { + Log.i(TAG, "Receive packet timeout!"); + break; + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + if (!stop) { + stop = true; + onReceived(packets); + } + } + + void start() { + thread.start(); + } + + void stop() { + stop = true; + } + + boolean isStoped() { + return stop; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/net/UdpUnicast.java b/app/src/main/java/com/yonsz/z1/tcpudp/net/UdpUnicast.java new file mode 100644 index 0000000..0c59a29 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/net/UdpUnicast.java @@ -0,0 +1,211 @@ +package com.yonsz.z1.tcpudp.net; + +import android.util.Log; +import com.yonsz.z1.tcpudp.utils.Constants; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.SocketException; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; + +public class UdpUnicast implements INetworkTransmission{ + + private static final String TAG = Constants.TAG + "UdpUnicast"; + private static final int BUFFER_SIZE = 2048; + + private String ip; + private int port = Constants.UDP_PORT; + private DatagramSocket socket; + private DatagramPacket packetToSend; + private InetAddress inetAddress; + private ReceiveData receiveData; + private UdpUnicastListener listener; + private byte[] buffer = new byte[BUFFER_SIZE]; + + /** + * @return the ip + */ + public String getIp() { + return ip; + } + + /** + * @param ip the ip to set + */ + public void setIp(String ip) { + this.ip = ip; + } + + /** + * @return the port + */ + public int getPort() { + return port; + } + + /** + * @param port the port to set + */ + public void setPort(int port) { + this.port = port; + } + + /** + * @param listener the listener to set + */ + public void setListener(UdpUnicastListener listener) { + this.listener = listener; + } + + /** + * @return the listener + */ + public UdpUnicastListener getListener() { + return listener; + } + + public UdpUnicast(String ip, int port) { + super(); + this.ip = ip; + this.port = port; + } + + public UdpUnicast() { + super(); + } + + /** + * Open udp socket + */ + public synchronized boolean open() { + + try { + inetAddress = InetAddress.getByName(ip); + } catch (UnknownHostException e) { + e.printStackTrace(); + return false; + } + + try { + socket = new DatagramSocket(port); + } catch (SocketException e) { + e.printStackTrace(); + return false; + } + + //receive response + receiveData = new ReceiveData(); + receiveData.start(); + return true; + } + + /** + * Close udp socket + */ + public synchronized void close() { + stopReceive(); + if (socket != null) { + socket.close(); + } + } + + /** + * send message + * @param text + * the message to broadcast + */ + public synchronized boolean send(String text) { + + Log.d(TAG, "send:" + text); + + if (socket == null) { + return false; + } + + if (text == null) { + return true; + } + + packetToSend = new DatagramPacket( + text.getBytes(), text.getBytes().length, inetAddress, port); + + //send data + try { + socket.send(packetToSend); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + /** + * Stop to receive + */ + public void stopReceive() { + + if (receiveData!=null && !receiveData.isStoped()) { + receiveData.stop(); + } + } + + public interface UdpUnicastListener { + public void onReceived(byte[] data, int length); + } + + private class ReceiveData implements Runnable { + + private boolean stop; + private Thread thread; + + private ReceiveData() { + thread = new Thread(this); + } + + @Override + public void run() { + + while (!stop) { + try { + + DatagramPacket packetToReceive = new DatagramPacket(buffer, BUFFER_SIZE); + socket.receive(packetToReceive); + onReceive(buffer, packetToReceive.getLength()); + } catch (SocketTimeoutException e) { + Log.w(TAG, "Receive packet timeout!"); + }catch (IOException e1) { + Log.w(TAG, "Socket is closed!"); + } + } + } + + void start() { + thread.start(); + } + + void stop() { + stop = true; + } + + boolean isStoped() { + return stop; + } + } + + @Override + public void setParameters(String ip, int port) { + this.ip = ip; + this.port = port; + } + + @Override + public void onReceive(byte[] buffer, int length) { + Log.d(TAG, new String(buffer, 0, length)); + if (listener != null) { + listener.onReceived(buffer, length); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/utils/Constants.java b/app/src/main/java/com/yonsz/z1/tcpudp/utils/Constants.java new file mode 100644 index 0000000..f10c544 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/utils/Constants.java @@ -0,0 +1,50 @@ +package com.yonsz.z1.tcpudp.utils; + +public final class Constants { + + public static final String KEY_SSID = "SSID"; + public static final String KEY_ENCRYPTION = "ENCRYPTION"; + public static final String KEY_PASSWORD = "PASSWORD"; + public static final String DEFAULT_SSID = "HF-LPT220";//"HF-A11x_AP";//"HF-LPB"; + // public static final String DEFAULT_SSID = "G2-8D77"; + public static final String SHARED_PREFERENCES = "_preferences"; + + public static final String TAG = "HF-A11gaojie"; + public static final int UDP_PORT = 48899; + public static final int UDP_PORT_H3E = 38899; + public static final int REQUEST_CODE_CHOOSE_FILE = 1; + public static final int RESULT_CODE_CHOOSE_FILE = 1; + public static final String KEY_CMD_SCAN_MODULES = "cmd_scan_modules"; + public static final String KEY_IP = "ip"; + public static final String KEY_UDP_PORT = "udp_port"; + public static final String KEY_PRE_ID = "id_"; + public static final String KEY_PRE_IP = "ip_"; + public static final String KEY_PRE_MAC = "mac_"; + public static final String KEY_PRE_MODULEID = "moduleid_"; + public static final String KEY_MODULE_COUNT = "module_count"; + public static final String ENTER = "<0x0d>"; + public static final String CMD_SCAN_MODULES = "HF-A11ASSISTHREAD"; + public static final String CMD_ENTER_CMD_MODE = "+ok"; + public static final String CMD_EXIT_CMD_MODE = "AT+Q\r"; + public static final String CMD_RELOAD = "AT+RELD\r"; + public static final String CMD_RESET = "AT+Z\r"; + public static final String CMD_TRANSPARENT_TRANSMISSION = "AT+ENTM\r"; + public static final String CMD_NETWORK_PROTOCOL = "AT+NETP\r"; + public static final String CMD_TEST = "AT+\r"; + public static final String CMD_VER = "AT+VER\r\n"; + public static final String CMD_WSTRY = "AT+WSTRY=%s\r\n"; + public static final String CMD_STA = "AT+WMODE=STA\r\n"; + public static final String CMD_WSTCH = "AT+WSTCH\r\n"; + public static final String CMD_WSSSID = "AT+WSSSID=%s\r\n"; + public static final String CMD_WSKEY = "AT+WSKEY=%s\r\n"; + public static final String RESPONSE_OK = "+ok"; + public static final String RESPONSE_OK_OPTION = "+ok="; + public static final String RESPONSE_REBOOT_OK = "+ok=rebooting"; + public static final String RESPONSE_WSTRY_NOK = "+ok=TRY NOK"; + public static final String RESPONSE_ERR = "+ERR"; + public static final String FILE_TO_SEND = "FilePath"; + public static final int BATTERY_MIN = 30; + public static final int WIFI_MIN = 150; + public static final int TIMER_CHECK_CMD = 30000; + +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/utils/Utils.java b/app/src/main/java/com/yonsz/z1/tcpudp/utils/Utils.java new file mode 100644 index 0000000..6196b4f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/utils/Utils.java @@ -0,0 +1,971 @@ +package com.yonsz.z1.tcpudp.utils; + +import android.content.Context; +import android.content.SharedPreferences; +import android.net.wifi.ScanResult; +import android.net.wifi.WifiConfiguration; +import android.os.Build; +import android.os.StrictMode; +import android.security.KeyStore; +import android.util.Log; +import android.widget.Toast; + +import com.yonsz.z1.tcpudp.android.AccessPoint; +import com.yonsz.z1.tcpudp.model.Module; +import com.yonsz.z1.tcpudp.model.NetworkProtocol; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.net.DatagramPacket; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; + +public final class Utils { + + private static final String ENTER = "\r"; + public static int COMMAND = 1; + /** + * Transparent Transmission + */ + public static int TTS = 2; + public static int RESPONSE_CMD = 3; + public static int RESPONSE_TTS = 4; + public static final String PREFERENCES_MODULE_MID = "module_mid"; + public static final String PREFERENCES_SCAN_RESULT_PASSWD = "scan_result"; + public static final String SECURITY_WEP = "wep"; + public static final String SECURITY_OPEN = "OPEN"; + public static final String SECURITY_SHARED = "SHARED"; + public static final String SECURITY_WPAPSK = "WPAPSK"; + public static final String SECURITY_WPA2PSK = "WPA2PSK"; + public static final String SECURITY_NONE = "NONE"; + public static final String SECURITY_WEP_A = "WEP-A"; + public static final String SECURITY_WEP_H = "WEP-H"; + public static final String SECURITY_TKIP = "TKIP"; + public static final String SECURITY_AES = "AES"; + public static final String SECURITY_OPEN_NONE = "open,none"; + public static final String SECURITY_OPEN_WEP_A = "open,wep-a"; + public static final String SECURITY_OPEN_WEP_H = "open,wep-h"; + public static final String SECURITY_SHARED_WEP_A = "shared,wep-a"; + public static final String SECURITY_SHARED_WEP_H = "shared,wep-h"; + public static final String SECURITY_WPAPSK_AES = "wpapsk,aes"; + public static final String SECURITY_WPAPSK_TKIP = "wpapsk,tkip"; + public static final String SECURITY_WPA2PSK_AES = "wpa2psk,aes"; + public static final String SECURITY_WPA2PSK_TKIP = "wpa2psk,tkip"; + private static final String KEYSTORE_SPACE = "keystore://"; + public static final String LAST_SCAN_RESULT_CONNECTED = "last_scan_result_connected"; + public static final int WEP_ASCII = 1; + public static final int WEP_HEX = 2; + public static final int WEP_INVALID = -1; + + public static String gernerateCMD(String text) { + + if (text == null) { + return null; + } + + return text + ENTER; + } + + /** + * @param type + * @param text + * @return + */ + public synchronized static String gernerateEchoText(int type, String text) { + + if (type == COMMAND) { + + if (text == null) { + return ">\n"; + } else { + return ">" + text + "\n"; + } + } else if (type == TTS) { + + if (text == null) { + return ">\n"; + } else { + return ">" + text + "\n"; + } + } else if (type == RESPONSE_CMD) { + if (text == null) { + return "\n"; + } else { + return " " + text; + } + } else if (type == RESPONSE_TTS) { + if (text == null) { + return ""; + } else { + return text; + } + } else { + if (text == null) { + return ""; + } else { + return text; + } + } + } + + public synchronized static Module decodeBroadcast2Module(String response) { + + if (response == null) { + return null; + } + + String[] array = response.split(","); + if (array == null || (array.length < 2 && array.length > 3) || + !isIP(array[0]) || !isMAC(array[1])) { + return null; + } + + Module module = new Module(); + module.setIp(array[0]); + module.setMac(array[1]); + if (array.length == 3) { + module.setModuleID(array[2]); + } + + return module; + } + + public static String appendCharacters(String oldStr, String append, int count) { + if ((oldStr == null && append == null) || count < 0) { + return null; + } + + if (count == 0) { + return new String(oldStr); + } + + StringBuffer sb; + + if (oldStr == null) { + sb = new StringBuffer(); + } else { + sb = new StringBuffer(oldStr); + } + for (int i = 0; i < count; i++) { + sb.append(append); + } + + return sb.toString(); + } + + public static int getUdpPort(Context context) { + + String port = context.getSharedPreferences( + context.getPackageName() + "_preferences", Context.MODE_PRIVATE) + .getString(Constants.KEY_UDP_PORT, Constants.UDP_PORT + ""); + try { + return Integer.valueOf(port); + } catch (Exception e) { + return Constants.UDP_PORT; + } + } + + public static String getCMDScanModules(Context context) { + + return context.getSharedPreferences( + context.getPackageName() + "_preferences", Context.MODE_PRIVATE) + .getString(Constants.KEY_CMD_SCAN_MODULES, Constants.CMD_SCAN_MODULES); + } + + public static void toast(Context context, int resId) { + Toast.makeText(context, resId, Toast.LENGTH_LONG).show(); + } + + public static void toast(Context context, String text) { + Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); + } + + public static boolean isIP(String str) { + Pattern pattern = Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])" + + "\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\." + + "((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\." + + "((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b"); + return pattern.matcher(str).matches(); + } + + public static boolean isMAC(String str) { + + str = str.trim(); + if (str.length() != 12) { + return false; + } + + char[] chars = new char[12]; + str.getChars(0, 12, chars, 0); + for (int i = 0; i < chars.length; i++) { + if (!((chars[i] >= '0' && chars[i] <= '9') || (chars[i] >= 'A' && chars[i] <= 'F') || (chars[i] >= 'a' && chars[i] <= 'f'))) { + return false; + } + } + return true; + } + + public synchronized static NetworkProtocol decodeProtocol(String response) { + + if (response == null) { + return null; + } + + String[] array = response.split(","); + if (array == null) { + return null; + } + + //look for ip and port + int index = -1; + for (int i = 0; i < array.length; i++) { + if (array[i].equals("TCP") || array[i].equals("UDP")) { + index = i; + break; + } + } + if (index == -1) { + return null; + } + + try { + if (!isIP(array[index + 3])) { + return null; + } + + NetworkProtocol protocol = new NetworkProtocol(); + protocol.setProtocol(array[0]); + protocol.setServer(array[1]); + protocol.setPort(Integer.valueOf(array[index + 2])); + protocol.setIp(array[index + 3]); + + return protocol; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static WifiConfiguration generateWifiConfiguration(AccessPoint mAccessPoint, String mPassword) { + if (mAccessPoint != null && mAccessPoint.getNetworkId() != -1) { + return null; + } + + WifiConfiguration config = new WifiConfiguration(); + + if (mAccessPoint == null) { + // config.SSID = AccessPoint.convertToQuotedString( + // mSsid.getText().toString()); + // If the user adds a network manually, assume that it is hidden. + config.hiddenSSID = true; + } else if (mAccessPoint.getNetworkId() == -1) { + config.SSID = AccessPoint.convertToQuotedString( + mAccessPoint.getSsid()); + } else { + config.networkId = mAccessPoint.getNetworkId(); + } + + switch (mAccessPoint.getSecurity()) { + case AccessPoint.SECURITY_NONE: + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); + return config; + + case AccessPoint.SECURITY_WEP: + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); + config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); + config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); + if (mPassword.length() != 0) { + int length = mPassword.length(); + String password = mPassword;//.getText().toString(); + // WEP-40, WEP-104, and 256-bit WEP (WEP-232?) + if ((length == 10 || length == 26 || length == 58) && + password.matches("[0-9A-Fa-f]*")) { + config.wepKeys[0] = password; + } else { + config.wepKeys[0] = '"' + password + '"'; + } + } + return config; + + case AccessPoint.SECURITY_PSK: + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); + if (mPassword.length() != 0) { + String password = mPassword;//.getText().toString(); + if (password.matches("[0-9A-Fa-f]{64}")) { + config.preSharedKey = password; + } else { + config.preSharedKey = '"' + password + '"'; + } + } + return config; + + case AccessPoint.SECURITY_EAP: + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X); + return config; + } + return null; + } + + public static String generateTry2ConnectCmd(String ssid, String security, String password) { + return String.format(Constants.CMD_WSTRY, ssid + "," + security + "," + password); + } + + public static String generateTry2ConnectCmd(String ssid, String security) { + return String.format(Constants.CMD_WSTRY, ssid + "," + security); + } + + public static String generateWskeyCmd(String auth, String encry, String password) { + return String.format(Constants.CMD_WSKEY, auth + "," + encry + "," + password); + } + + public static String generateWskeyCmd(String auth, String encry) { + return String.format(Constants.CMD_WSKEY, auth + "," + encry); + } + + public static String generateWsssid(String ssid) { + return String.format(Constants.CMD_WSSSID, ssid); + } + + /** + * decode pagkets to mudoles + * + * @param packets + * @return + */ + public static List decodePackets(Context context, List packets) { + + int i = 1; + Module module; + List list = new ArrayList(); + List modules = new ArrayList(); + + DECODE_PACKETS: + for (DatagramPacket packet : packets) { + + String data = new String(packet.getData(), 0, packet.getLength()); + if (data.equals(Utils.getCMDScanModules(context))) { + continue; + } + + for (String item : list) { + if (item.equals(data)) { + continue DECODE_PACKETS; + } + } + + list.add(data); + if ((module = Utils.decodeBroadcast2Module(data)) != null) { + module.setId(i); + modules.add(module); + i++; + } + } + + return modules; + } + + /** + * save modules' data to local + * + * @param modules + */ + public static void saveDevices(Context context, List modules) { + + SharedPreferences preferences = context.getSharedPreferences("module_list", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + + if (modules.size() > 0) { + int i = 0; + for (Module module : modules) { + editor.putInt(Constants.KEY_PRE_ID + i, module.getId()); + editor.putString(Constants.KEY_PRE_IP + i, module.getIp()); + editor.putString(Constants.KEY_PRE_MAC + i, module.getMac()); + editor.putString(Constants.KEY_PRE_MODULEID + i, module.getModuleID()); + i++; + } + + editor.putInt(Constants.KEY_MODULE_COUNT, modules.size()); + editor.commit(); + } else { + editor.clear().commit(); + } + } + + /** + * save module with specific key + * + * @param module + */ + public static void saveDevice(Context context, String key, Module module) { + if (module == null) { + return; + } + + SharedPreferences preferences = context.getSharedPreferences(PREFERENCES_MODULE_MID, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + + editor.putInt(Constants.KEY_PRE_ID + key, module.getId()); + editor.putString(Constants.KEY_PRE_IP + key, module.getIp()); + editor.putString(Constants.KEY_PRE_MAC + key, module.getMac()); + editor.putString(Constants.KEY_PRE_MODULEID + key, module.getModuleID()); + editor.commit(); + } + + /** + * Load modules' data from local + * + * @return + */ + public static List loadDevices(Context context) { + + List modules = new ArrayList(); + SharedPreferences preferences = context.getSharedPreferences("module_list", Context.MODE_PRIVATE); + int count = preferences.getInt(Constants.KEY_MODULE_COUNT, 0); + Module module; + + for (int i = 0; i < count; i++) { + module = new Module(); + module.setId(preferences.getInt(Constants.KEY_PRE_ID + i, -1)); + module.setIp(preferences.getString(Constants.KEY_PRE_IP + i, null)); + module.setMac(preferences.getString(Constants.KEY_PRE_MAC + i, null)); + module.setModuleID(preferences.getString(Constants.KEY_PRE_MODULEID + i, null)); + modules.add(module); + } + + return modules; + } + + /** + * Get the modules by key from local + * + * @return + */ + public static Module getDevice(Context context, String key) { + + SharedPreferences preferences = context.getSharedPreferences(PREFERENCES_MODULE_MID, Context.MODE_PRIVATE); + int id = preferences.getInt(Constants.KEY_PRE_ID + key, Integer.MIN_VALUE); + if (id == Integer.MIN_VALUE) { + return null; + } + + Module module = new Module(); + module.setId(id); + module.setIp(preferences.getString(Constants.KEY_PRE_IP + key, null)); + module.setMac(preferences.getString(Constants.KEY_PRE_MAC + key, null)); + module.setModuleID(preferences.getString(Constants.KEY_PRE_MODULEID + key, null)); + + return module; + } + + public static Module findModule(List modules, String key) { + for (Module module : modules) { + if (module.getModuleID().equals(key)) { + return module; + } + } + + return null; + } + + /** + * Get the ssid to the default connect + * 这里是可以写死的 HF-LPT220 + * + * @param context + * @return + */ + public static String getSettingApSSID(Context context) { + + return context.getSharedPreferences( + context.getPackageName() + Constants.SHARED_PREFERENCES, + Context.MODE_PRIVATE) + .getString(Constants.KEY_SSID, Constants.DEFAULT_SSID).trim(); + } + + /** + * Get the password of the default ap + * 这里应该就是null才对,是都能连接上的 + * + * @param context + * @return + */ + public static String getSettingApPassword(Context context) { + + Log.i("gaojie", "Utils getSettingApPassword()" + context.getSharedPreferences( + context.getPackageName() + Constants.SHARED_PREFERENCES, + Context.MODE_PRIVATE) + .getString(Constants.KEY_PASSWORD, "").trim()); + return context.getSharedPreferences( + context.getPackageName() + Constants.SHARED_PREFERENCES, + Context.MODE_PRIVATE) + .getString(Constants.KEY_PASSWORD, "").trim(); + } + + /** + * Check the wep type by password + * + * @param password + * @return {@link #WEP_INVALID}, {@link #WEP_ASCII}, {@link #WEP_HEX} + */ + public static int checkWepType(String password) { + if (password == null) { + return WEP_INVALID; + } + + password = password.trim(); + int length = password.length(); + if (length == 5 || length == 13) { + return WEP_ASCII; + } else if ((length == 10 && password.matches("[0-9A-Fa-f]{10}")) || (length == 26 && password.matches("[0-9A-Fa-f]{26}"))) { + return WEP_HEX; + } else { + return WEP_INVALID; + } + } + + /** + * Generate a key for a scan result, the format is : ssid-key_ssid|bssid-bssid|capabilities-capabilities + * + * @param scanResult + * @return + */ + public synchronized static final String generateScanResultKey(ScanResult scanResult) { + if (scanResult == null) { + return null; + } + + StringBuffer sb = new StringBuffer(); + if (scanResult.SSID != null) { + sb.append("ssid:"); + sb.append(scanResult.SSID); + sb.append("[MaGiCsTrInG]"); + } + if (scanResult.BSSID != null) { + sb.append("bssid:"); + sb.append(scanResult.BSSID); + sb.append("[MaGiCsTrInG]"); + } + if (scanResult.capabilities != null) { + sb.append("capabilities:"); + sb.append(scanResult.capabilities); + sb.append("[MaGiCsTrInG]"); + } + return sb.toString(); + } + + /** + * parse a key generated by {@link #generateScanResultKey(ScanResult)} to a scan result, the key's format is : ssid-key_ssid|bssid-bssid|capabilities-capabilities + * + * @param key + * @return + * @see #generateScanResultKey(ScanResult) + */ + public synchronized static final ScanResult parseScanResult(String key) { + if (key == null) { + return null; + } + + key = key.trim(); + String[] array = key.split("\\[MaGiCsTrInG]"); + if (array != null) { + String ssid = null; + String bssid = null; + String caps = null; + + for (String item : array) { + if (item.startsWith("ssid:")) { + ssid = item.substring("ssid:".length()); + } else if (item.startsWith("bssid:")) { + bssid = item.substring("bssid:".length()); + } else if (item.startsWith("capabilities:")) { + caps = item.substring("capabilities:".length()); + } + } + + if (ssid != null && bssid != null && caps != null) { + + //if the android version is lower than 4.2 + if (Build.VERSION.SDK_INT < 17) { + + try { + Constructor constructor = ScanResult.class.getConstructor(String.class, String.class, String.class, int.class, int.class); + return constructor.newInstance(ssid, bssid, caps, 0, 0); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + try { + Class WifiSsid = Class.forName("android.net.wifi.WifiSsid"); + Constructor constructor = ScanResult.class.getConstructor(WifiSsid, String.class, String.class, int.class, int.class, long.class); + Method method = WifiSsid.getMethod("createFromAsciiEncoded", String.class); + return constructor.newInstance(method.invoke(null, ssid), bssid, caps, 0, 0, System.currentTimeMillis()); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + return null; + } + + /** + * Get the key from local file, the key is user input before + * + * @param context + * @param scanResult + * @return + */ + public synchronized static final String getScanResultPassword(Context context, ScanResult scanResult) { + + if (scanResult == null) { + return null; + } + + String key = generateScanResultKey(scanResult); + return context.getSharedPreferences(PREFERENCES_SCAN_RESULT_PASSWD, Context.MODE_PRIVATE) + .getString(key, null); + } + + /** + * Save the password of scanResult into a local file + * + * @param context + * @param scanResult + * @param password + */ + public synchronized static final void saveScanResultPassword(Context context, ScanResult scanResult, String password) { + if (scanResult == null || password == null) { + return; + } + + password = password.trim(); + context.getSharedPreferences(PREFERENCES_SCAN_RESULT_PASSWD, Context.MODE_PRIVATE) + .edit().putString(generateScanResultKey(scanResult), password).commit(); + } + + public synchronized static final void saveLastScanResult(Context context, ScanResult scanResult) { + if (scanResult != null) { + context.getSharedPreferences(PREFERENCES_SCAN_RESULT_PASSWD, Context.MODE_PRIVATE) + .edit().putString(LAST_SCAN_RESULT_CONNECTED, generateScanResultKey(scanResult)).commit(); + } + } + + public synchronized static final ScanResult getLastScanResult(Context context) { + String lastConnected = context.getSharedPreferences(PREFERENCES_SCAN_RESULT_PASSWD, Context.MODE_PRIVATE) + .getString(LAST_SCAN_RESULT_CONNECTED, null); + if (lastConnected == null) { + return null; + } else { + return parseScanResult(lastConnected); + } + } + + public static String generateTry2ConnectCmd(AccessPoint accessPoint, String password) { + + String cmd = null; + String security = parseSecurity(accessPoint.getScanResult().capabilities); + if (accessPoint.getSecurity() == AccessPoint.SECURITY_NONE || SECURITY_OPEN_NONE.equals(security)) { + cmd = Utils.generateTry2ConnectCmd(accessPoint.getSsid(), SECURITY_OPEN_NONE); + } else { + + if (SECURITY_WEP.equals(security)) { + security = checkWepType(password) == WEP_ASCII ? SECURITY_SHARED_WEP_A : SECURITY_SHARED_WEP_H; + } + cmd = Utils.generateTry2ConnectCmd(accessPoint.getSsid(), security, password); + } + + return cmd; + } + + public static String generateWskeyCmd(ScanResult scanResult, String password) { + + String cmd = null; + String security = parseSecurity(scanResult.capabilities); + if (SECURITY_OPEN_NONE.equals(security)) { + cmd = Utils.generateWskeyCmd(SECURITY_OPEN, SECURITY_NONE); + } else { + + if (SECURITY_WEP.equals(security)) { + + if (checkWepType(password) == WEP_ASCII) { + cmd = Utils.generateWskeyCmd(SECURITY_SHARED, SECURITY_WEP_A, password); + } else { + cmd = Utils.generateWskeyCmd(SECURITY_SHARED, SECURITY_WEP_H, password); + } + } else if (SECURITY_WPA2PSK_AES.equals(security)) { + cmd = Utils.generateWskeyCmd(SECURITY_WPA2PSK, SECURITY_AES, password); + } else if (SECURITY_WPA2PSK_TKIP.equals(security)) { + cmd = Utils.generateWskeyCmd(SECURITY_WPA2PSK, SECURITY_TKIP, password); + } else if (SECURITY_WPAPSK_AES.equals(security)) { + cmd = Utils.generateWskeyCmd(SECURITY_WPAPSK, SECURITY_AES, password); + } else if (SECURITY_WPAPSK_TKIP.equals(security)) { + cmd = Utils.generateWskeyCmd(SECURITY_WPAPSK, SECURITY_TKIP, password); + } + } + + return cmd; + } + + public synchronized static final String parseSecurity(String capabilities) { + + if (capabilities == null) { + return null; + } + + capabilities = capabilities.replace("][", ";").replace("[", "").replace("]", ""); + System.out.println("capabilities: " + capabilities); + + if (capabilities.contains("WEP")) { + return SECURITY_WEP; + } + + int wpa = -1; + int wpa2 = -1; + String[] caps = capabilities.split(";"); + for (int i = 0; i < caps.length; i++) { + if (caps[i].contains("WPA2") && caps[i].contains("PSK")) { + wpa2 = i; + } else if (caps[i].contains("WPA") && caps[i].contains("PSK")) { + wpa = i; + } + } + + if (wpa2 != -1) { + + if (caps[wpa2].contains("CCMP")) { + return SECURITY_WPA2PSK_AES; + } + if (caps[wpa2].contains("TKIP")) { + return SECURITY_WPA2PSK_TKIP; + } + } + + if (wpa != -1) { + + if (caps[wpa].contains("CCMP")) { + return SECURITY_WPAPSK_AES; + } + if (caps[wpa].contains("TKIP")) { + return SECURITY_WPAPSK_TKIP; + } + } + + return SECURITY_OPEN_NONE; + } + + /** + * as the api method requireKeyStore for android has changed in android 4.2, so it use reflect to avoid this change + *

+     * android 2.x -- WifiDialog.requireKeyStore
+     * static boolean requireKeyStore(WifiConfiguration config) {
+     * String values[] = {config.ca_cert.value(), config.client_cert.value(),
+     * config.private_key.value()};
+     * for (String value : values) {
+     * if (value != null && value.startsWith(KEYSTORE_SPACE)) {
+     * return true;
+     * }
+     * }
+     * return false;
+     * }
+     * 

+ * android 4.x -- WifiConfigController.requireKeyStore + * static boolean requireKeyStore(WifiConfiguration config) { + * if (config == null) { + * return false; + * } + * if (!TextUtils.isEmpty(config.key_id.value())) { + * return true; + * } + * String values[] = { config.ca_cert.value(), config.client_cert.value() }; + * for (String value : values) { + * if (value != null && value.startsWith(KEYSTORE_SPACE)) { + * return true; + * } + * } + * return false; + * } + *

+ * + * @return + */ + public synchronized static boolean requireKeyStore(WifiConfiguration config) { + + /*if (config == null) { + return false; + } + + Class clazz = WifiConfiguration.class; + Field field = null; + int find = 0; + try { + field = clazz.getField("private_key"); + find = 1; + System.out.println("Find field private_key in WifiConfiguration class"); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } + + if (find == 0) { + + try { + field = clazz.getField("key_id"); + find = 2; + System.out.println("Find field key_id in WifiConfiguration class"); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } + } + + if (find == 0) { + System.out.println("Not find field private_key or key_id in WifiConfiguration class"); + return false; + } else { + + String value = null; + clazz = EnterpriseField.class; + try { + Method method = clazz.getMethod("value"); + Object result = method.invoke(field.get(config)); + value = (result == null) ? null : (String) result; + } catch (Exception e) { + e.printStackTrace(); + } + + if (find == 2) { + if (!TextUtils.isEmpty(value)) { + return true; + } + } + + String values[] = null; + *//*if (find == 1) { + values = new String[]{config.ca_cert.value(), config.client_cert.value(), value}; + } else { + values = new String[]{config.ca_cert.value(), config.client_cert.value()}; + }*//* + + for (String _value : values) { + if (_value != null && _value.startsWith(KEYSTORE_SPACE)) { + return true; + } + } + return false; + }*/ + return false; + } + + /** + * as the api method test for android has changed in android 4.2, so it use reflect to avoid this change + * for android 2.x: KeyStore.getInstance().test() == KeyStore.NO_ERROR + * for android 4.2: KeyStore.getInstance().state() == KeyStore.State.UNLOCKED + * + * @return + */ + public synchronized static boolean testKeyStoreNoError() { + + Class clazz = KeyStore.class; + Method testMethod = null; + int find = 0; + try { + testMethod = clazz.getMethod("test"); + find = 1; + System.out.println("Find method test in KeyStore class"); + } catch (NoSuchMethodException e) { + System.err.println("Not find method test in KeyStore class"); + e.printStackTrace(); + } + + if (find == 0) { + + try { + testMethod = clazz.getMethod("state"); + find = 2; + System.out.println("Find method state in KeyStore class"); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } + } + + if (find == 0) { + System.out.println("Not find method state or test in KeyStore class"); + return false; + } else if (find == 1) { + try { + Object result = testMethod.invoke(KeyStore.getInstance()); + System.out.println("result is " + result.toString()); + return ((Integer) result).intValue() == KeyStore.NO_ERROR; + } catch (Exception e) { + e.printStackTrace(); + } + } else { + + try { + Object result = testMethod.invoke(KeyStore.getInstance()); + System.out.println("result is " + result.toString()); + return result.toString().equals("UNLOCKED"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + return false; + } + + /** + * 去掉两头的双引号 + * + * @param string + * @return + */ + public synchronized static String removeDoubleQuotes(String string) { + if (string == null) { + return null; + } + int length = string.length(); + if ((length > 1) && (string.charAt(0) == '"') + && (string.charAt(length - 1) == '"')) { + return string.substring(1, length - 1); + } + return string; + } + + /** + * 给两头加上双引号 + * + * @param string + * @return + */ + public synchronized static String convertToQuotedString(String string) { + return "\"" + string + "\""; + } + + public synchronized static int getAndroidInternalId(String id) { + try { + return Class.forName("com.android.internal.R$id").getField(id).getInt(null); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (NoSuchFieldException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return 0; + } + + public static void forceStrictMode() { + + if (android.os.Build.VERSION.SDK_INT > 9) { + StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); + StrictMode.setThreadPolicy(policy); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/CRC16.java b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/CRC16.java new file mode 100644 index 0000000..7f5af4b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/CRC16.java @@ -0,0 +1,56 @@ +package com.yonsz.z1.tcpudp.ymodem; + +/** + * Uses table for irreducible polynomial: 1 + x^2 + x^15 + x^16 + */ + +public class CRC16 { + + private static int[] table = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, + 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, + 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, + 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, + 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, + 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, + 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, + 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, + 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, + 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, + 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, + 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, + 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, + 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, + 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, + 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, + 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, + 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, + 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, + 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, + 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, + 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0, + }; + + public int getCRCLength() { + return 2; + } + + public long calcCRC(byte[] block) { + int crc = 0x0000; + for (byte b : block) { + crc = ((crc << 8) ^ table[((crc >> 8) ^ (0xff & b))]) & 0xFFFF; + } + + return crc; + } +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/FileStreamThread.java b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/FileStreamThread.java new file mode 100644 index 0000000..0a6f9cb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/FileStreamThread.java @@ -0,0 +1,136 @@ +package com.yonsz.z1.tcpudp.ymodem; + +import android.content.Context; + +import java.io.IOException; +import java.io.InputStream; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Thread for reading input Stream and encapsulating into a ymodem package + *

+ * Created by leonxtp on 2017/9/16. + * Modified by leonxtp on 2017/9/16 + */ + +public class FileStreamThread extends Thread { + + private Context mContext; + private InputStream inputStream = null; + private DataRaderListener listener; + private String filePath; + private AtomicBoolean isDataAcknowledged = new AtomicBoolean(false); + private boolean isKeepRunning = false; + private int fileByteSize = 0; + + public FileStreamThread(Context mContext, String filePath, DataRaderListener listener) { + this.mContext = mContext; + this.filePath = filePath; + this.listener = listener; + } + + public int getFileByteSize() throws IOException { + if (fileByteSize == 0 || inputStream == null) { + initStream(); + } + return fileByteSize; + } + + @Override + public void run() { + try { + prepareData(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void prepareData() throws IOException { + initStream(); + byte[] block = new byte[1024]; + int dataLength; + byte blockSequence = 1;//The data package of a file is actually started from 1 + isDataAcknowledged.set(true); + isKeepRunning = true; + while (isKeepRunning) { + + if (!isDataAcknowledged.get()) { + try { + //We need to sleep for a while as the sending 1024 bytes data from ble would take several seconds + //In my circumstances, this can be up to 3 seconds. + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + continue; + } + + if ((dataLength = inputStream.read(block)) == -1) { + L.f("The file data has all been read..."); + if (listener != null) { + onStop(); + listener.onFinish(); + } + break; + } + + byte[] packige = YModemUtil.getDataPackage(block, dataLength, blockSequence); + + if (listener != null) { + listener.onDataReady(packige); + } + + blockSequence++; + isDataAcknowledged.set(false); + } + + } + + /** + * When received response from the terminal ,we should keep the thread keep going + */ + public void keepReading() { + isDataAcknowledged.set(true); + } + + public void release() { + onStop(); + listener = null; + } + + private void onStop() { + isKeepRunning = false; + isDataAcknowledged.set(false); + fileByteSize = 0; + onReadFinished(); + } + + private void initStream() { + if (inputStream == null) { + try { + inputStream = YModemUtil.getInputStream(mContext, filePath); + fileByteSize = inputStream.available(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + private void onReadFinished() { + if (inputStream != null) { + try { + inputStream.close(); + inputStream = null; + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public interface DataRaderListener { + void onDataReady(byte[] data); + + void onFinish(); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/InputStreamSource.java b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/InputStreamSource.java new file mode 100644 index 0000000..ca8d79f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/InputStreamSource.java @@ -0,0 +1,51 @@ +package com.yonsz.z1.tcpudp.ymodem; + +import android.content.Context; + +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * Get InputStream from different source, files from sd card/assets supported. + *

+ * Created by leonxtp on 2017/9/17. + * Modified by leonxtp on 2017/9/17 + */ + +public class InputStreamSource { + + private static final int BUFFER_SIZE = 32 * 1024; + private static final String ERROR_UNSUPPORTED_SCHEME = "Unsupported file source"; + + InputStream getStream(Context context, String imageUri) throws IOException { + switch (SourceScheme.ofUri(imageUri)) { + + case FILE: + return getStreamFromFile(imageUri); + + case ASSETS: + return getStreamFromAssets(context, imageUri); + + case UNKNOWN: + default: + return getStreamFromOtherSource(imageUri); + } + } + + private InputStream getStreamFromFile(String fileUri) throws IOException { + String filePath = SourceScheme.FILE.crop(fileUri); + return new BufferedInputStream(new FileInputStream(filePath), BUFFER_SIZE); + } + + private InputStream getStreamFromAssets(Context context, String fileUri) throws IOException { + String filePath = SourceScheme.ASSETS.crop(fileUri); + return context.getAssets().open(filePath); + } + + private InputStream getStreamFromOtherSource(String fileUri) throws IOException { + throw new UnsupportedOperationException(String.format(ERROR_UNSUPPORTED_SCHEME, fileUri)); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/L.java b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/L.java new file mode 100644 index 0000000..750b238 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/L.java @@ -0,0 +1,84 @@ +package com.yonsz.z1.tcpudp.ymodem; + +import android.util.Log; + +public class L { + + private static final String TAG = "nettyUtil"; + + private L() { + /* cannot be instantiated */ + throw new UnsupportedOperationException("cannot be instantiated"); + } + + private static final boolean DEBUGGING = true; + + public static void f(String msg) { + if (DEBUGGING) { + L.e(TAG, msg); + } + } + + // 下面四个是默认tag的函数 + public static void i(String msg) { + if (DEBUGGING) + L.i(TAG, msg); + } + + public static void d(String msg) { + if (DEBUGGING) + L.d(TAG, msg); + } + + public static void e(String msg) { + if (DEBUGGING) + L.e(TAG, msg); + } + + public static void v(String msg) { + if (DEBUGGING) + L.v(TAG, msg); + } + + public static void w(String msg) { + if (DEBUGGING) + L.w(TAG, msg); + } + + // 下面是传入自定义tag的函数 + public static void i(String tag, String msg) { + if (DEBUGGING) + Log.i(tag, msg); + } + + public static void d(String tag, String msg) { + if (DEBUGGING) + Log.d(tag, msg); + } + + public static void e(String tag, String msg) { + if (DEBUGGING) + Log.e(tag, msg); + } + + public static void v(String tag, String msg) { + if (DEBUGGING) + Log.v(tag, msg); + } + + public static void w(String tag, String msg) { + if (DEBUGGING) + Log.w(tag, msg); + } + + public static void e(String tag, String msg, Throwable throwable) { + if (DEBUGGING) + Log.e(tag, msg, throwable); + } + + public static void wtf(String tag, String msg) { + if (DEBUGGING) + Log.wtf(tag, msg); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/SourceScheme.java b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/SourceScheme.java new file mode 100644 index 0000000..63b4b36 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/SourceScheme.java @@ -0,0 +1,51 @@ +package com.yonsz.z1.tcpudp.ymodem; + +import java.util.Locale; + +/** + * Thanks to Universal-Image-Loader: + * https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/library/src/main/java/com/nostra13/universalimageloader/core/download/ImageDownloader.java + */ +public enum SourceScheme { + + FILE("file"), ASSETS("assets"), UNKNOWN(""); + + private String scheme; + private String uriPrefix; + + SourceScheme(String scheme) { + this.scheme = scheme; + uriPrefix = scheme + "://"; + } + + /** + * Defines scheme of incoming URI + * + * @param uri URI for scheme detection + * @return SourceScheme of incoming URI + */ + public static SourceScheme ofUri(String uri) { + if (uri != null) { + for (SourceScheme s : values()) { + if (s.belongsTo(uri)) { + return s; + } + } + } + return UNKNOWN; + } + + private boolean belongsTo(String uri) { + return uri.toLowerCase(Locale.US).startsWith(uriPrefix); + } + + /** + * Removed scheme part ("scheme://") from incoming URI + */ + public String crop(String uri) { + if (!belongsTo(uri)) { + throw new IllegalArgumentException(String.format("URI [%1$s] doesn't have expected scheme [%2$s]", uri, scheme)); + } + return uri.substring(uriPrefix.length()); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/TimeOutHelper.java b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/TimeOutHelper.java new file mode 100644 index 0000000..ff2ac4a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/TimeOutHelper.java @@ -0,0 +1,46 @@ +package com.yonsz.z1.tcpudp.ymodem; + +import android.os.Handler; + +/** + * A timer util for counting the time past after we sent a package to the terminal + *

+ * Created by leonxtp on 2017/9/17. + * Modified by leonxtp on 2017/9/17 + */ + +public class TimeOutHelper { + + private ITimeOut listener; + + private Handler timeoutHanldler = new Handler(); + + private Runnable timer = new Runnable() { + + @Override + public void run() { + stopTimer(); + if (listener != null) { + listener.onTimeOut(); + } + } + }; + + public void startTimer(ITimeOut timeoutListener, long delay) { + listener = timeoutListener; + timeoutHanldler.postDelayed(timer, delay); + } + + public void stopTimer() { + timeoutHanldler.removeCallbacksAndMessages(null); + } + + public void unRegisterListener() { + listener = null; + } + + public interface ITimeOut { + void onTimeOut(); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModem.java b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModem.java new file mode 100644 index 0000000..99dd061 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModem.java @@ -0,0 +1,581 @@ +package com.yonsz.z1.tcpudp.ymodem; + +import android.content.Context; +import android.util.Log; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.concurrent.atomic.AtomicInteger; + +import static com.yonsz.z1.utils.NettyHandlerUtilTry.sendBleMsg2Server; + + +/** + * THE YMODEM: + * *SENDER: ANDROID APP *------------------------------------------* RECEIVER: BLE DEVICE* + * HELLO BOOTLOADER ---------------------------------------------->* + * <---------------------------------------------------------------* C + * SOH 00 FF filename0fileSizeInByte0MD5[90] ZERO[38] CRC CRC----->* + * <---------------------------------------------------------------* ACK C + * STX 01 FE data[1024] CRC CRC ---------------------------------->* + * <---------------------------------------------------------------* ACK + * STX 02 FF data[1024] CRC CRC ---------------------------------->* + * <---------------------------------------------------------------* ACK + * ... + * ... + *

+ * STX 08 F7 data[1000] CPMEOF[24] CRC CRC ----------------------->* + * <---------------------------------------------------------------* ACK + * EOT ----------------------------------------------------------->* + * <---------------------------------------------------------------* ACK + * SOH 00 FF ZERO[128] ------------------------------------------->* + * <---------------------------------------------------------------* ACK + * <---------------------------------------------------------------* MD5_OK + *

+ * Created by leonxtp on 2017/9/16. + * Modified by leonxtp on 2017/9/16 + */ + +public class YModem implements FileStreamThread.DataRaderListener { + + private static final int STEP_STOPED = -1; + private static final int STEP_HELLO = 0x00; + private static final int STEP_FILE_NAME = 0x01; + private static final int STEP_FILE_BODY = 0x02; + private static final int STEP_EOT = 0x03; + private static final int STEP_END = 0x04; + + + private static final byte ACK = 0x06; /* ACKnowlege */ + private static final byte NAK = 0x15; /* Negative AcKnowlege */ + private static final byte CAN = 0x18; /* CANcel character */ + private static final byte ST_C = 'C'; + private static final String MD5_OK = "MD5_OK"; + private static final String MD5_ERR = "MD5_ERR"; + private static final int MAX_PACKAGE_SEND_ERROR_TIMES = 12;//修改成12 + //the timeout interval for a single package + private static final int PACKAGE_TIME_OUT = 6000; + private static final int MAX_RETRY_COUNT = 5; //最大重试升级次数 + //The file name package was responsed + boolean isAck = false; + // private static int CURR_STEP = STEP_HELLO; + private AtomicInteger CURR_STEP = new AtomicInteger(STEP_HELLO); + private Context mContext; + private String filePath; + private String fileNameString = "LPK001_Android"; + private String fileMd5String = "63e7bb6eed1de3cece411a7e3e8e763b"; + private YModemListener listener; + private TimeOutHelper timerHelper = new TimeOutHelper(); + private FileStreamThread streamThread; + //bytes has been sent of this transmission + private int bytesSent = 0; + //package data of current sending, used for int case of fail + private byte[] currSending = null; + private int packageErrorTimes = 0; + private int retryCount = 0;//重试计数 + //The timeout listener + /*private TimeOutHelper.ITimeOut timeoutListener = new TimeOutHelper.ITimeOut() { + @Override + public void onTimeOut() { + L.f("------ time out ------"); + if (currSending != null) { + handlePackageFail("package timeout..."); + } + } + };*/ + private boolean canceled = false; + + /** + * Construct of the YModemBLE,you may don't need the fileMD5 checking,remove it + * + * @param filePath absolute path of the file + * @param fileNameString file name for sending to the terminal + * @param fileMd5String md5 for terminal checking after transmission finished + * @param listener + */ + public YModem(Context context, String filePath, + String fileNameString, String fileMd5String, + YModemListener listener) { + this.filePath = filePath; + this.fileNameString = fileNameString; + this.fileMd5String = fileMd5String; + this.mContext = context; + this.listener = listener; + } + + /** + * Start the transmission + */ + public void start() { + sayHello(); + } + + /** + * ============================================================================== + * Methods for sending data begin + * ============================================================================== + */ + private void sayHello() { + /*if (!CURR_STEP.compareAndSet(STEP_STOPED, STEP_HELLO)) { + return; + }*/ + if (CURR_STEP.get() != STEP_HELLO) { + return; + } + streamThread = new FileStreamThread(mContext, filePath, this); + // CURR_STEP.set(STEP_HELLO); + + + /*int i = 0; + while (CURR_STEP.get() == STEP_HELLO && i < 200) { + if (canceled) { + return; + } + sendPackageData("d".getBytes()); + try { + + Thread.sleep(100); + + } catch (InterruptedException e) { + stop(); + if (listener != null) { + listener.onFailed("升级失败"); + } + } + i++; + *//* L.f("sayHello!!!"); + byte[] hello = YModemUtil.getYModelHello(); + sendPackageData(hello);*//* + } + + if (CURR_STEP.get() == STEP_HELLO) { + //如果还是在hello状态,发送取消 + sendPackageData("a".getBytes()); + stop(); + if (listener != null) { + listener.onFailed("升级失败"); + } + }*/ + } + + /** + * Stop the transmission when you don't need it or shut it down in accident + */ + public void stop() { + bytesSent = 0; + currSending = null; + packageErrorTimes = 0; + if (streamThread != null) { + streamThread.release(); + } + timerHelper.stopTimer(); + timerHelper.unRegisterListener(); + + CURR_STEP.set(STEP_STOPED); + } + + /** + * Method for the outer caller when received data from the terminall + */ + public void onReceiveData(byte[] respData) { + //Stop the package timer + timerHelper.stopTimer(); + if (respData != null && respData.length > 0) { + if (hasProgrammingError(respData)) { + return; + } + L.f("YModem received " + respData.length + " bytes."); + switch (CURR_STEP.get()) { + case STEP_HELLO: + handleHello(respData); + break; + case STEP_FILE_NAME: + handleFileName(respData); + break; + case STEP_FILE_BODY: + handleFileBody(respData); + break; + case STEP_EOT: + handleEOT(respData); + break; + case STEP_END: + handleEnd(respData); + break; + default: + break; + } + } else { + L.f("The terminal do responsed something, but received nothing??"); + } + } + + private void sendFileName() { + // CURR_STEP.set(STEP_FILE_NAME); + boolean seted = CURR_STEP.compareAndSet(STEP_HELLO, STEP_FILE_NAME); + if (!seted) { + return; + } + if (streamThread == null) { + Log.i("", "streamThread不存在,放弃本次收到的发送文件名的消息"); + return; + } + L.f("sendFileName"); + try { + int fileByteSize = streamThread.getFileByteSize(); + byte[] fileNamePackage = YModemUtil.getFileNamePackage(fileNameString, fileByteSize + , fileMd5String); + sendBleMsg2Server(fileNamePackage); + // sendBleMsg2Server("0100FF3131302E62696E003238373936000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F8F"); + // sendPackageData(fileNamePackage); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void startSendFileData() { + isAck = false; + boolean seted = CURR_STEP.compareAndSet(STEP_FILE_NAME, STEP_FILE_BODY); + if (!seted) { + return; + } + // CURR_STEP.set(STEP_FILE_BODY); + L.f("startSendFileData"); + streamThread.start(); + } + + //Callback from the data reading thread when a data package is ready + @Override + public void onDataReady(byte[] data) { + sendPackageData(data); + // sendBleMsg2Server(data); + } + + private void sendPackageData(byte[] packageData) { + // Log.i("nettyUtil", "packageData" + BytesUtil.bytesToHexString(packageData)); + if (listener != null && packageData != null) { + currSending = packageData; + //Start the timer, it will be cancelled when reponse received, + // or trigger the timeout and resend the current package data + // timerHelper.startTimer(timeoutListener, PACKAGE_TIME_OUT); + listener.onDataReady(packageData); + } + } + + /* The InputStream data reading thread was done */ + @Override + public void onFinish() { + sendEOT(); + } + + private void sendEOT() { + if (!CURR_STEP.compareAndSet(STEP_FILE_BODY, STEP_EOT)) { + return; + } + L.f("sendEOT"); + if (listener != null) { + listener.onDataReady(YModemUtil.getEOT()); + } + } + + private void sendEND() { + if (!CURR_STEP.compareAndSet(STEP_EOT, STEP_END)) { + return; + } + L.f("sendEND"); + if (listener != null) { + try { + listener.onDataReady(YModemUtil.getEnd()); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * ============================================================================== + * Method for handling the response of a package + * ============================================================================== + */ + private void handleHello(byte[] value) { + + try { + String replace = new String(value, "UTF-8"); + if (replace.indexOf("Waiting") != -1) { + Log.i("nettyUtil", "NettyHandlerUtil channelRead()" + "存在包含关系,因为返回的值不等于-1"); + // sendBleMsg2Server("0100FF3131302E62696E003238373936000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F8F"); + // sendBleMsg2Server("0100ff3131302e62696e003238373936003138303663623466656665653265316239386164313735333332393731666233000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005983"); + sendFileName(); + } else { + // handleOthers(replace); + } + } catch (Exception e) { + e.printStackTrace(); + } + /*int character = value[0]; + if (character == ST_C) {//Receive "C" for "HELLO" + L.f("Received 'C'"); + packageErrorTimes = 0; + sendFileName(); + } else { + handleOthers(character); + }*/ + } + + private void handleFileName(byte[] value) { + if (value.length == 2 && value[0] == ACK && value[1] == ST_C) {//Receive 'ACK C' for file name + isAck = true; + packageErrorTimes = 0; + startSendFileData(); + } else if (value.length == 1 && value[0] == ACK) {//Receive 'ST_C' for file name + isAck = true; + L.f("Received 'ACK C'"); + } else if (value[0] == ST_C) {//Receive 'C' for file name, this package should be resent + L.f("Received 'C'"); + if (isAck) { + packageErrorTimes = 0; + startSendFileData(); + } else { + handlePackageFail("Received 'C' without 'ACK' after sent file name"); + } + } else { + if (hasProgrammingError(value)) { + return; + } + handleOthers(value[0]); + } + + /*else { + handleOthers(value[0]); + }*/ + /*if (value.length == 2 && value[0] == ACK && value[1] == ST_C) {//Receive 'ACK C' for file name + L.f("Received 'ACK C'"); + packageErrorTimes = 0; + startSendFileData(); + } else if (value[0] == ST_C) {//Receive 'C' for file name, this package should be resent + L.f("Received 'C'"); + handlePackageFail("Received 'C' without 'ACK' after sent file name"); + } else { + handleOthers(value[0]); + }*/ + } + + private boolean hasProgrammingError(byte[] result) { + try { + String ret = new String(result, "UTF-8"); + return hasProgrammingError(ret); + } catch (UnsupportedEncodingException e) { + + } + return false; + + } + + + private boolean hasProgrammingError(String result) { + if (result.indexOf("Programming Error!") != -1) { + return true; + } + return false; + } + + + private void handleFileBody(byte[] value) { + if (value.length == 1 && value[0] == ACK) {//Receive ACK for file data + L.f("Received 'ACK'"); + packageErrorTimes = 0; + bytesSent += currSending.length; + try { + if (listener != null) { + listener.onProgress(bytesSent, streamThread.getFileByteSize()); + } + } catch (IOException e) { + e.printStackTrace(); + } + streamThread.keepReading(); + } else if (value[0] == ST_C) { + L.f("Received 'C'"); + //Receive C for file data, the ymodem cannot handle this circumstance, transmission failed... + handlePackageFail("Received 'C' after sent file data"); + // handleOthers(value[0]); + } else { + handleOthers(value[0]); + } + } + + private void handleEOT(byte[] value) { + if (value[0] == ACK) { + L.f("Received 'ACK'"); + packageErrorTimes = 0; + sendEND(); + } else { + handleOthers(value[0]); + } + /*else if (value[0] == ST_C) {//As we haven't received ACK, we should resend EOT + handlePackageFail("Received 'C' after sent EOT"); + } else { + handleOthers(value[0]); + }*/ + } + + private void handleEnd(byte[] character) { + try { + String replace = new String(character, "UTF-8"); + if (replace.indexOf("Programming Completed Successfully!") != -1) { + stop(); + if (listener != null) { + listener.onSuccess(); + } + } else if (replace.indexOf("Programming Error!") != -1) { + stop(); + if (listener != null) { + listener.onFailed("升级失败"); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + /*if (character[0] == ACK) {//The last ACK represents that the transmission has been finished, but we should validate the file + L.f("Received 'ACK'"); + packageErrorTimes = 0; + } else if ((new String(character)).equals(MD5_OK)) {//The file data has been checked,Well Done! + L.f("Received 'MD5_OK'"); + stop(); + if (listener != null) { + listener.onSuccess(); + } + } else if ((new String(character)).equals(MD5_ERR)) {//Oops...Transmission Failed... + L.f("Received 'MD5_ERR'"); + stop(); + if (listener != null) { + listener.onFailed("MD5 check failed!!!"); + } + } else { + handleOthers(character[0]); + }*/ + } + + private void handleOthers(int character) { + if (listener != null) { + listener.onFailed("Received NO AP"); + } + stop(); + /*if (character == NAK) {//We need to resend this package as the terminal failed when checking the crc + L.f("Received 'NAK'"); + handlePackageFail("Received NAK"); + } else if (character == CAN) {//Some big problem occurred, transmission failed... + L.f("Received 'CAN'"); + if (listener != null) { + listener.onFailed("Received NO AP"); + } + stop(); + }*/ + } + + //Handle a failed package data ,resend it up to MAX_PACKAGE_SEND_ERROR_TIMES times. + //If still failed, then the transmission failed. + private void handlePackageFail(String reason) { + packageErrorTimes++; + L.f("Fail:" + reason + " for " + packageErrorTimes + " times"); + if (packageErrorTimes < MAX_PACKAGE_SEND_ERROR_TIMES) { + sendPackageData(currSending); + } else { + //Still, we stop the transmission, release the resources + stop(); + if (listener != null) { + listener.onFailed(reason); + } + } + } + + + /** + * @Description: 单次升级失败,稍后会重试,多次重试还是失败将结束本次升级 + * @Author: xiaojunnuo + * @CreateDate: 2018/8/17 0017 11:53 + *//* + private void doFailed(String reason){ + stop(); + clearRetry(); + isAckFilename=false; + if(retryCount>MAX_RETRY_COUNT){ + if (listener != null) { + listener.onFailed(reason); + } + this.doCancel(macId+"重试升级达到最大次数,升级失败"); + log.error("[{}]重试升级达到最大次数,升级失败",macId); + return; + } + + //重试升级 + retryCount++; + //10秒后重试 + retryFuture = executorService.schedule(()->{ + if(canceled){ + return; + } + this.sayHello(); + },10, TimeUnit.SECONDS); + + } + + private void doCancel(String reason){ + stop(); + if (listener != null) { + listener.onFailed(reason); + } + this.canceled = true; + clearRetry(); + clearTimeout(); + } + + public void clearTimeout(){ + if(timeoutFuture!=null && !timeoutFuture.isDone() && !timeoutFuture.isCancelled()){ + timeoutFuture.cancel(true); + timeoutFuture = null; + } + } + + public void clearRetry(){ + if(retryFuture!=null && !retryFuture.isDone() && !retryFuture.isCancelled()){ + retryFuture.cancel(true); + retryFuture = null; + } + }*/ + + public static class Builder { + private Context context; + private String filePath; + private String fileNameString; + private String fileMd5String; + private YModemListener listener; + + public Builder with(Context context) { + this.context = context; + return this; + } + + public Builder filePath(String filePath) { + this.filePath = filePath; + return this; + } + + public Builder fileName(String fileName) { + this.fileNameString = fileName; + return this; + } + + public Builder checkMd5(String fileMd5String) { + this.fileMd5String = fileMd5String; + return this; + } + + public Builder callback(YModemListener listener) { + this.listener = listener; + return this; + } + + public YModem build() { + return new YModem(context, filePath, fileNameString, fileMd5String, listener); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModem1.java b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModem1.java new file mode 100644 index 0000000..098ddcd --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModem1.java @@ -0,0 +1,646 @@ +/* +package com.yonsz.z1.tcpudp.ymodem; + +import com.yonsz.basics.exceptions.ServerException; +import com.yonsz.devicenetty.netty.ota.OtaListener; +import com.yonsz.devicenetty.netty.ota.OtaUpgrader; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +*/ +/** + * THE YMODEM: + * *SENDER: ANDROID APP *------------------------------------------* RECEIVER: BLE DEVICE* + * HELLO BOOTLOADER ---------------------------------------------->* + * <---------------------------------------------------------------* C + * SOH 00 FF filename0fileSizeInByte0MD5[90] ZERO[38] CRC CRC----->* + * <---------------------------------------------------------------* ACK C + * STX 01 FE data[1024] CRC CRC ---------------------------------->* + * <---------------------------------------------------------------* ACK + * STX 02 FF data[1024] CRC CRC ---------------------------------->* + * <---------------------------------------------------------------* ACK + * ... + * ... + *

+ * STX 08 F7 data[1000] CPMEOF[24] CRC CRC ----------------------->* + * <---------------------------------------------------------------* ACK + * EOT ----------------------------------------------------------->* + * <---------------------------------------------------------------* ACK + * SOH 00 FF ZERO[128] ------------------------------------------->* + * <---------------------------------------------------------------* ACK + * <---------------------------------------------------------------* MD5_OK + *

+ * Created by leonxtp on 2017/9/16. + * Modified by leonxtp on 2017/9/16 + *//* + + +public class YModem1 implements FileStreamThread.DataRaderListener,OtaUpgrader { + + private static Logger log = LoggerFactory.getLogger(YModem.class); + private static final int STEP_STOPED = -1; + private static final int STEP_HELLO = 0x00; + private static final int STEP_FILE_NAME = 0x01; + private static final int STEP_FILE_BODY = 0x02; + private static final int STEP_EOT = 0x03; + private static final int STEP_END = 0x04; + + private static final byte ACK = 0x06; */ +/* ACKnowlege *//* + + private static final byte NAK = 0x15; */ +/* Negative AcKnowlege *//* + + private static final byte CAN = 0x18; */ +/* CANcel character *//* + + private static final byte ST_C = 'C'; + private static final String MD5_OK = "MD5_OK"; + private static final String MD5_ERR = "MD5_ERR"; + private static final int MAX_PACKAGE_SEND_ERROR_TIMES = 12; + private static final int MAX_RETRY_COUNT = 5; //最大重试升级次数 + //the timeout interval for a single package + private static final int PACKAGE_TIME_OUT = 6000; + + private String filePath; + private String fileNameString = "LPK001_Android"; + private String fileMd5String = "63e7bb6eed1de3cece411a7e3e8e763b"; + private OtaListener listener; + + + private String macId; + private int retryCount=0;//重试计数 + + private AtomicInteger CURR_STEP = new AtomicInteger(STEP_STOPED); + private FileStreamThread streamThread; + + //bytes has been sent of this transmission + private int bytesSent = 0; + //package data of current sending, used for int case of fail + private byte[] currSending = null; + private int packageErrorTimes = 0; + + + private ScheduledExecutorService executorService; + private ScheduledFuture retryFuture; + private ScheduledFuture timeoutFuture; + + */ +/** + * Construct of the YModemBLE,you may don't need the fileMD5 checking,remove it + * + * @param filePath absolute path of the file + * @param fileNameString file name for sending to the terminal + * @param fileMd5String md5 for terminal checking after transmission finished + * @param listener + *//* + + public YModem(ScheduledExecutorService executorService, String macId,String filePath, + String fileNameString, String fileMd5String, + OtaListener listener) { + this.macId = macId; + this.filePath = filePath; + this.fileNameString = fileNameString; + this.fileMd5String = fileMd5String; + this.listener = listener; + this.executorService = executorService; + } + + + */ +/** + * Start the transmission + *//* + + @Override + public void start() { + + //注册最大超时时间任务,10分钟后还是失败,则取消升级 + timeoutFuture = executorService.schedule(()->{ + doTimeout(); + },10,TimeUnit.MINUTES); + + if(listener!=null){ + listener.onStart(); + } + + sayHello(); + } + + */ +/** + * Stop the transmission when you don't need it or shut it down in accident + *//* + + public void stop() { + bytesSent = 0; + currSending = null; + packageErrorTimes = 0; + if (streamThread != null) { + streamThread.release(); + streamThread = null; + } + + CURR_STEP.set(STEP_STOPED); + } + + */ +/** + * Method for the outer caller when received data from the terminal + *//* + + @Override + public void onReceiveData(byte[] respData) { + if(log.isDebugEnabled()){ + try { + String value = new String(respData,"UTF-8"); + log.debug("[{}]收到ota升级消息,{}",macId,value); + } catch (UnsupportedEncodingException e) { + log.error(e.getMessage(),e); + } + } + + //Stop the package timer + if (respData != null && respData.length > 0) { + log.debug("[{}],YModem received {} bytes. currStep:{}",macId,respData.length,CURR_STEP); + if(hasProgrammingError(respData)) { + return; + } + try { + switch (CURR_STEP.get()) { + case STEP_HELLO: + handleHello(respData); + break; + case STEP_FILE_NAME: + handleFileName(respData); + break; + case STEP_FILE_BODY: + handleFileBody(respData); + break; + case STEP_EOT: + handleEOT(respData); + break; + case STEP_END: + handleEnd(respData); + break; + default: + break; + } + }catch (Exception e){ + log.error("升级失败:"+e.getMessage(),e); + doFailed("升级失败:"+e.getMessage()); + } + + } else { + log.debug("[{}]--The terminal do responsed something, but received nothing??",macId); + } + } + + + */ +/** + * ============================================================================== + * Methods for sending data begin + * ============================================================================== + *//* + + private void sayHello() { + if( !CURR_STEP.compareAndSet(STEP_STOPED,STEP_HELLO) ){ + return; + } + streamThread = new FileStreamThread( filePath, this); + + + log.debug("[{}]sayHello!!!",macId); + // byte[] hello = YModemUtil.getYModelHello(); + + int i=0; + while (CURR_STEP.get() == STEP_HELLO && i<200 ) { + if(canceled){ + return; + } + sendPackageData("d".getBytes()); + try { + + Thread.sleep(100); + + } catch (InterruptedException e) { + log.warn(e.getMessage(),e); + doFailed("休眠被打断"); + } + i++; + } + + if(CURR_STEP.get() == STEP_HELLO){ + log.warn("[{}]say hello 失败,取消本次升级",macId); + //如果还是在hello状态,发送取消 + sendPackageData("a".getBytes()); + + doFailed(macId+"say hello 失败"); + } + } + + private void sendFileName() { + + boolean seted = CURR_STEP.compareAndSet(STEP_HELLO,STEP_FILE_NAME); + if(!seted){ + return; + } + if(streamThread == null){ + log.warn("streamThread不存在,放弃本次收到的发送文件名的消息"); + return; + } + + log.debug("[{}]sendFileName",macId); + try { + int fileByteSize = streamThread.getFileByteSize(); + byte[] fileNamePackage = YModemUtil.getFileNamePackage(fileNameString, fileByteSize, fileMd5String); + sendPackageData(fileNamePackage); + if(listener!=null){ + listener.onSendName(); + } + } catch (Exception e) { + log.error("发送文件名失败:{}",e.getMessage(),e); + this.doFailed("发送文件名失败"); + + } + } + + private void startSendFileData() { + boolean seted = CURR_STEP.compareAndSet(STEP_FILE_NAME ,STEP_FILE_BODY); + if(!seted){ + return; + } + log.debug("[{}]startSendFileData",macId); + if(listener!=null){ + listener.onStartSendData(); + } + streamThread.start(); + } + + //Callback from the data reading thread when a data package is ready + @Override + public void onDataReady(byte[] data) { + sendPackageData(data); + } + + private void sendEOT() { + if(!CURR_STEP.compareAndSet(STEP_FILE_BODY, STEP_EOT)){ + return; + } + log.debug("[{}]sendEOT",macId); + sendPackageData(YModemUtil.getEOT()); + + } + + private void sendEND() { + if( !CURR_STEP.compareAndSet( STEP_EOT,STEP_END)){ + return ; + } + log.debug("[{}]sendEND",macId); + try { + sendPackageData(YModemUtil.getEnd()); + } catch (IOException e) { + log.error(e.getMessage(),e); + doFailed(macId+"sendEnd失败"); + } + } + + private void sendPackageData(byte[] packageData) { + if (listener != null && packageData != null) { + currSending = packageData; + //Start the timer, it will be cancelled when reponse received, + // or trigger the timeout and resend the current package data + try { + listener.onDataReady(packageData); + }catch (ServerException e){ + log.error(e.getMessage(),e); + doCancel("macId"+e.getMessage()); + } + + } + } + + */ +/** + * ============================================================================== + * Method for handling the response of a package + * ============================================================================== + *//* + + private void handleHello(byte[] value) { + //判断最后一个字符是否是大写的C + int character = value[value.length-1]; + if( character== ST_C){ + log.debug("[{}]Received 'C'",macId); + packageErrorTimes = 0; + sendFileName(); + }else{ + handleOthers(value); + } + + + } + + boolean isAckFilename = false; + //The file name package was responsed + private void handleFileName(byte[] value) { + if (value.length == 2 && value[0] == ACK && value[1] == ST_C) {//Receive 'ACK C' for file name + log.debug("[{}]Received 'ACK C'",macId); + isAckFilename = true; + packageErrorTimes = 0; + startSendFileData(); + }else if(value.length == 1 && value[0] == ACK){ + log.debug("[{}]Received 'ACK'",macId); + isAckFilename = true; + } else if (value[0] == ST_C) {//Receive 'C' for file name, this package should be resent + log.debug("[{}]Received 'C'",macId); + if(isAckFilename){ + packageErrorTimes = 0; + startSendFileData(); + }else{ + log.debug("[{}]Received 'C'",macId); + handlePackageFail(macId+"Received 'C' without 'ACK' after sent file name"); + } + } else { + if(hasProgrammingError(value)) { + return; + } + handleOthers(value); + } + } + + private void handleFileBody(byte[] value) { + if (value.length == 1 && value[0] == ACK) {//Receive ACK for file data + log.debug("[{}]handleFileBody : Received 'ACK'",macId); + packageErrorTimes = 0; + bytesSent += currSending.length; + try { + if (listener != null) { + listener.onProgress(bytesSent, streamThread.getFileByteSize()); + } + } catch (IOException e) { + log.error(e.getMessage(),e); + } + streamThread.keepReading(); + + } else if (value.length == 1 && value[0] == ST_C) { + log.debug("[{}]Received 'C'",macId); + //Receive C for file data, the ymodem cannot handle this circumstance, transmission failed... + handlePackageFail(macId+"Received 'C' after sent file data"); + } else { + handleOthers(value); + } + } + + private void handleEOT(byte[] value) { + if (value[0] == ACK) { + log.debug("[{}]Received 'ACK'",macId); + packageErrorTimes = 0; + sendEND(); + } else if (value[0] == ST_C) {//As we haven't received ACK, we should resend EOT + handlePackageFail(macId+"Received 'C' after sent EOT"); + } else { + handleOthers(value); + } + } + + private boolean hasProgrammingError(byte[] result){ + try { + String ret = new String(result, "UTF-8"); + return hasProgrammingError(ret); + } catch (UnsupportedEncodingException e) { + this.doFailed("结果转字符串错误:"+e.getMessage()); + } + return false; + } + private boolean hasProgrammingError(String result){ + if (result.indexOf("Programming Error!") != -1) { + log.debug("[{}]升级失败",macId); + doFailed(macId+"升级失败"); + return true; + } + + if(this.CURR_STEP.get() > STEP_HELLO ){ + return this.hasNoApError(result); + } + + return false; + } + + private boolean hasNoApError(String result){ + + if(result.indexOf("No AP") !=-1){ + log.debug("[{}]升级失败:No AP",macId); + doFailed(macId+"升级失败:No AP"); + return true; + } + return false; + } + + private void handleEnd(byte[] character) { + log.debug("handle End"); + try { + String replace = new String(character, "UTF-8"); + log.debug(replace); + if (replace.indexOf("Programming Completed Successfully!") != -1) { + log.debug("[{}]升级成功",macId); + doSuccess(); + return; + } + } catch (Exception e) { + log.error(e.getMessage(),e); + doFailed("未知错误,升级失败"); + return; + } + + if (character[0] == ACK) {//The last ACK represents that the transmission has been finished, but we should validate the file + log.debug("[{}]Received 'ACK',升级成功",macId); + doSuccess(); + packageErrorTimes = 0; + } else if ((new String(character)).equals(MD5_OK)) {//The file data has been checked,Well Done! + log.debug("[{}]Received 'MD5_OK'",macId); + doSuccess(); + } else if ((new String(character)).equals(MD5_ERR)) {//Oops...Transmission Failed... + log.debug("[{}]Received 'MD5_ERR'",macId); + doFailed(macId+"升级失败"); + } else { + handleOthers(character); + } + } + + + + private void handleOthers(byte[] value) { + int character = value[0]; + if (character == NAK) {//We need to resend this package as the terminal failed when checking the crc + log.debug("[{}]Received 'NAK'",macId); + handlePackageFail(macId+"Received NAK"); + return; + } else if (character == CAN) {//Some big problem occurred, transmission failed... + log.debug("[{}]Received 'CAN'",macId); + doFailed(macId+"Received CAN"); + return; + } + + if(hasProgrammingError(value)) { + return; + } + + } + + //Handle a failed package data ,resend it up to MAX_PACKAGE_SEND_ERROR_TIMES times. + //If still failed, then the transmission failed. + private void handlePackageFail(String reason) { + packageErrorTimes++; + log.debug("[{}]Fail:" + reason + " for " + packageErrorTimes + " times",macId); + //if(packageErrorTimes%1==0){//累计3次收到c,就重发一次 + if (packageErrorTimes < MAX_PACKAGE_SEND_ERROR_TIMES) { + sendPackageData(currSending); + } else { + //Still, we stop the transmission, release the resources + doFailed(macId+"多次尝试重发后失败"); + } + // } + + } + + */ +/* The InputStream data reading thread was done *//* + + @Override + public void onFinish() { + sendEOT(); + } + + + + */ +/** + * @Description: 外部取消升级 + * @Author: xiaojunnuo + * @CreateDate: 14:17 + *//* + + @Override + public void cancel(String reason) { + this.doCancel(reason); + } + + + + //------------------事件处理--------------------- + + + */ +/** + * @Description: 升级成功 + * @Author: xiaojunnuo + * @CreateDate: 2018/8/17 0017 11:55 + *//* + + private void doSuccess() { + stop(); + if (listener != null) { + listener.onSuccess(); + } + + clearRetry(); + clearTimeout(); + } + + */ +/** + * @Description: 单次升级失败,稍后会重试,多次重试还是失败将结束本次升级 + * @Author: xiaojunnuo + * @CreateDate: 2018/8/17 0017 11:53 + *//* + + private void doFailed(String reason){ + stop(); + clearRetry(); + isAckFilename=false; + if(retryCount>MAX_RETRY_COUNT){ + if (listener != null) { + listener.onFailed(reason); + } + this.doCancel(macId+"重试升级达到最大次数,升级失败"); + log.error("[{}]重试升级达到最大次数,升级失败",macId); + return; + } + + //重试升级 + retryCount++; + //10秒后重试 + retryFuture = executorService.schedule(()->{ + if(canceled){ + return; + } + this.sayHello(); + },10,TimeUnit.SECONDS); + + } + + + */ +/** + * @Description: 完全结束本次升级 + * @Author: xiaojunnuo + * @CreateDate: 2018/8/17 0017 11:54 + *//* + + private boolean canceled = false; + private void doCancel(String reason){ + stop(); + if (listener != null) { + listener.onFailed(macId+reason); + } + this.canceled = true; + clearRetry(); + clearTimeout(); + } + + public void clearTimeout(){ + if(timeoutFuture!=null && !timeoutFuture.isDone() && !timeoutFuture.isCancelled()){ + timeoutFuture.cancel(true); + timeoutFuture = null; + } + } + + public void clearRetry(){ + if(retryFuture!=null && !retryFuture.isDone() && !retryFuture.isCancelled()){ + retryFuture.cancel(true); + retryFuture = null; + } + } + + */ +/** + * @Description: 升级超时,本次任务取消 + * @Author: xiaojunnuo + * @CreateDate: 2018/8/17 0017 11:54 + *//* + + private void doTimeout(){ + stop(); + clearRetry(); + if (listener != null) { + listener.onFailed(macId+",ota升级超时,任务取消"); + } + this.canceled =true; + + + } + + + + +} +*/ diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModemListener.java b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModemListener.java new file mode 100644 index 0000000..a921d4c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModemListener.java @@ -0,0 +1,20 @@ +package com.yonsz.z1.tcpudp.ymodem; + +/** + * Listener of the transmission process + */ +public interface YModemListener { + + /* the data package has been encapsulated */ + void onDataReady(byte[] data); + + /*just the file data progress*/ + void onProgress(int currentSent, int total); + + /* the file has been correctly sent to the terminal */ + void onSuccess(); + + /* the task has failed with several remedial measures like retrying some times*/ + void onFailed(String reason); + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModemUtil.java b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModemUtil.java new file mode 100644 index 0000000..b25a51f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/tcpudp/ymodem/YModemUtil.java @@ -0,0 +1,141 @@ +package com.yonsz.z1.tcpudp.ymodem; + +import android.content.Context; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; + +/** + * Util for encapsulating data package of ymodem protocol + *

+ * Created by leonxtp on 2017/9/16. + * Modified by leonxtp on 2017/9/16 + */ + +public class YModemUtil { + + /*This is my concrete ymodem start signal, customise it to your needs*/ + private static final String HELLO = "HELLO BOOTLOADER"; + + private static final byte SOH = 0x01; /* Start Of Header with data size :128*/ + private static final byte STX = 0x02; /* Start Of Header with data size : 1024*/ + private static final byte EOT = 0x04; /* End Of Transmission */ + private static final byte CPMEOF = 0x1A;/* Fill the last package if not long enough */ + + private static CRC16 crc16 = new CRC16(); + + /** + * Get the first package data for hello with a terminal + */ + public static byte[] getYModelHello() { + return HELLO.getBytes(); + } + + /** + * Get the file name package data + * + * @param fileNameString file name in String + * @param fileByteSize file byte size of int value + * @param fileMd5String the md5 of the file in String + */ + public static byte[] getFileNamePackage(String fileNameString, + int fileByteSize, + String fileMd5String) throws IOException { + + byte seperator = 0x0; + String fileSize = fileByteSize + ""; + byte[] byteFileSize = fileSize.getBytes(); + + byte[] fileNameBytes1 = concat(fileNameString.getBytes(), + new byte[]{seperator}, + byteFileSize); + + byte[] fileNameBytes2 = Arrays.copyOf(concat(fileNameBytes1, + new byte[]{seperator}, + new byte[]{seperator}), 128); + + byte seq = 0x00; + return getDataPackage(fileNameBytes2, 128, seq); + } + + private static byte[] concat(byte[] a, byte[] b, byte[] c) { + int aLen = a.length; + int bLen = b.length; + int cLen = c.length; + byte[] concated = new byte[aLen + bLen + cLen]; + System.arraycopy(a, 0, concated, 0, aLen); + System.arraycopy(b, 0, concated, aLen, bLen); + System.arraycopy(c, 0, concated, aLen + bLen, cLen); + return concated; + } + + /** + * Get a encapsulated package data block + * + * @param block byte data array + * @param dataLength the actual content length in the block without 0 filled in it. + * @param sequence the package serial number + * @return a encapsulated package data block + */ + public static byte[] getDataPackage(byte[] block, int dataLength, byte sequence) throws IOException { + + byte[] header = getDataHeader(sequence, block.length == 1024 ? STX : SOH); + + //The last package, fill CPMEOF if the dataLength is not sufficient + if (dataLength < block.length) { + int startFil = dataLength; + while (startFil < block.length) { + block[startFil] = CPMEOF; + startFil++; + } + } + + //We should use short size when writing into the data package as it only needs 2 bytes + short crc = (short) crc16.calcCRC(block); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(baos); + dos.writeShort(crc); + dos.close(); + + byte[] crcBytes = baos.toByteArray(); + + return concat(header, block, crcBytes); + } + + private static byte[] getDataHeader(byte sequence, byte start) { + //The serial number of the package increases Cyclically up to 256 + byte modSequence = (byte) (sequence % 0x256); + byte complementSeq = (byte) ~modSequence; + + return concat(new byte[]{start}, + new byte[]{modSequence}, + new byte[]{complementSeq}); + } + + /** + * Get the EOT package + */ + public static byte[] getEOT() { + return new byte[]{EOT}; + } + + /** + * Get the Last package + */ + public static byte[] getEnd() throws IOException { + byte seq = 0x00; + return getDataPackage(new byte[128], 128, seq); + } + + /** + * Get InputStream from Assets, you can customize it from the other sources + * + * @param fileAbsolutePath absolute path of the file in asstes + */ + public static InputStream getInputStream(Context context, String fileAbsolutePath) throws IOException { + return new InputStreamSource().getStream(context, fileAbsolutePath); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/AddressNameUtil.java b/app/src/main/java/com/yonsz/z1/utils/AddressNameUtil.java new file mode 100644 index 0000000..a83b4ec --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/AddressNameUtil.java @@ -0,0 +1,1664 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.view.View; +import android.widget.ImageView; + +import com.common.openapi.entity.DeviceDetailListData; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.database.entity.entity5.AllDeviceEntity; +import com.yonsz.z1.database.entity.entity5.AutomationEntity; +import com.yonsz.z1.database.entity.entity5.ThemeEntity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.net.Constans; + +import java.util.ArrayList; +import java.util.List; + +import static com.yonsz.z1.net.Constans.AIR_CLEANER; +import static com.yonsz.z1.net.Constans.AIR_TAG; +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.CARD_ACCESS; +import static com.yonsz.z1.net.Constans.CAT_EYE; +import static com.yonsz.z1.net.Constans.CLOTHES_HANGER; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.FAN_TAG; +import static com.yonsz.z1.net.Constans.FLOOR_HEATING; +import static com.yonsz.z1.net.Constans.FRESH_AIR; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.GATE_WAY; +import static com.yonsz.z1.net.Constans.INDEPENDENT_CODE_AC; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.KUQI_PANEL; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MOVIE_CAMERA; +import static com.yonsz.z1.net.Constans.MULTIFUNCTIONAL_CONTROLLER; +import static com.yonsz.z1.net.Constans.MUSIC_TAG; +import static com.yonsz.z1.net.Constans.RGB_LIGHT; +import static com.yonsz.z1.net.Constans.SAFETY_ACOUSTO_OPTIC; +import static com.yonsz.z1.net.Constans.SAFETY_DISPLACEMENT; +import static com.yonsz.z1.net.Constans.SAFETY_VALVE; +import static com.yonsz.z1.net.Constans.SAFETY_WIRELESS_REMOTE; +import static com.yonsz.z1.net.Constans.SAFE_DEVICE_TAG; +import static com.yonsz.z1.net.Constans.SECURITY_MANIPULATOR; +import static com.yonsz.z1.net.Constans.SECURITY_TRIGGER; +import static com.yonsz.z1.net.Constans.SERVICE_PANEL_485; +import static com.yonsz.z1.net.Constans.SITUATIONAL_PANEL; +import static com.yonsz.z1.net.Constans.SITUATIONAL_TRIGGER; +import static com.yonsz.z1.net.Constans.SKYWORTH_TV; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.SWEEP_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TEMP_CONTROL; +import static com.yonsz.z1.net.Constans.TVONE_TAG; +import static com.yonsz.z1.net.Constans.TV_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WINDOW_OPENER; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; + +/** + * Created by Administrator on 2018/8/8. + */ + +public class AddressNameUtil { + private static AllDeviceEntity allDeviceEntity; + private static TimeSetEntity modelEntity; + private static DeviceEntityV4 entityV4; + private static ThemeEntity themeEntity; + private static List datas; + + public static List getDatas() { + if (datas == null) { + return new ArrayList<>(); + } + return datas; + } + + public static void setDatas(List datas) { + AddressNameUtil.datas = datas; + } + + public static void setInstance(DeviceEntityV4 entity) { + entityV4 = entity; + } + + public static void setInstance(ThemeEntity theme) { + themeEntity = theme; + } + + public static void setInstance(TimeSetEntity timeSetEntity) { + modelEntity = timeSetEntity; + } + + public static void setInstance(AllDeviceEntity deviceEntity) { + allDeviceEntity = deviceEntity; + } + + public static String getModelId(String modelName) { + String modelId = ""; + if (null != modelEntity) { + for (int i = 0; i < modelEntity.getObj().size(); i++) { + if (modelEntity.getObj().get(i).getModelName().equals(modelName)) { + modelId = modelEntity.getObj().get(i).getModelId(); + } + } + } + return modelId; + } + + public static String getThemeIcon(String themeId) { + if (Integer.parseInt(themeId) > 200) { + themeId = "254"; + } + String themeIcon = ""; + if (null != themeEntity) { + for (int i = 0; i < themeEntity.getData().getIcons().size(); i++) { + if (themeEntity.getData().getIcons().get(i).getCode().equals(themeId)) { + themeIcon = themeEntity.getData().getIcons().get(i).getIcon(); + } + } + if (themeIcon.isEmpty()) { + themeIcon = themeEntity.getData().getIcons().get(themeEntity.getData().getIcons().size() - 1).getIcon(); + } + } + return themeIcon; + } + + public static ArrayList getModelList() { + ArrayList modelList = new ArrayList<>(); + if (null != modelEntity) { + for (int i = 0; i < modelEntity.getObj().size(); i++) { + modelList.add(modelEntity.getObj().get(i).getModelName()); + } + } + return modelList; + } + + public static String getAddressName(String addressId) { + String addressName = ""; + switch (addressId) { + case "0": + addressName = "其他"; + break; + case "1": + addressName = "客厅"; + break; + case "2": + addressName = "主卧"; + break; + case "3": + addressName = "次卧"; + break; + case "4": + addressName = "儿童房"; + break; + case "5": + addressName = "书房"; + break; + case "6": + addressName = "厨房"; + break; + case "7": + addressName = "餐厅"; + break; + case "8": + addressName = "阳台"; + break; + case "9": + addressName = "门口"; + break; + case "10": + addressName = "卫生间"; + break; + case "11": + addressName = "洗手间"; + break; + case "12": + addressName = "公司"; + break; + case "13": + addressName = "车库"; + break; + case "50": + addressName = "客房"; + break; + case "51": + addressName = "老人房"; + break; + case "52": + addressName = "娱乐室"; + break; + case "53": + addressName = "影音室"; + break; + case "54": + addressName = "休息室"; + break; + case "55": + addressName = "工作室"; + break; + case "56": + addressName = "游戏室"; + break; + case "57": + addressName = "浴室"; + break; + case "58": + addressName = "地下室"; + break; + case "59": + addressName = "楼梯间"; + break; + case "60": + addressName = "杂物间"; + break; + case "61": + addressName = "门口"; + break; + case "62": + addressName = "走廊"; + break; + case "63": + addressName = "前院"; + break; + case "64": + addressName = "后院"; + break; + case "65": + addressName = "花园"; + break; + default: + addressName = "其他"; + if (null != allDeviceEntity) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + if (allDeviceEntity.getData().get(i).getAddressType().getCode().equals(addressId)) { + addressName = allDeviceEntity.getData().get(i).getAddressType().getName(); + } + } + } + break; + } + return addressName; + } + + public static void setAddressIcon(Context context, ImageView imageView, String addressId) { + String addressName = ""; + if (AppIdUtil.isStandard()) { + switch (addressId) { + case "0": + addressName = "其他"; + imageView.setImageResource(R.drawable.icon_not_set); + break; + case "1": + addressName = "客厅"; + imageView.setImageResource(R.drawable.icon_position_parlour); + break; + case "2": + addressName = "主卧"; + imageView.setImageResource(R.drawable.icon_position_bedroom); + break; + case "3": + addressName = "次卧"; + imageView.setImageResource(R.drawable.icon_position_second_lie); + break; + case "4": + addressName = "儿童房"; + imageView.setImageResource(R.drawable.icon_position_children); + break; + case "5": + addressName = "书房"; + imageView.setImageResource(R.drawable.icon_position_study); + break; + case "6": + addressName = "厨房"; + imageView.setImageResource(R.drawable.icon_position_kitchen); + break; + case "7": + addressName = "餐厅"; + imageView.setImageResource(R.drawable.icon_position_restaurant); + break; + case "8": + addressName = "阳台"; + imageView.setImageResource(R.drawable.icon_position_balcony); + break; + case "9": + addressName = "门口"; + imageView.setImageResource(R.drawable.icon_doorway); + break; + case "10": + addressName = "卫生间"; + imageView.setImageResource(R.drawable.icon_position_toilet); + break; + case "11": + addressName = "洗手间"; + imageView.setImageResource(R.drawable.icon_position_restroom); + break; + case "12": + addressName = "公司"; + imageView.setImageResource(R.drawable.icon_lavatory); + break; + case "13": + addressName = "车库"; + imageView.setImageResource(R.drawable.icon_lavatory); + break; + case "50": + addressName = "客房"; + imageView.setImageResource(R.drawable.icon_guest_room); + break; + case "51": + addressName = "老人房"; + imageView.setImageResource(R.drawable.icon_elderly_house); + break; + case "52": + addressName = "娱乐室"; + imageView.setImageResource(R.drawable.icon_dayroom); + break; + case "53": + addressName = "影音室"; + imageView.setImageResource(R.drawable.icon_video_studio); + break; + case "54": + addressName = "休息室"; + imageView.setImageResource(R.drawable.icon_lounge); + break; + case "55": + addressName = "工作室"; + imageView.setImageResource(R.drawable.icon_studio); + break; + case "56": + addressName = "游戏室"; + imageView.setImageResource(R.drawable.icon_playroom); + break; + case "57": + addressName = "浴室"; + imageView.setImageResource(R.drawable.icon_bathroom); + break; + case "58": + addressName = "地下室"; + imageView.setImageResource(R.drawable.icon_cellar); + break; + case "59": + addressName = "楼梯间"; + imageView.setImageResource(R.drawable.icon_staircase); + break; + case "60": + addressName = "杂物间"; + imageView.setImageResource(R.drawable.icon_varia); + break; + case "61": + addressName = "其他"; + imageView.setImageResource(R.drawable.icon_varia); + break; + case "62": + addressName = "走廊"; + imageView.setImageResource(R.drawable.icon_corridor); + break; + case "63": + addressName = "前院"; + imageView.setImageResource(R.drawable.icon_foreyard); + break; + case "64": + addressName = "后院"; + imageView.setImageResource(R.drawable.icon_backyard); + break; + case "65": + addressName = "花园"; + imageView.setImageResource(R.drawable.icon_garden); + break; + default: + /*addressName = "其他"; + imageView.setImageResource(R.drawable.icon_room);*/ + + if (null != allDeviceEntity) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + AllDeviceEntity.DataBean.AddressTypeBean addressType = allDeviceEntity.getData().get(i).getAddressType(); + if (addressType.getCode().equals(addressId)) { + com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(addressType.getIcon(), imageView, UniKongApp.getHiApp().getImageLoaderOption()); + } + + } + } + break; + } + } else { + switch (addressId) { + case "0": + addressName = "其他"; + break; + case "1": + addressName = "客厅"; + imageView.setImageResource(R.drawable.icon_saloon); + break; + case "2": + addressName = "主卧"; + imageView.setImageResource(R.drawable.icon_master_bedroom); + break; + case "3": + addressName = "次卧"; + imageView.setImageResource(R.drawable.icon_bedroom); + break; + case "4": + addressName = "儿童房"; + imageView.setImageResource(R.drawable.icon_children); + break; + case "5": + addressName = "书房"; + imageView.setImageResource(R.drawable.icon_study); + break; + case "6": + addressName = "厨房"; + imageView.setImageResource(R.drawable.icon_kitchen); + break; + case "7": + addressName = "餐厅"; + imageView.setImageResource(R.drawable.icon_restaurant); + break; + case "8": + addressName = "阳台"; + imageView.setImageResource(R.drawable.icon_balcony); + break; + case "9": + addressName = "门口"; + imageView.setImageResource(R.drawable.icon_doorway); + break; + case "10": + addressName = "卫生间"; + imageView.setImageResource(R.drawable.icon_toilet); + break; + case "11": + addressName = "洗手间"; + imageView.setImageResource(R.drawable.icon_lavatory); + break; + case "12": + addressName = "公司"; + imageView.setImageResource(R.drawable.icon_lavatory); + break; + case "13": + addressName = "车库"; + imageView.setImageResource(R.drawable.icon_lavatory); + break; + case "50": + addressName = "客房"; + imageView.setImageResource(R.drawable.icon_guest_room); + break; + case "51": + addressName = "老人房"; + imageView.setImageResource(R.drawable.icon_elderly_house); + break; + case "52": + addressName = "娱乐室"; + imageView.setImageResource(R.drawable.icon_dayroom); + break; + case "53": + addressName = "影音室"; + imageView.setImageResource(R.drawable.icon_video_studio); + break; + case "54": + addressName = "休息室"; + imageView.setImageResource(R.drawable.icon_lounge); + break; + case "55": + addressName = "工作室"; + imageView.setImageResource(R.drawable.icon_studio); + break; + case "56": + addressName = "游戏室"; + imageView.setImageResource(R.drawable.icon_playroom); + break; + case "57": + addressName = "浴室"; + imageView.setImageResource(R.drawable.icon_bathroom); + break; + case "58": + addressName = "地下室"; + imageView.setImageResource(R.drawable.icon_cellar); + break; + case "59": + addressName = "楼梯间"; + imageView.setImageResource(R.drawable.icon_staircase); + break; + case "60": + addressName = "杂物间"; + imageView.setImageResource(R.drawable.icon_varia); + break; + case "61": + addressName = "其他"; + imageView.setImageResource(R.drawable.icon_varia); + break; + case "62": + addressName = "走廊"; + imageView.setImageResource(R.drawable.icon_corridor); + break; + case "63": + addressName = "前院"; + imageView.setImageResource(R.drawable.icon_foreyard); + break; + case "64": + addressName = "后院"; + imageView.setImageResource(R.drawable.icon_backyard); + break; + case "65": + addressName = "花园"; + imageView.setImageResource(R.drawable.icon_garden); + break; + default: + /*addressName = "其他"; + imageView.setImageResource(R.drawable.icon_room);*/ + + if (null != allDeviceEntity) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + AllDeviceEntity.DataBean.AddressTypeBean addressType = allDeviceEntity.getData().get(i).getAddressType(); + if (addressType.getCode().equals(addressId)) { + com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(addressType.getIcon(), imageView, UniKongApp.getHiApp().getImageLoaderOption()); + } + + } + } + break; + } + } + } + + public static String getAiNameAndState(String ziId) { + String aiName = ""; + if (null != allDeviceEntity) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + List devices = allDeviceEntity.getData().get(i).getDevices(); + for (int j = 0; j < devices.size(); j++) { + if (devices.get(j).getDeviceType().equals("000") && devices.get(j).getZiId().equals(ziId)) { + if (devices.get(j).getOnline().equals("1")) { + aiName = devices.get(j).getName() + "(在线)"; + } else { + aiName = devices.get(j).getName() + "(离线)"; + } + + } + } + } + } + return aiName; + } + + public static String getAiOnlineState(String ziId) { + String aiOnlineState = ""; + if (null != allDeviceEntity) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + List devices = allDeviceEntity.getData().get(i).getDevices(); + for (int j = 0; j < devices.size(); j++) { + if (devices.get(j).getDeviceType().equals("000") && devices.get(j).getZiId().equals(ziId)) { + aiOnlineState = devices.get(j).getOnline(); + } + } + } + } + return aiOnlineState; + } + + public static String getAddressId(String addressName) { + String addressId = ""; + switch (addressName) { + case "其他": + addressId = "0"; + break; + case "客厅": + addressId = "1"; + break; + case "主卧": + addressId = "2"; + break; + case "次卧": + addressId = "3"; + break; + case "儿童房": + addressId = "4"; + break; + case "书房": + addressId = "5"; + break; + case "厨房": + addressId = "6"; + break; + case "餐厅": + addressId = "7"; + break; + case "阳台": + addressId = "8"; + break; + case "门口": + addressId = "9"; + break; + case "卫生间": + addressId = "10"; + break; + case "洗手间": + addressId = "11"; + break; + case "公司": + addressId = "12"; + break; + case "车库": + addressId = "13"; + break; + case "客房": + addressId = "50"; + break; + case "老人房": + addressId = "51"; + break; + case "娱乐室": + addressId = "52"; + break; + case "影音室": + addressId = "53"; + break; + case "休息室": + addressId = "54"; + break; + case "工作室": + addressId = "55"; + break; + case "游戏室": + addressId = "56"; + break; + case "浴室": + addressId = "57"; + break; + case "地下室": + addressId = "58"; + break; + case "楼梯间": + addressId = "59"; + break; + case "杂物间": + addressId = "60"; + break; + case "走廊": + addressId = "62"; + break; + case "前院": + addressId = "63"; + break; + case "后院": + addressId = "64"; + break; + case "花园": + addressId = "65"; + break; + default: + addressId = "0"; + if (null != allDeviceEntity) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + if (allDeviceEntity.getData().get(i).getAddressType().getName().equals(addressName)) { + addressId = allDeviceEntity.getData().get(i).getAddressType().getCode(); + } + } + } + break; + } + return addressId; + } + + public static String getAiModel(String ziId) { + String aiModel = ""; + if (null != allDeviceEntity) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + List devices = allDeviceEntity.getData().get(i).getDevices(); + for (int j = 0; j < devices.size(); j++) { + if (devices.get(j).getDeviceType().equals("000") && devices.get(j).getZiId().equals(ziId)) { + aiModel = devices.get(j).getDeviceModel(); + } + } + } + } + return aiModel; + } + + public static String getAiIcon(String ziId) { + String aiIcon = ""; + if (null != allDeviceEntity) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + List devices = allDeviceEntity.getData().get(i).getDevices(); + for (int j = 0; j < devices.size(); j++) { + if (devices.get(j).getDeviceType().equals("000") && devices.get(j).getZiId().equals(ziId)) { + aiIcon = devices.get(j).getIcon(); + } + } + } + } + return aiIcon; + } + + public static String getAiStandardCode(String ziId) { + String standardCode = ""; + if (null != allDeviceEntity) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + List devices = allDeviceEntity.getData().get(i).getDevices(); + for (int j = 0; j < devices.size(); j++) { + if (devices.get(j).getDeviceType().equals("000") && devices.get(j).getZiId().equals(ziId)) { + standardCode = devices.get(j).getDeviceModel(); + } + } + } + } + return standardCode; + } + + public static boolean isVirtual(String ziId) { + boolean isVirtual = false; + if (null != entityV4) { + for (int i = 0; i < entityV4.getData().size(); i++) { + if (entityV4.getData().get(i).getWifiName().equals("wifi_virtual")) { + if (entityV4.getData().get(i).getZiId().equals(ziId)) { + isVirtual = true; + } + } + } + } + return isVirtual; + } + + public static String getDeviceTypeName(String deviceType) { + String deviceTypeName = ""; + switch (deviceType) { + case AIR_TAG: + deviceTypeName = "空调"; + break; + case FAN_TAG: + deviceTypeName = "风扇"; + break; + case TV_TAG: + deviceTypeName = "电视"; + break; + case TVONE_TAG: + deviceTypeName = "机顶盒"; + break; + case SWEEP_TAG: + deviceTypeName = "扫地机"; + break; + case LIGHT_TAG: + deviceTypeName = "灯光"; + break; + case CURTAINS_TAG: + deviceTypeName = "窗帘"; + break; + case SWITCH_TAG: + deviceTypeName = "插座"; + break; + case SAFE_DEVICE_TAG: + deviceTypeName = "安防设备"; + break; + case DOOR_LOCK_TAG: + deviceTypeName = "门磁"; + break; + case INFRARED_TAG: + deviceTypeName = "红外"; + break; + case SMOKE_TAG: + deviceTypeName = "烟雾"; + break; + case GAS_TAG: + deviceTypeName = "燃气"; + break; + case WATER_TAG: + deviceTypeName = "水浸"; + break; + case MUSIC_TAG: + deviceTypeName = "背景音乐"; + break; + case SITUATIONAL_PANEL: + deviceTypeName = "情景面板"; + break; + case CLOTHES_HANGER: + deviceTypeName = "晾衣架"; + break; + case CAMERA_TAG: + deviceTypeName = "摄像头"; + break; + case WINDOW_OPENER: + deviceTypeName = "开窗器"; + break; + case GATE_WAY: + deviceTypeName = "网关"; + break; + case INTELLIGENT_DOOR_LOCK: + deviceTypeName = "智能门锁"; + break; + case WIRELESS_EMERGENCY_BUTTON: + deviceTypeName = "无线紧急按钮"; + break; + case INFRARED_CURTAIN_DETECTOR: + deviceTypeName = "红外幕帘探测器"; + break; + case MULTIFUNCTIONAL_CONTROLLER: + deviceTypeName = "多功能控制器"; + break; + case CARD_ACCESS: + deviceTypeName = "插卡取电"; + break; + case TEMP_CONTROL: + deviceTypeName = "空调控制器"; + break; + case SITUATIONAL_TRIGGER: + deviceTypeName = "情景触发器"; + break; + case SERVICE_PANEL_485: + deviceTypeName = "485"; + break; + case RGB_LIGHT: + deviceTypeName = "RGB灯带"; + break; + case SECURITY_TRIGGER: + deviceTypeName = "安防触发器"; + break; + case FRESH_AIR: + deviceTypeName = "新风控制器"; + break; + case FLOOR_HEATING: + deviceTypeName = "地暖控制器"; + break; + case SAFETY_VALVE: + deviceTypeName = "阀门控制器"; + break; + case SECURITY_MANIPULATOR: + deviceTypeName = "安防机械手"; + break; + case KUQI_PANEL: + deviceTypeName = "酷奇面板"; + break; + case MOVIE_CAMERA: + deviceTypeName = "投影仪"; + break; + case AIR_CLEANER: + deviceTypeName = "净化器"; + break; + case SKYWORTH_TV: + deviceTypeName = "创维大屏"; + break; + case CAT_EYE: + deviceTypeName = "猫眼门铃"; + break; + case INDEPENDENT_CODE_AC: + deviceTypeName = "独立空调"; + break; + /* default: + deviceTypeName = "设备"; + break;*/ + } + return deviceTypeName; + } + + /*public static String getHouseId() { + String houseId = ""; + if (null != entityV4) { + for (int i = 0; i < entityV4.getData().size(); i++) { + if (entityV4.getData().get(i).getWifiName().equals("wifi_virtual")) { + if (entityV4.getData().get(i).getZiId().equals(ziId)) { + isVirtual = true; + } + } + } + } + return houseId; + } +*/ + public static String getDevicePosition(String deviceId) { + String addressName = ""; + if (null != allDeviceEntity) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + List devices = allDeviceEntity.getData().get(i).getDevices(); + for (int j = 0; j < devices.size(); j++) { + if (devices.get(j).getId().equals(deviceId)) { + addressName = AddressNameUtil.getAddressName(devices.get(j).getAddressId()); + } + } + } + } + return addressName; + } + + public static String getModelColorName(String name) { + String value = "红"; + switch (name) { + case "brightnessPlus": + value = "亮度+"; + break; + case "brightnessSpeedPlus": + value = "亮/速度+"; + break; + case "brightnessLess": + value = "亮度-"; + break; + case "brightnessSpeedLess": + value = "亮/速度-"; + break; + case "stop": + value = "暂停"; + break; + case "power": + value = "开"; + break; + case "poweroff": + value = "关"; + break; + case "red": + value = "红"; + break; + case "green": + value = "绿"; + break; + case "darkBlue": + value = "深蓝"; + break; + case "white": + value = "白"; + break; + case "vermilion": + value = "朱砂红"; + break; + case "grassGreen": + value = "草绿"; + break; + case "blue": + value = "蓝"; + break; + case "amber": + //跳变,琥珀 + value = "琥珀"; + break; + case "jump": + value = "跳变"; + break; + case "orange": + value = "橙"; + break; + case "skyBlue": + value = "天蓝"; + break; + case "bluishViolet": + value = "蓝紫"; + break; + case "pink": + value = "粉色"; + break; + case "strobe": + value = "频闪"; + break; + case "orangeYellow": + value = "橙黄"; + break; + case "acidBlue": + value = "湖蓝"; + break; + case "purple": + value = "紫"; + break; + case "azure": + value = "蔚蓝"; + break; + case "gradient": + value = "渐变"; + break; + case "lemonYellow": + value = "柠檬黄"; + break; + case "blackishgreen": + value = "墨绿"; + break; + case "redPurple": + value = "红紫"; + break; + case "vividBlue": + value = "碧蓝"; + break; + case "smoothGradient": + value = "平滑渐变"; + break; + case "redPlus": + value = "红色+"; + break; + case "greenPlus": + value = "绿色+"; + break; + case "bluePlus": + value = "蓝色+"; + break; + case "speedPlus": + value = "速度+"; + break; + case "redLess": + value = "红色-"; + break; + case "greenLess": + value = "绿色-"; + break; + case "blueLess": + value = "蓝色-"; + break; + case "speedLess": + value = "速度-"; + break; + case "diy1": + value = "DIY1"; + break; + case "diy2": + value = "DIY2"; + break; + case "diy3": + value = "DIY3"; + break; + case "modelCycle": + value = "模式循环"; + break; + case "diy4": + value = "DIY4"; + break; + case "diy5": + value = "DIY5"; + break; + case "diy6": + value = "DIY6"; + break; + case "flash": + value = "白光屏闪"; + break; + case "jump3": + value = "跳变3"; + break; + case "jump7": + value = "跳变7"; + break; + case "gradient3": + value = "渐变3"; + break; + case "gradient7": + value = "渐变7"; + break; + default: + value = "红"; + break; + } + return value; + } + + public static String getOperName(String oper) { + String operName = ""; + switch (oper) { + case "open": + operName = "开"; + break; + case "close": + operName = "关"; + break; + case "stop": + operName = "停"; + break; + default: + operName = ""; + break; + } + return operName; + } + + public static String getStateString(AutomationEntity.DataBean.ExecConditionsBean opers) { + String state = ""; + + switch (opers.getName()) { + case "switch": + case "key": + case "safetySwitch": + state += "开关:"; + break; + case "mode": + state += "模式:"; + break; + case "windSpeed": + state += "风速:"; + break; + case "tempSet": + String symbol = opers.getSymbol(); + String symbolName = ""; + switch (symbol) { + case "<": + symbolName = "小于"; + break; + case ">": + symbolName = "大于"; + break; + case "=": + symbolName = ""; + break; + } + state += "温度:"; + state += symbolName + opers.getValue() + "、"; + break; + case "brightness": + String symbol1 = opers.getSymbol(); + String symbolName1 = ""; + switch (symbol1) { + case "<": + symbolName1 = "小于"; + break; + case ">": + symbolName1 = "大于"; + break; + case "=": + symbolName1 = ""; + break; + } + state += "亮度:"; + state += symbol1 + opers.getValue() + "、"; + break; + case "travelControl": + String symbol2 = opers.getSymbol(); + String symbolName2 = ""; + switch (symbol2) { + case "<": + symbolName2 = "小于"; + break; + case ">": + symbolName2 = "大于"; + break; + case "=": + symbolName2 = ""; + break; + } + state += "行程:"; + state += symbolName2 + opers.getValue() + "、"; + break; + case "safetyAlarm": + state += "安防报警:"; + break; + } + switch (opers.getValue()) { + case "power": + state += "开启、"; + break; + case "poweroff": + state += "关闭、"; + break; + case "cold": + state += "制冷、"; + break; + case "heat": + state += "制热、"; + break; + case "dehumidification": + state += "除湿、"; + break; + case "windSpeedAuto": + state += "自动风、"; + break; + case "windSpeedLow": + state += "低速风、"; + break; + case "windSpeedMedium": + state += "中速风、"; + break; + case "windSpeedHigh": + state += "高速风、"; + break; + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + state += "按键" + opers.getValue() + "、"; + break; + case "alarmTrigger": + state += "触发、"; + break; + case "up": + state += "上升、"; + break; + case "down": + state += "下降、"; + break; + case "disinfect": + state += "消毒开、"; + break; + case "disinfectoff": + state += "消毒关、"; + break; + case "airdrying": + state += "风干开、"; + break; + case "airdryingoff": + state += "风干关、"; + break; + case "stoving": + state += "烘干开、"; + break; + case "stovingoff": + state += "烘干关、"; + break; + case "anion": + state += "负离子开、"; + break; + case "anionoff": + state += "负离子关、"; + break; + case "trigger": + state += "触发、"; + break; + case "remove": + state += "解除、"; + break; + } + return state; + } + + public static void setdeviceIcon(ImageView deviceIcon, String deviceType, String deviceModel, String subType) { + switch (deviceType) { + case Constans.AIR_TAG: + deviceIcon.setImageResource(R.drawable.icon_kt); + break; + case INDEPENDENT_CODE_AC: + deviceIcon.setImageResource(R.drawable.icon_ac); + break; + case Constans.FAN_TAG: + deviceIcon.setImageResource(R.drawable.icon_fs); + break; + case Constans.TV_TAG: + deviceIcon.setImageResource(R.drawable.icon_tv); + break; + case Constans.TVONE_TAG: + deviceIcon.setImageResource(R.drawable.icon_set_top_box); + break; + case Constans.SWEEP_TAG: + deviceIcon.setImageResource(R.drawable.icon_clean); + break; + case AIR_CLEANER: + deviceIcon.setImageResource(R.drawable.icon_purifier); + break; + case MOVIE_CAMERA: + deviceIcon.setImageResource(R.drawable.icon_device_projector); + break; + case RGB_LIGHT: + deviceIcon.setImageResource(R.drawable.icon_rgb_lightbelt); + break; + case Constans.LIGHT_TAG: + if (AppIdUtil.isWork()) { + deviceIcon.setImageResource(R.drawable.icon_light); + } else { + switch (deviceModel) { + case "7": + deviceIcon.setImageResource(R.drawable.icon_b4); + break; + default: + switch (subType) { + case "0"://灯光 + deviceIcon.setImageResource(R.drawable.icon_light); + break; + case "1"://筒灯 + deviceIcon.setImageResource(R.drawable.icon_tubelamp); + break; + case "2"://灯带 + deviceIcon.setImageResource(R.drawable.icon_lightbelt); + break; + case "3"://射灯 + deviceIcon.setImageResource(R.drawable.icon_lamp); + break; + case "4"://壁灯 + deviceIcon.setImageResource(R.drawable.icon_walllamp); + break; + case "5"://吊灯 + deviceIcon.setImageResource(R.drawable.icon_chandelier); + break; + case "6"://廊灯 + deviceIcon.setImageResource(R.drawable.icon_porchlamp); + break; + case "7"://排气扇 + deviceIcon.setImageResource(R.drawable.icon_exhaust); + break; + default: + deviceIcon.setImageResource(R.drawable.icon_light); + break; + } + break; + } + } + break; + case Constans.CURTAINS_TAG: + if (deviceModel.equals("6")) { + deviceIcon.setImageResource(R.drawable.icon_485_double_track); + } else { + if (subType.equals("1")) { + deviceIcon.setImageResource(R.drawable.icon_gauze); + } else { + deviceIcon.setImageResource(R.drawable.icon_curtains); + } + /*if (AppIdUtil.isBaseZhiKong()) { + if (deviceBean.getChildren().size() != 0) { + deviceIcon.setImageResource(R.drawable.icon_curtains); + } else { + if (subType.equals("1")) { + deviceIcon.setImageResource(R.drawable.icon_gauze); + } else { + deviceIcon.setImageResource(R.drawable.icon_curtains); + } + } + } else { + if (deviceBean.getChildren().size() != 0) { + deviceIcon.setImageResource(R.drawable.icon_curtaingauzecurtain); + } else { + if (subType.equals("1")) { + deviceIcon.setImageResource(R.drawable.icon_gauze); + } else { + deviceIcon.setImageResource(R.drawable.icon_curtains); + } + } + }*/ + } + break; + case Constans.SITUATIONAL_PANEL: + if (deviceModel.equals("3")) { + deviceIcon.setImageResource(R.drawable.icon_485_panel_3); + /*String keyCount = deviceBean.getKeyCount(); + switch (keyCount) { + case "1": + deviceIcon.setImageResource(R.drawable.icon_485_panel_1); + break; + case "2": + deviceIcon.setImageResource(R.drawable.icon_485_panel_2); + break; + case "3": + deviceIcon.setImageResource(R.drawable.icon_485_panel_3); + break; + case "4": + deviceIcon.setImageResource(R.drawable.icon_485_scene_four); + break; + case "6": + deviceIcon.setImageResource(R.drawable.icon_485_scene_six); + break; + }*/ + break; + } else { + if (AppIdUtil.isBaseZhiKong()) { + deviceIcon.setImageResource(R.drawable.icon_device_qingjing_t5); + } else { + deviceIcon.setImageResource(R.drawable.icon_scene_three); + /* switch (deviceBean.getKeyCount()) { + case "1": + deviceIcon.setImageResource(R.drawable.icon_scene_one); + break; + case "2": + deviceIcon.setImageResource(R.drawable.icon_scene_two); + break; + case "3": + deviceIcon.setImageResource(R.drawable.icon_scene_three); + break; + case "4": + deviceIcon.setImageResource(R.drawable.icon_scene_four); + break; + case "6": + deviceIcon.setImageResource(R.drawable.icon_scene_six); + break; + default: + deviceIcon.setImageResource(R.drawable.icon_scene_one); + break; + }*/ + } + } + break; + case Constans.SWITCH_TAG: + + if (AppIdUtil.isWork()) { + deviceIcon.setImageResource(R.drawable.icon_chazuo); + } else { + switch (subType) { + case "0"://插座 + switch (deviceModel) { + case "0": + deviceIcon.setImageResource(R.drawable.icon_device_plug_t1); + break; + case "1": + deviceIcon.setImageResource(R.drawable.icon_device_wallsocket_t2); + break; + case "2": + deviceIcon.setImageResource(R.drawable.icon_device_plug_t4); + break; + case "4": + deviceIcon.setImageResource(R.drawable.icon_device_wifi_socket); + break; + default: + deviceIcon.setImageResource(R.drawable.icon_chazuo); + break; + } + break; + case "1"://台灯 + deviceIcon.setImageResource(R.drawable.icon_desklamp); + break; + case "2"://热水器(厨电) + deviceIcon.setImageResource(R.drawable.icon_kitchenpower); + break; + case "3"://墙壁插座 + if (AppIdUtil.isZhiKong()) { + deviceIcon.setImageResource(R.drawable.icon_device_wallsocket_t2); + } else { + deviceIcon.setImageResource(R.drawable.icon_wallsocket); + } + break; + case "4"://热水壶 + deviceIcon.setImageResource(R.drawable.icon_kettle); + break; + case "5"://取暖器 + deviceIcon.setImageResource(R.drawable.icon_heater); + break; + case "6"://电蚊香 + deviceIcon.setImageResource(R.drawable.icon_dwx); + break; + case "7"://电蚊香 + deviceIcon.setImageResource(R.drawable.icon_sterilizing_lamp); + break; + default: + switch (deviceModel) { + case "0": + deviceIcon.setImageResource(R.drawable.icon_device_plug_t1); + break; + case "1": + deviceIcon.setImageResource(R.drawable.icon_device_wallsocket_t2); + break; + case "2": + deviceIcon.setImageResource(R.drawable.icon_device_plug_t4); + break; + case "4": + deviceIcon.setImageResource(R.drawable.icon_device_wifi_socket); + break; + default: + deviceIcon.setImageResource(R.drawable.icon_chazuo); + break; + } + break; + } + } + break; + case DOOR_LOCK_TAG: + if (deviceModel.equals("1")) { + deviceIcon.setImageResource(R.drawable.pic_magnetism_dh); + + } else if (deviceModel.equals("2")) { + deviceIcon.setImageResource(R.drawable.icon_magnetism_jd); + + } else { + deviceIcon.setImageResource(R.drawable.icon_gatemagnetic); + } + break; + case INFRARED_TAG: + if (deviceModel.equals("1")) { + deviceIcon.setImageResource(R.drawable.pic_infrared_dh); + + } else if (deviceModel.equals("2")) { + deviceIcon.setImageResource(R.drawable.icon_infrared_jd); + } else { + deviceIcon.setImageResource(R.drawable.icon_infrared); + } + break; + case Constans.SMOKE_TAG: + if (deviceModel.equals("1")) { + deviceIcon.setImageResource(R.drawable.pic_smoke_dh); + } else if (deviceModel.equals("2")) { + deviceIcon.setImageResource(R.drawable.icon_smoke_jd); + } else { + deviceIcon.setImageResource(R.drawable.icon_smoke); + } + break; + case Constans.GAS_TAG: + if (deviceModel.equals("1")) { + deviceIcon.setImageResource(R.drawable.icon_gas_jd); + } else if (deviceModel.equals("2")) { + deviceIcon.setImageResource(R.drawable.icon_wall_hanging_gas_jd); + } else { + deviceIcon.setImageResource(R.drawable.icon_gas); + } + break; + case Constans.WATER_TAG: + if (deviceModel.equals("1")) { + deviceIcon.setImageResource(R.drawable.pic_water_immersion_dh); + } else if (deviceModel.equals("2")) { + deviceIcon.setImageResource(R.drawable.icon_water_jd); + } else { + deviceIcon.setImageResource(R.drawable.icon_waterimmersion); + } + break; + case SAFETY_DISPLACEMENT: + deviceIcon.setImageResource(R.drawable.icon_device_shift_dh); + break; + case SAFETY_ACOUSTO_OPTIC: + deviceIcon.setImageResource(R.drawable.icon_device_acousto_optic_dh); + break; + case SAFETY_WIRELESS_REMOTE: + deviceIcon.setImageResource(R.drawable.icon_device_remote_control_dh); + break; + case Constans.ZIGBEE_LIGHT: + deviceIcon.setImageResource(R.drawable.icon_light); + break; + case Constans.ZIGBEE_PLUG: + deviceIcon.setImageResource(R.drawable.icon_chazuo); + break; + case Constans.ZIGBEE_INFRARED: + deviceIcon.setImageResource(R.drawable.icon_infrared); + break; + case Constans.ZIGBEE_TEMPERATURE: + deviceIcon.setImageResource(R.drawable.icon_humiture); + break; + case Constans.ZIGBEE_DOOR: + deviceIcon.setImageResource(R.drawable.icon_gatemagnetic); + break; + case Constans.ZIGBEE_CO: + deviceIcon.setImageResource(R.drawable.icon_carbonmonoxide); + break; + case Constans.ZIGBEE_WATER: + deviceIcon.setImageResource(R.drawable.icon_waterimmersion); + break; + case Constans.ZIGBEE_SMOKE: + deviceIcon.setImageResource(R.drawable.icon_smoke); + break; + case Constans.MUSIC_TAG: + deviceIcon.setImageResource(R.drawable.icon_music); + break; + case Constans.ADD_TYPE: + deviceIcon.setImageResource(R.drawable.icon_smoke); + break; + case CLOTHES_HANGER: + deviceIcon.setImageResource(R.drawable.icon_airer); + break; + case SAFETY_VALVE: + deviceIcon.setImageResource(R.drawable.icon_valve_controller); + break; + case SECURITY_MANIPULATOR: + deviceIcon.setImageResource(R.drawable.icon_security_manipulator); + break; + case WINDOW_OPENER: + deviceIcon.setImageResource(R.drawable.icon_window_opener); + break; + case MULTIFUNCTIONAL_CONTROLLER: + switch (subType) { + case "0": + deviceIcon.setImageResource(R.drawable.icon_curtains); + break; + case "1": + deviceIcon.setImageResource(R.drawable.icon_gauze); + break; + case "2": + deviceIcon.setImageResource(R.drawable.icon_window_opener); + break; + case "3": + deviceIcon.setImageResource(R.drawable.icon_garage); + break; + case "4": + deviceIcon.setImageResource(R.drawable.icon_sunshade); + break; + case "5": + deviceIcon.setImageResource(R.drawable.icon_autogate); + break; + case "6": + deviceIcon.setImageResource(R.drawable.icon_elevator); + break; + case "7": + deviceIcon.setImageResource(R.drawable.icon_curtain_elevator); + break; + case "8": + deviceIcon.setImageResource(R.drawable.icon_spray); + break; + case "9": + deviceIcon.setImageResource(R.drawable.icon_window_opener); + break; + default: + deviceIcon.setImageResource(R.drawable.icon_multifunctional); + break; + } + break; + case GATE_WAY: + if (deviceModel.equals("0")) { + deviceIcon.setImageResource(R.drawable.icon_gateway_dh); + } else { + deviceIcon.setImageResource(R.drawable.icon_g2); + } + break; + case WIRELESS_EMERGENCY_BUTTON: + if (deviceModel.equals("1")) { + deviceIcon.setImageResource(R.drawable.icon_device_sos); + } else { + deviceIcon.setImageResource(R.drawable.pic_panic_button_dh); + } + + break; + case INFRARED_CURTAIN_DETECTOR: + deviceIcon.setImageResource(R.drawable.pic_curtain_dh); + break; + case INTELLIGENT_DOOR_LOCK: + if (deviceModel.equals("1")) { + deviceIcon.setImageResource(R.drawable.icon_device_lock_v6); + } else if (deviceModel.equals("2")) { + deviceIcon.setImageResource(R.drawable.icon_lock_k2m); + } else { + deviceIcon.setImageResource(R.drawable.pic_lock_dh); + } + break; + case TEMP_CONTROL: + case FRESH_AIR: + case FLOOR_HEATING: + deviceIcon.setImageResource(R.drawable.icon_device_temperature); + break; + case SITUATIONAL_TRIGGER: + deviceIcon.setImageResource(R.drawable.icon_multifunctional); + break; + case SERVICE_PANEL_485: + if (deviceModel.equals("1")) { + deviceIcon.setImageResource(R.drawable.icon_485_12v); + } else { + deviceIcon.setImageResource(R.drawable.icon_485); + } + break; + case SECURITY_TRIGGER: + switch (subType) { + case "0": + deviceIcon.setImageResource(R.drawable.icon_trigger_gas); + break; + case "1": + deviceIcon.setImageResource(R.drawable.icon_trigger_smoke); + break; + case "2": + deviceIcon.setImageResource(R.drawable.icon_trigger_infrared); + break; + case "3": + deviceIcon.setImageResource(R.drawable.icon_trigger_magnetism); + break; + case "4": + deviceIcon.setImageResource(R.drawable.icon_trigger_sos); + break; + default: + + break; + } + break; + case KUQI_PANEL: + deviceIcon.setImageResource(R.drawable.icon_touch_panel); + break; + case SKYWORTH_TV: + deviceIcon.setImageResource(R.drawable.icon_chuangwei_tv); + if (null != subType && !subType.isEmpty()) { + switch (subType) { + case "1": + deviceIcon.setImageResource(R.drawable.icon_tv); + break; + case "8": + deviceIcon.setImageResource(R.drawable.icon_kt); + break; + } + } + break; + case CAT_EYE: + deviceIcon.setImageResource(R.drawable.icon_cat_eye); + break; + default: + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/AppGenerUtil.java b/app/src/main/java/com/yonsz/z1/utils/AppGenerUtil.java new file mode 100644 index 0000000..98e92d9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/AppGenerUtil.java @@ -0,0 +1,85 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.util.Log; + +/** + * Created by Administrator on 2017/1/11 0011. + */ + +public class AppGenerUtil { + public static String getPackageVersion(Context context) { + String pkName = context.getPackageName(); + String versionName = "3.6"; + int versionCode = 2; + try { + versionName = context.getPackageManager().getPackageInfo(pkName, 0).versionName; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + try { + versionCode = context.getPackageManager().getPackageInfo(pkName, 0).versionCode; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + // return versionCode + "_" + versionName; + return versionName; + } + + public static String getVersionName(Context context) { + String pkName = context.getPackageName(); + String versionName = ""; + try { + versionName = context.getPackageManager().getPackageInfo(pkName, 0).versionName; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + return versionName; + } + + /** + * 结果说明:0代表相等,1代表version1大于version2,-1代表version1小于version2 + * + * @param version1 + * @param version2 + * @return + */ + public static int compareVersion(String version1, String version2) { + if (version1.equals(version2)) { + return 0; + } + String[] version1Array = version1.split("\\."); + String[] version2Array = version2.split("\\."); + Log.d("HomePageActivity", "version1Array==" + version1Array.length); + Log.d("HomePageActivity", "version2Array==" + version2Array.length); + int index = 0; + // 获取最小长度值 + int minLen = Math.min(version1Array.length, version2Array.length); + int diff = 0; + // 循环判断每位的大小 + Log.d("HomePageActivity", "verTag2=2222=" + version1Array[index]); + while (index < minLen + && (diff = Integer.parseInt(version1Array[index]) + - Integer.parseInt(version2Array[index])) == 0) { + index++; + } + if (diff == 0) { + // 如果位数不一致,比较多余位数 + for (int i = index; i < version1Array.length; i++) { + if (Integer.parseInt(version1Array[i]) > 0) { + return 1; + } + } + + for (int i = index; i < version2Array.length; i++) { + if (Integer.parseInt(version2Array[i]) > 0) { + return -1; + } + } + return 0; + } else { + return diff > 0 ? 1 : -1; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/AppIdUtil.java b/app/src/main/java/com/yonsz/z1/utils/AppIdUtil.java new file mode 100644 index 0000000..4dc0002 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/AppIdUtil.java @@ -0,0 +1,91 @@ +package com.yonsz.z1.utils; + +import com.yonsz.z1.difference.DifferConstans; + +/** + * Created by Administrator on 2020/12/24. + */ + +public class AppIdUtil { + public static void differByAppId() { + switch (DifferConstans.APPID_S) { + case "1101": + + break; + case "1102": + + break; + case "1103": + + break; + case "1104": + + break; + case "1105": + + break; + case "1106": + + break; + default: + + break; + } + } + + public static boolean isZhiKong() { + if (DifferConstans.APPID_S.equals("1103") || DifferConstans.APPID_S.equals("1105")) { + return true; + } else { + return false; + } + } + + public static boolean isChuangWei() { + if (DifferConstans.APPID_S_VOICE.equals("110302")||DifferConstans.APPID_S_VOICE.equals("110303")) { + return true; + } else { + return false; + } + } + + public static boolean isYagene() { + if (DifferConstans.APPID_S_VOICE.equals("110303")) { + return true; + } else { + return false; + } + } + + public static boolean isBaseZhiKong() { + if (DifferConstans.APPID_S.equals("1103") || DifferConstans.APPID_S.equals("1105") || DifferConstans.APPID_S.equals("1106")) { + return true; + } else { + return false; + } + } + + public static boolean isHotel() { + if (DifferConstans.APPID_S.equals("1105")) { + return true; + } else { + return false; + } + } + + public static boolean isStandard() { + if (DifferConstans.APPID_S.equals("1101")) { + return true; + } else { + return false; + } + } + + public static boolean isWork() { + if (DifferConstans.APPID_S.equals("1106")) { + return true; + } else { + return false; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/AppUtil.java b/app/src/main/java/com/yonsz/z1/utils/AppUtil.java new file mode 100644 index 0000000..3a28362 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/AppUtil.java @@ -0,0 +1,60 @@ +package com.yonsz.z1.utils; + +import android.app.Activity; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + + +public class AppUtil { + private static List mActivityList; + + private static AppUtil mAppUtil; + + public static AppUtil getInstance(){ + if (mAppUtil == null){ + mAppUtil = new AppUtil(); + } + init(); + return mAppUtil; + } + private static void init(){ + if (mActivityList == null){ + mActivityList = new ArrayList<>(); + } + } + + public void removeActivityByClazz(Class clazz){ + if (mActivityList == null) return; + Iterator iterator = mActivityList.iterator(); + while (iterator.hasNext()){ + Activity activity = iterator.next(); + if (activity.getClass().getName().equals(clazz.getName())){ + if (!activity.isFinishing()){ + activity.finish(); + } + + iterator.remove(); + break; + } + } + } + + public void addActivity(Activity activity){ + if (mActivityList == null) return; + mActivityList.add(activity); + } + public void exitApp(){ + if (mActivityList == null) return; + Iterator iterator = mActivityList.iterator(); + while (iterator.hasNext()){ + Activity activity = iterator.next(); + if (activity != null){ + activity.finish(); + } + iterator.remove(); + } + System.exit(0); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/AutoLinerLayoutManager.java b/app/src/main/java/com/yonsz/z1/utils/AutoLinerLayoutManager.java new file mode 100644 index 0000000..762ad45 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/AutoLinerLayoutManager.java @@ -0,0 +1,114 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; + +public class AutoLinerLayoutManager extends LinearLayoutManager { + +/* private static final int CHILD_WIDTH = 0; + private static final int CHILD_HEIGHT = 1; + private static final int DEFAULT_CHILD_SIZE = 100; + + private final int[] childDimensions = new int[2]; + + private int childSize = DEFAULT_CHILD_SIZE; + private boolean hasChildSize;*/ + + @SuppressWarnings("UnusedDeclaration") + public AutoLinerLayoutManager(Context context) { + super(context); + } + + @SuppressWarnings("UnusedDeclaration") + public AutoLinerLayoutManager(Context context, int orientation, boolean reverseLayout) { + super(context, orientation, reverseLayout); + } + + private int[] mMeasuredDimension = new int[2]; + + + @Override + public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) { + final int widthMode = View.MeasureSpec.getMode(widthSpec); + final int heightMode = View.MeasureSpec.getMode(heightSpec); + final int widthSize = View.MeasureSpec.getSize(widthSpec); + final int heightSize = View.MeasureSpec.getSize(heightSpec); + int width = 0; + int height = 0; + + + + for (int i = 0; i < getItemCount(); i++) { + + try { + measureScrapChild(recycler, i, + widthSpec, + View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), + mMeasuredDimension); + } catch (IndexOutOfBoundsException e) { + + e.printStackTrace(); + } + + if (getOrientation() == HORIZONTAL) { + width = width + mMeasuredDimension[0]; + if (i == 0) { + height = mMeasuredDimension[1]; + } + } else { + height = height + mMeasuredDimension[1]; + if (i == 0) { + width = mMeasuredDimension[0]; + } + } + } + + switch (widthMode) { + case View.MeasureSpec.EXACTLY: + case View.MeasureSpec.AT_MOST: + case View.MeasureSpec.UNSPECIFIED: + } + + switch (heightMode) { + case View.MeasureSpec.EXACTLY: + height = heightSize; + case View.MeasureSpec.AT_MOST: + case View.MeasureSpec.UNSPECIFIED: + } + setMeasuredDimension(widthSpec, height); + + } + + @Override + public boolean canScrollHorizontally() { + return false; + } + + @Override + public boolean canScrollVertically() { + return false; + } + + private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec, int heightSpec, int[] measuredDimension) { + View view = recycler.getViewForPosition(position); + + + if (view != null) { + RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams(); + int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec, + getPaddingTop() + getPaddingBottom(), p.height); + view.measure(widthSpec, childHeightSpec); + measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin; + measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin; + recycler.recycleView(view); + } + } + + @Override + public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { + super.onLayoutChildren(recycler, state); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/utils/BadgeUtil.java b/app/src/main/java/com/yonsz/z1/utils/BadgeUtil.java new file mode 100644 index 0000000..628b371 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/BadgeUtil.java @@ -0,0 +1,224 @@ +package com.yonsz.z1.utils; + +import android.app.Notification; +import android.app.NotificationManager; +import android.content.ComponentName; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.support.v4.app.NotificationCompat; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +/** + * Created by Administrator on 2018/8/2. + */ + +public class BadgeUtil { + private BadgeUtil() throws InstantiationException { + throw new InstantiationException("This class is not for instantiation"); + } + + /** + * 设置Badge 目前支持Launcher + */ + public static void setBadgeCount(Context context, int count, int iconResId) { + if (count <= 0) { + count = 0; + } else { + count = Math.max(0, Math.min(count, 99)); + } + + if (Build.MANUFACTURER.equalsIgnoreCase("xiaomi")) { + setBadgeOfMIUI(context, count, iconResId); + } else if (Build.MANUFACTURER.equalsIgnoreCase("sony")) { + setBadgeOfSony(context, count); + } else if (Build.MANUFACTURER.toLowerCase().contains("samsung") || + Build.MANUFACTURER.toLowerCase().contains("lg")) { + setBadgeOfSumsung(context, count); + } else if (Build.MANUFACTURER.toLowerCase().contains("htc")) { + setBadgeOfHTC(context, count); + } else if (Build.MANUFACTURER.toLowerCase().contains("nova")) { + setBadgeOfNova(context, count); + } else if (Build.MANUFACTURER.toLowerCase().contains("OPPO")) {//oppo + //setBadgeOfOPPO(context, count); + } else if (Build.MANUFACTURER.toLowerCase().contains("LeMobile")) {//乐视 + + } else if (Build.MANUFACTURER.toLowerCase().contains("vivo")) { + setBadgeOfVIVO(context, count); + } else if (Build.MANUFACTURER.toLowerCase().contains("HUAWEI") || Build.BRAND.equals("Huawei") || Build.BRAND.equals("HONOR")) {//华为 + setHuaweiBadge(context, count); + } else if (Build.MANUFACTURER.toLowerCase().contains("")) {//魅族 + + } else if (Build.MANUFACTURER.toLowerCase().contains("")) {//金立 + + } else if (Build.MANUFACTURER.toLowerCase().contains("")) {//锤子 + + } else { + //Toast.makeText(context, "Not Found Support Launcher", Toast.LENGTH_LONG).show(); + } + } + + /** + * 设置MIUI的Badge + */ + private static void setBadgeOfMIUI(Context context, int count, int iconResId) { + NotificationManager mNotificationManager = (NotificationManager) context + .getSystemService(Context.NOTIFICATION_SERVICE); + NotificationCompat.Builder builder = new NotificationCompat.Builder(context); + builder.setContentTitle("标题").setContentText("消息正文").setSmallIcon(iconResId); + Notification notification = builder.build(); + try { + Field field = notification.getClass().getDeclaredField("extraNotification"); + Object extraNotification = field.get(notification); + Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class); + method.invoke(extraNotification, count); + } catch (Exception e) { + e.printStackTrace(); + } + mNotificationManager.notify(0, notification); + } + + /** + * 设置索尼的Badge + * 需添加权限: + */ + private static void setBadgeOfSony(Context context, int count) { + String launcherClassName = getLauncherClassName(context); + if (launcherClassName == null) { + return; + } + boolean isShow = true; + if (count == 0) { + isShow = false; + } + Intent localIntent = new Intent(); + localIntent.setAction("com.sonyericsson.home.action.UPDATE_BADGE"); + localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", isShow);//是否显示 + localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", launcherClassName);//启动页 + localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", String.valueOf(count));//数字 + localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName());//包名 + context.sendBroadcast(localIntent); + } + + /** + * 设置三星的Badge\设置LG的Badge + */ + private static void setBadgeOfSumsung(Context context, int count) { + // 获取你当前的应用 + String launcherClassName = getLauncherClassName(context); + if (launcherClassName == null) { + return; + } + Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE"); + intent.putExtra("badge_count", count); + intent.putExtra("badge_count_package_name", context.getPackageName()); + intent.putExtra("badge_count_class_name", launcherClassName); + context.sendBroadcast(intent); + } + + /** + * 设置HTC的Badge + */ + private static void setBadgeOfHTC(Context context, int count) { + Intent intentNotification = new Intent("com.htc.launcher.action.SET_NOTIFICATION"); + ComponentName localComponentName = new ComponentName(context.getPackageName(), getLauncherClassName(context)); + intentNotification.putExtra("com.htc.launcher.extra.COMPONENT", localComponentName.flattenToShortString()); + intentNotification.putExtra("com.htc.launcher.extra.COUNT", count); + context.sendBroadcast(intentNotification); + + Intent intentShortcut = new Intent("com.htc.launcher.action.UPDATE_SHORTCUT"); + intentShortcut.putExtra("packagename", context.getPackageName()); + intentShortcut.putExtra("count", count); + context.sendBroadcast(intentShortcut); + } + + /** + * 设置Nova的Badge + */ + private static void setBadgeOfNova(Context context, int count) { + ContentValues contentValues = new ContentValues(); + contentValues.put("tag", context.getPackageName() + "/" + getLauncherClassName(context)); + contentValues.put("count", count); + context.getContentResolver().insert(Uri.parse("content://com.teslacoilsw.notifier/unread_count"), + contentValues); + } + + /** + * 设置vivo的Badge :vivoXplay5 vivo x7无效果 + */ + private static void setBadgeOfVIVO(Context context, int count) { + try { + Intent intent = new Intent("launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM"); + intent.putExtra("packageName", context.getPackageName()); + String launchClassName = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()).getComponent().getClassName(); + intent.putExtra("className", launchClassName); + intent.putExtra("notificationNum", count); + context.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 设置oppo的Badge :oppo角标提醒目前只针对内部软件还有微信、QQ开放,其他的暂时无法提供 + */ + private static void setBadgeOfOPPO(Context context, int count) { + try { + Bundle extras = new Bundle(); + extras.putInt("app_badge_count", count); + context.getContentResolver().call(Uri.parse("content://com.android.badge/badge"), "setAppBadgeCount", String.valueOf(count), extras); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 设置华为的Badge :mate8 和华为 p7,honor畅玩系列可以,honor6plus 无效果 + */ + public static void setHuaweiBadge(Context context, int count) { + try { + Bundle bundle = new Bundle(); + bundle.putString("package", context.getPackageName()); + String launchClassName = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()).getComponent().getClassName(); + bundle.putString("class", launchClassName); + bundle.putInt("badgenumber", count); + context.getContentResolver().call(Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, bundle); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void setBadgeOfMadMode(Context context, int count, String packageName, String className) { + Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE"); + intent.putExtra("badge_count", count); + intent.putExtra("badge_count_package_name", packageName); + intent.putExtra("badge_count_class_name", className); + context.sendBroadcast(intent); + } + + /** + * 重置Badge + */ + public static void resetBadgeCount(Context context, int iconResId) { + setBadgeCount(context, 0, iconResId); + } + + public static String getLauncherClassName(Context context) { + PackageManager packageManager = context.getPackageManager(); + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.setPackage(context.getPackageName()); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + ResolveInfo info = packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); + if (info == null) { + info = packageManager.resolveActivity(intent, 0); + } + return info.activityInfo.name; + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/BytesUtil.java b/app/src/main/java/com/yonsz/z1/utils/BytesUtil.java new file mode 100644 index 0000000..999b4c3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/BytesUtil.java @@ -0,0 +1,61 @@ +package com.yonsz.z1.utils; +public class BytesUtil { + /** + * Convert byte[] to hex string. 鎶婂瓧鑺傛暟缁勮浆鍖栦负瀛楃涓� + * 杩欓噷鎴戜滑鍙互灏哹yte杞崲鎴恑nt锛岀劧鍚庡埄鐢↖nteger.toHexString(int)鏉ヨ浆鎹㈡垚16杩涘埗瀛楃涓层�� + * @param src byte[] data + * @return hex string + */ + public static String bytesToHexString(byte[] src){ + StringBuilder stringBuilder = new StringBuilder(""); + if (src == null || src.length <= 0) { + return null; + } + for (int i = 0; i < src.length; i++) { + int v = src[i] & 0xFF; + String hv = Integer.toHexString(v); + if (hv.length() < 2) { + stringBuilder.append(0); + } + stringBuilder.append(hv+" "); + } + return stringBuilder.toString(); + } + /** + * Convert hex string to byte[] 鎶婁负瀛楃涓茶浆鍖栦负瀛楄妭鏁扮粍 + * @param hexString the hex string + * @return byte[] + */ + public static byte[] hexStringToBytes(String hexString) { + if (hexString == null || hexString.equals("")) { + return null; + } + hexString = hexString.toUpperCase(); + int length = hexString.length() / 2; + char[] hexChars = hexString.toCharArray(); + byte[] d = new byte[length]; + for (int i = 0; i < length; i++) { + int pos = i * 2; + d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); + } + return d; + } + /** + * Convert char to byte + * @param c char + * @return byte + */ + public static byte charToByte(char c) { + return (byte) "0123456789ABCDEF".indexOf(c); + } + + /** + * Static method, a hexString data into a int type data + * + * @return int + */ + public static int hexToInt(String str) { + return Integer.parseInt(str, 16); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/utils/CodeUtil.java b/app/src/main/java/com/yonsz/z1/utils/CodeUtil.java new file mode 100644 index 0000000..8230ff8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/CodeUtil.java @@ -0,0 +1,128 @@ +/* +package com.yonsz.z1.utils; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; + +import java.util.Random; + +*/ +/** + * Created by Administrator on 2018/11/6. + *//* + + +public class CodeUtil { + + private static final char[] CHARS = { + '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm', + 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' + }; + //default settings + private static final int DEFAULT_CODE_LENGTH = 4; + private static final int DEFAULT_FONT_SIZE = 25; + private static final int DEFAULT_LINE_NUMBER = 2; + private static final int BASE_PADDING_LEFT = 10, RANGE_PADDING_LEFT = 15, BASE_PADDING_TOP = 15, RANGE_PADDING_TOP = 20; + private static final int DEFAULT_WIDTH = 100, DEFAULT_HEIGHT = 40; + private static CodeUtil bmpCode; + //settings decided by the layout xml + //canvas width and height + private int width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT; + //random word space and pading_top + private int base_padding_left = BASE_PADDING_LEFT, range_padding_left = RANGE_PADDING_LEFT, + base_padding_top = BASE_PADDING_TOP, range_padding_top = RANGE_PADDING_TOP; + //number of chars, lines; font size + private int codeLength = DEFAULT_CODE_LENGTH, line_number = DEFAULT_LINE_NUMBER, font_size = DEFAULT_FONT_SIZE; + //variables + private String code; + private int padding_left, padding_top; + private Random random = new Random(); + + public static CodeUtil getInstance() { + if (bmpCode == null) + bmpCode = new CodeUtil(); + return bmpCode; + } + + public Bitmap createBitmap() { + padding_left = 0; + + Bitmap bp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas c = new Canvas(bp); + + code = createCode(); + + c.drawColor(Color.WHITE); + Paint paint = new Paint(); + paint.setTextSize(font_size); + + for (int i = 0; i < code.length(); i++) { + randomTextStyle(paint); + randomPadding(); + c.drawText(code.charAt(i) + "", padding_left, padding_top, paint); + } + + for (int i = 0; i < line_number; i++) { + drawLine(c, paint); + } + + c.save(Canvas.ALL_SAVE_FLAG); + c.restore();// + return bp; + } + + public String getCode() { + return code; + } + + + private String createCode() { + StringBuilder buffer = new StringBuilder(); + for (int i = 0; i < codeLength; i++) { + buffer.append(CHARS[random.nextInt(CHARS.length)]); + } + return buffer.toString(); + } + + private void drawLine(Canvas canvas, Paint paint) { + int color = randomColor(); + int startX = random.nextInt(width); + int startY = random.nextInt(height); + int stopX = random.nextInt(width); + int stopY = random.nextInt(height); + paint.setStrokeWidth(1); + paint.setColor(color); + canvas.drawLine(startX, startY, stopX, stopY, paint); + } + + private int randomColor() { + return randomColor(1); + } + + private int randomColor(int rate) { + int red = random.nextInt(256) / rate; + int green = random.nextInt(256) / rate; + int blue = random.nextInt(256) / rate; + return Color.rgb(red, green, blue); + } + + private void randomTextStyle(Paint paint) { + int color = randomColor(); + paint.setColor(color); + paint.setFakeBoldText(random.nextBoolean()); + float skewX = random.nextInt(11) / 10; + skewX = random.nextBoolean() ? skewX : -skewX; + paint.setTextSkewX(skewX); + } + + private void randomPadding() { + padding_left += base_padding_left + random.nextInt(range_padding_left); + padding_top = base_padding_top + random.nextInt(range_padding_top); + } +} +*/ diff --git a/app/src/main/java/com/yonsz/z1/utils/CommandDecoder.java b/app/src/main/java/com/yonsz/z1/utils/CommandDecoder.java new file mode 100644 index 0000000..0fc734c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/CommandDecoder.java @@ -0,0 +1,58 @@ +package com.yonsz.z1.utils; + +import java.util.List; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; + +/** + * 对收到的消息,进行解码处理,解决了通讯中的粘拆包问题,否则会有一定的丢包率。 + * 解码后的消息,符合与设备间通讯协议,格式为byte[],丢到channelPipeline中,由后续的Handler拦截处理 + * + * @author ZhangJunhua + * @version 0.1 2017-03-10 17:57 + */ +public class CommandDecoder extends ByteToMessageDecoder { + + + private static final byte HEARTBEAT = (byte) 0xFF; + private static final byte COMMAND_LENGTH = 0x0F; + + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { + int readableBytes = in.readableBytes(); + if (readableBytes == 1 && in.getByte(0) == HEARTBEAT) { + in.discardReadBytes(); + return; + } + // 有多种消息长度,当消息可读长度不小于最短消息长度时,执行解码,否则等收到新的消息时再次调用decode方法 + while (readableBytes >= COMMAND_LENGTH) { + byte declaredLength = in.getByte(0); + // 验证长度必须为0x0F;设备类型必须为0x02 + if (declaredLength == COMMAND_LENGTH && in.getByte(1) == 0x02) { + // 根据协议,做异或校验,异或检验通过作为有效消息 + int xorResult = in.getByte(0); + for (int i = 1; i < declaredLength - 1; i++) { + xorResult = xorResult ^ in.getByte(i); + } + if ((byte) xorResult == in.getByte(declaredLength - 1)) { + // 异或校验成功 + byte[] msgBytes = new byte[declaredLength]; + in.readBytes(msgBytes, 0, declaredLength); + // 后面Handler获取到的将是byte[]类型,且为单条消息 + // logger.warn("解析成功的指令 {}", CommandUtil.toHex(msgBytes)); + out.add(msgBytes); + } else { + // 异或校验不正确,读指针后移一位 + in.readByte(); + } + } else { + // 首两个byte不正确,读指针后移一位 + in.readByte(); + } + in.discardReadBytes(); + readableBytes = in.readableBytes(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/CommonUtils.java b/app/src/main/java/com/yonsz/z1/utils/CommonUtils.java new file mode 100644 index 0000000..7893dbe --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/CommonUtils.java @@ -0,0 +1,53 @@ +package com.yonsz.z1.utils; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created by zhxh on 2018/4/28. + */ + +public class CommonUtils { + public static boolean isNull(String checkStr) { + + boolean result = false; + + if (null == checkStr){ + + result = true; + } else { + if (checkStr.length() == 0) { + + result = true; + } + } + return result; + } + + public static boolean isNull(List list) { + + boolean result = false; + + if (null == list){ + + result = true; + } else { + if (list.size() == 0) { + + result = true; + } + } + return result; + } + public static List getRegEx(String input, String regex) { + List stringList = new ArrayList<>(); + Pattern p = Pattern.compile(regex); + Matcher m = p.matcher(input); + while (m.find()) + stringList.add(m.group()); + + return stringList; + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/ConfirmNameDialogUtil.java b/app/src/main/java/com/yonsz/z1/utils/ConfirmNameDialogUtil.java new file mode 100644 index 0000000..5496ba2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/ConfirmNameDialogUtil.java @@ -0,0 +1,78 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.text.TextUtils; +import android.util.Log; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +/** + * Created by Administrator on 2020/12/29. + */ + +public class ConfirmNameDialogUtil { + public static void show(Context context, TitleView mTitleView, DeviceEntityV4.DataBean.DevicesBean devicesBean) { + ConfirmNameDialog dialog1 = new ConfirmNameDialog(context, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + subsetModify(devicesBean, positioName); + break; + } + } + }); + dialog1.setMaxEms(12); + dialog1.setOldName(mTitleView.getHead()); + dialog1.setContent("修改设备名称"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + } + + private static void subsetModify(DeviceEntityV4.DataBean.DevicesBean devicesBean, String positioName) { + // initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", devicesBean.getDeviceType()); + map.put("ziId", devicesBean.getZiId()); + if (!TextUtils.isEmpty(positioName)) { + map.put("name", positioName); + } + util.requestPostByAsyBody(NetWorkUrl.SUBSET_MODIFY, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetModify", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + + } else { + + } + } + + @Override + public void onFail(String message) { + + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/ConnectNettyUtil.java b/app/src/main/java/com/yonsz/z1/utils/ConnectNettyUtil.java new file mode 100644 index 0000000..63cd414 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/ConnectNettyUtil.java @@ -0,0 +1,30 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.net.wifi.WifiManager; +import android.text.TextUtils; +import android.util.Log; + +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.tcpudp.NettyManager; + +import static android.content.Context.WIFI_SERVICE; + +/** + * Created by Administrator on 2018/7/26. + */ + +public class ConnectNettyUtil { + + public static void connectNetty(String ziId, String deviceIp, Context context) { + if (!TextUtils.isEmpty(SharedpreferencesUtil.get(ziId, ""))) { + deviceIp = SharedpreferencesUtil.get(ziId, "").toString(); + } + WifiManager wifimanager; + wifimanager = (WifiManager) context.getSystemService(WIFI_SERVICE); + Log.i("nettymanager", "ChildDeviceListActivity onCreate()" + deviceIp + "==="); + if (wifimanager.isWifiEnabled() && !TextUtils.isEmpty(deviceIp) && (NetWorkUrl.getSERVER().equals(NetWorkUrl.SERVER_URL) || NetWorkUrl.getSERVER().equals(NetWorkUrl.SERVER_BACKUP))) { + NettyManager.getInstance(deviceIp); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/CustomToast.java b/app/src/main/java/com/yonsz/z1/utils/CustomToast.java new file mode 100644 index 0000000..f7f4a3d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/CustomToast.java @@ -0,0 +1,36 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.os.Handler; +import android.widget.Toast; + +import static com.yonsz.z1.activity.BaseActivity.isActivityRunning; + +/** + * Created by Administrator on 2017/8/29. + */ + +public class CustomToast { + private static Toast mToast; + private static Handler mHandler = new Handler(); + private static Runnable r = new Runnable() { + public void run() { + mToast.cancel(); + } + }; + public static void showToast(Context context, String text, int duration) { + mHandler.removeCallbacks(r); + if (mToast != null) + mToast.setText(text); + else + mToast = Toast.makeText(context, text, Toast.LENGTH_SHORT); + mHandler.postDelayed(r, duration); + + if(isActivityRunning(context.getPackageName(), context)){ + mToast.show(); + } + } + public static void showToast(Context context, int resId, int duration) { + showToast(context, context.getResources().getString(resId), duration); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/DateTimeUitl.java b/app/src/main/java/com/yonsz/z1/utils/DateTimeUitl.java new file mode 100644 index 0000000..cf1000a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/DateTimeUitl.java @@ -0,0 +1,1343 @@ +package com.yonsz.z1.utils; + +import android.webkit.MimeTypeMap; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.SimpleTimeZone; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +/** + * 日期类的时间操作 + * + * @author Administrator + */ +public class DateTimeUitl { + public final static String SYS_DATE_FORMATE = "yyyy-MM-dd HH:mm:ss"; + + public final static String TIME_WITH_SECOND_FORMATE = "yyyy-MM-dd HH:mm"; + + /** + * 返回当前时间序列 + * + * @return + */ + public static String getTimeSeq() { + return String.valueOf(System.currentTimeMillis()); + } + + /** + * 获取当前时间的n天前的日期 + * + * @param day + * @return + */ + public static String getBeforeCurentTimes(int day) { + String time = null; + Calendar calendar = calGetCalendarTime(); + calendar.add(Calendar.DATE, -day); + time = getSysDateTime(calendar.getTime()); + return time; + } + + /** + * 是否是系统时间 + * + * @param time + * @return + */ + public static boolean isSysDateTime(String time) { + boolean flag = false; + try { + SimpleDateFormat formatter = new SimpleDateFormat(TIME_WITH_SECOND_FORMATE); + formatter.parse(time); + flag = true; + } catch (Exception ex) { + flag = false; + } + return flag; + } + + /** + * 将yyyy-mm-ddTHH:mm:ss+HH:mm 的时间调整系统格式的时间 + * + * @param time + * @return + */ + public static String gmtTimeToSysFormateTime(String time) { + String result = null; + try { + int pos = time.indexOf("+"); + //String left=pos>0?time.substring(pos, time.length()):""; + time = pos > 0 ? time.substring(0, pos) : time; + result = time; + result = time.replace("T", " ").trim(); + //result=getDateTimeWithOutSenondString(result); + } catch (Exception ex) { + ex.printStackTrace(); + } + return result; + } + + + /** + * 获取当前日期格式的下一天 + * + * @param targetDate 目标日期格式字符串 + * @return + */ + public static String getFutureFromTarget(String targetDate) { + int year = DateTimeUitl.intGetYear(targetDate); + int month = DateTimeUitl.intGetMonth(targetDate); + int day = DateTimeUitl.intGetDay(targetDate); + boolean isLeapYear = false; + if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { + isLeapYear = true; + } else { + isLeapYear = false; + } + switch (month) { + case 1: + case 3: + case 5: + case 7: + case 8: + case 10: + if (day == 31) { + day = 1; + month++; + } else { + day++; + } + break; + case 12: + if (day == 31) { + day = 1; + month = 1; + year++; + } else { + day++; + } + break; + case 4: + case 6: + case 9: + case 11: + if (day == 30) { + day = 1; + month++; + } else { + day++; + } + break; + case 2: + if (isLeapYear) { + if (day == 29) { + day = 1; + month++; + } else { + day++; + } + } else { + if (day == 28) { + day = 1; + month++; + } else { + day++; + } + } + break; + default: + break; + } + return formatDateFromInt(year, month, day); + } + + /** + * 获取当前日期格式的前一天 + * + * @param targetDate 目标日期格式字符串 + * @return + */ + public static String getBeforeFromTarget(String targetDate) { + int year = DateTimeUitl.intGetYear(targetDate); + int month = DateTimeUitl.intGetMonth(targetDate); + int day = DateTimeUitl.intGetDay(targetDate); + boolean isLeapYear = false; + if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { + isLeapYear = true; + } else { + isLeapYear = false; + } + switch (month) { + case 1: + if (day == 1) { + day = 31; + month = 12; + year--; + } else { + day--; + } + break; + case 5: + case 7: + case 10: + case 12: + if (day == 1) { + day = 30; + month--; + } else { + day--; + } + break; + case 2: + case 4: + case 6: + case 8: + case 9: + case 11: + if (day == 1) { + day = 31; + month--; + } else { + day--; + } + break; + case 3: + if (isLeapYear) { + if (day == 1) { + day = 29; + month--; + } else { + day--; + } + } else { + if (day == 1) { + day = 28; + month--; + } else { + day--; + } + } + break; + default: + break; + } + return formatDateFromInt(year, month, day); + } + + /** + * 将int数组的 年份、月份、日,转换为 2017-06-05 的格式 + * + * @return + */ + public static String formatDateFromInt(int year, int month, int day) { + String m = ""; + if (month >= 10) { + m = "" + month; + } else { + m = "0" + month; + } + + String d = ""; + if (day >= 10) { + d = "" + day; + } else { + d = "0" + day; + } + // RLog.e("3!! y=" + year + ",m=" + m + ",d=" + d); + String result = year + "-" + m + "-" + d; + return result; + } + + + /** + * 获得当前指定格式的时间字符串 + * + * @param formate 如yyyy-MM-dd HH:mm:ss + * @return + */ + public static String getCurrentWithFormate(String formate) { + String time = ""; + Date dNow = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat(formate); + time = formatter.format(dNow); + return time; + } + + /* + * 将时间转换为时间戳 + */ + public static long dateToStamp(String s) throws ParseException { + String res; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = simpleDateFormat.parse(s); + long ts = date.getTime(); + res = String.valueOf(ts); + return ts; + } + + /** + * 得到当前时间的Calendar形式 + * + * @return Calendar + */ + public static Calendar calGetCalendarTime() { + Calendar caltime = Calendar.getInstance(); + return caltime; + } + + /** + * 获得系统默认格式的日期字符串 + * + * @param date + * @return + */ + public static Date getSysDefaultDateTime(String datetime) { + Date time = null; + try { + SimpleDateFormat formatter = new SimpleDateFormat(SYS_DATE_FORMATE); + time = formatter.parse(datetime); + } catch (Exception ex) { + + } + return time; + } + + /** + * 获得系统默认格式的日期字符串 + * + * @param date + * @return + */ + public static String getSysDateTime(Date date) { + String time = null; + SimpleDateFormat formatter = new SimpleDateFormat(SYS_DATE_FORMATE); + time = formatter.format(date); + return time; + } + + /** + * 根据日期字符串得到年,返回数字 + * + * @param tempStr 时间字符串 + * @return + */ + public static int intGetYear(String tempStr) { + int dttime = 0; + try { + dttime = Integer.parseInt(tempStr.substring(0, 4)); + } catch (Exception ex) { + + } + return dttime; + } + + /** + * 根据日期字符串得到月,返回数字 + * + * @param tempStr + * @return + */ + public static int intGetMonth(String tempStr) { + int dttime = 0; + dttime = Integer.parseInt(tempStr.substring(5, 7)); + return dttime; + } + + /** + * 根据日期字符串得到日,返回数字 + * 2017-6-5 + * + * @param tempStr 标准时间字符串 + * @return int + */ + public static int intGetDay(String tempStr) { + int dttime = 0; + dttime = Integer.parseInt(tempStr.substring(8, 10)); + return dttime; + } + + /** + * 得到程序中标准时间到小时 + * + * @return yyyy-MM-dd hh格式的时间 + */ + public static String strGetTimesToHour() { + String time = ""; + Date dNow = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh"); + time = formatter.format(dNow); + return time; + } + + /** + * 得到程序中标准时间到分 + * + * @return yyyy-MM-dd hh:mm 格式的时间 + */ + public static String strGetTimeToMinute() { + String time = null; + Date dNow = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + time = formatter.format(dNow); + return time; + } + + /** + * 得到程序中标准时间到分 + * + * @return yyyy年MM月dd日hh时mm分 格式的时间 + */ + public static String getTimeToMinute() { + String time = ""; + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); // 4 表示 2004 年 + int month = calendar.get(Calendar.MONTH) + 1; + int day = calendar.get(Calendar.DAY_OF_MONTH); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + int minute = calendar.get(Calendar.MINUTE); + time = year + "年" + month + "月" + day + "日" + hour + "时" + minute + "分"; + return time; + } + + /** + * 得到程序中标准时间到分 + * + * @return yyyy年MM月dd日hh时mm分 格式的时间 + */ + public static String getTimeToSecond() { + String time = ""; + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); // 4 表示 2004 年 + int month = calendar.get(Calendar.MONTH) + 1; + int day = calendar.get(Calendar.DAY_OF_MONTH); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + int minute = calendar.get(Calendar.MINUTE); + int second = calendar.get(Calendar.SECOND); + time = year + "年" + month + "月" + day + "日" + hour + "时" + minute + "分" + second + "秒"; + return time; + } + + /** + * 得到程序中标准时间到秒 + * + * @return yyyy-MM-dd HH:mm:ss 格式的时间 + */ + public static String strGetTime() { + String time = ""; + Date dNow = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + time = formatter.format(dNow); + return time; + } + + /** + * 得到程序中标准时间到秒 + * + * @return yyyy-MM-dd hh:mm:ss 格式的时间 + */ + public static String strGetTimeFull() { + return String.valueOf(System.currentTimeMillis()); + } + + /** + * 得到程序中标准时间 + * + * @return yyyy-MM-dd 格式的时间 + */ + public static String strGetTimes() { + String time = ""; + Date dNow = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + time = formatter.format(dNow); + return time; + } + + /** + * 验证日期是否合法 + * + * @param timeStr + * @return + */ + public static boolean isLeaglDate(String timeStr) { + boolean flag = true; + if (timeStr != null) { + String check = "\\d{4}-\\d{2}-\\d{2}"; + Pattern timePar = Pattern.compile(check); + Matcher matcher = timePar.matcher(timeStr); + flag = matcher.matches(); + } + return flag; + } + + /** + * 验证日期时间是否合法 + * + * @param timeStr + * @return + */ + public static boolean isLeaglDateTime(String timeStr) { + boolean flag = true; + String check = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}((:| )\\d{3}+)?"; + Pattern timePar = Pattern.compile(check); + Matcher matcher = timePar.matcher(timeStr); + flag = matcher.matches() || isLeaglDate(timeStr); + return flag; + } + + /** + * 如果数字长度小于2位则在前面补"0" + * + * @param param1 + * @return + */ + public static String LenMore1(String param1) { + if (param1.length() < 2) { + param1 = "0" + param1; + } + return param1; + } + + /** + * 取时间中的月、日信息,组成short数值,“月*100+日” + * + * @param time 需要转换的时间,单位:秒 + * @return 如 1002 表示 10月2日 + */ + public static short getShortDate(long time) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time * 1000); + int month = calendar.get(Calendar.MONTH) + 1; + int day = calendar.get(Calendar.DAY_OF_MONTH); + return ((short) (month * 100 + day)); + } + + /** + * 取时间中的月、日信息,组成short数值,“(年-2000)*10000+月*100+日” + * + * @param time 需要转换的时间,单位:秒 + * @return 如 1002 表示 10月2日 + */ + public static int getIntDate(long time) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time * 1000); + int year = calendar.get(Calendar.YEAR) - 2000; // 4 表示 2004 年 + int month = calendar.get(Calendar.MONTH) + 1; + int day = calendar.get(Calendar.DAY_OF_MONTH); + return ((int) (year * 10000 + month * 100 + day)); + } + + /** + * 取时间中的时、分信息,组成short数值,“时*100+分” + * + * @param time 需要转换的时间,单位:秒 + * @return 如 2130 表示 21点30分 + */ + public static short getShortTime(long time) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time * 1000); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + int minute = calendar.get(Calendar.MINUTE); + return ((short) (hour * 100 + minute)); + } + + /** + * 取时间中的时、分、秒信息,组成short数值,“时*10000+分*100+秒” + * + * @param time 需要转换的时间,单位:秒 + * @return 如 213055 表示 21点30分55秒 + */ + public static int getIntTime(long time) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time * 1000); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + int minute = calendar.get(Calendar.MINUTE); + int second = calendar.get(Calendar.SECOND); + return ((int) (hour * 10000 + minute * 100 + second)); + } + + + /** + * 将时间转换为显示字符串,“简短”格式 2004-8-16 12:8:1 + * + * @param second 相对于 1970年1月1日零时的秒数 + * @return + */ + public static String toTimeString(long second) { + StringBuffer sbRet = new StringBuffer(); + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(second * 1000); + + sbRet.append(calendar.get(Calendar.YEAR)).append("-"); + sbRet.append(calendar.get(Calendar.MONTH) + 1).append("-"); + sbRet.append(calendar.get(Calendar.DATE)).append(" "); + sbRet.append(calendar.get(Calendar.HOUR_OF_DAY)).append(":"); + sbRet.append(calendar.get(Calendar.MINUTE)).append(":"); + sbRet.append(calendar.get(Calendar.SECOND)); + } catch (Exception e) {/* DISCARD EXEPTION */ + } + return sbRet.toString(); + } + + /** + * 将时间转换为显示字符串,“全长”格式 2004-08-16 12:08:01 + * + * @param second 相对于 1970年1月1日零时的秒数 + * @return + */ + public static String toTimeFullString(long second) { + StringBuffer sbRet = new StringBuffer(); + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(second * 1000); + + sbRet.append(calendar.get(Calendar.YEAR)).append("-"); + sbRet.append(integerToString((calendar.get(Calendar.MONTH) + 1), 2)).append("-"); + sbRet.append(integerToString(calendar.get(Calendar.DATE), 2)).append(" "); + sbRet.append(integerToString(calendar.get(Calendar.HOUR_OF_DAY), 2)).append(":"); + sbRet.append(integerToString(calendar.get(Calendar.MINUTE), 2)).append(":"); + sbRet.append(integerToString(calendar.get(Calendar.SECOND), 2)); + } catch (Exception e) {/* DISCARD EXEPTION */ + } + return sbRet.toString(); + } + + /** + * 将时间转换为显示字符串,“全长”格式 20040816120801 + * + * @param second 相对于 1970年1月1日零时的秒数 + * @return + */ + public static String toTimeFullString2(long second) { + StringBuffer sbRet = new StringBuffer(); + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(second * 1000); + + sbRet.append(calendar.get(Calendar.YEAR)).append(""); + sbRet.append(integerToString((calendar.get(Calendar.MONTH) + 1), 2)).append(""); + sbRet.append(integerToString(calendar.get(Calendar.DATE), 2)).append(""); + sbRet.append(integerToString(calendar.get(Calendar.HOUR_OF_DAY), 2)).append(""); + sbRet.append(integerToString(calendar.get(Calendar.MINUTE), 2)).append(""); + sbRet.append(integerToString(calendar.get(Calendar.SECOND), 2)); + } catch (Exception e) {/* DISCARD EXEPTION */ + } + return sbRet.toString(); + } + + /** + * 将时间字符串转化为秒值(相对 1970年1月1日) + * + * @param time 时间字符串 + * @param format 格式串,如 "yyyy-MM-dd-HH-mm", "yyyy-MM-dd HH:mm:ss" + * @return   失败返回 0 + */ + public static int toTimeInteger(String time, String format) { + int nRet = 0; + try { + SimpleDateFormat dateFormat = new SimpleDateFormat(format); + Date de = dateFormat.parse(time); + nRet = (int) (de.getTime() / 1000); + } catch (Exception e) {/*DISCARD EXCEPTION*/ + } + return nRet; + } + + /** + * 获得时间 + * + * @param date + * @return + */ + public static long toTimeLong(Date date) { + try { + return date.getTime(); + } catch (Exception ex) { + + return 0; + } + } + + /** + * 将时间字符串转化为毫秒值(相对 1970年1月1日) + * + * @param time 时间字符串 + * @return   失败返回 0 + */ + public static long toSystemTimeLongMi(String time) { + long nRet = 0; + try { + SimpleDateFormat dateFormat = new SimpleDateFormat(SYS_DATE_FORMATE); + Date de = dateFormat.parse(time); + nRet = de.getTime(); + } catch (Exception e) {/*DISCARD EXCEPTION*/ + } + return nRet; + } + + /** + * 将时间字符串转化为秒值(相对 1970年1月1日) + * + * @param time 时间字符串 + * @return   失败返回 0 + */ + public static long toSystemTimeLong(String time) { + long nRet = 0; + try { + SimpleDateFormat dateFormat = new SimpleDateFormat(SYS_DATE_FORMATE); + Date de = dateFormat.parse(time); + nRet = de.getTime() / 1000; + } catch (Exception e) {/*DISCARD EXCEPTION*/ + } + return nRet; + } + + /** + * 将时间字符串转化为秒值(相对 1970年1月1日) + * + * @param time 时间字符串 + * @param format 格式串,如 "yyyy-MM-dd-HH-mm", "yyyy-MM-dd HH:mm:ss" + * @return   失败返回 0 + */ + public static long toTimeLong(String time, String format) { + long nRet = 0; + try { + SimpleDateFormat dateFormat = new SimpleDateFormat(format); + Date de = dateFormat.parse(time); + nRet = de.getTime() / 1000; + } catch (Exception e) {/*DISCARD EXCEPTION*/ + } + return nRet; + } + + /** + * 将时间转换为显示字符串 "19990412" + * + * @param second 相对于 1970年1月1日零时的秒数 + * @return + */ + public static String toDateString(long second) { + StringBuffer sbRet = new StringBuffer(); + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(second * 1000); + + sbRet.append(calendar.get(Calendar.YEAR)); + if (calendar.get(Calendar.MONTH) + 1 < 10) { + sbRet.append("0"); + } + sbRet.append(calendar.get(Calendar.MONTH) + 1); + if (calendar.get(Calendar.DATE) < 10) { + sbRet.append("0"); + } + sbRet.append(calendar.get(Calendar.DATE)); + } catch (Exception e) {/* DISCARD EXEPTION */ + } + return sbRet.toString(); + } + + /** + * 将输入的整数转换为指定长度的字符串,不足时首部用'0'填充, 整数超长时则直接输出 + * + * @param input_num 输入的整数 + * @param output_length 输出字符串的长度 + * @return 参数(32, 4 ) , 输出 : “ 0032 ” , 参数 ( 3390, 3),输出:“3390” + */ + public static String integerToString(int input_num, int output_length) { + StringBuffer sbPrefix = new StringBuffer(); + String sTempInput = "" + input_num; + + if (sTempInput.length() < output_length) { + for (int i = 0; i < output_length - sTempInput.length(); i++) { + sbPrefix.append('0'); + } + } + + return sbPrefix.append(sTempInput).toString(); + } + + /** + * 将时间字符串换算成相对于零点的秒数 + * "03:23:10" 三时二十三分十秒 + * "15:00:00" 十五时 + */ + public static int getDayTime(String time) { + int nRet = 0; + try { + String[] secTime = time.split(":"); + for (int i = 0; i < secTime.length; i++) { + int nTemp = Integer.parseInt(secTime[i]); /* 时:分:秒*/ + for (int ii = 0; ii < 2 - i; ii++) { + nTemp = nTemp * 60; + } + nRet += nTemp; + } + } catch (Exception e) { + /*DISCARD EXCEPTION*/ + } + return nRet; + } + + /** + * 将时间长度整数值转换成 时分秒 的可读字符串 + * + * @param ltime + * @return + */ + public static String getTimeString(long ltime) { + return getDayTimeString_inner(ltime, true); + } + + /** + * 根据时间戳,获取当前时分秒时间字符串,不包含日期信息 + * + * @param ltime + * @return + */ + public static String getDayTimeString(long ltime) { + return getDayTimeString_inner(ltime, false); + } + + /** + * 根据时间戳,获取当前时分秒时间字符串,不包含日期信息 + * + * @param ltime 格式为yyyy-mm-dd HH:mm:ss 格式的时间字符串 + * @return + */ + public static String getDateTimeWithOutSenondString(String ltime) { + String result = ""; + try { + SimpleDateFormat formatter = new SimpleDateFormat(SYS_DATE_FORMATE); + Date time = formatter.parse(ltime); + + SimpleDateFormat formater2 = new SimpleDateFormat(TIME_WITH_SECOND_FORMATE); + result = formater2.format(time); + } catch (Exception ex) { + return ltime; + } + return result; + } + + /** + * 时间格式转换 + * + * @param ltime - 相对于当天零时的秒数 + * @return String - 带格式的时间字符串 “时:分:秒” + */ + private static String getDayTimeString_inner(long ltime, boolean zone_flag) { + long daytime = ltime % (24 * 3600); // 将时间折算为一天之内 + Date dateTemp = new Date(daytime * 1000); + SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); + if (zone_flag) { + formatter.setTimeZone(new SimpleTimeZone(0, "")); // 不应该是零时区 + } + return formatter.format(dateTemp); + } + + /** + * 时间格式转换 + * + * @param ltime - 相对于1970年1月1日零时的秒数 + * @param format - 格式字符串 + * @return String - 带格式的时间字符串 + */ + public static String getTimeWithFormat(long ltime, String format) { + Date dateTemp = new Date(ltime * 1000); + SimpleDateFormat formatter = new SimpleDateFormat(format); + return formatter.format(dateTemp); + } + + /** + * 时间格式转换 + * + * @param ltime - yyyy-MM-dd HH:mm:ss + * @return String - yyyy年MM月dd日 HH时:mm分 + */ + public static String getTimeWithFormat(String ltime) { + String ftime = ""; + if (ltime.length() >= 18) { + ftime = ltime.substring(0, 4) + "年" + ltime.substring(5, 7) + "月" + + ltime.substring(8, 10) + "日" + ltime.substring(11, 13) + "时" + + ltime.substring(14, 16) + "分"; + } + return ftime; + + } + + + /** + * 两个时间相差距离多少天多少小时多少分多少秒 + * + * @param str1 时间参数 1 格式:2011-11-11 11:11:11 + * @param str2 时间参数 2 格式:2011-01-01 12:00:00 + * @return String 返回值为:xx天xx小时xx分xx秒 + */ + public static String getDistanceTime(String str1, String str2) { + long day = 0; + long hour = 0; + long min = 0; + long time1 = toSystemTimeLong(str1); + long time2 = toSystemTimeLong(str2); + long diff = 0; + if (time1 < time2) { + // diff = time2 - time1; + return min + "分"; + } else { + diff = time1 - time2; + } + day = diff / (24 * 60 * 60); + hour = (diff / (60 * 60) - day * 24); + min = ((diff / (60)) - day * 24 * 60 - hour * 60); + if (day == 0) { + if (hour == 0) { + return min + "分"; + } else { + return hour + "小时" + min + "分"; + } + } else { + return day + "天" + hour + "小时" + min + "分"; + } + } + + public static String getDistanceTime(long time1, long time2) { + String timeStamp2Date = DateUtil.timeStamp2Date(String.valueOf(time2), "MM-dd HH:mm"); + String hhmm = DateUtil.timeStamp2Date(String.valueOf(time2), "HH:mm"); + long day = 0; + long hour = 0; + long min = 0; + long sec = 0; + long diff = 0; + if (time1 < time2) { + diff = time2 - time1; +// return min + "分"; + } else { + diff = time1 - time2; + } + diff = diff / 1000; + day = diff / (24 * 60 * 60); + hour = (diff / (60 * 60) - day * 24); + min = ((diff / (60)) - day * 24 * 60 - hour * 60); + sec = (diff - day * 24 * 60 - hour * 60 - min * 60); + if (day == 0) { + if (hour == 0) { + if (min == 0) { + return sec + "秒前"; + } else { + return min + "分钟前"; + } + } else { + return hour + "小时前"; + } + } else { +// return day + "天" + hour + "小时" + min + "分"; + if (day == 1) { + return "昨天" + hhmm; + } else if (day == 2) { + return "前天" + hhmm; + } else { + return timeStamp2Date; + } + } + } + + /** + * 得出2个时间相差多少分钟 + * + * @param ltime - + * @param str1 时间参数 1 格式:2011-11-11 11:11:11 + * @param str2 时间参数 2 格式:2011-01-01 12:00:00 + * @return boolean + */ + public static Long getDistanceMin(String now, String callTime) { + long min = -1; + long time1 = toSystemTimeLong(now); + long time2 = toSystemTimeLong(callTime); + min = ((time1 - time2) / (60)); + return min; + } + + /** + * 得出2个时间相差多少秒 + * + * @return boolean + */ + public static Long getDistanceSec(String now, String callTime) { + long second = -1; + long time1 = toSystemTimeLong(now); + long time2 = toSystemTimeLong(callTime); + second = (time1 - time2); + return second; + } + + /** + * 比较时间先后 + * + * @param ltime - + * @param str1 时间参数 1 格式:2011-11-11 11:11:11 + * @param str2 时间参数 2 格式:2011-01-01 12:00:00 + * @return boolean + */ + public static boolean getDistance(String str1, String str2) { + boolean result = false; + long time1 = toSystemTimeLong(str1); + long time2 = toSystemTimeLong(str2); + if (time1 > time2) { + result = true; + } + return result; + } + + /** + * 获取某个时间后的n小时 + * + * @return + */ + public static String getTimeLaterH(String time, int n) { + + long currentTime = toSystemTimeLongMi(time); + currentTime += n * 60 * 60 * 1000; + Date date = new Date(currentTime); + return getSysDateTime(date); + } + + /** + * 获取当前系统时间后的n分钟 + * + * @return + */ + public static String endTime(int n) { + long currentTime = System.currentTimeMillis(); + currentTime += n * 60 * 1000; + Date date = new Date(currentTime); + SimpleDateFormat dateFormat = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + return StringFilter(dateFormat.format(date.getTime()).replaceAll("\\s+", "")); + } + + /** + * 获取该时间后的n秒钟 + * + * @return + */ + public static String getTimeLaterS(String time, int n) { + + long currentTime = toSystemTimeLongMi(time); + if (currentTime != 0) { + currentTime += n * 1000; + Date date = new Date(currentTime); + SimpleDateFormat dateFormat = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + return getSysDateTime(date); + } + return time; + + } + + public static String StringFilter(String str) throws PatternSyntaxException { + // 只允许字母和数字 + // String regEx = "[^a-zA-Z0-9]"; + // 清除掉所有特殊字符 + String regEx = "[:-]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(str); + return m.replaceAll("").trim(); + } + + public static String formatCST(String time) { + String formatTime = strGetTimeToMinute() + ":00"; + // SimpleDateFormat sdf1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK); + // try + // { + // Date date=sdf1.parse(time.toString()); + //// Date date=(Date) sdf1.parseObject(time); + // SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // formatTime=sdf.format(date); + // } + // catch (Exception e) + // { + // e.printStackTrace(); + // } + try { + String month = time.substring(4, 7); + String day = time.substring(8, 10); + String timeDetail = time.substring(11, 19); + String year = time.substring(24); + if ("Jan".equals(month)) { + month = "01"; + } else if ("Feb".equals(month)) { + month = "02"; + } else if ("Mar".equals(month)) { + month = "03"; + } else if ("Apr".equals(month)) { + month = "04"; + } else if ("May".equals(month)) { + month = "05"; + } else if ("Jun".equals(month)) { + month = "06"; + } else if ("Jul".equals(month)) { + month = "07"; + } else if ("Aug".equals(month)) { + month = "08"; + } else if ("Sep".equals(month)) { + month = "09"; + } else if ("Oct".equals(month)) { + month = "10"; + } else if ("Nov".equals(month)) { + month = "11"; + } else if ("Dec".equals(month)) { + month = "12"; + } + + String splitTime = year + "-" + month + "-" + day + " " + timeDetail; + System.out.println(splitTime); + boolean b = isLeaglDateTime(splitTime); + if (b) { + formatTime = splitTime; + } + } catch (Exception e) { + } + return formatTime; + + } + + /** + * 获取本月的第一天 + * + * @return + */ + public static String getFirstDay() { + Date date = new Date(); + DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + String time = format.format(date); + String[] strs = time.split("-"); + return strs[0] + "-" + strs[1] + "-01"; + } + + // /** + // * 日期选择器 + // * @param context + // * @param dataView + // * @return + // */ + // public static AlertDialog datePickerDialog(Context context, + // final TextView dataView) { + // int year1 = Calendar.getInstance().get(Calendar.YEAR); + // int month1 = Calendar.getInstance().get(Calendar.MONTH) + 1; + // int day1 = Calendar.getInstance().get(Calendar.DAY_OF_MONTH); + // String oldTime = dataView.getText().toString().trim(); + // if (!StringUtils.isEmpty(oldTime)){ + // try { + // year1 = intGetYear(oldTime); + // month1 = intGetMonth(oldTime); + // day1 = intGetDay(oldTime); + // } catch (Exception e) { + // year1 = Calendar.getInstance().get(Calendar.YEAR); + // month1 = Calendar.getInstance().get(Calendar.MONTH) + 1; + // day1 = Calendar.getInstance().get(Calendar.DAY_OF_MONTH); + // } + // + // } + // final Calendar time = Calendar.getInstance(Locale.CHINA); + // final SimpleDateFormat format = new SimpleDateFormat( + // "yyyy-MM-dd"); + // LinearLayout dateTimeLayout = (LinearLayout) LayoutInflater.from( + // context).inflate(R.layout.date_time_dialog, null); + // final DatePicker datePicker = (DatePicker) dateTimeLayout + // .findViewById(R.id.DatePicker); + // final TimePicker timePicker = (TimePicker) dateTimeLayout + // .findViewById(R.id.TimePicker); + // + // timePicker.setVisibility(View.GONE); + // + // DatePicker.OnDateChangedListener dateListener = new DatePicker.OnDateChangedListener() { + // + // @Override + // public void onDateChanged(DatePicker view, int year, + // int monthOfYear, int dayOfMonth) { + // time.set(Calendar.YEAR, year); + // time.set(Calendar.MONTH, monthOfYear ); + // time.set(Calendar.DAY_OF_MONTH, dayOfMonth); + // Log.v("zbj", "monthOfYear = " + monthOfYear); + // } + // }; + // + // datePicker.init(year1, month1-1, + // day1, dateListener); + // + // AlertDialog dialog = new AlertDialog.Builder(context) + // .setTitle("设置日期时间") + // .setView(dateTimeLayout) + // .setPositiveButton(R.string.sure, new DialogInterface.OnClickListener() { + // + // @Override + // public void onClick(DialogInterface dialog, int which) { + // datePicker.clearFocus(); + // timePicker.clearFocus(); + // time.set(Calendar.YEAR, datePicker.getYear()); + // time.set(Calendar.MONTH, datePicker.getMonth()); + // time.set(Calendar.DAY_OF_MONTH, + // datePicker.getDayOfMonth()); + // dataView.setText(format.format(time.getTime())); + // } + // }) + // .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + // + // @Override + // public void onClick(DialogInterface dialog, int which) { + // + // } + // }).show(); + // return dialog; + // } + + // /** + // * 日期时间选择器 + // * @param context + // * @param dataView + // * @return + // */ + // public static AlertDialog dateTimePickerDialog(Context context, + // final TextView dataView) { + // int year1 = Calendar.getInstance().get(Calendar.YEAR); + // int month1 = Calendar.getInstance().get(Calendar.MONTH); + // int day1 = Calendar.getInstance().get(Calendar.DAY_OF_MONTH); + // int hour1 = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); + // int minute1 = Calendar.getInstance().get(Calendar.MINUTE); + // int second1 = Calendar.getInstance().get(Calendar.SECOND); + // String oldTime = dataView.getText().toString().trim(); + // if (!StringUtils.isEmpty(oldTime)){ + // String[] dateTimeGroup = oldTime.split(" "); + // String[] dateGroup = dateTimeGroup[0].split("-"); + // String[] timeGroup = dateTimeGroup[1].split(":"); + // year1 = Integer.parseInt(dateGroup[0]); + // month1 = Integer.parseInt(dateGroup[1]); + // day1 = Integer.parseInt(dateGroup[2]); + // hour1 = Integer.parseInt(timeGroup[0]); + // minute1 = Integer.parseInt(timeGroup[1]); + // second1 = Integer.parseInt(dateGroup[2]); + // } + // final Calendar time = Calendar.getInstance(Locale.CHINA); + // final SimpleDateFormat format = new SimpleDateFormat( + // "yyyy-MM-dd HH:mm:ss"); + // LinearLayout dateTimeLayout = (LinearLayout) LayoutInflater.from( + // context).inflate(R.layout.date_time_dialog, null); + // final DatePicker datePicker = (DatePicker) dateTimeLayout + // .findViewById(R.id.DatePicker); + // final TimePicker timePicker = (TimePicker) dateTimeLayout + // .findViewById(R.id.TimePicker); + // // if(dataView == null) + // timePicker.setIs24HourView(true); + // + // TimePicker.OnTimeChangedListener timeListener = new TimePicker.OnTimeChangedListener() { + // + // @Override + // public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { + // time.set(Calendar.HOUR_OF_DAY, hourOfDay); + // time.set(Calendar.MINUTE, minute); + // + // } + // }; + // + // timePicker.setOnTimeChangedListener(timeListener); + // + // DatePicker.OnDateChangedListener dateListener = new DatePicker.OnDateChangedListener() { + // + // @Override + // public void onDateChanged(DatePicker view, int year, + // int monthOfYear, int dayOfMonth) { + // time.set(Calendar.YEAR, year); + // time.set(Calendar.MONTH, monthOfYear); + // time.set(Calendar.DAY_OF_MONTH, dayOfMonth); + // Log.v("zbj", "monthOfYear = " + monthOfYear); + // } + // }; + // + // datePicker.init(year1, month1-1, + // day1, dateListener); + // timePicker.setCurrentHour(hour1); + // timePicker.setCurrentMinute(minute1); + // + // AlertDialog dialog = new AlertDialog.Builder(context) + // .setTitle("设置日期时间") + // .setView(dateTimeLayout) + // .setPositiveButton(R.string.sure, new DialogInterface.OnClickListener() { + // + // @Override + // public void onClick(DialogInterface dialog, int which) { + // datePicker.clearFocus(); + // timePicker.clearFocus(); + // time.set(Calendar.YEAR, datePicker.getYear()); + // time.set(Calendar.MONTH, datePicker.getMonth()); + // time.set(Calendar.DAY_OF_MONTH, + // datePicker.getDayOfMonth()); + // time.set(Calendar.HOUR_OF_DAY, + // timePicker.getCurrentHour()); + // time.set(Calendar.MINUTE, timePicker.getCurrentMinute()); + // time.set(Calendar.SECOND, 00); + // dataView.setText(format.format(time.getTime())); + // } + // }) + // .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + // + // @Override + // public void onClick(DialogInterface dialog, int which) { + // + // } + // }).show(); + // return dialog; + // } + // + + + public static void main(String[] args) { + + // String stime=getCurrentWithFormate("yyyyMMddHHmmss"); + String time = "Thu Apr 07 19:04:00 CST 2016"; + String stime = formatCST(time); + + String time2 = "2016-04-07 19:04:00"; + + System.out.println(stime); + // System.out.println(toSystemTimeLongMi(stime)); + // System.out.println(toSystemTimeLongMi(time2)); + // System.out.println(toSystemTimeLongMi(stime) - toSystemTimeLongMi(time2)); + } + + /** + * 根据毫秒返回时分秒 + * + * @param time + * @return + */ + public static String getFormatHMS(long time) { + time = time / 1000;//总秒数 + int s = (int) (time % 60);//秒 + int m = (int) (time / 60);//分 + int h = (int) (time / 3600);//秒 + return String.format("%02d:%02d:%02d", h, m, s); + } + + public static String secondToMinuteOrHour(long seconds) { + //60S之内 + if (seconds < 60) { + return String.format("00:%s", seconds < 10 ? "0" + seconds : seconds); + } else { + //60分钟以内 + if (seconds / 60 < 60) { + return String.format("%s:%s", (seconds / 60) < 10 ? "0" + seconds / 60 : seconds / 60, seconds % 60 < 10 ? "0" + seconds % 60 : seconds % 60); + } else { + //60分钟之后 + return String.format("%s:%s:%s", seconds / 360, + (seconds - (seconds / 360) * 360) / 60 < 10 ? "0" + (seconds - (seconds / 360) * 360) / 60 : (seconds - (seconds / 360) * 360) / 60, + seconds % 60 < 10 ? "0" + seconds % 60 : seconds % 60); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/DateUtil.java b/app/src/main/java/com/yonsz/z1/utils/DateUtil.java new file mode 100644 index 0000000..5c49987 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/DateUtil.java @@ -0,0 +1,223 @@ +package com.yonsz.z1.utils; + +import android.content.Context; + +import com.yonsz.z1.R; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +/** + * Created by Administrator on 2016/12/31 0031. + */ + +public class DateUtil { + private static String DATE_FORMATE = "yyyy-MM-dd HH:mm:ss"; + + public static String getDateStr(Context context, String date) { + SimpleDateFormat format = new SimpleDateFormat(DATE_FORMATE); + Date dateEntity = new Date(); + try { + dateEntity = format.parse(date); + } catch (ParseException e) { + e.printStackTrace(); + } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(dateEntity); + Date now = new Date(System.currentTimeMillis()); + Calendar calendarNow = Calendar.getInstance(); + calendarNow.setTime(now); + + int dateForEq_year = calendar.get(Calendar.YEAR); + int dateForNow_year = calendarNow.get(Calendar.YEAR); + + int dateForEq_month = calendar.get(Calendar.MONTH); + int dateForNow_month = calendarNow.get(Calendar.MONTH); + + int dateForEq_day = calendar.get(Calendar.DAY_OF_MONTH); + int dateForNow_day = calendarNow.get(Calendar.DAY_OF_MONTH); + + int dateForEq_hour = calendar.get(Calendar.HOUR_OF_DAY); + int dateForNow_hour = calendarNow.get(Calendar.HOUR_OF_DAY); + + int dateForEq_minute = calendar.get(Calendar.MINUTE); + int dateForNow_minute = calendarNow.get(Calendar.MINUTE); + + String dateStr = ""; + if (dateForEq_year == dateForNow_year && dateForEq_month == dateForNow_month && + dateForEq_day == dateForNow_day) { + dateStr = context.getString(R.string.todaystr); + } else if (dateForEq_year == dateForNow_year && dateForEq_month == dateForNow_month && + dateForNow_day - dateForEq_day == 1) { + dateStr = context.getString(R.string.yestodaystr); + } else { + /*if (dateForEq_year == dateForNow_year && dateForEq_month == dateForNow_month) { + dateStr = context.getResources().getString(R.string.onedaystr, + dateForNow_day - dateForEq_day); + } else if (dateForEq_year == dateForNow_year) { + dateStr = context.getResources().getString(R.string.onemonthstr, + dateForNow_month - dateForEq_month); + } else { + dateStr = dateForEq_year + context.getString(R.string.year) + + dateForEq_month + context.getString(R.string.month) + + dateForEq_day + context.getString(R.string.day); + }*/ + dateStr = dateForEq_month + 1 + context.getString(R.string.month) + + dateForEq_day + context.getString(R.string.day); + } + return dateStr; + } + + public static String getDateStr(String date) { + SimpleDateFormat format = new SimpleDateFormat(DATE_FORMATE); + Date dateEntity = new Date(); + try { + dateEntity = format.parse(date); + } catch (ParseException e) { + e.printStackTrace(); + } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(dateEntity); + Date now = new Date(System.currentTimeMillis()); + Calendar calendarNow = Calendar.getInstance(); + calendarNow.setTime(now); + + int dateForEq_year = calendar.get(Calendar.YEAR); + int dateForNow_year = calendarNow.get(Calendar.YEAR); + + int dateForEq_month = calendar.get(Calendar.MONTH); + int dateForNow_month = calendarNow.get(Calendar.MONTH); + + int dateForEq_day = calendar.get(Calendar.DAY_OF_MONTH); + int dateForNow_day = calendarNow.get(Calendar.DAY_OF_MONTH); + + int dateForEq_hour = calendar.get(Calendar.HOUR_OF_DAY); + int dateForNow_hour = calendarNow.get(Calendar.HOUR_OF_DAY); + + int dateForEq_minute = calendar.get(Calendar.MINUTE); + int dateForNow_minute = calendarNow.get(Calendar.MINUTE); + + String dateStr = ""; + if (dateForEq_year == dateForNow_year && dateForEq_month == dateForNow_month && + dateForEq_day == dateForNow_day) { + dateStr = ""; + } else if (dateForEq_year == dateForNow_year && dateForEq_month == dateForNow_month && + dateForNow_day - dateForEq_day == 1) { + dateStr = "昨天"; + } else { + /*if (dateForEq_year == dateForNow_year && dateForEq_month == dateForNow_month) { + dateStr = context.getResources().getString(R.string.onedaystr, + dateForNow_day - dateForEq_day); + } else if (dateForEq_year == dateForNow_year) { + dateStr = context.getResources().getString(R.string.onemonthstr, + dateForNow_month - dateForEq_month); + } else { + dateStr = dateForEq_year + context.getString(R.string.year) + + dateForEq_month + context.getString(R.string.month) + + dateForEq_day + context.getString(R.string.day); + }*/ + if (dateForEq_year == dateForNow_year) { + dateStr = dateForEq_month + 1 + "-" + + dateForEq_day; + } else { + dateStr = dateForEq_year + "-" + (dateForEq_month + 1) + "-" + + dateForEq_day; + } + } + return dateStr; + } + + public static String getHourMinute(Context context, String date) { + SimpleDateFormat format = new SimpleDateFormat(DATE_FORMATE); + Date dateEntity = new Date(); + try { + dateEntity = format.parse(date); + } catch (ParseException e) { + e.printStackTrace(); + } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(dateEntity); + Date now = new Date(System.currentTimeMillis()); + Calendar calendarNow = Calendar.getInstance(); + calendarNow.setTime(now); + + int dateForEq_year = calendar.get(Calendar.YEAR); + int dateForNow_year = calendarNow.get(Calendar.YEAR); + + int dateForEq_month = calendar.get(Calendar.MONTH); + int dateForNow_month = calendarNow.get(Calendar.MONTH); + + int dateForEq_day = calendar.get(Calendar.DAY_OF_MONTH); + int dateForNow_day = calendarNow.get(Calendar.DAY_OF_MONTH); + + int dateForEq_hour = calendar.get(Calendar.HOUR_OF_DAY); + int dateForNow_hour = calendarNow.get(Calendar.HOUR_OF_DAY); + + int dateForEq_minute = calendar.get(Calendar.MINUTE); + int dateForNow_minute = calendarNow.get(Calendar.MINUTE); + + String dateStr = ""; + if (dateForEq_year == dateForNow_year && dateForEq_month == dateForNow_month && + dateForEq_day == dateForNow_day && dateForEq_hour == dateForNow_hour) { + dateStr = context.getResources().getString(R.string.minuteLater, + dateForNow_minute - dateForEq_minute); + } else if (dateForEq_year == dateForNow_year && dateForEq_month == dateForNow_month && + dateForEq_day == dateForNow_day) { + dateStr = context.getResources().getString(R.string.hourLater, + dateForNow_hour - dateForEq_hour); + } else { + if (String.valueOf(dateForEq_minute).length() == 1) { + dateStr = dateForEq_hour + ":0" + + dateForEq_minute; + } else { + dateStr = dateForEq_hour + ":" + + dateForEq_minute; + } + + } + return dateStr; + } + + public static String getTimeDifference(String date1, String date2) { + String timeDifference = "00′00″"; + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMATE); + Date dateStart = null; + Date dateEnd = null; + try { + dateStart = dateFormat.parse(date1); + dateEnd = dateFormat.parse(date2); + long d = dateEnd.getTime() - dateStart.getTime(); + int m = (int) (d / (1000 * 60)); + int s = (int) ((d % (1000 * 60)) / 1000); + timeDifference = m + "′" + s + "″"; + } catch (ParseException e) { + e.printStackTrace(); + } + return timeDifference; + } + + public static String getTimeStr(long mi) { + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMATE); + Date date = new Date(mi); + return dateFormat.format(date); + } + + /** + * * 时间戳转换成日期格式字符串 + * * @param seconds 精确到秒的字符串 + * * @param formatStr + * * @return + */ + public static String timeStamp2Date(String seconds, String format) { + if (seconds == null || seconds.isEmpty() || seconds.equals("null")) { + return ""; + } + if (format == null || format.isEmpty()) { + format = "yyyy-MM-dd HH:mm:ss"; + } + SimpleDateFormat sdf = new SimpleDateFormat(format); + return sdf.format(new Date(Long.valueOf(seconds))); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/DensityUtil.java b/app/src/main/java/com/yonsz/z1/utils/DensityUtil.java new file mode 100644 index 0000000..e207e07 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/DensityUtil.java @@ -0,0 +1,122 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkCapabilities; +import android.net.NetworkInfo; +import android.util.Log; + +/** + * Created by Administrator on 2016/12/20 0020. + */ + +public class DensityUtil { + /** + * 根据手机的分辨率从 dp 的单位 转成为 px(像素) + */ + public static int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + /** + * 根据手机的分辨率从 px(像素) 的单位 转成为 dp + */ + public static int px2dip(Context context, float pxValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (pxValue / scale + 0.5f); + } + + /** + * 将px值转换为sp值,保证文字大小不变 + * + * @param pxValue + * @param fontScale (DisplayMetrics类中属性scaledDensity) + * @return + */ + public static int px2sp(Context context, float pxValue) { + final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; + return (int) (pxValue / fontScale + 0.5f); + } + + /** + * 将sp值转换为px值,保证文字大小不变 + * + * @param spValue + * @param fontScale (DisplayMetrics类中属性scaledDensity) + * @return + */ + public static int sp2px(Context context, float spValue) { + final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; + return (int) (spValue * fontScale + 0.5f); + } + + /** + * 判断是否有网络连接 + * + * @param context + * @return + */ + public static boolean isNetworkConnected(Context context) { + if (context != null) { + ConnectivityManager mConnectivityManager = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo mNetworkInfo = mConnectivityManager + .getActiveNetworkInfo(); + if (mNetworkInfo != null) { + return mNetworkInfo.isAvailable(); + } + } + return false; + } + + public static boolean isConnected(Context context) { + ConnectivityManager connectivity = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + + if (null != connectivity) { + NetworkInfo info = connectivity.getActiveNetworkInfo(); + if (null != info && info.isConnected()) { + if (info.getState() == NetworkInfo.State.CONNECTED) { + return true; + } + } + } + return false; + } + + public static boolean isNetConnected(Context context) { + // 获得网络状态管理器 + ConnectivityManager connectivityManager = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivityManager == null) { + return false; + } else { + // 建立网络数组 + NetworkInfo[] net_info = connectivityManager.getAllNetworkInfo(); + + if (net_info != null) { + for (int i = 0; i < net_info.length; i++) { + // 判断获得的网络状态是否是处于连接状态 + if (net_info[i].getState() == NetworkInfo.State.CONNECTED) { + return true; + } + } + } + } + return false; + } + + public static boolean checkNetworkConnection(Context context) { + final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + + final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); + final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); + + if (wifi.getState() == NetworkInfo.State.DISCONNECTED) { //getState()方法是查询是否连接了数据网络 + return false;//wifi播放 + } else { + return true; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/DrawableTintUtil.java b/app/src/main/java/com/yonsz/z1/utils/DrawableTintUtil.java new file mode 100644 index 0000000..6733330 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/DrawableTintUtil.java @@ -0,0 +1,41 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; +import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; +import android.support.v4.graphics.drawable.DrawableCompat; + +/** + * Created by Administrator on 2019/4/4. + */ + +public class DrawableTintUtil { + /** + * Drawable 颜色转化类 + * + * @param drawable + * @param color资源 + * @return 改变颜色后的Drawable + */ + public static Drawable tintDrawable(@NonNull Drawable drawable, int color) { + Drawable wrappedDrawable = DrawableCompat.wrap(drawable); + DrawableCompat.setTint(wrappedDrawable, color); + return wrappedDrawable; + } + + /** + * Drawable 颜色转化类 + * + * @param drawable 源Drawable + * @param ColorStateList + * @return 改变颜色后的Drawable + */ + public static Drawable tintListDrawable(@NonNull Drawable drawable, ColorStateList colors) { + Drawable wrappedDrawable = DrawableCompat.wrap(drawable); + DrawableCompat.setTintList(wrappedDrawable, colors); + return wrappedDrawable; + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/EncodingConversionTools.java b/app/src/main/java/com/yonsz/z1/utils/EncodingConversionTools.java new file mode 100644 index 0000000..b3890a5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/EncodingConversionTools.java @@ -0,0 +1,123 @@ +package com.yonsz.z1.utils; + +/** + * Created by Administrator on 2018/1/18. + */ + +public class EncodingConversionTools { + /** + * 字符串转换成十六进制字符串(转GBK编码) + * + * @param String str 待转换的ASCII字符串 + * @return String 如: [616C6B] + */ + public static String str2HexStr(String str) { + + char[] chars = "0123456789ABCDEF".toCharArray(); + StringBuilder sb = new StringBuilder(""); + byte[] bs = null; + try { + bs = str.getBytes("GBK"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + int bit; + + for (int i = 0; i < bs.length; i++) { + bit = (bs[i] & 0x0f0) >> 4; + sb.append(chars[bit]); + bit = bs[i] & 0x0f; + sb.append(chars[bit]); + } + return sb.toString().trim(); + } + + /** + * 生成16进制累加和校验码 + * + * @param data 除去校验位的数据 + * @return + */ + public static String makeChecksum(String data) { + int total = 0; + int len = data.length(); + int num = 0; + while (num < len) { + String s = data.substring(num, num + 2); + total += Integer.parseInt(s, 16); + num = num + 2; + } + /** + * 用65535求余最大是65534,即16进制的FFFF + */ + int mod = total % 65535; + String hex = Integer.toHexString(mod); + len = hex.length(); + // 如果不够校验位的长度,补0 + switch (len) { + case 1: + hex = "000" + hex; + break; + case 2: + hex = "00" + hex; + break; + case 3: + hex = "0" + hex; + break; + default: + break; + } + return hex; + } + + public static byte[] HexString2Bytes(String src) { + int lenth = src.length() / 2; + byte[] ret = new byte[lenth]; + byte[] tmp = src.getBytes(); + for (int i = 0; i < lenth; i++) { + ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]); + } + return ret; + } + + public static byte uniteBytes(byte src0, byte src1) { + byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})) + .byteValue(); + _b0 = (byte) (_b0 << 4); + byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})) + .byteValue(); + byte ret = (byte) (_b0 ^ _b1); + return ret; + } + + public static String getHexStr(String str) { + String rtn = ""; + String hexStr = "0123456789ABCDEF"; + + str = str.toUpperCase(); + for (int i = 0; i < str.length(); i++) { + if (hexStr.indexOf(str.charAt(i)) != -1) { + rtn = rtn + str.charAt(i); + } + } + return rtn; + } + + /** + * bytes转换成十六进制字符串 + * + * @param byte[] b byte数组 + * @return String 每个Byte值之间空格分隔 + */ + public static String byte2HexStr(byte[] b) { + String stmp = ""; + StringBuilder sb = new StringBuilder(""); + for (int n = 0; n < b.length; n++) { + stmp = Integer.toHexString(b[n] & 0xFF); + sb.append((stmp.length() == 1) ? "0" + stmp : stmp); + sb.append(" "); + } + return sb.toString().toUpperCase().trim(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/FileUtil.java b/app/src/main/java/com/yonsz/z1/utils/FileUtil.java new file mode 100644 index 0000000..c07e2a9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/FileUtil.java @@ -0,0 +1,28 @@ +package com.yonsz.z1.utils; + +import android.os.Environment; + +/** + * Created by Administrator on 2016/11/28 0028. + */ + +public class FileUtil { + private static FileUtil mFile; + + public static FileUtil getInstance(){ + if (mFile == null){ + mFile = new FileUtil(); + } + return mFile; + } + + public String getSDCardPath(){ + String path = ""; + boolean sdCardExist = Environment.getExternalStorageState() + .equals(Environment.MEDIA_MOUNTED); //判断sd卡是否存在 + if(sdCardExist) { + path = Environment.getExternalStorageDirectory().toString();//获取跟目录 + } + return path; + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/FindImageHolderView.java b/app/src/main/java/com/yonsz/z1/utils/FindImageHolderView.java new file mode 100644 index 0000000..f329fb9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/FindImageHolderView.java @@ -0,0 +1,38 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.view.View; +import android.widget.ImageView; + +import com.bigkoo.convenientbanner.holder.Holder; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.yonsz.z1.database.entity.AdInfo; +import com.yonsz.z1.database.entity.entity5.FindEntity; + +/** + * Created by Sai on 15/8/4. + * 网络图片加载例子 + */ +public class FindImageHolderView implements Holder { + private ImageView imageView; + + @Override + public View createView(Context context) { + imageView = new ImageView(context); + imageView.setScaleType(ImageView.ScaleType.FIT_XY); + return imageView; + } + + @Override + public void UpdateUI(Context context, int position, FindEntity.DataBean.SlideshowBean data) { + DisplayImageOptions options = new DisplayImageOptions.Builder() + .cacheInMemory(true) + .cacheOnDisk(true) + .bitmapConfig(Bitmap.Config.RGB_565) + .build(); +// imageView.setImageResource(data.getLinkUrl()); + ImageLoader.getInstance().displayImage(data.getCoverImg(), imageView, options); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/utils/FloorToHouseTypeUtil.java b/app/src/main/java/com/yonsz/z1/utils/FloorToHouseTypeUtil.java new file mode 100644 index 0000000..1f14ac8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/FloorToHouseTypeUtil.java @@ -0,0 +1,29 @@ +package com.yonsz.z1.utils; + +public class FloorToHouseTypeUtil { + public static String getHouseType(String floorCode) { + String houseTypeCode = ""; + switch (floorCode) { + /*case "3": + houseTypeCode = "2"; + break; + case "2": + houseTypeCode = "2"; + break;*/ + case "1": + houseTypeCode = "5"; + break; + case "-1": + case "-2": + case "-3": + case "-4": + case "-5": + houseTypeCode = "9"; + break; + default: + houseTypeCode = "4"; + break; + } + return houseTypeCode; + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/ImageLoaderUtil.java b/app/src/main/java/com/yonsz/z1/utils/ImageLoaderUtil.java new file mode 100644 index 0000000..d8de637 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/ImageLoaderUtil.java @@ -0,0 +1,23 @@ +package com.yonsz.z1.utils; + +import android.graphics.Bitmap; +import android.widget.ImageView; + +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; + +/** + * @author 高杰 + * @time 2017/3/23 11:24 + * @desc ${TODO} + */ +public class ImageLoaderUtil { + public static void setImageUrl(String url, ImageView imageView){ + DisplayImageOptions options = new DisplayImageOptions.Builder() + .cacheInMemory(false) + .cacheOnDisk(true) + .bitmapConfig(Bitmap.Config.RGB_565) + .build(); + ImageLoader.getInstance().displayImage(url, imageView, options); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/JsonMessageDecoder.java b/app/src/main/java/com/yonsz/z1/utils/JsonMessageDecoder.java new file mode 100644 index 0000000..41a0243 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/JsonMessageDecoder.java @@ -0,0 +1,171 @@ +package com.yonsz.z1.utils; + +import android.util.Log; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description: 解决粘包拆包问题 + * @Author: xiaojunnuo + * @CreateDate: 2018/7/26 0026 16:28 + */ +public class JsonMessageDecoder extends ByteToMessageDecoder { + + + /** + * @Description: 消息解析 + * @Author: xiaojunnuo + * @CreateDate: 2018/7/28 0028 18:42 + */ + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) { // (2) + in.markReaderIndex(); + /*if (Log.isDebugEnabled()) { + debugReadableMessage(in); + }*/ + byte[] bytes = new byte[in.readableBytes()]; + in.readBytes(bytes); + String content = new String(bytes); + + //可能会粘包,多个json会在一个字符串里面,所以要分割json + JsonSplitRet splitRet = split(content); + if(splitRet == null){ +// log.warn("消息解析失败,丢弃:{}",content); + return; + } + for (String json : splitRet.getMessages()) { + json = json.trim(); + if(json.length() == 0){ + continue; + } + out.add(json); + } + + if(splitRet.getBreakIndex()!=null ){ + //如果不是以} ]结尾,说明是拆包了 + in.resetReaderIndex(); + in.skipBytes(splitRet.getBreakIndex()); + } + } + + /** + * 多个json 分割成一个 + * @param content + * @return + */ + public JsonSplitRet split(String content) { + if(content.charAt(0)!='{' && content.charAt(0)!='[' ){ + //如果不是以{开头,说明是无效消息 + return null; + } + int deep = 0; + int start = 0; + boolean inQuote = false; //是否在双引号中 + + JsonSplitRet ret = new JsonSplitRet(); + for (int i = 0; i < content.length() ; i++) { + char c = content.charAt(i); + if(!inQuote ){ + if(c == '{'){ + deep++; + }else if(c == '}'){ + deep--; + }else if(c == '['){ + deep++; + }else if(c == ']'){ + deep--; + } + } + if(c == '"'){ + inQuote = !inQuote; + } + if(deep == 0){ + //说明解析到json结尾了 + String one = content.substring(start,i+1); + ret.getMessages().add(one); + start = i+1; + } + } + + if(start!=content.length()){ + //如果不是刚好结束,可能拆包了,返回start,告诉netty应该从哪里截断 + ret.setBreakIndex(start); + } + + return ret; + } + + + /** + * @Description: 打印debug日志 + * @Author: xiaojunnuo + * @CreateDate: 2018/7/28 0028 18:42 + */ + private void debugReadableMessage(ByteBuf in) { + in.resetReaderIndex(); + byte[] bytes = new byte[in.readableBytes()]; + in.readBytes(bytes); +// String pipei = "{\"id\":\"00ffa0a0a09dc1fddce5\",\"mac\":\"a0:9d:c1:fd:dc:e5\"}"; +// String pipei2 = "{\"code\":101,\"timestamp\":2724356833,\"gw\":{\"ver\":\"2.00.00\",\"chiptype\":\"MTK7688\",\"gwapptype\":\"OFFLINE_VOICE_GW\",\"gwtype\":8,\"id\":\"00ffa0a0a09dc1fddce5\",\"mac\":\"a0:9d:c1:fd:dc:e5\"},\"device\":[{\"id\":\"010100124b00170f5832\",\"ep\":2,\"pid\":260,\"did\":0,\"ol\":true,\"dn\":\"ShuncomDevice\",\"dtype\":0,\"fac\":\"Shuncom\",\"ztype\":65535,\"dsp\":\"SzDeLiXi Remote \",\"swid\":\"ShuncomDevice-v1.0\",\"st\":{\"on\":false,\"fac\":\"Shuncom\",\"dsp\":\"SzDeLiXi Remote \"}},{\"id\":\"010100124b00170f5832\",\"ep\":1,\"pid\":260,\"did\":0,\"ol\":true,\"dn\":\"灯带\",\"dtype\":0,\"fac\":\"Shuncom\",\"ztype\":65535,\"dsp\":\"SzDeLiXi Remote \",\"swid\":\"Dlx 2SWh3_1.2.20\",\"st\":{\"on\":false,\"backled\":2,\"Supervision\":240,\"fac\":\"Shuncom\",\"dsp\":\"SzDeLiXi Remote \",\"modelid\":0}},{\"id\":\"06020000a09dc1fddc01\",\"ep\":1,\"pid\":65287,\"did\":1,\"ol\":true,\"dn\":\"ShuncomDevice\",\"dtype\":243,\"fac\":\"ShunCom\",\"ztype\":65535,\"dsp\":\"SHUNCOM_VOICE\",\"swid\":\"NULL\",\"st\":{}}]}"; +// log.debug("比对:{}:{}",pipei.getBytes().length, pipei.getBytes()); +// log.debug("比对2:{}:{}",pipei2.getBytes().length, pipei2.getBytes()); +// log.debug("可读取消息:byte:{}", bytes); //-86, 85, 0, 55, 4, 0, 2, 0, -117, 36, 55 +// //-86, 85, 3, 101, 4, 0, 1, -1, -28, -114, 865 +// +// +// log.debug("比对:{}:{}",pipei.length(),HexUtils.bytesToHexString(pipei.getBytes())); +// log.debug("比对2:{}:{}",pipei2.length(), HexUtils.bytesToHexString(pipei2.getBytes())); +// log.debug("可读取消息:hex:{}", HexUtils.bytesToHexString(bytes)); //v1-4: aa 55 00 37 04 00 02 00 8b 24 +// +// //v4: aa 55 03 65 04 00 01 ff e4 8e +// //v3: aa 55 03 65 04 00 01 ff 47 54 +// //v2: aa 55 03 64 04 00 01 ff de 32 +// //v1: aa 55 03 64 04 00 01 ff 13 0b +// log.debug("可读取消息:string:{}", new String(bytes)); + in.resetReaderIndex(); + } + + + class JsonSplitRet{ + List messages = new ArrayList<>(3); + private Integer breakIndex; + + public List getMessages() { + if (messages == null) { + return new ArrayList<>(); + } + return messages; + } + + public void setMessages(List messages) { + this.messages = messages; + } + + public Integer getBreakIndex() { + return breakIndex; + } + + public void setBreakIndex(Integer breakIndex) { + this.breakIndex = breakIndex; + } + } + + +// public static void main(String[] args) { +// String content = "{\"xxx\":1,\"zz\":\"xxx\"}{\"xxx\":1,\"zz\":\"xxx\"}{\"xxx\":1,"; +// JsonMessageDecoder decoder =new JsonMessageDecoder(); +// JsonSplitRet ret = decoder.split(content); +// +// int leftLength = ret.getBreakStr().getBytes().length; +// int index = content.getBytes().length-leftLength; +// System.out.println(index+"-"+ret.getBreakIndex()); +// +// } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/utils/KeyboardUtil.java b/app/src/main/java/com/yonsz/z1/utils/KeyboardUtil.java new file mode 100644 index 0000000..d735a78 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/KeyboardUtil.java @@ -0,0 +1,66 @@ +package com.yonsz.z1.utils; + +import android.app.Activity; +import android.content.Context; +import android.os.IBinder; +import android.os.SystemClock; +import android.view.MotionEvent; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +/** + * Created by Administrator on 2019/4/17. + */ + +public class KeyboardUtil { + public static void showKeyboard(final View view, final Context context) { + final InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + + new Thread(new Runnable() { + @Override + public void run() { + SystemClock.sleep(300); + if (inputManager != null) { + view.requestFocus(); + inputManager.showSoftInput(view, 0); + } + + } + }).start(); + } + + /** + * 根据传入控件的坐标和用户的焦点坐标,判断是否隐藏键盘,如果点击的位置在控件内,则不隐藏键盘 + * + * @param view 控件view + * @param event 焦点位置 + * @return 是否隐藏 + */ + public static void hideKeyboard(MotionEvent event, View view, + Activity activity) { + try { + if (view != null && view instanceof EditText + /*|| view instanceof VoiceEditText + || view instanceof VoiceDescriptionEditText*/ + ) { + int[] location = {0, 0}; + view.getLocationInWindow(location); + int left = location[0], top = location[1], right = left + + view.getWidth(), bootom = top + view.getHeight(); + // 判断焦点位置坐标是否在空间内,如果位置在控件外,则隐藏键盘 + if (event.getRawX() < left || event.getRawX() > right + || event.getY() < top || event.getRawY() > bootom) { + // 隐藏键盘 + IBinder token = view.getWindowToken(); + InputMethodManager inputMethodManager = (InputMethodManager) activity + .getSystemService(Context.INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(token, + InputMethodManager.HIDE_NOT_ALWAYS); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/LenCmdDecoder.java b/app/src/main/java/com/yonsz/z1/utils/LenCmdDecoder.java new file mode 100644 index 0000000..afc52ef --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/LenCmdDecoder.java @@ -0,0 +1,78 @@ +package com.yonsz.z1.utils; + +import android.util.Log; + +import java.util.List; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; + +/** + * 解析粘包的问题,命令头部加上len + * + * @author jiangzheng + * @date 2018-05-16 + */ +public class LenCmdDecoder extends ByteToMessageDecoder { + + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf bufferIn, + List out) throws Exception { + //1.如果收到的数据包长度小于2字节,则继续等待读取后续数据包 + if (bufferIn.readableBytes() < 2) { + return; + } + int beginIndex = bufferIn.readerIndex(); + //2.读取包总长 + byte[] tmp = new byte[2]; + //注意在读的过程中,readIndex的指针也在移动 + tmp[0] = bufferIn.readByte(); + tmp[1] = bufferIn.readByte(); + //3.处理指令长度异常:如果指令大于256(协议最大长度)或小于10(协议最小长度)个字节,则为长度异常指令 + int length = BytesUtil.hexToInt(BytesUtil.bytesToHexString(tmp)) + 2; + if (length > 1024 || length < 5) { + //3.1 丢弃原包总长的第一个字节,向后再读取一个字节作为新的包总长 + bufferIn.readerIndex(beginIndex + 1); + Log.i("LenCmdDecoder========", "LenCmdDecoder decode()" + BytesUtil.bytesToHexString(tmp)); + // Log.i("LenCmdDecoder========" + ctx.channel().remoteAddress() + "的指令长度(" + length + ")异常,代表包总长度的两个字节为:", BytesUtil.bytesToHexString(tmp)); + return; + } + //4.如果收到的数据包字节数小于包总长,则继续等待读取后续数据包 + /** + 对于拆包这种场景,由于还未读取到完整的消息,bufferIn.readableBytes() 会小于length,并重置bufferIn的readerIndex为0,然后退出,ByteToMessageDecoder会乖乖的等待下个包的到来。 + 由于第一次调用中readerIndex被重置为0,那么decode方法被调用第二次的时候,beginIndex还是为0的。 + **/ + if ((bufferIn.readableBytes() + 2) < length) { //2长度 + bufferIn.readerIndex(beginIndex); + return; + } + + //5.根据包总长读取合理长度的数据包 + bufferIn.readerIndex(beginIndex + length); //只有将readerIndex设置为最大,bufferIn.isReadable()方法才会返回false + ByteBuf otherByteBufRef = bufferIn.slice(beginIndex, length); + otherByteBufRef.retain(); + + //6.处理读取到的合理长度的指令 + byte[] cmd = new byte[length]; + byte[] retCmd = new byte[length - 2]; + otherByteBufRef.readBytes(cmd); + // 兼容以前的命令,丢弃为了解决粘包的前两个字节 + System.arraycopy(cmd, 2, retCmd, 0, length - 2); + + String receiveMsg = BytesUtil.bytesToHexString(retCmd); + Log.i("LenCmdDecoder 收到数据命令: ", receiveMsg); + //7.校验指令合法性,如果合法就做业务操作,如果不合法就丢弃掉一个字节,继续读下一个字节来拼成指令,再校验合法性 + // if (ToolsUtil.valiMsg(receiveMsg)) { + if (1 == 1) {// TODO: 2018/6/4 去处理 + //7.1返回正确的指令字符串 + out.add(retCmd); + } else { + //7.2.数据包指令校验不通过,丢弃包总长的第一个字节,等待下次处理 (丢弃原包总长的第一个字节,向后再读取一个字节作为新的包总长) + bufferIn.readerIndex(beginIndex + 1); + // Log.i("LenCmdDecoder========="+ctx.channel().remoteAddress()+"的指令非法,丢弃第一个字节:",receiveMsg+","); + Log.i("LenCmdDecoder", "LenCmdDecoder decode()" + receiveMsg); + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/utils/MessageDecoder.java b/app/src/main/java/com/yonsz/z1/utils/MessageDecoder.java new file mode 100644 index 0000000..45e1c27 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/MessageDecoder.java @@ -0,0 +1,119 @@ +package com.yonsz.z1.utils; + +import android.util.Log; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @Description: 解决粘包拆包问题 + * @Author: xiaojunnuo + * @CreateDate: 2018/7/26 0026 16:28 + */ +public class MessageDecoder extends ByteToMessageDecoder { + + /** + * @Description: 消息解析 + * @Author: xiaojunnuo + * @CreateDate: 2018/7/28 0028 18:42 + */ + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) { // (2) + in.markReaderIndex(); + Log.d("收到消息", "收到消息:MessageDecoder开始解析..."); +// debugReadableMessage(in); + byte[] bytes = new byte[in.readableBytes()]; + in.readBytes(bytes); + String content = new String(bytes); + + //可能会粘包,多个json会在一个字符串里面,所以要分割json + + List jsons = split(content); + if (jsons == null) { +// log.warn("消息解析失败,丢弃:{}",content); + return; + } + for (String json : jsons) { + + if (content.charAt(json.length() - 1) != ']' && content.charAt(json.length() - 1) != '}') { + //如果不是以} ]结尾,说明是拆包了 + int leftLength = json.getBytes().length; + in.resetReaderIndex(); + in.skipBytes(bytes.length - leftLength); + } else { + //完整消息,放到out里面 + out.add(json); + } + + } + } + + /** + * 多个json 分割成一个 + * + * @param content + * @return + */ + public List split(String content) { + if (content.charAt(0) != '{' && content.charAt(0) != '[') { + //如果不是以{开头,说明是无效消息 + return null; + } + int deep = 0; + int start = 0; + boolean inQuote = false; //是否在双引号中 + List list = new ArrayList<>(3); + for (int i = 0; i < content.length(); i++) { + char c = content.charAt(i); + if (!inQuote) { + if (c == '{') { + deep++; + } else if (c == '}') { + deep--; + } else if (c == '[') { + deep++; + } else if (c == ']') { + deep--; + } + } + if (c == '"') { + inQuote = !inQuote; + } + if (deep == 0) { + //说明解析到json结尾了 + String one = content.substring(start, i + 1); + list.add(one); + start = i + 1; + } + } + + if (start != content.length()) { + //如果不是刚好结束,可能拆包了,也返回 + list.add(content.substring(start)); + } + + return list; + } + + + /** + * @Description: 打印debug日志 + * @Author: xiaojunnuo + * @CreateDate: 2018/7/28 0028 18:42 + */ + private void debugReadableMessage(ByteBuf in) { + in.resetReaderIndex(); + byte[] bytes = new byte[in.readableBytes()]; + in.readBytes(bytes); + Log.d("可读取消息:byte:{}", new String(bytes)); +// log.debug("可读取消息:hex:{}", HexUtils.bytesToHexString(bytes)); + in.resetReaderIndex(); + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/utils/NetWorkSpeedUtils.java b/app/src/main/java/com/yonsz/z1/utils/NetWorkSpeedUtils.java new file mode 100644 index 0000000..d76e53c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/NetWorkSpeedUtils.java @@ -0,0 +1,59 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.net.TrafficStats; +import android.os.Handler; +import android.os.Message; + +import java.util.Timer; +import java.util.TimerTask; + + +/** + * Created by Administrator on 2019/2/27. + */ + +public class NetWorkSpeedUtils { + private Context context; + private Handler mHandler; + + private long lastTotalRxBytes = 0; + private long lastTimeStamp = 0; + TimerTask task = new TimerTask() { + @Override + public void run() { + showNetSpeed(); + } + }; + + public NetWorkSpeedUtils(Context context, Handler mHandler) { + this.context = context; + this.mHandler = mHandler; + } + + public void startShowNetSpeed() { + lastTotalRxBytes = getTotalRxBytes(); + lastTimeStamp = System.currentTimeMillis(); + new Timer().schedule(task, 1000, 1000); // 1s后启动任务,每2s执行一次 + + } + + private long getTotalRxBytes() { + return TrafficStats.getUidRxBytes(context.getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0 : (TrafficStats.getTotalRxBytes() / 1024);//转为KB + } + + private void showNetSpeed() { + long nowTotalRxBytes = getTotalRxBytes(); + long nowTimeStamp = System.currentTimeMillis(); + long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换 + long speed2 = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 % (nowTimeStamp - lastTimeStamp));//毫秒转换 + + lastTimeStamp = nowTimeStamp; + lastTotalRxBytes = nowTotalRxBytes; + + Message msg = mHandler.obtainMessage(); + msg.what = 100; + msg.obj = String.valueOf(speed) + "." + String.valueOf(speed2) + " kb/s"; + mHandler.sendMessage(msg);//更新界面 + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/NettyHandlerUtil.java b/app/src/main/java/com/yonsz/z1/utils/NettyHandlerUtil.java new file mode 100644 index 0000000..3b9ec0f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/NettyHandlerUtil.java @@ -0,0 +1,452 @@ +package com.yonsz.z1.utils; + +import android.util.Log; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import com.yonsz.z1.database.entity.AirControlEvent; +import com.yonsz.z1.database.entity.BlindEvent; +import com.yonsz.z1.database.entity.ChangeVolumeEvent; +import com.yonsz.z1.database.entity.LearnEvent; +import com.yonsz.z1.database.entity.LearnFailEvent; +import com.yonsz.z1.database.entity.LockEvent; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.NewNettyEntity; +import com.yonsz.z1.database.entity.OnlineEvent; +import com.yonsz.z1.database.entity.PlugEvent; +import com.yonsz.z1.database.entity.SecondEvent; +import com.yonsz.z1.database.entity.ThirdEvent; +import com.yonsz.z1.database.entity.VoiceEvent; +import com.yonsz.z1.database.entity.VolumeEvent; +import com.yonsz.z1.database.entity.entity4.AppControlEvent; +import com.yonsz.z1.database.entity.entity4.YblLightEvent; +import com.yonsz.z1.database.entity.entity4.YblPanelControlEvent; +import com.yonsz.z1.database.entity.entity4.YblPanelEvent; +import com.yonsz.z1.database.entity.entitya2.KeyMatchEvent; +import com.yonsz.z1.database.entity.entitya2.LoadEvent; +import com.yonsz.z1.database.entity.entitya2.SafeVoiceEvent; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; + +import de.greenrobot.event.EventBus; +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.timeout.IdleStateEvent; +import io.netty.handler.timeout.IdleStateHandler; + +/** + * Created by Administrator on 2017/7/5. + */ + +public class NettyHandlerUtil extends ChannelInboundHandlerAdapter { + public static String RECEIVE_FROM_SEVICE; + private static NettyHandlerUtil mDemoClientHandler; + private static boolean isSendSessionId = false; + // private static String host = HOST; + private static String host = "wss.yonsz.net"; + // private static int port = 31533; + // private static int port = Integer.parseInt(SharedpreferencesUtil.get(Constans.PORT, null)); + private static int port = 25533; + // private static int port = 30533; + private static NioEventLoopGroup mGroup; + private static Bootstrap mBootstrap; + private static Channel channel; + private static boolean isReConn = true; + private ChannelHandlerContext mCtx; + // private String seesion = "161a20" + SharedpreferencesUtil.get(Constans.SEESSIONID, null) + "08"; + private String seesion = SharedpreferencesUtil.get(Constans.SEESSIONID, null); + private String newSeesion = SharedpreferencesUtil.get(Constans.SEESSIONID, null); + + public static NettyHandlerUtil getInstance() { + /*if (null == mDemoClientHandler) { + synchronized (NettyHandlerUtil.class) { + if (mDemoClientHandler == null) { + mDemoClientHandler = new NettyHandlerUtil(); + initNettyMain(); + } + } + }*/ + mDemoClientHandler = new NettyHandlerUtil(); + initNettyMain(); + return mDemoClientHandler; + } + + private static void initNettyMain() { + if (SharedpreferencesUtil.get(Constans.SEESSIONID, null).isEmpty()) { + return; + } + if (!SharedpreferencesUtil.get(Constans.PORT, null).isEmpty() && SharedpreferencesUtil.get(Constans.PORT, null).contains(":")) { + String stringPort = SharedpreferencesUtil.get(Constans.PORT, null); + host = stringPort.substring(0, stringPort.lastIndexOf(":")); + port = Integer.parseInt(stringPort.substring(stringPort.lastIndexOf(":") + 1, stringPort.length())); + Log.i("nettyUtil", host + ":" + port); + } else { + Log.i("nettyUtilE", host + ":" + port); + } + initNettynew(); + new Thread(new Runnable() { + @Override + public void run() { + try { + doConnect(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + + private static void initNettynew() { + if (mBootstrap != null) { + return; + } + isSendSessionId = true; + mGroup = new NioEventLoopGroup(); + mBootstrap = new Bootstrap(); + mBootstrap.group(mGroup).channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true) + .handler(new ChannelInitializer() { + @Override + protected void initChannel(SocketChannel ch) throws Exception { + //参数1:read空闲时间, 参数2:写的空闲时间, 参数3:读和写的空闲时间 + ch.pipeline().addLast(new IdleStateHandler(150, 150, 0)); + //新的处理方式 + //ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE,0,2,0,2)); + //ch.pipeline().addLast(new LengthFieldPrepender(2)); + ch.pipeline().addLast(new JsonMessageDecoder()); + ch.pipeline().addLast(mDemoClientHandler); + } + }); + } + + private static void doConnect() { + if (SharedpreferencesUtil.get(Constans.SEESSIONID, null).isEmpty()) { + return; + } + if (channel != null && channel.isActive()) { + return; + } + if (NetWorkUrl.getSERVER().equals("http://test.yonsz.veryreader.com:80/")) { + port = 30533; + } + ChannelFuture future = mBootstrap.connect(host, port); + future.addListener(new ChannelFutureListener() { + public void operationComplete(ChannelFuture futureListener) throws Exception { + if (futureListener.isSuccess()) { + channel = futureListener.channel(); + Log.i("nettyUtil", "Connect to server successfully!"); + } + /*else { + Log.i("nettyUtil", "Failed to connect to server, try connect after 5s"); + futureListener.channel().eventLoop().schedule(new Runnable() { + @Override + public void run() { + doConnect(); + } + }, 5, TimeUnit.SECONDS); + }*/ + } + }); + } + + public static void initNetty() { + isSendSessionId = true; + Log.i("nettyUtil", "NettyHandlerUtil initNetty()" + "呵呵"); + /*EventLoopGroup group = new NioEventLoopGroup(); + Bootstrap bootstrap = new Bootstrap(); + bootstrap.group(group).channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true) + .handler(new ChannelInitializer() { + @Override + protected void initChannel(SocketChannel ch) throws Exception { + //参数1:read空闲时间, 参数2:写的空闲时间, 参数3:读和写的空闲时间 + ch.pipeline().addLast(new IdleStateHandler(0, 10, 0)); + //对netty接收数据过长的处理 + // ch.pipeline().addLast(new CommandDecoder()); + mDemoClientHandler = new NettyHandlerUtil(); + ch.pipeline().addLast(mDemoClientHandler); + } + }); + ChannelFuture future = bootstrap.connect(host, port); + try { + future.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + }*/ + } + + public static void closeCtx() { + new Thread(new Runnable() { + @Override + public void run() { + try { + if (mDemoClientHandler == null) { + return; + } else { + ChannelHandlerContext ctx = mDemoClientHandler.getCtx(); + isReConn = false; + channel.close(); + ctx.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + + public final static boolean isJSONValid(String test) { + try { + JSONObject.parseObject(test); + } catch (JSONException ex) { + try { + JSONObject.parseArray(test); + } catch (JSONException ex1) { + return false; + } + } + return true; + } + + public ChannelHandlerContext getCtx() { + return mCtx; + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + // 在read空闲时候或者是write时候或者是read和write空闲的时候就会调用这个方法 + if (evt instanceof IdleStateEvent) { + IdleStateEvent e = (IdleStateEvent) evt; + switch (e.state()) { + case WRITER_IDLE: + /*ByteBuf buf = ctx.alloc().buffer(0); + buf.writeBytes(new byte[]{-0x1}); + ctx.writeAndFlush(buf);*/ + Log.i("TAG", "NettyHandlerUtil userEventTriggered()" + "我问一下有没有心跳"); + NewNettyEntity newNettyEntity = new NewNettyEntity(); + newNettyEntity.setType("heartbeat"); + // byte[] byteseesion = BytesUtil.hexStringToBytes(JSONObject.toJSONString(newNettyEntity)); + byte[] byteseesion = JSONObject.toJSONString(newNettyEntity).getBytes(); + ByteBuf buf = ctx.alloc().buffer(byteseesion.length); + buf.writeBytes(byteseesion); + ctx.writeAndFlush(buf); + break; + case READER_IDLE: + Log.i("TAG", "NettyHandlerUtil userEventTriggered()" + "我重连了"); + ctx.close(); + getInstance(); + break; + case ALL_IDLE: + break; + + default: + break; + } + } + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + mCtx = ctx; + Log.i("nettyUtil", "DemoClientHandler channelActive()" + seesion); + if (seesion.length() < 10) { + return; + } + /*byte[] bytes = BytesUtil.hexStringToBytes(seesion); + ByteBuf buf = ctx.alloc().buffer(bytes.length); + buf.writeBytes(bytes); + ctx.writeAndFlush(buf);*/ + + NewNettyEntity newNettyEntity = new NewNettyEntity(); + newNettyEntity.setType("session"); + NewNettyEntity.ContextBean contextBean = new NewNettyEntity.ContextBean(); + contextBean.setSession(seesion); + newNettyEntity.setContext(contextBean); + byte[] byteseesion = JSONObject.toJSONString(newNettyEntity).getBytes(); + ByteBuf buf = ctx.alloc().buffer(byteseesion.length); + buf.writeBytes(byteseesion); + ctx.writeAndFlush(buf); + + isSendSessionId = false; + super.channelActive(ctx); + } + + /** + * 链接关闭的方法 + * + * @param ctx + * @throws Exception + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + ctx.close(); + Log.i("nettyUtil", "链接关闭的方法"); + if (isReConn) { + getInstance(); + } + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + try { + /*ByteBuf byteBuf = (ByteBuf) msg; + int len = byteBuf.readableBytes(); + byte[] bytes = new byte[len]; + byteBuf.readBytes(bytes);*/ + // String replace = new String(bytes, "UTF-8"); + /*RECEIVE_FROM_SEVICE = replace.replace("}" + "{", ","); + if (!RECEIVE_FROM_SEVICE.substring(RECEIVE_FROM_SEVICE.length() - 1, RECEIVE_FROM_SEVICE.length()).equals("}")) { + RECEIVE_FROM_SEVICE = RECEIVE_FROM_SEVICE + "}"; + }*/ + RECEIVE_FROM_SEVICE = (String) msg; + Log.i("nettyUtil", "NettyHandlerUtil channelRead()" + RECEIVE_FROM_SEVICE); + if (!isJSONValid(RECEIVE_FROM_SEVICE)) { + return; + } + NettyEntity nettyEntity = JSON.parseObject(RECEIVE_FROM_SEVICE, NettyEntity.class); + if (nettyEntity.getType().equals("getSession")) { + NewNettyEntity newNettyEntity = new NewNettyEntity(); + newNettyEntity.setType("session"); + NewNettyEntity.ContextBean contextBean = new NewNettyEntity.ContextBean(); + contextBean.setSession(seesion); + newNettyEntity.setContext(contextBean); + byte[] byteseesion = JSONObject.toJSONString(newNettyEntity).getBytes(); + ByteBuf buf = ctx.alloc().buffer(byteseesion.length); + buf.writeBytes(byteseesion); + ctx.writeAndFlush(buf); + isSendSessionId = false; + } + if (nettyEntity.getCmdType().equals("scenePanelKey")) { + EventBus.getDefault().post( + new YblPanelControlEvent(RECEIVE_FROM_SEVICE)); + } + if (nettyEntity.getCmdType().equals("yblLightSearch") || nettyEntity.getCmdType().equals("clothesHangerSearch") || nettyEntity.getCmdType().equals("converter485Search")) { + EventBus.getDefault().post( + new YblLightEvent(RECEIVE_FROM_SEVICE)); + } + + if (nettyEntity.getCmdType().equals("yblSearchEnd")) { + EventBus.getDefault().post( + new YblLightEvent("搜索完成")); + } + + if (nettyEntity.getCmdType().equals("yblSceneSearch") || nettyEntity.getCmdType().equals("converter485Search") || nettyEntity.getType().equals("study_return")) { + EventBus.getDefault().post( + new YblPanelEvent(RECEIVE_FROM_SEVICE)); + } + + if (nettyEntity.getCmdType().equals("authAgree")) { + EventBus.getDefault().post( + new NettyEntity(nettyEntity.getAuthInfrared())); + } + if (nettyEntity.getCmdType().equals("studySuccess")) { + if (null != nettyEntity.getCmds() && nettyEntity.getCmds().size() > 0) { + String cmds = nettyEntity.getCmds().get(0); + EventBus.getDefault().post( + new SecondEvent(cmds)); + } else + EventBus.getDefault().post( + new SecondEvent("学习成功")); + } + if (nettyEntity.getCmdType().equals("studyFailed")) { + EventBus.getDefault().post( + new LearnFailEvent("学习失败")); + } + if (nettyEntity.getCmdType().equals("airStatus")) { + EventBus.getDefault().post( + new AirControlEvent(RECEIVE_FROM_SEVICE)); + } + if (nettyEntity.getCmdType().equals("appControll") || nettyEntity.getCmdType().equals("voiceControll") || nettyEntity.getCmdType().equals("chatMessage") || nettyEntity.getType().equals("status_changed")) { + EventBus.getDefault().post( + new AppControlEvent(RECEIVE_FROM_SEVICE)); + } + /*if (nettyEntity.getCmdType().equals("ziOffLine")) { + EventBus.getDefault().post( + new ThirdEvent(nettyEntity.getZ1name() + "已下线")); + } + if (nettyEntity.getCmdType().equals("ziOnLine")) { + EventBus.getDefault().post( + new ThirdEvent(nettyEntity.getZ1name() + "已上线")); + }*/ + if (nettyEntity.getType().equals("online")) { + EventBus.getDefault().post( + new OnlineEvent(nettyEntity.getContext().getIsOnline())); + } + if (nettyEntity.getCmdType().equals("voiceLight")) { + EventBus.getDefault().post( + new VoiceEvent("灯语音成功")); + } + if (nettyEntity.getCmdType().equals("voiceBlind")) { + EventBus.getDefault().post( + new BlindEvent("窗帘语音成功")); + } + if (nettyEntity.getCmdType().equals("voicePlug")) { + EventBus.getDefault().post( + new PlugEvent("插座语音成功")); + } + if (nettyEntity.getCmdType().equals("deviceChildContolOpen")) { + EventBus.getDefault().post( + new LockEvent("打开成功")); + } + if (nettyEntity.getCmdType().equals("deviceChildContolClose")) { + EventBus.getDefault().post( + new LockEvent("关闭成功")); + } + if (nettyEntity.getCmdType().equals("deviceVoiceOpen")) { + EventBus.getDefault().post( + new VolumeEvent("打开成功")); + } + if (nettyEntity.getCmdType().equals("deviceVoiceClose")) { + EventBus.getDefault().post( + new VolumeEvent("关闭成功")); + } + if (nettyEntity.getCmdType().equals("deviceVoiceChange")) { + EventBus.getDefault().post( + new ChangeVolumeEvent("音量改变成功")); + } + if (nettyEntity.getCmdType().equals("studyReady")) { + EventBus.getDefault().post( + new LearnEvent("正在学习")); + } + /** + * A2 + */ + if (nettyEntity.getCmdType().equals("A2Loading")) { + EventBus.getDefault().post( + new LoadEvent(RECEIVE_FROM_SEVICE)); + } + if (nettyEntity.getCmdType().equals("safetyWran")) { + EventBus.getDefault().post( + new ThirdEvent("报警")); + } + if (nettyEntity.getCmdType().equals("safetyVoiceSuccess")) { + EventBus.getDefault().post( + new SafeVoiceEvent("安防语音")); + } + if (nettyEntity.getCmdType().equals("keyMatchSuccess")) { + EventBus.getDefault().post( + new KeyMatchEvent(nettyEntity)); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + Log.i("nettyUtil", "Netty异常退出catch到" + cause.toString()); + ctx.close(); + getInstance(); + cause.printStackTrace(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/NettyHandlerUtilTry.java b/app/src/main/java/com/yonsz/z1/utils/NettyHandlerUtilTry.java new file mode 100644 index 0000000..f77eecc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/NettyHandlerUtilTry.java @@ -0,0 +1,232 @@ +package com.yonsz.z1.utils; + +import android.util.Log; + +import com.yonsz.z1.database.entity.SolidUpEvent; +import com.yonsz.z1.tcpudp.ymodem.YModem; + +import de.greenrobot.event.EventBus; +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.timeout.IdleStateEvent; +import io.netty.handler.timeout.IdleStateHandler; + +/** + * Created by Administrator on 2017/7/5. + */ + +public class NettyHandlerUtilTry extends ChannelInboundHandlerAdapter { + public static String RECEIVE_FROM_SEVICE; + private static NettyHandlerUtilTry mDemoClientHandler; + private static Bootstrap bootstrap; + private static Channel channel; + private static String host = ""; + private static int port = 8899; + private static YModem mYModem; + boolean isFirst = true; + private ChannelHandlerContext mCtx; + private int i = 0; + + public static void initNetty(YModem ymodem, String ipHost) { + host = ipHost; + mYModem = ymodem; + if (bootstrap != null) { + doConnect(); + return; + } + EventLoopGroup group = new NioEventLoopGroup(); + + bootstrap = new Bootstrap(); + bootstrap.group(group).channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true) + .handler(new ChannelInitializer() { + @Override + protected void initChannel(SocketChannel ch) throws Exception { + //参数1:read空闲时间, 参数2:写的空闲时间, 参数3:读和写的空闲时间 + ch.pipeline().addLast(new IdleStateHandler(0, 10, 0)); + mDemoClientHandler = new NettyHandlerUtilTry(); + ch.pipeline().addLast(mDemoClientHandler); + } + }); + doConnect(); + } + + private static void doConnect() { + ChannelFuture future = bootstrap.connect(host, port); + future.addListener(new ChannelFutureListener() { + public void operationComplete(ChannelFuture futureListener) throws Exception { + if (futureListener.isSuccess()) { + channel = futureListener.channel(); + Log.i("nettyUtil", "Connect to server successfully!"); + } else { + Log.i("nettyUtil", "Failed to connect to server, try connect after 5s"); + EventBus.getDefault().post( + new SolidUpEvent("连接失败")); + /* futureListener.channel().eventLoop().schedule(new Runnable() { + @Override + public void run() { + doConnect(); + } + }, 5, TimeUnit.SECONDS);*/ + } + } + }); + } + + /** + * 发送消息给设备 + * + * @param + */ + public static void sendBleMsg2Server(byte[] bytes) { + Log.i("nettyUtil", "NettyManager sendBleMsg2Server()" + BytesUtil.bytesToHexString(bytes)); + if (mDemoClientHandler == null) + return; + try { + ChannelHandlerContext ctx = mDemoClientHandler.getCtx(); + ByteBuf buf = ctx.alloc().buffer(bytes.length); + buf.writeBytes(bytes); + ctx.writeAndFlush(buf); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /*public static void sendBleMsg2Server(String order) { + Log.i("nettyUtil", "NettyManager sendBleMsg2Server()" + order); + if (mDemoClientHandler == null) + return; + try { + ChannelHandlerContext ctx = mDemoClientHandler.getCtx(); + byte[] bytes = order.getBytes(); + ByteBuf buf = ctx.alloc().buffer(bytes.length); + buf.writeBytes(bytes); + ctx.writeAndFlush(buf); + } catch (Exception e) { + e.printStackTrace(); + } + }*/ + + public static void closeCtx() { + if (mDemoClientHandler == null) { + return; + } else { + ChannelHandlerContext ctx = mDemoClientHandler.getCtx(); + if (null != ctx) { + ctx.close(); + } + } + } + + public ChannelHandlerContext getCtx() { + return mCtx; + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + mCtx = ctx; + super.channelActive(ctx); + new Thread(new Runnable() { + @Override + public void run() { + /*while (isFirst) { + i++; + if (i > 200) { + sendBleMsg2Server("a".getBytes()); + i = 0; + } + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + sendBleMsg2Server("d".getBytes()); + }*/ + + + while (i < 200) { + if (!isFirst) { + return; + } + sendBleMsg2Server("d".getBytes()); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + i++; + } + if (isFirst) { + sendBleMsg2Server("a".getBytes()); + i = 0; + } + } + }).start(); + } + + /** + * 链接关闭的方法 + * + * @param ctx + * @throws Exception + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + ctx.close(); + Log.i("nettyUtil", "链接关闭的方法"); + //默认失败 + // doConnect(); + EventBus.getDefault().post( + new SolidUpEvent("连接断开")); + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + ByteBuf byteBuf = (ByteBuf) msg; + int len = byteBuf.readableBytes(); + byte[] bytes = new byte[len]; + byteBuf.readBytes(bytes); + String replace = new String(bytes, "UTF-8"); + RECEIVE_FROM_SEVICE = replace.replace("}" + "{", ","); + // System.err.println(new Date().toLocaleString() + "\t" + BytesUtil.bytesToHexString(bytes) + "---" + RECEIVE_FROM_SEVICE); + Log.i("nettyUtil", "NettyHandlerUtil channelRead()" + RECEIVE_FROM_SEVICE); + if (RECEIVE_FROM_SEVICE.indexOf("Waiting") != -1) { + Log.i("nettyUtil", "NettyHandlerUtil channelRead()" + "存在包含关系,因为返回的值不等于-1"); + isFirst = false; + } + mYModem.onReceiveData(bytes); + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + // 在read空闲时候或者是write时候或者是read和write空闲的手就会调用这个方法 + if (evt instanceof IdleStateEvent) { + IdleStateEvent e = (IdleStateEvent) evt; + switch (e.state()) { + case WRITER_IDLE: + break; + case READER_IDLE: + break; + case ALL_IDLE: + break; + default: + break; + } + } + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + Log.i("nettyUtil", "异常退出catch到" + cause.getMessage()); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/NettyUtil.java b/app/src/main/java/com/yonsz/z1/utils/NettyUtil.java new file mode 100644 index 0000000..2f9d0c8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/NettyUtil.java @@ -0,0 +1,156 @@ +package com.yonsz.z1.utils; + +import android.util.Log; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.database.entity.NettyEntity; +import com.yonsz.z1.database.entity.SecondEvent; +import com.yonsz.z1.net.Constans; + +import de.greenrobot.event.EventBus; +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.timeout.IdleStateEvent; +import io.netty.handler.timeout.IdleStateHandler; + +/** + * Created by Administrator on 2017/7/5. + */ + +public class NettyUtil extends ChannelInboundHandlerAdapter { + + private ChannelHandlerContext mCtx; + private String seesion = "161a20" + SharedpreferencesUtil.get(Constans.SEESSIONID, null) + "08"; + public static String RECEIVE_FROM_SEVICE; + private static NettyUtil mDemoClientHandler; + private static boolean isSendSessionId = false; + + + public ChannelHandlerContext getCtx() { + return mCtx; + } + + public static void initNetty() { + isSendSessionId = true; + String host = "118.89.52.71"; + // String host = "192.168.3.11"; + int port = 25533; + EventLoopGroup group = new NioEventLoopGroup(); + Bootstrap bootstrap = new Bootstrap(); + bootstrap.group(group).channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true) + .handler(new ChannelInitializer() { + + @Override + protected void initChannel(SocketChannel ch) throws Exception { + //参数1:read空闲时间, 参数2:写的空闲时间, 参数3:读和写的空闲时间 + ch.pipeline().addLast(new IdleStateHandler(0, 0, 0)); + //对netty接收数据过长的处理 + // ch.pipeline().addLast(new CommandDecoder()); + mDemoClientHandler = new NettyUtil(); + ch.pipeline().addLast(mDemoClientHandler); + } + }); + ChannelFuture future = bootstrap.connect(host, port); + try { + future.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + // 在read空闲时候或者是write时候或者是read和write空闲的手就会调用这个方法 + if (evt instanceof IdleStateEvent) { + IdleStateEvent e = (IdleStateEvent) evt; + switch (e.state()) { + case WRITER_IDLE: + /*byte[] bytes = BytesUtil.hexStringToBytes(s); + ByteBuf buf = ctx.alloc().buffer(bytes.length); + buf.writeBytes(bytes); + ctx.writeAndFlush(buf);*/ + /*ByteBuf buf = ctx.alloc().buffer(0); + buf.writeBytes(new byte[]{0}); + ctx.writeAndFlush(buf);*/ + Log.i("nettyUtil", "NettyUtil WRITER_IDLE" + seesion); + break; + case READER_IDLE: + + /*PingMsg pingMsg1 = new PingMsg(); + ctx.writeAndFlush(pingMsg1);*/ + + // System.out.println("READER_IDLE -->send ping to server----------"); + break; + case ALL_IDLE: + /*// String s = ""; + // byte[] bytes = BytesUtil.hexStringToBytes(s); + ByteBuf buf1 = ctx.alloc().buffer(0); + // buf1.writeBytes(bytes); + ctx.writeAndFlush(buf1);*/ + // Log.i("nettyUtil", "NettyUtil channelRead()" + "ALL_IDLE -->send ping to server----------"); + break; + + default: + break; + } + } + + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + mCtx = ctx; + // String s = "0F02FFACCF23FFFF011000000000A3"; + // if (isSendSessionId) { + Log.i("nettyUtil", "DemoClientHandler channelActive()" + seesion); + byte[] bytes = BytesUtil.hexStringToBytes(seesion); + ByteBuf buf = ctx.alloc().buffer(bytes.length); + buf.writeBytes(bytes); + ctx.writeAndFlush(buf); + isSendSessionId = false; + // } + super.channelActive(ctx); + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + ByteBuf byteBuf = (ByteBuf) msg; + int len = byteBuf.readableBytes(); + byte[] bytes = new byte[len]; + byteBuf.readBytes(bytes); + String replace = new String(bytes, "UTF-8"); + RECEIVE_FROM_SEVICE = replace.replace("}" + "{", ","); + // System.err.println(new Date().toLocaleString() + "\t" + BytesUtil.bytesToHexString(bytes) + "---" + RECEIVE_FROM_SEVICE); + Log.i("nettyUtil", "NettyUtil channelRead()" + RECEIVE_FROM_SEVICE); + NettyEntity nettyEntity = JSON.parseObject(RECEIVE_FROM_SEVICE, NettyEntity.class); + if (nettyEntity.getCmdType().equals("authAgree")) { + EventBus.getDefault().post( + new NettyEntity(nettyEntity.getAuthInfrared())); + } + + if (nettyEntity.getCmdType().equals("studySuccess")) { + EventBus.getDefault().post( + new SecondEvent("学习成功")); + } + + if (nettyEntity.getCmdType().equals("airStatus")) { + EventBus.getDefault().post( + new SecondEvent(RECEIVE_FROM_SEVICE)); + } + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + System.out.println("异常退出catch到"); + initNetty(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/NetworkImageHolderView.java b/app/src/main/java/com/yonsz/z1/utils/NetworkImageHolderView.java new file mode 100644 index 0000000..d209e22 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/NetworkImageHolderView.java @@ -0,0 +1,38 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.view.View; +import android.widget.ImageView; +import com.bigkoo.convenientbanner.holder.Holder; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.yonsz.z1.database.entity.AdInfo; + +/** + * Created by Sai on 15/8/4. + * 网络图片加载例子 + */ +public class NetworkImageHolderView implements Holder { + private ImageView imageView; + + @Override + public View createView(Context context) { + imageView = new ImageView(context); + imageView.setScaleType(ImageView.ScaleType.FIT_XY); + return imageView; + } + + @Override + public void UpdateUI(Context context, int position, AdInfo data) { + DisplayImageOptions options = new DisplayImageOptions.Builder() + .cacheInMemory(false) + .cacheOnDisk(true) + .bitmapConfig(Bitmap.Config.RGB_565) + .build(); + imageView.setImageResource(data.getAdUrl()); +// ImageLoader.getInstance().displayImage(String.valueOf(data.getAdUrl()),imageView,options); + + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/utils/PingYinUtil.java b/app/src/main/java/com/yonsz/z1/utils/PingYinUtil.java new file mode 100644 index 0000000..062c4b1 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/PingYinUtil.java @@ -0,0 +1,68 @@ +package com.yonsz.z1.utils; + +import net.sourceforge.pinyin4j.PinyinHelper; +import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; +import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; +import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; +import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; +import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PingYinUtil { + + /** + * 将字符串中的中文转化为拼音,其他字符不变 + */ + public static String getPingYin(String inputString) { + HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); + format.setCaseType(HanyuPinyinCaseType.LOWERCASE); + format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); + format.setVCharType(HanyuPinyinVCharType.WITH_V); + + Pattern p = Pattern.compile("^[\u4E00-\u9FA5A-Za-z_]+$"); + Matcher matcher = p.matcher(inputString.substring(0, 1)); + if (matcher.find()) { + char[] input = inputString.trim().toCharArray(); + String output = ""; + try { + for (int i = 0; i < input.length; i++) { + if (Character.toString(input[i]).matches( + "[\\u4E00-\\u9FA5]+")) { + String[] temp = PinyinHelper.toHanyuPinyinStringArray( + input[i], format); + output += temp[0]; + } else + output += Character.toString(input[i]); + } + } catch (BadHanyuPinyinOutputFormatCombination e) { + e.printStackTrace(); + } + return output; + } else { + return ""; + } + } + + public static String converterToFirstSpell(String chines) { + String pinyinName = ""; + char[] nameChar = chines.toCharArray(); + HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); + defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE); + defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); + for (int i = 0; i < nameChar.length; i++) { + if (nameChar[i] > 128) { + try { + pinyinName += PinyinHelper.toHanyuPinyinStringArray( + nameChar[i], defaultFormat)[0].charAt(0); + } catch (BadHanyuPinyinOutputFormatCombination e) { + e.printStackTrace(); + } + } else { + pinyinName += nameChar[i]; + } + } + return pinyinName; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/utils/SSL.java b/app/src/main/java/com/yonsz/z1/utils/SSL.java new file mode 100644 index 0000000..05e5897 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/SSL.java @@ -0,0 +1,157 @@ +package com.yonsz.z1.utils; + +import android.os.Build; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.Socket; +import java.net.UnknownHostException; +import java.security.GeneralSecurityException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.X509TrustManager; + +//写一个类继承SSLSocket +public class SSL extends SSLSocketFactory { + private SSLSocketFactory defaultFactory; + // Android 5.0+ (API level21) provides reasonable default settings + // but it still allows SSLv3 + // https://developer.android.com/about/versions/android-5.0-changes.html#ssl + static String protocols[] = null, cipherSuites[] = null; + + static { + try { + SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(); + if (socket != null) { + /* set reasonable protocol versions */ + // - enable all supported protocols (enables TLSv1.1 and TLSv1.2 on Android <5.0) + // - remove all SSL versions (especially SSLv3) because they're insecure now + List protocols = new LinkedList<>(); + for (String protocol : socket.getSupportedProtocols()) + if (!protocol.toUpperCase().contains("SSL")) + protocols.add(protocol); + SSL.protocols = protocols.toArray(new String[protocols.size()]); + /* set up reasonable cipher suites */ + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + // choose known secure cipher suites + List allowedCiphers = Arrays.asList( + // TLS 1.2 + "TLS_RSA_WITH_AES_256_GCM_SHA384", + "TLS_RSA_WITH_AES_128_GCM_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_ECHDE_RSA_WITH_AES_128_GCM_SHA256", + // maximum interoperability + "TLS_RSA_WITH_3DES_EDE_CBC_SHA", + "TLS_RSA_WITH_AES_128_CBC_SHA", + // additionally + "TLS_RSA_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", + "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"); + List availableCiphers = Arrays.asList(socket.getSupportedCipherSuites()); + // take all allowed ciphers that are available and put them into preferredCiphers + HashSet preferredCiphers = new HashSet<>(allowedCiphers); + preferredCiphers.retainAll(availableCiphers); + /* For maximum security, preferredCiphers should *replace* enabled ciphers (thus disabling + * ciphers which are enabled by default, but have become unsecure), but I guess for + * the security level of DAVdroid and maximum compatibility, disabling of insecure + * ciphers should be a server-side task */ + // add preferred ciphers to enabled ciphers + HashSet enabledCiphers = preferredCiphers; + enabledCiphers.addAll(new HashSet<>(Arrays.asList(socket.getEnabledCipherSuites()))); + SSL.cipherSuites = enabledCiphers.toArray(new String[enabledCiphers.size()]); + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public SSL(X509TrustManager tm) { + try { + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, (tm != null) ? new X509TrustManager[]{tm} : null, null); + defaultFactory = sslContext.getSocketFactory(); + } catch (GeneralSecurityException e) { + throw new AssertionError(); // The system has no TLS. Just give up. + } + } + + private void upgradeTLS(SSLSocket ssl) { + // Android 5.0+ (API level21) provides reasonable default settings + // but it still allows SSLv3 + // https://developer.android.com/about/versions/android-5.0-changes.html#ssl + if (protocols != null) { + ssl.setEnabledProtocols(protocols); + } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP && cipherSuites != null) { + ssl.setEnabledCipherSuites(cipherSuites); + } + } + + @Override + public String[] getDefaultCipherSuites() { + return cipherSuites; + } + + @Override + public String[] getSupportedCipherSuites() { + return cipherSuites; + } + + @Override + public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException { + Socket ssl = defaultFactory.createSocket(s, host, port, autoClose); + if (ssl instanceof SSLSocket) { + upgradeTLS((SSLSocket) ssl); + } + return ssl; + } + + @Override + public Socket createSocket(String host, int port) throws IOException, UnknownHostException { + Socket ssl = defaultFactory.createSocket(host, port); + if (ssl instanceof SSLSocket) { + upgradeTLS((SSLSocket) ssl); + } + return ssl; + } + + @Override + public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException { + Socket ssl = defaultFactory.createSocket(host, port, localHost, localPort); + if (ssl instanceof SSLSocket) { + upgradeTLS((SSLSocket) ssl); + } + return ssl; + } + + @Override + public Socket createSocket(InetAddress host, int port) throws IOException { + Socket ssl = defaultFactory.createSocket(host, port); + if (ssl instanceof SSLSocket) { + upgradeTLS((SSLSocket) ssl); + } + return ssl; + } + + @Override + public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { + Socket ssl = defaultFactory.createSocket(address, port, localAddress, localPort); + if (ssl instanceof SSLSocket) { + upgradeTLS((SSLSocket) ssl); + } + return ssl; + } +} + diff --git a/app/src/main/java/com/yonsz/z1/utils/ShakeUtil.java b/app/src/main/java/com/yonsz/z1/utils/ShakeUtil.java new file mode 100644 index 0000000..ec1109f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/ShakeUtil.java @@ -0,0 +1,16 @@ +package com.yonsz.z1.utils; + +import android.app.Service; +import android.content.Context; +import android.os.Vibrator; + +/** + * Created by Administrator on 2018/8/8. + */ + +public class ShakeUtil { + public static void setShake(Context context) { + Vibrator vibrator = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(new long[]{0, 100}, -1); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/SharedpreferencesUtil.java b/app/src/main/java/com/yonsz/z1/utils/SharedpreferencesUtil.java new file mode 100644 index 0000000..f81ad3b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/SharedpreferencesUtil.java @@ -0,0 +1,69 @@ +package com.yonsz.z1.utils; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; + +import com.yonsz.z1.UniKongApp; + +/** + * Created by Administrator on 2016/11/27 0027. + */ + +public class SharedpreferencesUtil { + private static SharedpreferencesUtil mShare; + private static SharedPreferences.Editor mSharePreEdit; + private static SharedPreferences mSharePre; + private static String CONFIG = "con"; + public static SharedpreferencesUtil instans(){ + if (mShare == null){ + mShare = new SharedpreferencesUtil(); + mSharePre = UniKongApp.getHiApp().getApplicationContext() + .getSharedPreferences("hilight", Activity.MODE_PRIVATE); + mSharePreEdit = mSharePre.edit(); + } + + return mShare; + } + + public static void save(String key,String obj){ + mSharePreEdit.putString(key,obj); + mSharePreEdit.commit(); + } + + public static void save(String key,boolean obj){ + mSharePreEdit.putBoolean(key,obj); + mSharePreEdit.commit(); + } + + public static void save(String key,long obj){ + mSharePreEdit.putLong(key,obj); + mSharePreEdit.commit(); + } + + public static boolean get(String key){ + return mSharePre.getBoolean(key,false); + } + + public static String get(String key,String defult){ + return mSharePre.getString(key,defult); + } + public static void saveStringData(Context context, String key, String value) { + + if (mSharePre == null) { + mSharePre = context.getSharedPreferences(CONFIG, + Context.MODE_PRIVATE); + } + mSharePre.edit().putString(key, value).commit(); + } + + + public static String getStringData(Context context, String key, + String defValue) { + if (mSharePre == null) { + mSharePre = context.getSharedPreferences(CONFIG, + Context.MODE_PRIVATE); + } + return mSharePre.getString(key, defValue); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/SoundPlayUtils.java b/app/src/main/java/com/yonsz/z1/utils/SoundPlayUtils.java new file mode 100644 index 0000000..a52e3b5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/SoundPlayUtils.java @@ -0,0 +1,123 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.media.AudioManager; +import android.media.SoundPool; + +import com.yonsz.z1.net.Constans; + +/** + * Created by Administrator on 2017/9/26. + */ + +public class SoundPlayUtils { + // SoundPool对象 + public static SoundPool mSoundPlayer = new SoundPool(10, + AudioManager.STREAM_SYSTEM, 5); + public static SoundPlayUtils soundPlayUtils; + // 上下文 + static Context mContext; + + /** + * 初始化 + * + * @param context + */ + public static SoundPlayUtils init(Context context) { + if (soundPlayUtils == null) { + soundPlayUtils = new SoundPlayUtils(); + } + + // 初始化声音 + mContext = context; + /* mSoundPlayer.load(mContext, R.raw.air_auto, 1);// 1 + mSoundPlayer.load(mContext, R.raw.air_hand, 1);// 2 + mSoundPlayer.load(mContext, R.raw.alarmsound, 1);// 3 + mSoundPlayer.load(mContext, R.raw.config_wifi, 1);// 4 + mSoundPlayer.load(mContext, R.raw.curtain_learn, 1);// 5 + mSoundPlayer.load(mContext, R.raw.curtain_try, 1);// 6 + mSoundPlayer.load(mContext, R.raw.em_outgoing, 1);// 7 + mSoundPlayer.load(mContext, R.raw.fan_open, 1);//8 + mSoundPlayer.load(mContext, R.raw.fan_shake, 1);//9 + mSoundPlayer.load(mContext, R.raw.fan_time, 1);//10 + mSoundPlayer.load(mContext, R.raw.fan_wind, 1);//11 + mSoundPlayer.load(mContext, R.raw.light_close, 1);//12 + mSoundPlayer.load(mContext, R.raw.light_di_close, 1);//13 + mSoundPlayer.load(mContext, R.raw.light_di_open, 1);//14 + mSoundPlayer.load(mContext, R.raw.light_open, 1);//15 + mSoundPlayer.load(mContext, R.raw.recording_5, 1);//16 + mSoundPlayer.load(mContext, R.raw.recording_30, 1);//17 + mSoundPlayer.load(mContext, R.raw.search_complete, 1);//18 + mSoundPlayer.load(mContext, R.raw.sweep_along, 1);//19 + mSoundPlayer.load(mContext, R.raw.sweep_back, 1);//20 + mSoundPlayer.load(mContext, R.raw.sweep_down, 1);//21 + mSoundPlayer.load(mContext, R.raw.sweep_left, 1);//22 + mSoundPlayer.load(mContext, R.raw.sweep_open, 1);//23 + mSoundPlayer.load(mContext, R.raw.sweep_right, 1);//24 + mSoundPlayer.load(mContext, R.raw.sweep_strong, 1);//25 + mSoundPlayer.load(mContext, R.raw.sweep_up, 1);//26 + mSoundPlayer.load(mContext, R.raw.tv_back, 1);//27 + mSoundPlayer.load(mContext, R.raw.tv_down, 1);//28 + mSoundPlayer.load(mContext, R.raw.tv_home, 1);//29 + mSoundPlayer.load(mContext, R.raw.tv_left, 1);//30 + mSoundPlayer.load(mContext, R.raw.tv_meun, 1);//31 + mSoundPlayer.load(mContext, R.raw.tv_ok, 1);//32 + mSoundPlayer.load(mContext, R.raw.tv_open, 1);//33 + mSoundPlayer.load(mContext, R.raw.tv_right, 1);//34 + mSoundPlayer.load(mContext, R.raw.tv_up, 1);//35 + mSoundPlayer.load(mContext, R.raw.tv_voice, 1);//36 + mSoundPlayer.load(mContext, R.raw.tv_voiceadd, 1);//37 + mSoundPlayer.load(mContext, R.raw.tv_voicereduce, 1);//38*/ + return soundPlayUtils; + } + + /** + * 播放声音 + * + * @param soundID + */ + public static void play(int soundID) { + if (SharedpreferencesUtil.get(Constans.VOICE)) { + mSoundPlayer.play(soundID, 1, 1, 0, 0, 1); + } + } + + + /* //播放音乐 + private boolean isplay; + private static SoundPool soundPool; + private static int streamID; + private static HashMap soundPoolMap; + + public static void initializeAlarm(Context context, int stream) { + soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0); + soundPoolMap = new HashMap<>(); + soundPoolMap.put(1, soundPool.load(context, stream, 2)); + + if (soundPool != null) + soundPool.stop(streamID); + AudioManager mgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC); + float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + float volume = streamVolumeCurrent / streamVolumeMax; + // streamID = soundPool.play(soundPoolMap.get(1), volume, volume, 1, loop, 1f); + streamID = soundPool.play(soundPoolMap.get(1), volume, volume, 1, 0, 1f); + } + + public static void playSound(int loop, Context context) { + if (soundPool != null) + soundPool.stop(streamID); + AudioManager mgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC); + float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + float volume = streamVolumeCurrent / streamVolumeMax; + // streamID = soundPool.play(soundPoolMap.get(1), volume, volume, 1, loop, 1f); + streamID = soundPool.play(soundPoolMap.get(1), volume, volume, 1, loop, 1f); + } + + public static void stopSound() { + if (soundPool != null) { + soundPool.stop(streamID); + } + }*/ +} diff --git a/app/src/main/java/com/yonsz/z1/utils/SslUtils.java b/app/src/main/java/com/yonsz/z1/utils/SslUtils.java new file mode 100644 index 0000000..b63db2f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/SslUtils.java @@ -0,0 +1,61 @@ +package com.yonsz.z1.utils; + +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +public class SslUtils { + + private static void trustAllHttpsCertificates() throws Exception { + TrustManager[] trustAllCerts = new TrustManager[1]; + TrustManager tm = new miTM(); + trustAllCerts[0] = tm; + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, trustAllCerts, null); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + } + + static class miTM implements TrustManager,X509TrustManager { + public X509Certificate[] getAcceptedIssuers() { + return null; + } + + public boolean isServerTrusted(X509Certificate[] certs) { + return true; + } + + public boolean isClientTrusted(X509Certificate[] certs) { + return true; + } + + public void checkServerTrusted(X509Certificate[] certs, String authType) + throws CertificateException { + return; + } + + public void checkClientTrusted(X509Certificate[] certs, String authType) + throws CertificateException { + return; + } + } + + /** + * 忽略HTTPS请求的SSL证书,必须在openConnection之前调用 + * @throws Exception + */ + public static void ignoreSsl() throws Exception{ + HostnameVerifier hv = new HostnameVerifier() { + public boolean verify(String urlHostName, SSLSession session) { + return true; + } + }; + trustAllHttpsCertificates(); + HttpsURLConnection.setDefaultHostnameVerifier(hv); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/StandardCodeUtil.java b/app/src/main/java/com/yonsz/z1/utils/StandardCodeUtil.java new file mode 100644 index 0000000..52d449f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/StandardCodeUtil.java @@ -0,0 +1,134 @@ +package com.yonsz.z1.utils; + +import com.yonsz.z1.R; + +public class StandardCodeUtil { + public static String getSolidVersionUrl(String standardCode, String appId) { + String solidVersionUrl = ""; + switch (standardCode) { + case "A1-D": + case "A1-L": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/a1firmware/index.html"; + break; + case "A2-D": + case "A2-L": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/a2firmware/index.html"; + break; + case "B1-L": + case "B1-D": + case "B2-L": + case "B2-D": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/a1yfirmware/index.html"; + break; + case "B3-L": + case "B3-D": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/b3firmware/index.html"; + break; + case "B3-E": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/b3efirmware/index.html"; + break; + case "B4-L": + case "B4-D": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/b4firmware/index.html"; + break; + case "D1-D": + case "D1-L": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/d1firmware/index.html"; + break; + case "H1-L": + case "H1-D": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/h1firmware/index.html"; + break; + case "H3-L": + case "H3-D": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/h3firmware/index.html"; + break; + case "H3-E": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/h3efirmware/index.html"; + break; + case "H4-L": + case "H4-D": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/h4firmware/index.html"; + break; + case "YK1": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/yk1firmware/index.html"; + break; + case "H5-L": + case "H5-D": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/h5firmware/index.html"; + break; + case "Y5-L": + case "Y5-D": + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/y5firmware/index.html"; + break; + default: + solidVersionUrl = "https://app-static.yonsz.net/help/" + appId + "/a2firmware/index.html"; + break; + } + return solidVersionUrl; + } + + public static int getDevicePicDrawable(String standardCode) { + int picDrawable = R.drawable.pic_z1_online; + switch (standardCode) { + case "A1-D": + case "A1-L": + picDrawable = R.drawable.pic_z1_online; + break; + case "A2-D": + case "A2-L": + picDrawable = R.drawable.pic_a2; + break; + case "B1-L": + case "B1-D": + case "B2-L": + case "B2-D": + picDrawable = R.drawable.pic_z1_online; + break; + case "B3-L": + case "B3-L-A": + case "B3-D": + case "B3-E": + picDrawable = R.drawable.icon_b3; + break; + case "B4-L": + case "B4-D": + picDrawable = R.drawable.icon_b4; + break; + case "D1-D": + case "D1-L": + picDrawable = R.drawable.pic_d1_online; + break; + case "H1-L": + case "H1-D": + picDrawable = R.drawable.pic_z1_online; + break; + case "H3-L": + case "H3-D": + picDrawable = R.drawable.icon_b3; + break; + case "H3-E": + picDrawable = R.drawable.icon_b3; + break; + case "H4-L": + case "H4-D": + picDrawable = R.drawable.icon_b4; + break; + case "YK1": + picDrawable = R.drawable.icon_device_yk1; + break; + case "H5-L": + case "H5-D": + picDrawable = R.drawable.icon_y5; + break; + case "Y5-L": + case "Y5-D": + picDrawable = R.drawable.icon_y5; + break; + default: + picDrawable = R.drawable.pic_a1; + break; + } + return picDrawable; + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/ToastUtil.java b/app/src/main/java/com/yonsz/z1/utils/ToastUtil.java new file mode 100644 index 0000000..0bccf43 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/ToastUtil.java @@ -0,0 +1,82 @@ +package com.yonsz.z1.utils; + +import android.app.Activity; +import android.content.Context; +import android.content.ContextWrapper; +import android.content.DialogInterface; +import android.support.annotation.StringRes; +import android.util.Log; + +import com.yonsz.z1.view.ToastDialog; + +import static com.yonsz.z1.UniKongApp.getActivity; + +/** + * Created by Administrator on 2016/11/27 0027. + */ + +public class ToastUtil { + private static ToastDialog dialog; + + private static void initDialog(Context context) { + if (dialog == null) { + dialog = new ToastDialog(context); + dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialogInterface) { + dialog = null; + } + }); + } + } + + public synchronized static void show(Context context, String text) { + if (null != context && !getActivity(context).isFinishing()) { + initDialog(context); + dialog.setMessage(text); + if (!dialog.isShowing()) { + dialog.show(); + } + } + } + + public synchronized static void disMiss(Context context) { + if (null != context && !getActivity(context).isFinishing() && dialog != null) { + if (dialog.isShowing()) { + dialog.dismiss(); + } + } + } + + public synchronized static void show(Context context, @StringRes int textId) { + if (null != context && !getActivity(context).isFinishing()) { + initDialog(context); + dialog.setMessage(textId); + dialog.show(); + } + } + + private static Activity getActivity(Context context) { + while (!(context instanceof Activity) && context instanceof ContextWrapper) { + context = ((ContextWrapper) context).getBaseContext(); + } + if (context instanceof Activity) { + return (Activity) context; + } else { + return null; + } + } + + public static void i(String tag, String msg) { //信息太长,分段打印 + //因为String的length是字符数量不是字节数量所以为了防止中文字符过多, + // 把4*1024的MAX字节打印长度改为2001字符数 + int max_str_length = 2001 - tag.length(); + //大于4000时 + while (msg.length() > max_str_length) { + Log.i(tag, msg.substring(0, max_str_length)); + msg = msg.substring(max_str_length); + } + //剩余部分 + Log.i(tag, msg); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/ToolsUtil.java b/app/src/main/java/com/yonsz/z1/utils/ToolsUtil.java new file mode 100644 index 0000000..9fdcb2a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/ToolsUtil.java @@ -0,0 +1,64 @@ +package com.yonsz.z1.utils; + +/** + * Created by Administrator on 2018/3/22. + */ + +public class ToolsUtil { + public static String completeAiInfo(String str) { + str = "18" + str.substring(0, 2) + "02" + str + "06"; + int contentNum = 0; + String validateNum = "00"; + String strNoEnd = str.substring(0, str.length() - 2).replace(" ", "");// 去掉结尾不计算校验和的数据 + for (int i = 0; i < strNoEnd.length(); i++) { + // 每两位取一个十六进制数 + contentNum = contentNum + Integer.valueOf(str.substring(i, i + 2), 16); + i++; + } + if (contentNum == 0) { + return null; + } else { + validateNum = (contentNum % 256) < 16 ? "0" + Integer.toHexString(contentNum % 256) + : Integer.toHexString(contentNum % 256); + // 拼接校验和和尾部信息 + StringBuilder sb = new StringBuilder(str);// 构造一个StringBuilder对象 + sb.insert(str.length() - 2, validateNum);// 在指定的位置1,插入指定的字符串 + str = sb.toString(); + return str; + } + } + + public static String completeAiInfo(String str, String type) { + switch (type) { + case "01": + str = "19" + type + "050105" + str + "06"; + break; + case "02": + str = "19" + type + "06" + str + "06"; + break; + case "05": + str = "19" + type + "05" + str + "06"; + break; + } + int contentNum = 0; + String validateNum = "00"; + String strNoEnd = str.substring(0, str.length() - 2).replace(" ", "");// 去掉结尾不计算校验和的数据 + for (int i = 0; i < strNoEnd.length(); i++) { + // 每两位取一个十六进制数 + contentNum = contentNum + Integer.valueOf(str.substring(i, i + 2), 16); + i++; + } + if (contentNum == 0) { + return null; + } else { + validateNum = (contentNum % 256) < 16 ? "0" + Integer.toHexString(contentNum % 256) + : Integer.toHexString(contentNum % 256); + // 拼接校验和和尾部信息 + StringBuilder sb = new StringBuilder(str);// 构造一个StringBuilder对象 + sb.insert(str.length() - 2, validateNum);// 在指定的位置1,插入指定的字符串 + str = sb.toString(); + return str; + } + } + +} diff --git a/app/src/main/java/com/yonsz/z1/utils/TypefaceUtil.java b/app/src/main/java/com/yonsz/z1/utils/TypefaceUtil.java new file mode 100644 index 0000000..acb08f8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/TypefaceUtil.java @@ -0,0 +1,20 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.graphics.Typeface; + +/** + * Created by Administrator on 2020/9/3. + */ + +public class TypefaceUtil { + private static Typeface tf; + + public static Typeface getTypeFace(Context ctx) { + if (tf == null) { + tf = Typeface.createFromAsset(ctx.getAssets(), "fonts/font.ttf"); + } + return tf; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/utils/VerificationUtils.java b/app/src/main/java/com/yonsz/z1/utils/VerificationUtils.java new file mode 100644 index 0000000..9a77b96 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/VerificationUtils.java @@ -0,0 +1,128 @@ +package com.yonsz.z1.utils; + +import android.util.Log; + +import com.google.i18n.phonenumbers.NumberParseException; +import com.google.i18n.phonenumbers.PhoneNumberUtil; +import com.google.i18n.phonenumbers.Phonenumber; + +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import cn.hutool.core.util.NumberUtil; + +/** + * Created by gaojie on 2017/1/17. + */ + +public class VerificationUtils { + + private static final String REGEX_PHONE_NUMBER = "^(0(10|2\\d|[3-9]\\d\\d)[- ]{0,3}\\d{7,8}|0?1[35847]\\d{9})$"; + + public static boolean checkPhoneNumber(String phoneNumber, String countryCode) { + if (phoneNumber.isEmpty() || countryCode.isEmpty()) { + return false; + } + if (countryCode.contains("+")) { + countryCode = countryCode.substring(countryCode.indexOf("+") + 1, countryCode.length()); + } + int ccode = Integer.valueOf(countryCode); + long phone = Long.valueOf(phoneNumber); + + Phonenumber.PhoneNumber pn = new Phonenumber.PhoneNumber(); + pn.setCountryCode(ccode); + pn.setNationalNumber(phone); + return PhoneNumberUtil.getInstance().isValidNumber(pn); + + /*if (phoneNumber.isEmpty()){ + return false; + } + PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); + Phonenumber.PhoneNumber swissNumberProto = null; + try { + swissNumberProto = phoneUtil.parse(phoneNumber, "CN"); + } catch (NumberParseException e) { + System.err.println("NumberParseException was thrown: " + e.toString()); + } + return phoneUtil.isValidNumber(swissNumberProto);*/ + } + + /** + * 判断是否是电话号码 + * + * @param mobile + * @return + */ + public static boolean isMobile(String mobile) { + if (mobile.isEmpty()) { + return false; + } else { + return true; + } + // return Pattern.matches(REGEX_PHONE_NUMBER, mobile); + } + + /** + * 判断密码是否包含数字和字母 + * + * @param pwd + * @return + */ + public static final boolean isRightPwd(String pwd) { + Pattern p = Pattern.compile("^(?![^a-zA-Z]+$)(?!\\D+$)[0-9a-zA-Z]{6,16}$"); + Matcher m = p.matcher(pwd); + return m.matches(); + } + + public static String genSign(HashMap params, String secretKey) { + //将参数以参数名的字典升序排序 + Map sortParams = new TreeMap(params); + Set> entrys = sortParams.entrySet(); + + //遍历排序的字典,并拼接"key=value"格式 + StringBuilder baseString = new StringBuilder(); + baseString.append(secretKey); + for (Map.Entry entry : entrys) { + baseString.append(entry.getKey()).append(entry.getValue()); + } + baseString.append(secretKey); + Log.e("````", "拼接好的字符串 = " + baseString.toString()); + + //使用MD5对待签名串求签 + byte[] bytes = null; + MessageDigest md5; + try { + md5 = MessageDigest.getInstance("MD5"); + try { + bytes = md5.digest(baseString.toString().getBytes("UTF-8")); + Log.e("````", "MD5签名后的结果 = " + bytes.toString()); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } catch (NoSuchAlgorithmException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + //将MD5输出的二进制结果转换为十六进制 + StringBuilder sign = new StringBuilder(); + for (int i = 0; i < bytes.length; i++) { + String hex = Integer.toHexString(bytes[i] & 0xFF); + if (hex.length() == 1) { + sign.append("0"); + } + sign.append(hex); + } + Log.e("```", "签名 = " + sign.toString()); + return sign.toString().toUpperCase(); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/utils/VibratorUtil.java b/app/src/main/java/com/yonsz/z1/utils/VibratorUtil.java new file mode 100644 index 0000000..9af1475 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/VibratorUtil.java @@ -0,0 +1,31 @@ +package com.yonsz.z1.utils; + +import android.app.Activity; +import android.app.Service; +import android.os.Vibrator; + +/** + * Created by Administrator on 2017/6/20. + */ + +public class VibratorUtil { + private static Vibrator vib; + /** + * final Activity activity :调用该方法的Activity实例 + * long milliseconds :震动的时长,单位是毫秒 + * long[] pattern :自定义震动模式 。数组中数字的含义依次是[静止时长,震动时长,静止时长,震动时长。。。]时长的单位是毫秒 + * boolean isRepeat : 是否反复震动,如果是true,反复震动,如果是false,只震动一次 + */ + + public static void Vibrate(final Activity activity, long milliseconds) { + vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE); + vib.vibrate(milliseconds); + } + public static void Vibrate(final Activity activity, long[] pattern,boolean isRepeat) { + vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE); + vib.vibrate(pattern, isRepeat ? 1 : -1); + } + public static void cancle(){ + vib.cancel(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/ViewUtil.java b/app/src/main/java/com/yonsz/z1/utils/ViewUtil.java new file mode 100644 index 0000000..bbc4476 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/ViewUtil.java @@ -0,0 +1,41 @@ +package com.yonsz.z1.utils; + +import android.view.LayoutInflater; +import android.view.View; + +import com.yonsz.z1.R; +import com.yonsz.z1.view.SuperSwipeRefreshLayout; + +/** + * Created by Administrator on 2017/1/15 0015. + */ + +public class ViewUtil { + private static ViewUtil util; + public static ViewUtil getUtil(){ + if (util == null){ + util = new ViewUtil(); + } + return util; + } + /*private View createFooterView(SwipeRefreshLayout swipeRefreshLayout) { + View footerView = LayoutInflater.from(swipeRefreshLayout.getContext()) + .inflate(R.layout.layout_footer, null); + ProgressBar footerProgressBar = (ProgressBar) footerView + .findViewById(R.id.footer_pb_view); + ImageView footerImageView = (ImageView) footerView + .findViewById(R.id.footer_image_view); + TextView footerTextView = (TextView) footerView + .findViewById(R.id.footer_text_view); + footerProgressBar.setVisibility(View.GONE); + footerImageView.setVisibility(View.VISIBLE); + footerTextView.setText("上拉加载更多..."); + return footerView; + } +*/ + public View createHeaderView(SuperSwipeRefreshLayout swipeRefreshLayout) { + View headerView = LayoutInflater.from(swipeRefreshLayout.getContext()) + .inflate(R.layout.layout_head, null); + return headerView; + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/VoiceUtil.java b/app/src/main/java/com/yonsz/z1/utils/VoiceUtil.java new file mode 100644 index 0000000..9bcebca --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/VoiceUtil.java @@ -0,0 +1,51 @@ +package com.yonsz.z1.utils; + +import android.content.Context; +import android.media.AudioManager; +import android.media.SoundPool; + +import java.util.HashMap; + +/** + * Created by Administrator on 2017/9/26. + */ + +public class VoiceUtil { + //播放音乐 + private boolean isplay; + private static SoundPool soundPool; + private static int streamID; + private static HashMap soundPoolMap; + + public static void initializeAlarm(Context context, int stream) { + soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0); + soundPoolMap = new HashMap<>(); + soundPoolMap.put(1, soundPool.load(context, stream, 2)); + + if (soundPool != null) + soundPool.stop(streamID); + AudioManager mgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC); + float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + float volume = streamVolumeCurrent / streamVolumeMax; + // streamID = soundPool.play(soundPoolMap.get(1), volume, volume, 1, loop, 1f); + streamID = soundPool.play(soundPoolMap.get(1), volume, volume, 1, 0, 1f); + } + + public static void playSound(int loop, Context context) { + if (soundPool != null) + soundPool.stop(streamID); + AudioManager mgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC); + float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + float volume = streamVolumeCurrent / streamVolumeMax; + // streamID = soundPool.play(soundPoolMap.get(1), volume, volume, 1, loop, 1f); + streamID = soundPool.play(soundPoolMap.get(1), volume, volume, 1, loop, 1f); + } + + public static void stopSound() { + if (soundPool != null) { + soundPool.stop(streamID); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/language/CommSharedUtil.java b/app/src/main/java/com/yonsz/z1/utils/language/CommSharedUtil.java new file mode 100644 index 0000000..73dd604 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/language/CommSharedUtil.java @@ -0,0 +1,75 @@ +package com.yonsz.z1.utils.language; + + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; + + +/** + * CommSharedUtils + * 通用的SharedPreferences + */ +public class CommSharedUtil { + + private static final String SHARED_PATH = "app_info"; + private static CommSharedUtil helper; + private SharedPreferences sharedPreferences; + + + private CommSharedUtil(Context context) { + sharedPreferences = context.getSharedPreferences(SHARED_PATH, Context.MODE_PRIVATE); + } + + public static CommSharedUtil getInstance(Context context) { + if (helper == null) { + helper = new CommSharedUtil(context); + } + return helper; + } + + public void putInt(String key, int value) { + Editor edit = sharedPreferences.edit(); + edit.putInt(key, value); + edit.apply(); + } + + public int getInt(String key) { + return sharedPreferences.getInt(key, 0); + } + + + public void putString(String key, String value) { + Editor edit = sharedPreferences.edit(); + edit.putString(key, value); + edit.apply(); + } + + + public String getString(String key) { + return sharedPreferences.getString(key, null); + } + + + public void putBoolean(String key, boolean value) { + Editor edit = sharedPreferences.edit(); + edit.putBoolean(key, value); + edit.apply(); + } + + + public boolean getBoolean(String key, boolean defValue) { + return sharedPreferences.getBoolean(key, defValue); + } + + public int getInt(String key, int defValue) { + return sharedPreferences.getInt(key, defValue); + } + + public void remove(String key) { + Editor edit = sharedPreferences.edit(); + edit.remove(key); + edit.apply(); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/utils/language/LanguageType.java b/app/src/main/java/com/yonsz/z1/utils/language/LanguageType.java new file mode 100644 index 0000000..99e3b50 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/language/LanguageType.java @@ -0,0 +1,13 @@ +package com.yonsz.z1.utils.language; + +/** + * Created by lx on 17-11-6. + */ + +public class LanguageType { + public static final int LANGUAGE_FOLLOW_SYSTEM = 0; //跟随系统 + public static final int LANGUAGE_EN = 1; //英文 + public static final int LANGUAGE_CHINESE_SIMPLIFIED = 2; //简体 + public static final int LANGUAGE_CHINESE_TRADITIONAL = 3; //香港台湾繁体 + +} diff --git a/app/src/main/java/com/yonsz/z1/utils/language/MultiLanguageUtil.java b/app/src/main/java/com/yonsz/z1/utils/language/MultiLanguageUtil.java new file mode 100644 index 0000000..477a595 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/language/MultiLanguageUtil.java @@ -0,0 +1,149 @@ +package com.yonsz.z1.utils.language; + +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.Build; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; + +import com.yonsz.z1.R; +import java.util.Locale; + +import de.greenrobot.event.EventBus; + +/** + * 多语言切换的帮助类 + * http://blog.csdn.net/finddreams + */ +public class MultiLanguageUtil { + + private static final String TAG = "MultiLanguageUtil"; + private static MultiLanguageUtil instance; + private Context mContext; + public static final String SAVE_LANGUAGE = "save_language"; + + public static void init(Context mContext) { + if (instance == null) { + synchronized (MultiLanguageUtil.class) { + if (instance == null) { + instance = new MultiLanguageUtil(mContext); + } + } + } + } + + public static MultiLanguageUtil getInstance() { + if (instance == null) { + throw new IllegalStateException("You must be init MultiLanguageUtil first"); + } + return instance; + } + + private MultiLanguageUtil(Context context) { + this.mContext = context; + } + + /** + * 设置语言 + */ + public void setConfiguration() { + Locale targetLocale = getLanguageLocale(); + Configuration configuration = mContext.getResources().getConfiguration(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + configuration.setLocale(targetLocale); + } else { + configuration.locale = targetLocale; + } + Resources resources = mContext.getResources(); + DisplayMetrics dm = resources.getDisplayMetrics(); + resources.updateConfiguration(configuration, dm);//语言更换生效的代码! + } + + /** + * 如果不是英文、简体中文、繁体中文,默认返回简体中文 + * + * @return + */ + private Locale getLanguageLocale() { + int languageType = CommSharedUtil.getInstance(mContext).getInt(MultiLanguageUtil.SAVE_LANGUAGE, 0); + if (languageType == LanguageType.LANGUAGE_FOLLOW_SYSTEM) { + Locale sysType = getSysLocale(); + if (sysType.equals(Locale.ENGLISH)) { + return Locale.ENGLISH; + } else if (sysType.equals(Locale.TRADITIONAL_CHINESE)) { + return Locale.TRADITIONAL_CHINESE; + } else if (TextUtils.equals(sysType.getLanguage(), Locale.CHINA.getLanguage())) { //zh + if (TextUtils.equals(sysType.getCountry(), Locale.CHINA.getCountry())) { //适配华为mate9 zh_CN_#Hans + return Locale.SIMPLIFIED_CHINESE; + } + } else { + return Locale.SIMPLIFIED_CHINESE; + } + } else if (languageType == LanguageType.LANGUAGE_EN) { + return Locale.ENGLISH; + } else if (languageType == LanguageType.LANGUAGE_CHINESE_SIMPLIFIED) { + return Locale.SIMPLIFIED_CHINESE; + } else if (languageType == LanguageType.LANGUAGE_CHINESE_TRADITIONAL) { + return Locale.TRADITIONAL_CHINESE; + } + Log.e(TAG, "getLanguageLocale" + languageType + languageType); + getSystemLanguage(getSysLocale()); + return Locale.SIMPLIFIED_CHINESE; + } + + private String getSystemLanguage(Locale locale) { + return locale.getLanguage() + "_" + locale.getCountry(); + + } + + //7.0以上获取方式需要特殊处理一下 + public Locale getSysLocale() { + if (Build.VERSION.SDK_INT < 24) { + return mContext.getResources().getConfiguration().locale; + } else { + return mContext.getResources().getConfiguration().getLocales().get(0); + } + } + + /** + * 更新语言 + * + * @param languageType + */ + public void updateLanguage(int languageType) { + CommSharedUtil.getInstance(mContext).putInt(MultiLanguageUtil.SAVE_LANGUAGE, languageType); + MultiLanguageUtil.getInstance().setConfiguration(); + EventBus.getDefault().post(new OnChangeLanguageEvent(languageType)); + } + + public String getLanguageName(Context context) { + int languageType = CommSharedUtil.getInstance(context).getInt(MultiLanguageUtil.SAVE_LANGUAGE,LanguageType.LANGUAGE_FOLLOW_SYSTEM); + if (languageType == LanguageType.LANGUAGE_EN) { + return mContext.getString(R.string.setting_language_english); + } else if (languageType == LanguageType.LANGUAGE_CHINESE_SIMPLIFIED) { + return mContext.getString(R.string.setting_simplified_chinese); + } else if (languageType == LanguageType.LANGUAGE_CHINESE_TRADITIONAL) { + return mContext.getString(R.string.setting_traditional_chinese); + } + return mContext.getString(R.string.setting_language_auto); + } + + /** + * 获取到用户保存的语言类型 + * @return + */ + public int getLanguageType() { + int languageType = CommSharedUtil.getInstance(mContext).getInt(MultiLanguageUtil.SAVE_LANGUAGE, LanguageType.LANGUAGE_FOLLOW_SYSTEM); + if (languageType == LanguageType.LANGUAGE_CHINESE_SIMPLIFIED) { + return LanguageType.LANGUAGE_CHINESE_SIMPLIFIED; + } else if (languageType == LanguageType.LANGUAGE_CHINESE_TRADITIONAL) { + return LanguageType.LANGUAGE_CHINESE_TRADITIONAL; + } else if (languageType == LanguageType.LANGUAGE_FOLLOW_SYSTEM) { + return LanguageType.LANGUAGE_FOLLOW_SYSTEM; + } + Log.e(TAG, "getLanguageType" + languageType); + return languageType; + } +} diff --git a/app/src/main/java/com/yonsz/z1/utils/language/OnChangeLanguageEvent.java b/app/src/main/java/com/yonsz/z1/utils/language/OnChangeLanguageEvent.java new file mode 100644 index 0000000..0fa24a9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/utils/language/OnChangeLanguageEvent.java @@ -0,0 +1,13 @@ +package com.yonsz.z1.utils.language; + +/** + * Created by lx on 2017/5/2. + */ + +public class OnChangeLanguageEvent { + public int languageType; + + public OnChangeLanguageEvent(int languageType) { + this.languageType = languageType; + } +} diff --git a/app/src/main/java/com/yonsz/z1/version6/MainFragment6.java b/app/src/main/java/com/yonsz/z1/version6/MainFragment6.java new file mode 100644 index 0000000..d53b644 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/version6/MainFragment6.java @@ -0,0 +1,981 @@ +package com.yonsz.z1.version6; + +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.support.design.widget.TabLayout; +import android.support.v4.view.ViewPager; +import android.support.v4.widget.NestedScrollView; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.StaggeredGridLayoutManager; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.common.openapi.IGetDeviceInfoCallBack; +import com.common.openapi.entity.DeviceDetailListData; +import com.lechange.demo.business.Business; +import com.lechange.demo.business.entity.ChannelInfo; +import com.lechange.demo.common.DatePicker; +import com.lechange.demo.yonsz.LcDataListEntity; +import com.lechange.demo.yonsz.LcListEntity; +import com.mm.android.deviceaddmodule.CommonParam; +import com.mm.android.deviceaddmodule.LCDeviceEngine; +import com.yonsz.z1.R; +import com.yonsz.z1.UniKongApp; +import com.yonsz.z1.activity.AsxAddDeviceListActivity; +import com.yonsz.z1.createfamily.CreateFamilyActivity; +import com.yonsz.z1.database.entity.OnlineEvent; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.CheckBindEntity; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity4.GetZ1Event; +import com.yonsz.z1.database.entity.entity4.HomeListEntity; +import com.yonsz.z1.database.entity.entity4.WeatherNewEntity; +import com.yonsz.z1.database.entity.entity5.AllDeviceEntity; +import com.yonsz.z1.database.entity.entitya2.ModelOpenEntity; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.difference.DifferConstans; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.homemanage.HomeManageActivity; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.login.LoginActivity; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNextDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.MainActivity4; +import com.yonsz.z1.version4.childdevice.Light4Activity; +import com.yonsz.z1.version5.ChooseRoomActivity; +import com.yonsz.z1.version5.adapter.HomepagerRecycleAdapter; +import com.yonsz.z1.version5.adapter.SafeAndCameraAdapter; +import com.yonsz.z1.version5.fragment.DeviceInRoomFragment; +import com.yonsz.z1.version5.scene.ModelNewDetailActivity; +import com.yonsz.z1.version5.weidget.BaseFragmentPagerAdapter; +import com.yonsz.z1.version5.weidget.Main6FragmentPagerAdapter; +import com.yonsz.z1.version5.weidget.MyStaggerGrildLayoutManger; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.version5.weidget.RoomPopupWindow; +import com.yonsz.z1.view.LightTypePopupWindow; +import com.yonsz.z1.view.MySwipeRefreshLayout; +import com.yonsz.z1.view.StickHeadScrollView; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.listpopupwindow.RankingPopupWindow; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.ADD_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_FAIL; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_SUCCESS; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_TO_OPEN; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_TO_SET; +import static com.yonsz.z1.net.Constans.CAMERA_TAG; +import static com.yonsz.z1.net.Constans.CHECK_MODEL_STATUS_SET; +import static com.yonsz.z1.net.Constans.CHECK_MODEL_STATUS_SUCCESS; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.GETZIINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USER_SESSION_NULL; +import static com.yonsz.z1.net.Constans.GET_WEATHER_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_Z1_INFO; +import static com.yonsz.z1.net.Constans.HOUSEID; +import static com.yonsz.z1.net.Constans.INDEX_APPLICANCE_LIST_SUCCESS; +import static com.yonsz.z1.net.Constans.INFRARED_CURTAIN_DETECTOR; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_HOUSES_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_FAIL; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.net.Constans.deviceNumList; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.Constans.isUseDefFlag; +import static com.yonsz.z1.net.Constans.roomPosition; +import static com.yonsz.z1.net.NetWorkUrl.DEVICE_LIST; +import static com.yonsz.z1.net.NetWorkUrl.FIND_DEVICES; +import static com.yonsz.z1.net.NetWorkUrl.SELECT_MODEL_TIME; +import static com.yonsz.z1.net.NetWorkUrl.USER_TOKEN; + +/** + * Created by Administrator on 2018/4/23. + */ + +public class MainFragment6 extends BaseFragment implements View.OnClickListener { + public static boolean isRefreshCamera = true; + private TitleView mTitleView; + private View fragView; + private UIHandle mHandler; + private Context mContext; + private RankingPopupWindow mWindow; + private RankingPopupWindow.Listener listener; + private AllDeviceEntity allDeviceEntity; + private boolean isShowSafeControl = false; + private static ArrayList mChannelInfoList = new ArrayList<>(); + private boolean isRefreshModel = true; + private StickHeadScrollView mStickHeadScrollView; + private SwipeRefreshLayout mSwipeRefreshLayout; + private Main6FragmentPagerAdapter mExamplePagerAdapter; + private List fragmentList = new ArrayList<>(); + private List mStringList = new ArrayList<>(); + private TextView tv_cityName, tv_weather_index, tv_warm_index, tv_air_index, tv_humidity_index; + private ImageView moreRoomIv; + private TextView moreRoomTv; + private List dataFloor = new ArrayList<>(); + private ViewPager viewPager; + private TabLayout tabLayout; + private SafeAndCameraAdapter safeAndCameraAdapter; + private RecyclerView safeRv; + private int tabUnselected = 0; + + public static void setDefaultHouse() { + SharedpreferencesUtil.save(Constans.HOUSEID, homeListEntity.getData().get(deviceNumListPosition).getId()); + HashMap map = new HashMap<>(); + map.put("houseId", homeListEntity.getData().get(deviceNumListPosition).getId()); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestPostByAsynewApi(NetWorkUrl.SET_DEFAULT_HOUSE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("setDefaultHouse", "UpdatePwActivity onSuccess()" + respone); + } + + @Override + public void onFail(String message) { + } + }); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mContext = this.getActivity(); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @RequiresApi(api = Build.VERSION_CODES.M) + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_main6, null); + if (AppIdUtil.isBaseZhiKong()) { + //Business.getInstance().init(DifferConstans.LECHENG_APPID, DifferConstans.LECHENG_APPSECRET, "openapi.lechange.cn:443"); + } + initView(); + return fragView; + } + + public void onEventMainThread(GetZ1Event event) { + String msg = event.getMsg(); + Log.e("nettyUtil111111111111", msg); + // Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Message message = new Message(); + message.what = GET_Z1_INFO; + message.obj = msg; + mHandler.sendMessage(message); + } + + public void onEventMainThread(ChooseHomeEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("2") || msg.equals("3")) { + roomPosition = 0; + isRefreshCamera = true; + isRefreshModel = true; + queryHouses(); + } else if (msg.equals("10")) { + selectModelTime(); + } + } + + public void onEventMainThread(OnlineEvent event) { + final String msg = event.getMsg(); + Log.e("nettyUtil", msg); + queryHouses(); + } + + @Override + public void onResume() { + super.onResume(); + if (DensityUtil.isNetworkConnected(getActivity())) { + queryHouses(); + } else { + ToastUtil.show(getActivity(), R.string.net_error); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + @RequiresApi(api = Build.VERSION_CODES.M) + private void initView() { + + viewPager = (ViewPager) fragView.findViewById(R.id.vp); + tabLayout = (TabLayout) fragView.findViewById(R.id.tb); + mSwipeRefreshLayout = (SwipeRefreshLayout) fragView.findViewById(R.id.sl); + safeRv = (RecyclerView) fragView.findViewById(R.id.rv_safe); + + tv_cityName = (TextView) fragView.findViewById(R.id.tv_cityName); + tv_weather_index = (TextView) fragView.findViewById(R.id.tv_weather_index); + tv_warm_index = (TextView) fragView.findViewById(R.id.tv_warm_index); + tv_air_index = (TextView) fragView.findViewById(R.id.tv_air_index); + tv_humidity_index = (TextView) fragView.findViewById(R.id.tv_humidity_index); + moreRoomIv = (ImageView) fragView.findViewById(R.id.iv_more_room); + moreRoomIv.setOnClickListener(this); + moreRoomTv = (TextView) fragView.findViewById(R.id.tv_more_room); + moreRoomTv.setOnClickListener(this); + mTitleView = (TitleView) fragView.findViewById(R.id.title_version5); + mTitleView.clearBackGroud(); + mTitleView.setHeadHomeVisible(R.drawable.icon_home_house1); + mTitleView.setHeadFuntion(R.drawable.icon_nav_add_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + initListItem(deviceNumList, 0, mTitleView.getHomeNameTxt()); +// showTypeBottom("6", "6"); + } + + @Override + public void onFunction() { + if (AppIdUtil.isBaseZhiKong()) { + Intent intent = new Intent(getActivity(), AsxAddDeviceListActivity.class); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + if (null != homeListEntity && !TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + intent.putExtra("floorList", homeListEntity.getData().get(deviceNumListPosition).getFloorList()); + } else { + intent.putExtra("floorList", ""); + } + getActivity().startActivity(intent); + } else { + // startAddDevice(); + } + } + + @Override + public void onFunctionText() { + + } + }); + + mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + /*Toast.makeText(mContext, "fresh finish", Toast.LENGTH_SHORT).show(); + mSwipeRefreshLayout.setRefreshing(false);*/ + queryHouses(); + } + }); + + + //1.do your job + mExamplePagerAdapter = new Main6FragmentPagerAdapter(getActivity().getSupportFragmentManager(), fragmentList, dataFloor); + viewPager.setAdapter(mExamplePagerAdapter); + tabLayout.setupWithViewPager(viewPager); + + //避免自动滑动到底部 + tabLayout.setFocusable(true); + tabLayout.setFocusableInTouchMode(true); + tabLayout.requestFocus(); + //2.set height + mStickHeadScrollView = (StickHeadScrollView) fragView.findViewById(R.id.sv); + mStickHeadScrollView.resetHeight(tabLayout, viewPager, mTitleView); + + mStickHeadScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { + @Override + public void onScrollChange(NestedScrollView nestedScrollView, int i, int i1, int i2, int i3) { + int height = mStickHeadScrollView.getHeight(); + float alpha = i1 * 1000 / 200; + Log.i("TAG", "MainFragment5 onScrolled()" + height + "===" + i + "===" + i1 + "===" + alpha); + mTitleView.showBackGroud7(alpha); + } + }); + + tabLayout.addOnTabSelectedListener(new TabLayout.BaseOnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + Log.i("TAG", "MainFragment6 onTabSelected()" + tab.getPosition()); + if (tab.getPosition() != 0) { + roomPosition = tab.getPosition(); + } + if (tab.getPosition() == 0 && tabUnselected != 0) { + roomPosition = tab.getPosition(); + } + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + Log.i("TAG", "MainFragment6 onTabUnselected()" + tab.getPosition()); + tabUnselected = tab.getPosition(); + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + Log.i("TAG", "MainFragment6 onTabReselected()" + tab.getPosition()); + } + }); + } + + private void initListItem(final List list, final int flag, final String selectName) { + //生成Listener和清空 + setPopupWindowListener(); + mWindow = null; + //显示popupwindow + mWindow = new RankingPopupWindow(getActivity(), list, selectName, listener, mTitleView, flag); + } + + private void setPopupWindowListener() { + listener = null; + listener = new RankingPopupWindow.Listener() { + @Override + public void onPopupWindowDismissListener() { + //消失时的操作 + } + + @Override + public void onItemClickListener(int position) { + //点击Item时的操作 + //跳转到家庭管理的页面 + if (position == 100) { + Intent intent = new Intent(getContext(), HomeManageActivity.class); + startActivity(intent); + } else { + isUseDefFlag = false; + deviceNumListPosition = position; + mTitleView.setHomeNameTxt(deviceNumList.get(position)); + setDefaultHouse(); + roomPosition = 0; + isRefreshCamera = true; + isRefreshModel = true; + queryHouses(); + } + } + }; + } + + public void getAllDate() { + if (null != mHandler) { + getWeather(); + } + } + + private void getApplicanceList() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", homeListEntity.getData().get(deviceNumListPosition).getId()); + map.put("withControlKey", "false"); + map.put("isMerge485", "false"); + map.put("isQueryCamera", "true"); + util.requestGetByAsy(NetWorkUrl.INDEX_APPLICANCE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone.length()); + ToastUtil.i("getApplicanceList5", respone); + AllDeviceEntity entity = JSON.parseObject(respone, AllDeviceEntity.class); + if (-401 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USER_SESSION_NULL); + msg.obj = entity; + mHandler.sendMessage(msg); + } else if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(INDEX_APPLICANCE_LIST_SUCCESS); + msg.obj = entity; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GETZIINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GETZIINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getWeather() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("appId", DifferConstans.APPID_S); + if (null != String.valueOf(MainActivity4.latitudeMain) && null != String.valueOf(MainActivity4.longitudeMain)) { + map.put("lat", String.valueOf(MainActivity4.latitudeMain)); + map.put("lng", String.valueOf(MainActivity4.longitudeMain)); + } + util.requestPostByAsynewApi(NetWorkUrl.GET_WEATHER, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getWeather", "onSuccess: " + respone); + WeatherNewEntity weatherEntity = JSON.parseObject(respone, WeatherNewEntity.class); + Message message = new Message(); + message.what = GET_WEATHER_SUCCESS; + message.obj = weatherEntity; + mHandler.sendMessage(message); + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void selectModelTime() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (deviceNumListPosition > homeListEntity.getData().size() - 1) { + deviceNumListPosition = 0; + } + if (null != SharedpreferencesUtil.get(Constans.HOUSEID, "")) { + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + } else { + return; + } + map.put("isCustom", "1"); + netWorkUtil.requestGetByAsy(SELECT_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("selectModelTime", "ShareDeviceActivity onSuccess()" + respone); + TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_WEATHER_SUCCESS: + WeatherNewEntity weatherEntity = (WeatherNewEntity) msg.obj; + if (null != weatherEntity.getData() && null != weatherEntity.getData().getCity()) { + tv_cityName.setText(weatherEntity.getData().getCity()); + tv_weather_index.setText(weatherEntity.getData().getWeather()); + tv_warm_index.setText(weatherEntity.getData().getTemperature()); + tv_air_index.setText(weatherEntity.getData().getAir()); + tv_humidity_index.setText(weatherEntity.getData().getHumidity() + "%"); + } + break; + case INDEX_APPLICANCE_LIST_SUCCESS: + allDeviceEntity = (AllDeviceEntity) msg.obj; + AddressNameUtil.setInstance(allDeviceEntity); + isNeedUpdate(); + + if (null == allDeviceEntity) { + return; + } + initAllDevice(); + break; + case SELECT_MODEL_TIME_SUCCESS: + final TimeSetEntity obj = (TimeSetEntity) msg.obj; + break; + case QUERY_HOUSES_FAIL: + mSwipeRefreshLayout.setRefreshing(false); + break; + case QUERY_HOUSES_SUCCESS: + mSwipeRefreshLayout.setRefreshing(false); + homeListEntity = (HomeListEntity) msg.obj; + if (homeListEntity.getData().size() == 0) { + Intent intent = new Intent(getContext(), CreateFamilyActivity.class); + intent.putExtra("from", "MainFragment5"); + startActivity(intent); + } else { + deviceNumList.clear(); + if (null != homeListEntity.getData()) { + if (deviceNumListPosition > homeListEntity.getData().size() - 1) { + deviceNumListPosition = 0; + } + deviceNumList.clear(); + for (int i = 0; i < homeListEntity.getData().size(); i++) { + if (homeListEntity.getData().get(i).getDefFlag() == 1) { + if (isUseDefFlag) { + deviceNumListPosition = i; + } + } + deviceNumList.add(homeListEntity.getData().get(i).getName()); + } + mTitleView.setHomeNameTxt(homeListEntity.getData().get(deviceNumListPosition).getName()); + } + SharedpreferencesUtil.save(HOUSEID, homeListEntity.getData().get(deviceNumListPosition).getId()); +// deviceNumList.add(getString(R.string.home_manage)); + EventBus.getDefault().post( + new ChooseHomeEvent("1")); + getApplicanceList(); + if (isRefreshModel) { + selectModelTime(); + isRefreshModel = false; + } + if (isRefreshCamera) { + userToken(); + isRefreshCamera = false; + } else { + getLcDeviceList(); + } + } + break; + case UPDATE_MODEL_BASIC_FAIL: + ToastUtil.show(getActivity(), (String) msg.obj); + break; + case GET_USER_SESSION_NULL: + SharedpreferencesUtil.save(Constans.SEESSIONID, ""); + SharedpreferencesUtil.save(Constans.TOKENID, ""); + NettyHandlerUtil.closeCtx(); + ToastUtil.show(getContext(), "用户在其他手机登陆"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(getContext(), LoginActivity.class); + startActivity(intent); + getActivity().finish(); + } + }, 1000); + break; + case FIND_DEVICES_SUCCESS: + LcDataListEntity lcListEntity = (LcDataListEntity) msg.obj; + /*DeviceDetailListData.ResponseData responseData = new DeviceDetailListData.ResponseData(); + responseData.setDeviceList(lcListEntity.getData());*/ + + List datas = new ArrayList<>(); + + if (lcListEntity.getData().size() > 0) { +// loadChannelList(lcListEntity); + + /*if (responseData != null && responseData.deviceList != null && responseData.deviceList.size() != 0) { + Iterator iterator = responseData.deviceList.iterator(); + while (iterator.hasNext()) { + DeviceDetailListData.ResponseData.DeviceListBean next = iterator.next(); + if (next.channels != null && next.channels.size() == 0 && !next.catalog.contains("NVR")) { + // 使用迭代器中的remove()方法,可以删除元素. + iterator.remove(); + } + } + }*/ + datas.addAll(lcListEntity.getData()); + if (datas.size() != 0) { + AddressNameUtil.setDatas(datas); + } + } else { + mChannelInfoList.clear(); + } + break; + case CHECK_USER_BIND_FAIL: + mChannelInfoList.clear(); + break; + case FIND_DEVICES_FAIL: + ToastUtil.show(getActivity(), (String) msg.obj); + break; + } + } + + private void initAllDevice() { + final List dataBeans = allDeviceEntity.getData(); + String floorList = homeListEntity.getData().get(deviceNumListPosition).getFloorList(); + int houseCategory = homeListEntity.getData().get(deviceNumListPosition).getHouseCategory(); + if (!TextUtils.isEmpty(floorList) || houseCategory == 2) { + dataFloor.clear(); + List result = Arrays.asList(floorList.split(",")); + mStringList.clear(); + for (int i = 0; i < result.size(); i++) { + mStringList.add(result.get(i)); + } + if (TextUtils.isEmpty(SharedpreferencesUtil.get(homeListEntity.getData().get(deviceNumListPosition).getId(), ""))) { + SharedpreferencesUtil.save(homeListEntity.getData().get(deviceNumListPosition).getId(), mStringList.get(0)); + } else if (!mStringList.contains(SharedpreferencesUtil.get(homeListEntity.getData().get(deviceNumListPosition).getId(), ""))) { + SharedpreferencesUtil.save(homeListEntity.getData().get(deviceNumListPosition).getId(), mStringList.get(0)); + } + for (int i = 0; i < dataBeans.size(); i++) { + String floor = dataBeans.get(i).getAddressType().getFloor(); + if (floor.equals(SharedpreferencesUtil.get(homeListEntity.getData().get(deviceNumListPosition).getId(), ""))) { + dataFloor.add(dataBeans.get(i)); + } + } + moreRoomTv.setVisibility(View.VISIBLE); + moreRoomIv.setVisibility(View.GONE); + if (null != SharedpreferencesUtil.get(homeListEntity.getData().get(deviceNumListPosition).getId(), "")) { + moreRoomTv.setText(SharedpreferencesUtil.get(homeListEntity.getData().get(deviceNumListPosition).getId(), "") + "层"); + } else { + moreRoomTv.setText("1层"); + } + } else { + moreRoomTv.setVisibility(View.GONE); + moreRoomIv.setVisibility(View.VISIBLE); + if (homeListEntity.getData().get(deviceNumListPosition).getHouseCategory() == 3 || homeListEntity.getData().get(deviceNumListPosition).getHouseCategory() == 5) { + dataFloor.clear(); + dataFloor.addAll(dataBeans); + } else { + dataFloor.clear(); + dataFloor.addAll(dataBeans); + } + } + fragmentList.clear(); + Bundle bundle; + int maxSize = 6; + for (int i = 0; i < dataFloor.size(); i++) { + DeviceInRoomFragment roomFragment = DeviceInRoomFragment.getInstance(dataFloor.get(i)); + fragmentList.add(roomFragment); + int size = dataFloor.get(i).getDevices().size(); + if (size > maxSize) { + maxSize = size; + } + } + + + mExamplePagerAdapter.notifyDataSetChanged(); + viewPager.setCurrentItem(roomPosition); + + //显示安防设备和摄像头 + isShowSafeControl = false; + if (allDeviceEntity != null && allDeviceEntity.getData().size() != 0) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + List devices = allDeviceEntity.getData().get(i).getDevices(); + if (null != devices && devices.size() > 0) { + for (int j = 0; j < devices.size(); j++) { + if (devices.get(j).getDeviceType().equals(DOOR_LOCK_TAG) || + devices.get(j).getDeviceType().equals(INFRARED_TAG) || + devices.get(j).getDeviceType().equals(INFRARED_CURTAIN_DETECTOR) || + devices.get(j).getDeviceType().equals(SMOKE_TAG) || + devices.get(j).getDeviceType().equals(GAS_TAG) || + devices.get(j).getDeviceType().equals(WIRELESS_EMERGENCY_BUTTON) || + devices.get(j).getDeviceType().equals(WATER_TAG)) { + if (null != devices.get(j).getAddition()) { + if (!devices.get(j).getAddition().isModeTriggerBound()) { + isShowSafeControl = true; + } + } else { + isShowSafeControl = true; + } + } + } + } + } + } + initSafeAndCamera(); + } + + private void initSafeAndCamera() { + /*LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext); + linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); + safeRv.setLayoutManager(linearLayoutManager); + safeAndCameraAdapter = new SafeAndCameraAdapter(mContext, mChannelInfoList, isShowSafeControl, homeListEntity.getData().get(deviceNumListPosition).getSafeSwitch()); + safeRv.setAdapter(safeAndCameraAdapter); + safeAndCameraAdapter.notifyDataSetChanged(); + safeAndCameraAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + @Override + public void onClick(View view, int position) { + + } + });*/ + } + + public static ArrayList getChannelInfoList() { + return mChannelInfoList; + } + + public void queryHouses() { + HashMap map = new HashMap<>(); + map.put("autoCreate", "0"); + NetWorkUtil net = NetWorkUtil.instans(); + net.requestGetByAsy(NetWorkUrl.QUERY_HOUSES, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryHouses1", "UpdatePwActivity onSuccess()" + respone); + HomeListEntity obj = JSON.parseObject(respone, HomeListEntity.class); + if (-401 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USER_SESSION_NULL); + msg.obj = obj; + mHandler.sendMessage(msg); + } else if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_HOUSES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public int isHaveDevice() { + int isHaveDevice = 0; + if (allDeviceEntity != null && allDeviceEntity.getData().size() != 0) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + if (allDeviceEntity.getData().get(i).getDevices().size() != 0) { + List devices = allDeviceEntity.getData().get(i).getDevices(); + isHaveDevice = 1; + for (int j = 0; j < devices.size(); j++) { + String deviceModel = devices.get(j).getDeviceModel(); + if (deviceModel.substring(deviceModel.length() - 1, deviceModel.length()).equals("L")) { + isHaveDevice = 2; + return isHaveDevice; + } + } + } + } + return isHaveDevice; + } else { + return isHaveDevice; + } + } + + private void userToken() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (null != SharedpreferencesUtil.get(Constans.HOUSEID, "")) { + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + } else { + return; + } + netWorkUtil.requestPostByAsynewApi(USER_TOKEN, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("userToken", "onSuccess()" + respone); + CheckBindEntity obj = JSON.parseObject(respone, CheckBindEntity.class); + if (1 == obj.getFlag()) { +// Business.getInstance().setToken(obj.getData().getUserToken()); + SharedpreferencesUtil.save("accessToken", obj.getData().getUserToken()); + try { + CommonParam commonParam = new CommonParam(); + commonParam.setEnvirment(DifferConstans.SERVER_BACKUP4); + commonParam.setContext(getActivity().getApplication()); + commonParam.setAppId(DifferConstans.LECHENG_APPID); + commonParam.setAppSecret(DifferConstans.LECHENG_APPSECRET); + LCDeviceEngine.newInstance().init(commonParam, SharedpreferencesUtil.get("accessToken", "")); + } catch (Throwable e) { + Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show(); + } + getLcDeviceList(); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private synchronized void getLcDeviceList() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", homeListEntity.getData().get(deviceNumListPosition).getId()); + /*map.put("deviceModel", "0"); + map.put("deviceType", CAMERA_TAG);*/ + netWorkUtil.requestPostByAsynewApi(DEVICE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("findDevices", "onSuccess()" + respone); + LcDataListEntity obj = JSON.parseObject(respone, LcDataListEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private synchronized void loadChannelList(final LcListEntity lcListEntity) { + mChannelInfoList.clear(); + // 初始化数据 + Business.getInstance().getChannelList(new Handler() { + @SuppressWarnings("unchecked") + @Override + public void handleMessage(Message msg) { + Business.RetObject retObject = (Business.RetObject) msg.obj; + if (msg.what == 0) { + List resp = (List) retObject.resp; + Log.i("findDevices", "MainFragment4 handleMessage()" + resp.size()); + for (int i = 0; i < resp.size(); i++) { + String name = resp.get(i).getDeviceCode(); + Log.i("findDevices", "MainFragment4 handleMessage()" + name); + for (int j = 0; j < lcListEntity.getData().size(); j++) { + if (name.contains(lcListEntity.getData().get(j).getDeviceId())) { + // resp.get(i).setDeviceName(lcListEntity.getData().get(j).getDeviceName()); + resp.get(i).setDeviceName(AddressNameUtil.getAddressName(lcListEntity.getData().get(j).getAddressId()) + "的" + lcListEntity.getData().get(j).getDeviceName()); + mChannelInfoList.add(resp.get(i)); + } + } + } + safeAndCameraAdapter.notifyDataSetChanged(); + } else { + Toast.makeText(getContext(), retObject.mMsg, Toast.LENGTH_LONG).show(); + } + } + }); + } + + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_more_room: + case R.id.tv_more_room: + RoomPopupWindow.Listener listener = null; + listener = new RoomPopupWindow.Listener() { + @Override + public void onPopupWindowDismissListener() { + //消失时的操作 + } + + @Override + public void onItemClickListener(int position) { + viewPager.setCurrentItem(position, false); + roomPosition = position; + } + + @Override + public void onBottomItemClickListener(int position) { + SharedpreferencesUtil.save(homeListEntity.getData().get(deviceNumListPosition).getId(), mStringList.get(position)); + roomPosition = 0; + initAllDevice(); + } + }; + List stringList = new ArrayList<>(); + List stringList1 = new ArrayList<>(); + stringList.clear(); + stringList1.clear(); + for (int i = 0; i < dataFloor.size(); i++) { + stringList.add(dataFloor.get(i).getAddressType().getName()); + stringList1.add(dataFloor.get(i).getAddressType().getIcon()); + } + if (dataFloor.size() != 0) { + initListItem1(stringList, stringList1, dataFloor.get(roomPosition).getAddressType().getName(), moreRoomIv, listener); + } else { + initListItem1(stringList, stringList1, "", moreRoomIv, listener); + } + break; + } + } + + private void initListItem1(List stringList, List stringList1, String name, View holder, RoomPopupWindow.Listener listener) { + RoomPopupWindow mWindow = null; + mWindow = new RoomPopupWindow(UniKongApp.getActivity(), stringList, stringList1, name, listener, holder, 1); + // mWindow.setBackgroundDrawable(null); + } + + public void isNeedUpdate() { + int totalNumber = 0; + if (allDeviceEntity != null && allDeviceEntity.getData().size() != 0) { + for (int i = 0; i < allDeviceEntity.getData().size(); i++) { + List devices = allDeviceEntity.getData().get(i).getDevices(); + if (devices.size() != 0) { + for (int j = 0; j < devices.size(); j++) { + if (devices.get(j).getDeviceType().equals("000")) { + if (null != devices.get(j).getAddition()) { + if (null != devices.get(j).getAddition().getHasNewVersion()) { + if (devices.get(j).getAddition().getHasNewVersion().equals("1")) { + totalNumber++; + MainActivity4.remind(totalNumber); + return; + } + } + } + } + } + } + } + if (totalNumber == 0) { + MainActivity4.remind(totalNumber); + } + } + } + + + //handler + static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(MainFragment6 activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + MainFragment6 activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/BadgeView.java b/app/src/main/java/com/yonsz/z1/view/BadgeView.java new file mode 100644 index 0000000..4e63020 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/BadgeView.java @@ -0,0 +1,453 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Color; +import android.graphics.Typeface; +import android.graphics.drawable.ShapeDrawable; +import android.graphics.drawable.shapes.RoundRectShape; +import android.support.v7.widget.AppCompatTextView; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.ViewParent; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.view.animation.DecelerateInterpolator; +import android.widget.FrameLayout; +import android.widget.TabWidget; + +/** + * Created by Administrator on 2018/5/25. + */ + +public class BadgeView extends AppCompatTextView { + + public static final int POSITION_TOP_LEFT = 1; + public static final int POSITION_TOP_RIGHT = 2; + public static final int POSITION_BOTTOM_LEFT = 3; + public static final int POSITION_BOTTOM_RIGHT = 4; + public static final int POSITION_CENTER = 5; + + private static final int DEFAULT_MARGIN_DIP = 5; + private static final int DEFAULT_LR_PADDING_DIP = 5; + private static final int DEFAULT_CORNER_RADIUS_DIP = 8; + private static final int DEFAULT_POSITION = POSITION_TOP_RIGHT; + private static final int DEFAULT_BADGE_COLOR = Color.parseColor("#CCFF0000"); //Color.RED; + private static final int DEFAULT_TEXT_COLOR = Color.WHITE; + + private static Animation fadeIn; + private static Animation fadeOut; + + private Context context; + private View target; + + private int badgePosition; + private int badgeMarginH; + private int badgeMarginV; + private int badgeColor; + + private boolean isShown; + + private ShapeDrawable badgeBg; + + private int targetTabIndex; + + public BadgeView(Context context) { + this(context, (AttributeSet) null, android.R.attr.textViewStyle); + } + + public BadgeView(Context context, AttributeSet attrs) { + this(context, attrs, android.R.attr.textViewStyle); + } + + /** + * Constructor - + *

+ * create a new BadgeView instance attached to a target {@link android.view.View}. + * + * @param context context for this view. + * @param target the View to attach the badge to. + */ + public BadgeView(Context context, View target) { + this(context, null, android.R.attr.textViewStyle, target, 0); + } + + /** + * Constructor - + *

+ * create a new BadgeView instance attached to a target {@link android.widget.TabWidget} + * tab at a given index. + * + * @param context context for this view. + * @param target the TabWidget to attach the badge to. + * @param index the position of the tab within the target. + */ + public BadgeView(Context context, TabWidget target, int index) { + this(context, null, android.R.attr.textViewStyle, target, index); + } + + public BadgeView(Context context, AttributeSet attrs, int defStyle) { + this(context, attrs, defStyle, null, 0); + } + + public BadgeView(Context context, AttributeSet attrs, int defStyle, View target, int tabIndex) { + super(context, attrs, defStyle); + init(context, target, tabIndex); + } + + private void init(Context context, View target, int tabIndex) { + + this.context = context; + this.target = target; + this.targetTabIndex = tabIndex; + + // apply defaults + badgePosition = DEFAULT_POSITION; + badgeMarginH = dipToPixels(DEFAULT_MARGIN_DIP); + badgeMarginV = badgeMarginH; + badgeColor = DEFAULT_BADGE_COLOR; + + setTypeface(Typeface.DEFAULT_BOLD); + int paddingPixels = dipToPixels(DEFAULT_LR_PADDING_DIP); + setPadding(paddingPixels, 0, paddingPixels, 0); + setTextColor(DEFAULT_TEXT_COLOR); + + fadeIn = new AlphaAnimation(0, 1); + fadeIn.setInterpolator(new DecelerateInterpolator()); + fadeIn.setDuration(200); + + fadeOut = new AlphaAnimation(1, 0); + fadeOut.setInterpolator(new AccelerateInterpolator()); + fadeOut.setDuration(200); + + isShown = false; + + if (this.target != null) { + applyTo(this.target); + } else { + show(); + } + + } + + private void applyTo(View target) { + + LayoutParams lp = target.getLayoutParams(); + ViewParent parent = target.getParent(); + FrameLayout container = new FrameLayout(context); + + if (target instanceof TabWidget) { + + // set target to the relevant tab child container + target = ((TabWidget) target).getChildTabViewAt(targetTabIndex); + this.target = target; + + ((ViewGroup) target).addView(container, + new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); + + this.setVisibility(View.GONE); + container.addView(this); + + } else { + + // TODO verify that parent is indeed a ViewGroup + ViewGroup group = (ViewGroup) parent; + int index = group.indexOfChild(target); + + group.removeView(target); + group.addView(container, index, lp); + + container.addView(target); + + this.setVisibility(View.GONE); + container.addView(this); + + group.invalidate(); + + } + + } + + /** + * Make the badge visible in the UI. + */ + public void show() { + show(false, null); + } + + /** + * Make the badge visible in the UI. + * + * @param animate flag to apply the default fade-in animation. + */ + public void show(boolean animate) { + show(animate, fadeIn); + } + + /** + * Make the badge visible in the UI. + * + * @param anim Animation to apply to the view when made visible. + */ + public void show(Animation anim) { + show(true, anim); + } + + /** + * Make the badge non-visible in the UI. + */ + public void hide() { + hide(false, null); + } + + /** + * Make the badge non-visible in the UI. + * + * @param animate flag to apply the default fade-out animation. + */ + public void hide(boolean animate) { + hide(animate, fadeOut); + } + + /** + * Make the badge non-visible in the UI. + * + * @param anim Animation to apply to the view when made non-visible. + */ + public void hide(Animation anim) { + hide(true, anim); + } + + /** + * Toggle the badge visibility in the UI. + */ + public void toggle() { + toggle(false, null, null); + } + + /** + * Toggle the badge visibility in the UI. + * + * @param animate flag to apply the default fade-in/out animation. + */ + public void toggle(boolean animate) { + toggle(animate, fadeIn, fadeOut); + } + + /** + * Toggle the badge visibility in the UI. + * + * @param animIn Animation to apply to the view when made visible. + * @param animOut Animation to apply to the view when made non-visible. + */ + public void toggle(Animation animIn, Animation animOut) { + toggle(true, animIn, animOut); + } + + private void show(boolean animate, Animation anim) { + if (getBackground() == null) { + if (badgeBg == null) { + badgeBg = getDefaultBackground(); + } + setBackgroundDrawable(badgeBg); + } + applyLayoutParams(); + + if (animate) { + this.startAnimation(anim); + } + this.setVisibility(View.VISIBLE); + isShown = true; + } + + private void hide(boolean animate, Animation anim) { + this.setVisibility(View.GONE); + if (animate) { + this.startAnimation(anim); + } + isShown = false; + } + + private void toggle(boolean animate, Animation animIn, Animation animOut) { + if (isShown) { + hide(animate && (animOut != null), animOut); + } else { + show(animate && (animIn != null), animIn); + } + } + + /** + * Increment the numeric badge label. If the current badge label cannot be converted to + * an integer value, its label will be set to "0". + * + * @param offset the increment offset. + */ + public int increment(int offset) { + CharSequence txt = getText(); + int i; + if (txt != null) { + try { + i = Integer.parseInt(txt.toString()); + } catch (NumberFormatException e) { + i = 0; + } + } else { + i = 0; + } + i = i + offset; + setText(String.valueOf(i)); + return i; + } + + /** + * Decrement the numeric badge label. If the current badge label cannot be converted to + * an integer value, its label will be set to "0". + * + * @param offset the decrement offset. + */ + public int decrement(int offset) { + return increment(-offset); + } + + private ShapeDrawable getDefaultBackground() { + + int r = dipToPixels(DEFAULT_CORNER_RADIUS_DIP); + float[] outerR = new float[]{r, r, r, r, r, r, r, r}; + + RoundRectShape rr = new RoundRectShape(outerR, null, null); + ShapeDrawable drawable = new ShapeDrawable(rr); + drawable.getPaint().setColor(badgeColor); + + return drawable; + + } + + private void applyLayoutParams() { + + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + + switch (badgePosition) { + case POSITION_TOP_LEFT: + lp.gravity = Gravity.LEFT | Gravity.TOP; + lp.setMargins(badgeMarginH, badgeMarginV, 0, 0); + break; + case POSITION_TOP_RIGHT: + lp.gravity = Gravity.RIGHT | Gravity.TOP; + lp.setMargins(0, badgeMarginV, badgeMarginH, 0); + break; + case POSITION_BOTTOM_LEFT: + lp.gravity = Gravity.LEFT | Gravity.BOTTOM; + lp.setMargins(badgeMarginH, 0, 0, badgeMarginV); + break; + case POSITION_BOTTOM_RIGHT: + lp.gravity = Gravity.RIGHT | Gravity.BOTTOM; + lp.setMargins(0, 0, badgeMarginH, badgeMarginV); + break; + case POSITION_CENTER: + lp.gravity = Gravity.CENTER; + lp.setMargins(0, 0, 0, 0); + break; + default: + break; + } + + setLayoutParams(lp); + + } + + /** + * Returns the target View this badge has been attached to. + */ + public View getTarget() { + return target; + } + + /** + * Is this badge currently visible in the UI? + */ + @Override + public boolean isShown() { + return isShown; + } + + /** + * Returns the positioning of this badge. + *

+ * one of POSITION_TOP_LEFT, POSITION_TOP_RIGHT, POSITION_BOTTOM_LEFT, POSITION_BOTTOM_RIGHT, POSTION_CENTER. + */ + public int getBadgePosition() { + return badgePosition; + } + + /** + * Set the positioning of this badge. + * + * @param layoutPosition one of POSITION_TOP_LEFT, POSITION_TOP_RIGHT, POSITION_BOTTOM_LEFT, POSITION_BOTTOM_RIGHT, POSTION_CENTER. + */ + public void setBadgePosition(int layoutPosition) { + this.badgePosition = layoutPosition; + } + + /** + * Returns the horizontal margin from the target View that is applied to this badge. + */ + public int getHorizontalBadgeMargin() { + return badgeMarginH; + } + + /** + * Returns the vertical margin from the target View that is applied to this badge. + */ + public int getVerticalBadgeMargin() { + return badgeMarginV; + } + + /** + * Set the horizontal/vertical margin from the target View that is applied to this badge. + * + * @param badgeMargin the margin in pixels. + */ + public void setBadgeMargin(int badgeMargin) { + this.badgeMarginH = badgeMargin; + this.badgeMarginV = badgeMargin; + } + + /** + * Set the horizontal/vertical margin from the target View that is applied to this badge. + * + * @param horizontal margin in pixels. + * @param vertical margin in pixels. + */ + public void setBadgeMargin(int horizontal, int vertical) { + this.badgeMarginH = horizontal; + this.badgeMarginV = vertical; + } + + /** + * Returns the color value of the badge background. + */ + public int getBadgeBackgroundColor() { + return badgeColor; + } + + /** + * Set the color value of the badge background. + * + * @param badgeColor the badge background color. + */ + public void setBadgeBackgroundColor(int badgeColor) { + this.badgeColor = badgeColor; + badgeBg = getDefaultBackground(); + } + + private int dipToPixels(int dip) { + Resources r = getResources(); + float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, r.getDisplayMetrics()); + return (int) px; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/CircleImageView.java b/app/src/main/java/com/yonsz/z1/view/CircleImageView.java new file mode 100644 index 0000000..2efb449 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/CircleImageView.java @@ -0,0 +1,439 @@ +/* + * Copyright 2014 - 2016 Henning Dodenhof + * + * 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.yonsz.z1.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.RectF; +import android.graphics.Shader; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.support.annotation.ColorRes; +import android.support.annotation.DrawableRes; +import android.util.AttributeSet; +import android.widget.ImageView; + +import com.yonsz.z1.R; + +public class CircleImageView extends ImageView { + + private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; + + private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888; + private static final int COLORDRAWABLE_DIMENSION = 2; + + private static final int DEFAULT_BORDER_WIDTH = 0; + private static final int DEFAULT_BORDER_COLOR = Color.BLACK; + private static final int DEFAULT_FILL_COLOR = Color.TRANSPARENT; + private static final boolean DEFAULT_BORDER_OVERLAY = false; + + private final RectF mDrawableRect = new RectF(); + private final RectF mBorderRect = new RectF(); + + private final Matrix mShaderMatrix = new Matrix(); + private final Paint mBitmapPaint = new Paint(); + private final Paint mBorderPaint = new Paint(); + private final Paint mFillPaint = new Paint(); + + private int mBorderColor = DEFAULT_BORDER_COLOR; + private int mBorderWidth = DEFAULT_BORDER_WIDTH; + private int mFillColor = DEFAULT_FILL_COLOR; + + private Bitmap mBitmap; + private BitmapShader mBitmapShader; + private int mBitmapWidth; + private int mBitmapHeight; + + private float mDrawableRadius; + private float mBorderRadius; + + private ColorFilter mColorFilter; + + private boolean mReady; + private boolean mSetupPending; + private boolean mBorderOverlay; + private boolean mDisableCircularTransformation; + + public CircleImageView(Context context) { + super(context); + + init(); + } + + public CircleImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public CircleImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0); + + mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_civ_border_width, DEFAULT_BORDER_WIDTH); + mBorderColor = a.getColor(R.styleable.CircleImageView_civ_border_color, DEFAULT_BORDER_COLOR); + mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_civ_border_overlay, DEFAULT_BORDER_OVERLAY); + mFillColor = a.getColor(R.styleable.CircleImageView_civ_fill_color, DEFAULT_FILL_COLOR); + + a.recycle(); + + init(); + } + + private void init() { + super.setScaleType(SCALE_TYPE); + mReady = true; + + if (mSetupPending) { + setup(); + mSetupPending = false; + } + } + + @Override + public ScaleType getScaleType() { + return SCALE_TYPE; + } + + @Override + public void setScaleType(ScaleType scaleType) { + if (scaleType != SCALE_TYPE) { + throw new IllegalArgumentException(String.format("ScaleType %s not supported.", scaleType)); + } + } + + @Override + public void setAdjustViewBounds(boolean adjustViewBounds) { + if (adjustViewBounds) { + throw new IllegalArgumentException("adjustViewBounds not supported."); + } + } + + @Override + protected void onDraw(Canvas canvas) { + if (mDisableCircularTransformation) { + super.onDraw(canvas); + return; + } + + if (mBitmap == null) { + return; + } + + if (mFillColor != Color.TRANSPARENT) { + canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mFillPaint); + } + canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mBitmapPaint); + if (mBorderWidth > 0) { + canvas.drawCircle(mBorderRect.centerX(), mBorderRect.centerY(), mBorderRadius, mBorderPaint); + } + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + setup(); + } + + @Override + public void setPadding(int left, int top, int right, int bottom) { + super.setPadding(left, top, right, bottom); + setup(); + } + + @Override + public void setPaddingRelative(int start, int top, int end, int bottom) { + super.setPaddingRelative(start, top, end, bottom); + setup(); + } + + public int getBorderColor() { + return mBorderColor; + } + + public void setBorderColor( int borderColor) { + if (borderColor == mBorderColor) { + return; + } + + mBorderColor = borderColor; + mBorderPaint.setColor(mBorderColor); + invalidate(); + } + + /** + * @deprecated Use {@link #setBorderColor(int)} instead + */ + @Deprecated + public void setBorderColorResource(@ColorRes int borderColorRes) { + setBorderColor(getContext().getResources().getColor(borderColorRes)); + } + + /** + * Return the color drawn behind the circle-shaped drawable. + * + * @return The color drawn behind the drawable + * + * @deprecated Fill color support is going to be removed in the future + */ + @Deprecated + public int getFillColor() { + return mFillColor; + } + + /** + * Set a color to be drawn behind the circle-shaped drawable. Note that + * this has no effect if the drawable is opaque or no drawable is set. + * + * @param fillColor The color to be drawn behind the drawable + * + * @deprecated Fill color support is going to be removed in the future + */ + @Deprecated + public void setFillColor( int fillColor) { + if (fillColor == mFillColor) { + return; + } + + mFillColor = fillColor; + mFillPaint.setColor(fillColor); + invalidate(); + } + + /** + * Set a color to be drawn behind the circle-shaped drawable. Note that + * this has no effect if the drawable is opaque or no drawable is set. + * + * @param fillColorRes The color resource to be resolved to a color and + * drawn behind the drawable + * + * @deprecated Fill color support is going to be removed in the future + */ + @Deprecated + public void setFillColorResource(@ColorRes int fillColorRes) { + setFillColor(getContext().getResources().getColor(fillColorRes)); + } + + public int getBorderWidth() { + return mBorderWidth; + } + + public void setBorderWidth(int borderWidth) { + if (borderWidth == mBorderWidth) { + return; + } + + mBorderWidth = borderWidth; + setup(); + } + + public boolean isBorderOverlay() { + return mBorderOverlay; + } + + public void setBorderOverlay(boolean borderOverlay) { + if (borderOverlay == mBorderOverlay) { + return; + } + + mBorderOverlay = borderOverlay; + setup(); + } + + public boolean isDisableCircularTransformation() { + return mDisableCircularTransformation; + } + + public void setDisableCircularTransformation(boolean disableCircularTransformation) { + if (mDisableCircularTransformation == disableCircularTransformation) { + return; + } + + mDisableCircularTransformation = disableCircularTransformation; + initializeBitmap(); + } + + @Override + public void setImageBitmap(Bitmap bm) { + super.setImageBitmap(bm); + initializeBitmap(); + } + + @Override + public void setImageDrawable(Drawable drawable) { + super.setImageDrawable(drawable); + initializeBitmap(); + } + + @Override + public void setImageResource(@DrawableRes int resId) { + super.setImageResource(resId); + initializeBitmap(); + } + + @Override + public void setImageURI(Uri uri) { + super.setImageURI(uri); + initializeBitmap(); + } + + @Override + public void setColorFilter(ColorFilter cf) { + if (cf == mColorFilter) { + return; + } + + mColorFilter = cf; + applyColorFilter(); + invalidate(); + } + + @Override + public ColorFilter getColorFilter() { + return mColorFilter; + } + + private void applyColorFilter() { + if (mBitmapPaint != null) { + mBitmapPaint.setColorFilter(mColorFilter); + } + } + + private Bitmap getBitmapFromDrawable(Drawable drawable) { + if (drawable == null) { + return null; + } + + if (drawable instanceof BitmapDrawable) { + return ((BitmapDrawable) drawable).getBitmap(); + } + + try { + Bitmap bitmap; + + if (drawable instanceof ColorDrawable) { + bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG); + } else { + bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG); + } + + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + return bitmap; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + private void initializeBitmap() { + if (mDisableCircularTransformation) { + mBitmap = null; + } else { + mBitmap = getBitmapFromDrawable(getDrawable()); + } + setup(); + } + + private void setup() { + if (!mReady) { + mSetupPending = true; + return; + } + + if (getWidth() == 0 && getHeight() == 0) { + return; + } + + if (mBitmap == null) { + invalidate(); + return; + } + + mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + + mBitmapPaint.setAntiAlias(true); + mBitmapPaint.setShader(mBitmapShader); + + mBorderPaint.setStyle(Paint.Style.STROKE); + mBorderPaint.setAntiAlias(true); + mBorderPaint.setColor(mBorderColor); + mBorderPaint.setStrokeWidth(mBorderWidth); + + mFillPaint.setStyle(Paint.Style.FILL); + mFillPaint.setAntiAlias(true); + mFillPaint.setColor(mFillColor); + + mBitmapHeight = mBitmap.getHeight(); + mBitmapWidth = mBitmap.getWidth(); + + mBorderRect.set(calculateBounds()); + mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2.0f, (mBorderRect.width() - mBorderWidth) / 2.0f); + + mDrawableRect.set(mBorderRect); + if (!mBorderOverlay && mBorderWidth > 0) { + mDrawableRect.inset(mBorderWidth - 1.0f, mBorderWidth - 1.0f); + } + mDrawableRadius = Math.min(mDrawableRect.height() / 2.0f, mDrawableRect.width() / 2.0f); + + applyColorFilter(); + updateShaderMatrix(); + invalidate(); + } + + private RectF calculateBounds() { + int availableWidth = getWidth() - getPaddingLeft() - getPaddingRight(); + int availableHeight = getHeight() - getPaddingTop() - getPaddingBottom(); + + int sideLength = Math.min(availableWidth, availableHeight); + + float left = getPaddingLeft() + (availableWidth - sideLength) / 2f; + float top = getPaddingTop() + (availableHeight - sideLength) / 2f; + + return new RectF(left, top, left + sideLength, top + sideLength); + } + + private void updateShaderMatrix() { + float scale; + float dx = 0; + float dy = 0; + + mShaderMatrix.set(null); + + if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) { + scale = mDrawableRect.height() / (float) mBitmapHeight; + dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f; + } else { + scale = mDrawableRect.width() / (float) mBitmapWidth; + dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f; + } + + mShaderMatrix.setScale(scale, scale); + mShaderMatrix.postTranslate((int) (dx + 0.5f) + mDrawableRect.left, (int) (dy + 0.5f) + mDrawableRect.top); + + mBitmapShader.setLocalMatrix(mShaderMatrix); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/view/DragScaleView.java b/app/src/main/java/com/yonsz/z1/view/DragScaleView.java new file mode 100644 index 0000000..1eeff5b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/DragScaleView.java @@ -0,0 +1,366 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.support.v4.widget.DrawerLayout; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; + +import com.yonsz.z1.R; +import com.yonsz.z1.listener.OnDragUpListener; +import com.yonsz.z1.listener.OnExbandItemClickListener; + +public class DragScaleView extends View implements View.OnTouchListener { + protected int screenWidth; + protected int screenHeight; + protected int lastX; + protected int lastY; + private int oriLeft; + private int oriRight; + private int oriTop; + private int oriBottom; + private int dragDirection; + private static final int TOP = 0x15; + private static final int LEFT = 0x16; + private static final int BOTTOM = 0x17; + private static final int RIGHT = 0x18; + private static final int LEFT_TOP = 0x11; + private static final int RIGHT_TOP = 0x12; + private static final int LEFT_BOTTOM = 0x13; + private static final int RIGHT_BOTTOM = 0x14; + private static final int CENTER = 0x19; + private int offset = 0; + protected Paint paint = new Paint(); + private OnDragUpListener onDragUpListener; + private Bitmap bitmap1; + + /** + * 初始化获取屏幕宽高 + */ + protected void initScreenW_H() { + screenHeight = getResources().getDisplayMetrics().heightPixels - 40; + screenWidth = getResources().getDisplayMetrics().widthPixels; + } + + public DragScaleView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setOnTouchListener(this); + initScreenW_H(); + } + + public DragScaleView(Context context, AttributeSet attrs) { + super(context, attrs); + setOnTouchListener(this); + initScreenW_H(); + } + + public DragScaleView(Context context) { + super(context); + setOnTouchListener(this); + initScreenW_H(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.group_top); + bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.group_bottom); + paint.setColor(0x80ededed); + paint.setStrokeWidth(4.0f); + paint.setStyle(Paint.Style.FILL); + canvas.drawBitmap(bitmap, 100, 0, paint); + canvas.drawBitmap(bitmap1, 100, getHeight() - bitmap1.getHeight(), paint); + canvas.drawRect(offset, bitmap1.getHeight() / 2, getWidth(), getHeight() - bitmap1.getHeight() / 2, paint); + paint.setColor(0xff999999); + paint.setStrokeWidth(1.0f); + paint.setTextSize(30f); + canvas.drawText("上下滑动\n选择楼层", 100, getHeight() / 2, paint); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + int action = event.getAction(); + if (action == MotionEvent.ACTION_DOWN) { + oriLeft = v.getLeft(); + oriRight = v.getRight(); + oriTop = v.getTop(); + oriBottom = v.getBottom(); + lastY = (int) event.getRawY(); + lastX = (int) event.getRawX(); + dragDirection = getDirection(v, (int) event.getX(), + (int) event.getY()); + } + // 处理拖动事件 + delDrag(v, event, action); + invalidate(); + return false; + } + + /** + * 处理拖动事件 + * + * @param v + * @param event + * @param action + */ + protected void delDrag(View v, MotionEvent event, int action) { + switch (action) { + case MotionEvent.ACTION_MOVE: + int dx = (int) event.getRawX() - lastX; + int dy = (int) event.getRawY() - lastY; + switch (dragDirection) { + case BOTTOM: // 下边缘 + bottom(v, dy); + break; + case TOP: // 上边缘 + top(v, dy); + break; + /*case CENTER: // 点击中心-->>移动 + center(v, dx, dy); + break;*/ + /*case LEFT: // 左边缘 + left(v, dx); + break; + case RIGHT: // 右边缘 + right(v, dx); + break; + case LEFT_BOTTOM: // 左下 + left(v, dx); + bottom(v, dy); + break; + case LEFT_TOP: // 左上 + left(v, dx); + top(v, dy); + break; + case RIGHT_BOTTOM: // 右下 + right(v, dx); + bottom(v, dy); + break; + case RIGHT_TOP: // 右上 + right(v, dx); + top(v, dy); + break;*/ + } + if (dragDirection != CENTER) { + v.layout(oriLeft, oriTop, oriRight, oriBottom); + } + lastX = (int) event.getRawX(); + lastY = (int) event.getRawY(); + break; + case MotionEvent.ACTION_UP: + switch (dragDirection) { + case BOTTOM: // 下边缘 + case TOP: // 上边缘 + if (null != onDragUpListener) { + onDragUpListener.onDragUp(v, dragDirection, oriTop, oriBottom); + } + break; + } + dragDirection = 0; + break; + } + } + + /** + * 触摸点为中心->>移动 + * + * @param v + * @param dx + * @param dy + */ + private void center(View v, int dx, int dy) { + int left = v.getLeft() + dx; + int top = v.getTop() + dy; + int right = v.getRight() + dx; + int bottom = v.getBottom() + dy; + if (left < -offset) { + left = -offset; + right = left + v.getWidth(); + } + if (right > screenWidth + offset) { + right = screenWidth + offset; + left = right - v.getWidth(); + } + if (top < -offset) { + top = -offset; + bottom = top + v.getHeight(); + } + if (bottom > screenHeight + offset) { + bottom = screenHeight + offset; + top = bottom - v.getHeight(); + } + v.layout(left, top, right, bottom); + } + + /** + * 触摸点为上边缘 + * + * @param v + * @param dy + */ + private void top(View v, int dy) { + oriTop += dy; + if (oriTop < 45) { + oriTop = 45; + } + if (oriTop < -offset) { + oriTop = -offset; + } + if (oriBottom - oriTop - 2 * offset < 300) { + oriTop = oriBottom - 2 * offset - 300; + } + + + /*if (oriTop <= 45) { + oriTop = 45; + } else if (oriTop <= 216) { + oriTop = 216; + } else if (oriTop <= 387) { + oriTop = 387; + } else if (oriTop <= 558) { + oriTop = 558; + } else if (oriTop <= 729) { + oriTop = 729; + } else { + oriTop = 729; + }*/ +// Log.i("DragScaleView", "top====" + dy + "=====" + oriTop + "=====" + oriBottom + "=====" + getHeight()); + } + + /** + * 触摸点为下边缘 + * + * @param v + * @param dy + */ + private void bottom(View v, int dy) { + oriBottom += dy; + + if (oriBottom > 900) { + oriBottom = 900; + } + if (oriBottom - oriTop - 2 * offset < 300) { + oriBottom = 300 + oriTop + 2 * offset; + } + /*if (oriBottom > 900) { + oriBottom = 900; + }*/ +// Log.i("DragScaleView", "bottom====" + dy + "=====" + oriTop + "=====" + oriBottom + "=====" + getHeight()); + } + + public void changeBottom(int dy) { + + } + + /** + * 触摸点为右边缘 + * + * @param v + * @param dx + */ + private void right(View v, int dx) { + oriRight += dx; + if (oriRight > screenWidth + offset) { + oriRight = screenWidth + offset; + } + if (oriRight - oriLeft - 2 * offset < 200) { + oriRight = oriLeft + 2 * offset + 200; + } + } + + /** + * 触摸点为左边缘 + * + * @param v + * @param dx + */ + private void left(View v, int dx) { + oriLeft += dx; + if (oriLeft < -offset) { + oriLeft = -offset; + } + if (oriRight - oriLeft - 2 * offset < 200) { + oriLeft = oriRight - 2 * offset - 200; + } + } + + /** + * 获取触摸点flag + * + * @param v + * @param x + * @param y + * @return + */ + protected int getDirection(View v, int x, int y) { + int left = v.getLeft(); + int right = v.getRight(); + int bottom = v.getBottom(); + int top = v.getTop(); + + if (y < 120) { + return TOP; + } + if (bottom - top - y < 120) { + return BOTTOM; + } + /*if (x < 40 && y < 40) { + return LEFT_TOP; + } + if (y < 40 && right - left - x < 40) { + return RIGHT_TOP; + } + if (x < 40 && bottom - top - y < 40) { + return LEFT_BOTTOM; + } + if (right - left - x < 40 && bottom - top - y < 40) { + return RIGHT_BOTTOM; + } + if (x < 40) { + return LEFT; + } + if (right - left - x < 40) { + return RIGHT; + }*/ + + return CENTER; + } + + /** + * 获取截取宽度 + * + * @return + */ + public int getCutWidth() { + return getWidth() - 2 * offset; + } + + /** + * 获取截取高度 + * + * @return + */ + public int getCutHeight() { + return getHeight() - 2 * offset; + } + + /** + * 获取截取高度 + * + * @return + */ + public int getTopHeight() { + return getHeight() - 2 * offset; + } + + //点击事件 + public void setmOnDragUpListener(OnDragUpListener mOnDragUpListener) { + this.onDragUpListener = mOnDragUpListener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/ElasticTouchListenerView.java b/app/src/main/java/com/yonsz/z1/view/ElasticTouchListenerView.java new file mode 100644 index 0000000..9ec7708 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/ElasticTouchListenerView.java @@ -0,0 +1,200 @@ +package com.yonsz.z1.view; + +import android.graphics.Rect; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.Animation; +import android.view.animation.TranslateAnimation; + +import com.yonsz.z1.database.entity.entity4.CloseActivityEntity; + +import de.greenrobot.event.EventBus; + +/** + * Created by Administrator on 2018/8/28. + */ + +public class ElasticTouchListenerView implements View.OnTouchListener { + View[] children; + private View inner; + private float y; + private Rect normal = new Rect(); + private boolean animationFinish = true; + private int[] tops; + private int[] bottoms; + + @Override + public boolean onTouch(View v, MotionEvent ev) { + if (inner == null && children == null) { + if (v instanceof ViewGroup) { + ViewGroup group = (ViewGroup) v; + int count = group.getChildCount(); + if (count > 0) { + children = new View[count]; + tops = new int[count]; + bottoms = new int[count]; + for (int i = 0; i < count; i++) { + children[i] = group.getChildAt(i); + tops[i] = children[i].getTop(); + bottoms[i] = children[i].getBottom(); + } + } + } + inner = v; + } + if (animationFinish && (inner != null || children != null)) { + int action = ev.getAction(); + switch (action) { + case MotionEvent.ACTION_DOWN: + // System.out.println("ACTION_DOWN"); + y = ev.getY(); + break; + case MotionEvent.ACTION_UP: + // System.out.println("ACTION_UP"); + if (y > 1000) { + smoothSlideTo(); + } else { + y = 0; + if (isNeedAnimation()) { + animation(); + } + inner.invalidate(); + } + break; + case MotionEvent.ACTION_MOVE: + // System.out.println("ACTION_MOVE"); + final float preY = y == 0 ? ev.getY() : y; + float nowY = ev.getY(); + int deltaY = (int) (preY - nowY); + y = nowY; + Log.i("ElasticTouchListener", "" + y); + // 当滚动到最上或者最下时就不会再滚动,这时移动布局 + if (isNeedMove()) { + if (normal.isEmpty()) { + // 保存正常的布局位置 + normal.set(inner.getLeft(), inner.getTop(), inner.getRight(), inner.getBottom()); + } + if (children != null) { + View view = null; + for (int i = 0; i < children.length; i++) { + view = children[i]; + view.layout(view.getLeft(), view.getTop() - deltaY / 2, view.getRight(), view.getBottom() - deltaY / 2); + } + } else { + // 移动布局 + inner.layout(inner.getLeft(), inner.getTop() - deltaY / 2, inner.getRight(), inner.getBottom() - deltaY / 2); + } + } + inner.invalidate(); + break; + default: + break; + } + } else { + return false; + } + return true; + } + + // 开启动画移动 + + public void animation() { + if (children == null) { + // 开启移动动画 + TranslateAnimation trans = new TranslateAnimation(0, 0, 0, normal.top - inner.getTop()); + trans.setDuration(200); + trans.setAnimationListener(new Animation.AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + animationFinish = false; + } + + @Override + public void onAnimationRepeat(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + inner.clearAnimation(); + // 设置回到正常的布局位置 + inner.layout(normal.left, normal.top, normal.right, normal.bottom); + normal.setEmpty(); + animationFinish = true; + } + }); + inner.startAnimation(trans); + } else { + for (int i = 0; i < children.length; i++) { + final View view = children[i]; + if (view.getVisibility() == View.VISIBLE) { + final int index = i; + // 开启移动动画 + TranslateAnimation trans = new TranslateAnimation(0, 0, 0, tops[i] - view.getTop()); + trans.setDuration(200); + trans.setAnimationListener(new Animation.AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + animationFinish = false; + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + + @Override + public void onAnimationEnd(Animation animation) { + view.clearAnimation(); + // 设置回到正常的布局位置 + view.layout(view.getLeft(), tops[index], view.getRight(), bottoms[index]); + normal.setEmpty(); + animationFinish = true; + } + }); + view.startAnimation(trans); + } + } + } + + } + + // 是否需要开启动画 + public boolean isNeedAnimation() { + return !normal.isEmpty(); + } + + // 是否需要移动布局 + public boolean isNeedMove() { + // int offset = inner.getMeasuredHeight() - getHeight(); + // int scrollY = getScrollY(); + // if (scrollY == 0 || scrollY == offset) { + // return true; + // } + // return false; + + // if (children != null && children.length > 0 + // && (children[children.length - 1].getBottom() <= inner.getPaddingTop()/*inner.getTop()*/ + // || children[0].getTop() >= inner.getHeight() + // )) { + // return false; + // } + + return true; + } + + + /** + * 平顺滑动(屏幕上下左右) + */ + private void smoothSlideTo() { + /*if (viewDragHelper.smoothSlideViewTo(inner, 0, inner.getHeight())) { + ViewCompat.postInvalidateOnAnimation(inner); + // notifyCloseToBottomToListener(); + }*/ + EventBus.getDefault().post( + new CloseActivityEntity("ElasticTouchListenerView")); + inner.setVisibility(View.INVISIBLE); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/FcousTextView.java b/app/src/main/java/com/yonsz/z1/view/FcousTextView.java new file mode 100644 index 0000000..428069c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/FcousTextView.java @@ -0,0 +1,32 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.os.Build; +import android.support.annotation.RequiresApi; +import android.util.AttributeSet; +import android.widget.TextView; + +/** + * Created by Administrator on 2017/1/21 0021. + */ + +public class FcousTextView extends TextView { + public FcousTextView(Context context) { + super(context); + } + public FcousTextView(Context context, AttributeSet attrs) { + super(context, attrs); + } + public FcousTextView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public FcousTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + public boolean isFocused() { + return true; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/LightPopupWindow.java b/app/src/main/java/com/yonsz/z1/view/LightPopupWindow.java new file mode 100644 index 0000000..8e526ed --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/LightPopupWindow.java @@ -0,0 +1,152 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.PopupWindow; + +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.List; + +public class LightPopupWindow extends PopupWindow implements CompoundButton.OnCheckedChangeListener, View.OnClickListener { + + private Context context; + private View contentView; + private CheckBox[] timeCheckBox = new CheckBox[3]; + private CheckBox[] typeCheckBox = new CheckBox[9]; + // private int[] timeIds; + // private int[] typeIds; + private List positionIds = new ArrayList<>(); + private List typeIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + + private String position = "0"; + private List condition = new ArrayList<>(); + + private OnCompleteListener onCompleteListener; + + public LightPopupWindow(Context context, OnCompleteListener onCompleteListener) { + super(context); + this.context = context; + this.onCompleteListener = onCompleteListener; + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + init(); + } + + private void init() { + contentView = LayoutInflater.from(context).inflate(R.layout.pop_light_choose, null); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) contentView.findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(this); + } + contentView.findViewById(R.id.tv_position_sure).setOnClickListener(this); + contentView.findViewById(R.id.tv_position_cancel).setOnClickListener(this); + + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position0); + condition.add("0"); + + setContentView(contentView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + // 设置可触 + this.setFocusable(true); + ColorDrawable dw = new ColorDrawable(0x80000000); + this.setBackgroundDrawable(dw); + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + //如果是类型筛选 + if (typeIds.contains(id)) { + if (isChecked) { + if (id == typeIds.get(0)) { + //全部 + for (int i = 1; i < typeCheckBox.length; i++) { + typeCheckBox[i].setChecked(false); + } + } else { + typeCheckBox[0].setChecked(false); + condition.remove("0"); + } + } else { + // if (condition.size() < 2){ + // buttonView.setChecked(true); + // } + boolean isForceCheck = true; + for (int i = 0; i < typeCheckBox.length; i++) { + if (typeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + switch (id) { + case R.id.cb_position0: + if (isChecked) + position = "0"; + break; + case R.id.cb_position1: + if (isChecked) + position = "1"; + break; + case R.id.cb_position2: + if (isChecked) + position = "2"; + break; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_position_sure: //完成 + if (onCompleteListener != null) { + onCompleteListener.onComplete(position, condition); + } + dismiss(); + break; + case R.id.tv_position_cancel: //重置 + dismiss(); + break; + } + } + + public void setOnCompleteListener(OnCompleteListener onCompleteListener) { + this.onCompleteListener = onCompleteListener; + } + + public interface OnCompleteListener { + void onComplete(String time, List conditionList); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/LightTypePopupWindow.java b/app/src/main/java/com/yonsz/z1/view/LightTypePopupWindow.java new file mode 100644 index 0000000..6e0b339 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/LightTypePopupWindow.java @@ -0,0 +1,212 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.PopupWindow; + +import com.yonsz.z1.R; + +public class LightTypePopupWindow extends PopupWindow implements View.OnClickListener { + + private Context context; + private View contentView; + + private String position = "0"; + private OnCompleteListener onCompleteListener; + + private ImageView dengGuangIv, tongDengIv, dengDaiIv, sheDengIv, biDengIv, diaoDengIv, langDengIv, paqiIv; + private ImageView dengGuangMark, tongDengMark, dengDaiMark, sheDengMark, biDengMark, diaoDengMark, langDengMark, paqiMark; + + public LightTypePopupWindow(Context context, String position, OnCompleteListener onCompleteListener) { + super(context); + this.context = context; + this.onCompleteListener = onCompleteListener; + this.position = position; + init(); + } + + private void init() { + contentView = LayoutInflater.from(context).inflate(R.layout.pop_light_type_choose, null); + contentView.findViewById(R.id.tv_position_sure).setOnClickListener(this); + contentView.findViewById(R.id.tv_position_cancel).setOnClickListener(this); + + dengGuangIv = (ImageView) contentView.findViewById(R.id.iv_deng_guang); + tongDengIv = (ImageView) contentView.findViewById(R.id.iv_tong_deng); + dengDaiIv = (ImageView) contentView.findViewById(R.id.iv_deng_dai); + sheDengIv = (ImageView) contentView.findViewById(R.id.iv_she_deng); + biDengIv = (ImageView) contentView.findViewById(R.id.iv_bi_deng); + diaoDengIv = (ImageView) contentView.findViewById(R.id.iv_diao_deng); + langDengIv = (ImageView) contentView.findViewById(R.id.iv_lang_deng); + paqiIv = (ImageView) contentView.findViewById(R.id.iv_pai_qi); + + dengGuangMark = (ImageView) contentView.findViewById(R.id.iv_deng_guang_mark); + tongDengMark = (ImageView) contentView.findViewById(R.id.iv_tong_deng_mark); + dengDaiMark = (ImageView) contentView.findViewById(R.id.iv_deng_dai_mark); + sheDengMark = (ImageView) contentView.findViewById(R.id.iv_she_deng_mark); + biDengMark = (ImageView) contentView.findViewById(R.id.iv_bi_deng_mark); + diaoDengMark = (ImageView) contentView.findViewById(R.id.iv_diao_deng_mark); + langDengMark = (ImageView) contentView.findViewById(R.id.iv_lang_deng_mark); + paqiMark = (ImageView) contentView.findViewById(R.id.iv_pai_qi_mark); + + dengGuangIv.setOnClickListener(this); + tongDengIv.setOnClickListener(this); + dengDaiIv.setOnClickListener(this); + sheDengIv.setOnClickListener(this); + biDengIv.setOnClickListener(this); + diaoDengIv.setOnClickListener(this); + langDengIv.setOnClickListener(this); + paqiIv.setOnClickListener(this); + + switch (position) { + case "0": + dengGuangMark.setVisibility(View.VISIBLE); + break; + case "1": + tongDengMark.setVisibility(View.VISIBLE); + break; + case "2": + dengDaiMark.setVisibility(View.VISIBLE); + break; + case "3": + sheDengMark.setVisibility(View.VISIBLE); + break; + case "4": + biDengMark.setVisibility(View.VISIBLE); + break; + case "5": + diaoDengMark.setVisibility(View.VISIBLE); + break; + case "6": + langDengMark.setVisibility(View.VISIBLE); + break; + case "7": + paqiMark.setVisibility(View.VISIBLE); + break; + default: + dengGuangMark.setVisibility(View.VISIBLE); + break; + } + setContentView(contentView); + this.setWidth(200); + this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + // 设置可触 + this.setFocusable(true); + ColorDrawable dw = new ColorDrawable(0x80000000); + this.setBackgroundDrawable(dw); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_position_sure: //完成 + if (onCompleteListener != null) { + onCompleteListener.onComplete(position); + } + dismiss(); + break; + case R.id.tv_position_cancel: //重置 + dismiss(); + break; + case R.id.iv_deng_guang: + position = "0"; + dengGuangMark.setVisibility(View.VISIBLE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_tong_deng: + position = "1"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.VISIBLE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_deng_dai: + position = "2"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.VISIBLE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_she_deng: + position = "3"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.VISIBLE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_bi_deng: + position = "4"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.VISIBLE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_diao_deng: + position = "5"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.VISIBLE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_lang_deng: + position = "6"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.VISIBLE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_pai_qi: + position = "7"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.VISIBLE); + break; + } + } + + public void setOnCompleteListener(OnCompleteListener onCompleteListener) { + this.onCompleteListener = onCompleteListener; + } + + public interface OnCompleteListener { + void onComplete(String time); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/LineChartView.java b/app/src/main/java/com/yonsz/z1/view/LineChartView.java new file mode 100644 index 0000000..e4232c3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/LineChartView.java @@ -0,0 +1,584 @@ +package com.yonsz.z1.view; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PathMeasure; +import android.graphics.Point; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +/** + * Created by jeanboy on 2017/6/12. + */ + +public class LineChartView extends View { + + private Paint linePaint;//曲线画笔 + private Paint pointPaint;//曲线上锚点画笔 + private Paint tablePaint;//表格画笔 + private Paint textRulerPaint;//标尺文本画笔 + private Paint textPointPaint;//曲线上锚点文本画笔 + + private Path linePath;//曲线路径 + private Path tablePath;//表格路径 + + private int mWidth, mHeight; + + private List dataList = new ArrayList<>(); + + private Point[] linePoints; + private int stepStart; + private int stepEnd; + private int stepSpace; + private int stepSpaceDefault = 10; + private int stepSpaceDP = stepSpaceDefault;//item宽度默认dp + private int topSpace, bottomSpace; + private int tablePadding; + private int tablePaddingDP = 20;//view四周padding默认dp + + private int maxValue, minValue; + private int rulerValueDefault = 10; + private int rulerValue = rulerValueDefault;//刻度单位跨度 + private int rulerValuePadding;//刻度单位与轴的间距 + private int rulerValuePaddingDP = 8;//刻度单位与轴的间距默认dp + private float heightPercent = 0.618f; + + private int lineColor = Color.parseColor("#398DEE");//曲线颜色 + private float lineWidthDP = 2f;//曲线宽度dp + + private int pointColor = Color.parseColor("#398DEE");//锚点颜色 + private float pointWidthDefault = 8f; + private float pointWidthDP = pointWidthDefault;//锚点宽度dp + + private int tableColor = Color.parseColor("#333333");//表格线颜色 + private float tableWidthDP = 0.5f;//表格线宽度dp + + private int rulerTextColor = tableColor;//表格标尺文本颜色 + private float rulerTextSizeSP = 10f;//表格标尺文本大小 + + private int pointTextColor = Color.parseColor("#333333");//锚点文本颜色 + private float pointTextSizeSP = 10f;//锚点文本大小 + + private boolean isShowTable = false; + private boolean isBezierLine = false; + private boolean isCubePoint = false; + private boolean isInitialized = false; + private boolean isPlayAnim = false; + + private ValueAnimator valueAnimator; + private float currentValue = 0f; + private boolean isAnimating = false; + + public LineChartView(Context context) { + this(context, null); + } + + public LineChartView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public LineChartView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + setupView(); + } + + private void setupView() { + linePaint = new Paint(); + linePaint.setAntiAlias(true);//抗锯齿 + linePaint.setStyle(Paint.Style.STROKE);//STROKE描边FILL填充 + linePaint.setColor(lineColor); + linePaint.setStrokeWidth(dip2px(lineWidthDP));//边框宽度 + + pointPaint = new Paint(); + pointPaint.setAntiAlias(true); + pointPaint.setStyle(Paint.Style.FILL); + pointPaint.setColor(pointColor); + pointPaint.setStrokeWidth(dip2px(pointWidthDP)); + + tablePaint = new Paint(); + tablePaint.setAntiAlias(true); + tablePaint.setStyle(Paint.Style.STROKE); + tablePaint.setColor(tableColor); + tablePaint.setStrokeWidth(dip2px(tableWidthDP)); + + textRulerPaint = new Paint(); + textRulerPaint.setAntiAlias(true); + textRulerPaint.setStyle(Paint.Style.FILL); + textRulerPaint.setTextAlign(Paint.Align.CENTER); + textRulerPaint.setColor(rulerTextColor);//文本颜色 + textRulerPaint.setTextSize(sp2px(rulerTextSizeSP));//字体大小 + + textPointPaint = new Paint(); + textPointPaint.setAntiAlias(true); + textPointPaint.setStyle(Paint.Style.FILL); + textPointPaint.setTextAlign(Paint.Align.CENTER); + textPointPaint.setColor(pointTextColor);//文本颜色 + textPointPaint.setTextSize(sp2px(pointTextSizeSP));//字体大小 + + linePath = new Path(); + tablePath = new Path(); + + resetParam(); + } + + private void initAnim() { + valueAnimator = ValueAnimator.ofFloat(0f, 1f).setDuration(dataList.size() * 150); + valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); + valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + currentValue = (float) animation.getAnimatedValue(); + postInvalidate(); + } + }); + valueAnimator.addListener(new AnimatorListenerAdapter() { + + @Override + public void onAnimationStart(Animator animation) { + super.onAnimationStart(animation); + currentValue = 0f; + isAnimating = true; + } + + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + currentValue = 1f; + isAnimating = false; + isPlayAnim = false; + } + }); + valueAnimator.setStartDelay(500); + } + + private void resetParam() { + linePath.reset(); + tablePath.reset(); + stepSpace = dip2px(stepSpaceDP); + tablePadding = dip2px(tablePaddingDP); + rulerValuePadding = dip2px(rulerValuePaddingDP); + stepStart = tablePadding * (isShowTable ? 2 : 1); + stepEnd = stepStart + stepSpace * (dataList.size() - 1); + topSpace = bottomSpace = tablePadding; + linePoints = new Point[dataList.size()]; + + initAnim(); + isInitialized = false; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int width = tablePadding + getTableEnd() + getPaddingLeft() + getPaddingRight();//计算自己的宽度 + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec);//父类期望的高度 + if (MeasureSpec.EXACTLY == heightMode) { + height = getPaddingTop() + getPaddingBottom() + height; + } + setMeasuredDimension(width, height);//设置自己的宽度和高度 + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + mWidth = w; + mHeight = h; + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + canvas.drawColor(Color.TRANSPARENT);//绘制背景颜色 + canvas.translate(0f, mHeight / 2f + (getViewDrawHeight() + topSpace + bottomSpace) / 2f);//设置画布中心点垂直居中 + + if (!isInitialized) { + setupLine(); + } + + if (isShowTable) { + drawTable(canvas);//绘制表格 + } + drawLine(canvas);//绘制曲线 + drawLinePoints(canvas);//绘制曲线上的点 + } + + private void drawText(Canvas canvas, Paint textPaint, String text, float x, float y) { + canvas.drawText(text, x, y, textPaint); + } + + /** + * 绘制标尺y轴文本 + * + * @param canvas + * @param text + * @param x + * @param y + */ + private void drawRulerYText(Canvas canvas, String text, float x, float y) { + textRulerPaint.setTextAlign(Paint.Align.RIGHT); + Paint.FontMetrics fontMetrics = textRulerPaint.getFontMetrics(); + float fontTotalHeight = fontMetrics.bottom - fontMetrics.top; + float offsetY = fontTotalHeight / 2 - fontMetrics.bottom; + float newY = y + offsetY; + float newX = x - rulerValuePadding; + double v = Double.parseDouble(text) / 100; + String s = String.valueOf(v); + drawText(canvas, textRulerPaint, s, newX, newY); + } + + /** + * 绘制标尺x轴文本 + * + * @param canvas + * @param text + * @param x + * @param y + */ + private void drawRulerXText(Canvas canvas, String text, float x, float y) { + textRulerPaint.setTextAlign(Paint.Align.CENTER); + Paint.FontMetrics fontMetrics = textRulerPaint.getFontMetrics(); + float fontTotalHeight = fontMetrics.bottom - fontMetrics.top; + float offsetY = fontTotalHeight / 2 - fontMetrics.bottom; + float newY = y + offsetY + rulerValuePadding; + drawText(canvas, textRulerPaint, text, x, newY); + } + + /** + * 绘制曲线上锚点文本 + * + * @param canvas + * @param text + * @param x + * @param y + */ + private void drawLinePointText(Canvas canvas, String text, float x, float y) { + textPointPaint.setTextAlign(Paint.Align.CENTER); + float newY = y - rulerValuePadding; + drawText(canvas, textPointPaint, text, x, newY); + } + + private int getTableStart() { + return isShowTable ? stepStart + tablePadding : stepStart; + } + + private int getTableEnd() { + return isShowTable ? stepEnd + tablePadding : stepEnd; + } + + /** + * 绘制背景表格 + * + * @param canvas + */ + private void drawTable(Canvas canvas) { + int tableEnd = getTableEnd(); + + int rulerCount = maxValue / rulerValue; + int rulerMaxCount = maxValue % rulerValue > 0 ? rulerCount + 1 : rulerCount; + int rulerMax = rulerValue * rulerMaxCount + rulerValueDefault; + + tablePath.moveTo(stepStart, -getValueHeight(rulerMax));//加上顶部的间隔 + tablePath.lineTo(stepStart, 0);//标尺y轴 + tablePath.lineTo(tableEnd, 0);//标尺x轴 + + int startValue = minValue - (minValue > 0 ? 0 : minValue % rulerValue); + int endValue = (maxValue + rulerValue); + + //标尺y轴连接线 + do { + int startHeight = -getValueHeight(startValue); + tablePath.moveTo(stepStart, startHeight); + tablePath.lineTo(tableEnd, startHeight); + //绘制y轴刻度单位 + drawRulerYText(canvas, String.valueOf(startValue), stepStart, startHeight); + startValue += rulerValue; + } while (startValue < endValue); + + if (rulerMaxCount == 0) { + + } + //只显示xy文字,不显示表格 +// canvas.drawPath(tablePath, tablePaint); + //绘制x轴刻度单位 + drawRulerXValue(canvas); + } + + /** + * 绘制标尺x轴上所有文本 + * + * @param canvas + */ + private void drawRulerXValue(Canvas canvas) { + if (linePoints == null) return; + for (int i = 0; i < linePoints.length; i++) { + Point point = linePoints[i]; + if (point == null) break; + drawRulerXText(canvas, String.valueOf(i + 1), linePoints[i].x, 0); + } + } + + /** + * 绘制曲线 + * + * @param canvas + */ + private void drawLine(Canvas canvas) { + if (isPlayAnim) { + Path dst = new Path(); + PathMeasure measure = new PathMeasure(linePath, false); + measure.getSegment(0, currentValue * measure.getLength(), dst, true); + canvas.drawPath(dst, linePaint); + } else { + canvas.drawPath(linePath, linePaint); + } + } + + /** + * 绘制曲线上的锚点 + * + * @param canvas + */ + private void drawLinePoints(Canvas canvas) { + if (linePoints == null) return; + + float pointWidth = dip2px(pointWidthDP) / 2; + int pointCount = linePoints.length; + if (isPlayAnim) { + pointCount = Math.round(currentValue * linePoints.length); + } + for (int i = 0; i < pointCount; i++) { + Point point = linePoints[i]; + if (point == null) break; + /*if (isCubePoint) { + canvas.drawPoint(point.x, point.y, pointPaint); + } else { + canvas.drawCircle(point.x, point.y, pointWidth, pointPaint); + }*/ + //绘制点的文本 + double v = Double.parseDouble(String.valueOf(dataList.get(i).getValue())); + drawLinePointText(canvas, String.valueOf(v / 100), point.x, point.y); + } + } + + /** + * 获取value值所占的view高度 + * + * @param value + * @return + */ + private int getValueHeight(int value) { + float valuePercent = Math.abs(value - minValue) * 100f / (Math.abs(maxValue - minValue) * 100f);//计算value所占百分比 + return (int) (getViewDrawHeight() * valuePercent + bottomSpace + 0.5f);//底部加上间隔 + } + + /** + * 获取绘制区域高度 + * + * @return + */ + private float getViewDrawHeight() { + return getMeasuredHeight() * heightPercent; + } + + /** + * 初始化曲线数据 + */ + private void setupLine() { + if (dataList.isEmpty()) return; + + int stepTemp = getTableStart(); + Point pre = new Point(); + pre.set(stepTemp, -getValueHeight(dataList.get(0).getValue()));//坐标系从0,0默认在第四象限绘制 + linePoints[0] = pre; + linePath.moveTo(pre.x, pre.y); + + if (dataList.size() == 1) { + isInitialized = true; + return; + } + + for (int i = 1; i < dataList.size(); i++) { + Data data = dataList.get(i); + Point next = new Point(); + next.set(stepTemp += stepSpace, -getValueHeight(data.getValue())); + + if (isBezierLine) { + int cW = pre.x + stepSpace / 2; + + Point p1 = new Point();//控制点1 + p1.set(cW, pre.y); + + Point p2 = new Point();//控制点2 + p2.set(cW, next.y); + + linePath.cubicTo(p1.x, p1.y, p2.x, p2.y, next.x, next.y);//创建三阶贝塞尔曲线 + } else { + linePath.lineTo(next.x, next.y); + } + + pre = next; + linePoints[i] = next; + } + + isInitialized = true; + } + + private int dip2px(float dipValue) { + final float scale = getResources().getDisplayMetrics().density; + return (int) (dipValue * scale + 0.5f); + } + + private int sp2px(float spValue) { + final float fontScale = getResources().getDisplayMetrics().scaledDensity; + return (int) (spValue * fontScale + 0.5f); + } + + private void refreshLayout() { + resetParam(); + requestLayout(); + postInvalidate(); + } + + /*-------------可操作方法---------------*/ + + /** + * 设置数据 + * + * @param dataList + */ + public void setData(List dataList) { + if (dataList == null) { + throw new RuntimeException("dataList cannot is null!"); + } + if (dataList.isEmpty()) return; + this.dataList.clear(); + this.dataList.addAll(dataList); + + maxValue = Collections.max(this.dataList, new Comparator() { + @Override + public int compare(Data o1, Data o2) { + return o1.getValue() - o2.getValue(); + } + }).getValue(); + + minValue = Collections.min(this.dataList, new Comparator() { + @Override + public int compare(Data o1, Data o2) { + return o1.getValue() - o2.getValue(); + } + }).getValue(); + + refreshLayout(); + } + + /** + * 设置是否显示标尺表格 + * + * @param showTable + */ + public void setShowTable(boolean showTable) { + isShowTable = showTable; + refreshLayout(); + } + + /** + * 设置是否是贝塞尔曲线 + * + * @param isBezier + */ + public void setBezierLine(boolean isBezier) { + isBezierLine = isBezier; + refreshLayout(); + } + + /** + * 设置锚点形状 + * + * @param isCube + */ + public void setCubePoint(boolean isCube) { + isCubePoint = isCube; + refreshLayout(); + } + + /** + * 设置标尺y轴间距 + * + * @param space + */ + public void setRulerYSpace(int space) { + if (space <= 0) { + space = rulerValueDefault; + } + this.rulerValue = space; + refreshLayout(); + } + + /** + * 设置曲线点的间距,标尺x轴间距 + * + * @param dp + */ + public void setStepSpace(int dp) { + if (dp < stepSpaceDefault) { + dp = stepSpaceDefault; + } + this.stepSpaceDP = dp; + refreshLayout(); + } + + /** + * 设置锚点尺寸 + * + * @param dp + */ + public void setPointWidth(float dp) { + if (dp <= 0) { + dp = pointWidthDefault; + } + this.pointWidthDP = dp; + refreshLayout(); + } + + /** + * 播放动画 + */ + public void playAnim() { + this.isPlayAnim = true; + if (isAnimating) return; + if (valueAnimator != null) { + valueAnimator.start(); + } + } + + public static class Data { + + int value; + + public Data(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/LineGraphicView.java b/app/src/main/java/com/yonsz/z1/view/LineGraphicView.java new file mode 100644 index 0000000..ddb033c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/LineGraphicView.java @@ -0,0 +1,237 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.content.res.Resources; +import android.view.View; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Paint.Style; +import android.graphics.Path; +import android.graphics.Point; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.view.WindowManager; + +import java.util.ArrayList; + +public class LineGraphicView extends View { + /** + * 公共部分 + */ + private static final int CIRCLE_SIZE = 10; + + private static enum Linestyle { + Line, Curve + } + + private Context mContext; + private Paint mPaint; + private Resources res; + private DisplayMetrics dm; + + /** + * data + */ + private Linestyle mStyle = Linestyle.Curve; + + private int canvasHeight; + private int canvasWidth; + private int bheight = 0; + private int blwidh; + private boolean isMeasure = true; + /** + * Y轴最大值 + */ + private int maxValue; + /** + * Y轴间距值 + */ + private int averageValue; + private int marginTop = 20; + private int marginBottom = 40; + + /** + * 曲线上总点数 + */ + private Point[] mPoints; + /** + * 纵坐标值 + */ + private ArrayList yRawData; + /** + * 横坐标值 + */ + private ArrayList xRawDatas; + private ArrayList xList = new ArrayList();// 记录每个x的值 + private int spacingHeight; + + public LineGraphicView(Context context) { + this(context, null); + } + + public LineGraphicView(Context context, AttributeSet attrs) { + super(context, attrs); + this.mContext = context; + initView(); + } + + private void initView() { + this.res = mContext.getResources(); + this.mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + dm = new DisplayMetrics(); + WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); + wm.getDefaultDisplay().getMetrics(dm); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + if (isMeasure) { + this.canvasHeight = getHeight(); + this.canvasWidth = getWidth(); + if (bheight == 0) + bheight = (int) (canvasHeight - marginBottom); + blwidh = dip2px(30); + isMeasure = false; + } + } + + @Override + protected void onDraw(Canvas canvas) { + mPaint.setColor(0xff333333); + + drawAllXLine(canvas); + // 画直线(纵向) + drawAllYLine(canvas); + // 点的操作设置 + mPoints = getPoints(); + + mPaint.setColor(0xff398DEE); + mPaint.setStrokeWidth(dip2px(2.5f)); + mPaint.setStyle(Style.STROKE); + if (mStyle == Linestyle.Curve) { + drawScrollLine(canvas); + } else { + drawLine(canvas); + } + + mPaint.setStyle(Style.FILL); + for (int i = 0; i < mPoints.length; i++) { + canvas.drawCircle(mPoints[i].x, mPoints[i].y, CIRCLE_SIZE / 2, mPaint); + } + } + + /** + * 画所有横向表格,包括X轴 + */ + private void drawAllXLine(Canvas canvas) { + for (int i = 0; i < spacingHeight + 1; i++) { + canvas.drawLine(blwidh, bheight - (bheight / spacingHeight) * i + marginTop, (canvasWidth - blwidh), + bheight - (bheight / spacingHeight) * i + marginTop, mPaint);// Y坐标 + drawText(String.valueOf(averageValue * i), blwidh / 2, bheight - (bheight / spacingHeight) * i + marginTop, + canvas); + } + } + + /** + * 画所有纵向表格,包括Y轴 + */ + private void drawAllYLine(Canvas canvas) { + for (int i = 0; i < yRawData.size(); i++) { + xList.add(blwidh + (canvasWidth - blwidh) / yRawData.size() * i); + canvas.drawLine(blwidh + (canvasWidth - blwidh) / yRawData.size() * i, marginTop, blwidh + + (canvasWidth - blwidh) / yRawData.size() * i, bheight + marginTop, mPaint); + drawText(xRawDatas.get(i), blwidh + (canvasWidth - blwidh) / yRawData.size() * i, bheight + dip2px(26), + canvas);// X坐标 + } + } + + private void drawScrollLine(Canvas canvas) { + Point startp = new Point(); + Point endp = new Point(); + for (int i = 0; i < mPoints.length - 1; i++) { + startp = mPoints[i]; + endp = mPoints[i + 1]; + int wt = (startp.x + endp.x) / 2; + Point p3 = new Point(); + Point p4 = new Point(); + p3.y = startp.y; + p3.x = wt; + p4.y = endp.y; + p4.x = wt; + + Path path = new Path(); + path.moveTo(startp.x, startp.y); + path.cubicTo(p3.x, p3.y, p4.x, p4.y, endp.x, endp.y); + canvas.drawPath(path, mPaint); + } + } + + private void drawLine(Canvas canvas) { + Point startp = new Point(); + Point endp = new Point(); + for (int i = 0; i < mPoints.length - 1; i++) { + startp = mPoints[i]; + endp = mPoints[i + 1]; + canvas.drawLine(startp.x, startp.y, endp.x, endp.y, mPaint); + } + } + + private void drawText(String text, int x, int y, Canvas canvas) { + Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); + p.setTextSize(dip2px(12)); + p.setColor(0xff333333); + p.setTextAlign(Paint.Align.LEFT); + canvas.drawText(text, x, y, p); + } + + private Point[] getPoints() { + Point[] points = new Point[yRawData.size()]; + for (int i = 0; i < yRawData.size(); i++) { + int ph = bheight - (int) (bheight * (yRawData.get(i) / maxValue)); + + points[i] = new Point(xList.get(i), ph + marginTop); + } + return points; + } + + public void setData(ArrayList yRawData, ArrayList xRawData, int maxValue, int averageValue) { + this.maxValue = maxValue; + this.averageValue = averageValue; + this.mPoints = new Point[yRawData.size()]; + this.xRawDatas = xRawData; + this.yRawData = yRawData; + this.spacingHeight = maxValue / averageValue; + } + + public void setTotalvalue(int maxValue) { + this.maxValue = maxValue; + } + + public void setPjvalue(int averageValue) { + this.averageValue = averageValue; + } + + public void setMargint(int marginTop) { + this.marginTop = marginTop; + } + + public void setMarginb(int marginBottom) { + this.marginBottom = marginBottom; + } + + public void setMstyle(Linestyle mStyle) { + this.mStyle = mStyle; + } + + public void setBheight(int bheight) { + this.bheight = bheight; + } + + /** + * 根据手机的分辨率从 dp 的单位 转成为 px(像素) + */ + private int dip2px(float dpValue) { + return (int) (dpValue * dm.density + 0.5f); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/view/LoadMoreRecyclerView.java b/app/src/main/java/com/yonsz/z1/view/LoadMoreRecyclerView.java new file mode 100644 index 0000000..dd97c4c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/LoadMoreRecyclerView.java @@ -0,0 +1,54 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; +import android.util.Log; + +import com.yonsz.z1.listener.OnRecyclerLoadDataListener; + +/** + * Created by Administrator on 2017/1/15 0015. + */ + +public class LoadMoreRecyclerView extends RecyclerView { + private OnRecyclerLoadDataListener mListener; + public LoadMoreRecyclerView(Context context) { + super(context); + initScroll(); + } + public LoadMoreRecyclerView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + initScroll(); + } + public LoadMoreRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initScroll(); + } + + private void initScroll(){ + setOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + + super.onScrollStateChanged(recyclerView, newState); + RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); + if (layoutManager instanceof LinearLayoutManager) { + LinearLayoutManager linearManager = (LinearLayoutManager) layoutManager; + int lastItemPosition = linearManager.findLastVisibleItemPosition(); + int firstItemPosition = linearManager.findFirstVisibleItemPosition(); + if (lastItemPosition == recyclerView.getAdapter().getItemCount()-1 && mListener != null){ + mListener.onLoadMore(); + } + Log.i("onScrollStateChanged", "onScrollStateChanged: " + lastItemPosition + " " + firstItemPosition); + } + } + }); + } + + public void setOnLoadDataListener(OnRecyclerLoadDataListener mListener) { + this.mListener = mListener; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/MainViewPager.java b/app/src/main/java/com/yonsz/z1/view/MainViewPager.java new file mode 100644 index 0000000..b07f980 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/MainViewPager.java @@ -0,0 +1,57 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.view.MotionEvent; + +/** + * MainActivity的ViewPager适配器 + * Created by xiesuichao on 2016/11/11. + */ +public class MainViewPager extends ViewPager { + + private boolean isCanScroll = false; + + + public MainViewPager(Context context) { + super(context); + } + + public MainViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (isCanScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (isCanScroll) { + return super.onTouchEvent(ev); + } else { + return false; + } + } + + public void setScanScroll(boolean isCanScroll) { + this.isCanScroll = isCanScroll; + } + + @Override + public void setCurrentItem(int item) { + super.setCurrentItem(item); + } + + @Override + public void setCurrentItem(int item, boolean smoothScroll) { + super.setCurrentItem(item, smoothScroll); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/MySwipeRefreshLayout.java b/app/src/main/java/com/yonsz/z1/view/MySwipeRefreshLayout.java new file mode 100644 index 0000000..d8d3d23 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/MySwipeRefreshLayout.java @@ -0,0 +1,60 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.support.v4.widget.SwipeRefreshLayout; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.ViewConfiguration; + +/** + * Created by Administrator on 2018/8/6. + */ + +public class MySwipeRefreshLayout extends SwipeRefreshLayout { + private float mInitialDownY; + private int mTouchSlop; + + public MySwipeRefreshLayout(Context context) { + this(context, null); + } + + public MySwipeRefreshLayout(Context context, AttributeSet attrs) { + super(context, attrs); + mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + + final int action = ev.getAction(); + switch (action) { + case MotionEvent.ACTION_DOWN: + mInitialDownY = ev.getY(); + break; + case MotionEvent.ACTION_MOVE: + final float yDiff = ev.getY() - mInitialDownY; + if (yDiff < mTouchSlop) { + return false; + } + } + return super.onInterceptTouchEvent(ev); + } + + + /** + * @return 返回灵敏度数值 + */ + public int getTouchSlop() { + return mTouchSlop; + } + + /** + * 设置下拉灵敏度 + * + * @param mTouchSlop dip值 + */ + public void setTouchSlop(int mTouchSlop) { + this.mTouchSlop = mTouchSlop; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/view/MyTextView.java b/app/src/main/java/com/yonsz/z1/view/MyTextView.java new file mode 100644 index 0000000..f5cd67e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/MyTextView.java @@ -0,0 +1,30 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.util.AttributeSet; + +import com.yonsz.z1.utils.TypefaceUtil; + +/** + * Created by Administrator on 2020/9/3. + */ + +public class MyTextView extends android.support.v7.widget.AppCompatTextView { + + public MyTextView(Context context) { + super(context); + setTypeface(TypefaceUtil.getTypeFace(context)); + } + + public MyTextView(Context context, AttributeSet attrs) { + super(context, attrs); + setTypeface(TypefaceUtil.getTypeFace(context)); + } + + + public MyTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setTypeface(TypefaceUtil.getTypeFace(context)); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/view/NewTextView.java b/app/src/main/java/com/yonsz/z1/view/NewTextView.java new file mode 100644 index 0000000..95c14e2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/NewTextView.java @@ -0,0 +1,30 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.util.AttributeSet; + +/** + * Created by Administrator on 2018/12/6. + */ + +public class NewTextView extends android.support.v7.widget.AppCompatEditText { + public NewTextView(Context context) { + super(context); + // TODO Auto-generated constructor stub + } + + public NewTextView(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + public NewTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + // TODO Auto-generated constructor stub + } + + @Override + protected boolean getDefaultEditable() {//禁止EditText被编辑 + return false; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/PlugTypePopupWindow.java b/app/src/main/java/com/yonsz/z1/view/PlugTypePopupWindow.java new file mode 100644 index 0000000..2f15ce9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/PlugTypePopupWindow.java @@ -0,0 +1,169 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.PopupWindow; + +import com.yonsz.z1.R; + +public class PlugTypePopupWindow extends PopupWindow implements View.OnClickListener { + + private Context context; + private View contentView; + + private String position = "0"; + private OnCompleteListener onCompleteListener; + + private ImageView chazuoIv, taidengIv, chudianIv, qiangbiIv, reshuihuIv, qunuanqiIv, dwxIv; + private ImageView chazuoMark, taidengMark, chudianMark, qiangbiMark, reshuihuMark, qunuanqiMark, dwxMark; + + public PlugTypePopupWindow(Context context, String position, OnCompleteListener onCompleteListener) { + super(context); + this.context = context; + this.onCompleteListener = onCompleteListener; + this.position = position; + init(); + } + + private void init() { + contentView = LayoutInflater.from(context).inflate(R.layout.pop_plug_type_choose, null); + contentView.findViewById(R.id.tv_position_sure).setOnClickListener(this); + contentView.findViewById(R.id.tv_position_cancel).setOnClickListener(this); + + chazuoIv = (ImageView) contentView.findViewById(R.id.iv_nothing); + taidengIv = (ImageView) contentView.findViewById(R.id.iv_taideng); + chudianIv = (ImageView) contentView.findViewById(R.id.iv_chudian); + reshuihuIv = (ImageView) contentView.findViewById(R.id.iv_reshuihu); + qunuanqiIv = (ImageView) contentView.findViewById(R.id.iv_qunuanqi); + dwxIv = (ImageView) contentView.findViewById(R.id.iv_dwx); + + chazuoMark = (ImageView) contentView.findViewById(R.id.iv_nothing_mark); + taidengMark = (ImageView) contentView.findViewById(R.id.iv_taideng_mark); + chudianMark = (ImageView) contentView.findViewById(R.id.iv_chudian_mark); + reshuihuMark = (ImageView) contentView.findViewById(R.id.iv_reshuihu_mark); + qunuanqiMark = (ImageView) contentView.findViewById(R.id.iv_qunuanqi_mark); + dwxMark = (ImageView) contentView.findViewById(R.id.iv_dwx_mark); + + chazuoIv.setOnClickListener(this); + taidengIv.setOnClickListener(this); + chudianIv.setOnClickListener(this); + reshuihuIv.setOnClickListener(this); + qunuanqiIv.setOnClickListener(this); + dwxIv.setOnClickListener(this); + + switch (position) { + case "0": + chazuoMark.setVisibility(View.VISIBLE); + break; + case "1": + taidengMark.setVisibility(View.VISIBLE); + break; + case "2": + chudianMark.setVisibility(View.VISIBLE); + break; + case "3": + chazuoMark.setVisibility(View.VISIBLE); + break; + case "4": + reshuihuMark.setVisibility(View.VISIBLE); + break; + case "5": + qunuanqiMark.setVisibility(View.VISIBLE); + break; + case "6": + dwxMark.setVisibility(View.VISIBLE); + break; + default: + chazuoMark.setVisibility(View.VISIBLE); + break; + } + setContentView(contentView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + // 设置可触 + this.setFocusable(true); + ColorDrawable dw = new ColorDrawable(0x80000000); + this.setBackgroundDrawable(dw); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_position_sure: //完成 + if (onCompleteListener != null) { + onCompleteListener.onComplete(position); + } + dismiss(); + break; + case R.id.tv_position_cancel: //重置 + dismiss(); + break; + case R.id.iv_nothing: + position = "0"; + chazuoMark.setVisibility(View.VISIBLE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + break; + case R.id.iv_taideng: + position = "1"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.VISIBLE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + break; + case R.id.iv_chudian: + position = "2"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.VISIBLE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + break; + case R.id.iv_reshuihu: + position = "4"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.VISIBLE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.GONE); + break; + case R.id.iv_qunuanqi: + position = "5"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.VISIBLE); + dwxMark.setVisibility(View.GONE); + break; + case R.id.iv_dwx: + position = "6"; + chazuoMark.setVisibility(View.GONE); + taidengMark.setVisibility(View.GONE); + chudianMark.setVisibility(View.GONE); + reshuihuMark.setVisibility(View.GONE); + qunuanqiMark.setVisibility(View.GONE); + dwxMark.setVisibility(View.VISIBLE); + break; + } + } + + public void setOnCompleteListener(OnCompleteListener onCompleteListener) { + this.onCompleteListener = onCompleteListener; + } + + public interface OnCompleteListener { + void onComplete(String time); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/PositionPopupWindow.java b/app/src/main/java/com/yonsz/z1/view/PositionPopupWindow.java new file mode 100644 index 0000000..ef06ca7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/PositionPopupWindow.java @@ -0,0 +1,305 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.PopupWindow; + +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.List; + +public class PositionPopupWindow extends PopupWindow implements CompoundButton.OnCheckedChangeListener, View.OnClickListener { + + private Context context; + private View contentView; + private CheckBox[] timeCheckBox = new CheckBox[14]; + private CheckBox[] typeCheckBox = new CheckBox[9]; + // private int[] timeIds; + // private int[] typeIds; + private List positionIds = new ArrayList<>(); + private List typeIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + + private String position = "0"; + private List condition = new ArrayList<>(); + + private OnCompleteListener onCompleteListener; + + public PositionPopupWindow(Context context, String position, OnCompleteListener onCompleteListener) { + super(context); + this.context = context; + this.onCompleteListener = onCompleteListener; + this.position = position; + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + + /*typeIds.add(R.id.cb_type0); + typeIds.add(R.id.cb_type1); + typeIds.add(R.id.cb_type2); + typeIds.add(R.id.cb_type3); + typeIds.add(R.id.cb_type4); + typeIds.add(R.id.cb_type5); + typeIds.add(R.id.cb_type6); + typeIds.add(R.id.cb_type7); + typeIds.add(R.id.cb_type8);*/ + init(); + } + + private void init() { + contentView = LayoutInflater.from(context).inflate(R.layout.pop_position_choose, null); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) contentView.findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(this); + } + /*for (int i = 0; i < typeIds.size(); i++) { + typeCheckBox[i] = (CheckBox) contentView.findViewById(typeIds.get(i)); + typeCheckBox[i].setOnCheckedChangeListener(this); + }*/ + contentView.findViewById(R.id.tv_position_sure).setOnClickListener(this); + contentView.findViewById(R.id.tv_position_cancel).setOnClickListener(this); + + switch (position) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) contentView.findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + + setContentView(contentView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + // 设置可触 + this.setFocusable(true); + ColorDrawable dw = new ColorDrawable(0x80000000); + this.setBackgroundDrawable(dw); + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + // time = "0"; + // lastTimeCheckBox = null; + // if (id == lastTimeCheckBox.getId()) + // buttonView.setChecked(true); + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + //如果是类型筛选 + if (typeIds.contains(id)) { + if (isChecked) { + if (id == typeIds.get(0)) { + //全部 + for (int i = 1; i < typeCheckBox.length; i++) { + typeCheckBox[i].setChecked(false); + } + } else { + typeCheckBox[0].setChecked(false); + condition.remove("0"); + } + } else { + // if (condition.size() < 2){ + // buttonView.setChecked(true); + // } + boolean isForceCheck = true; + for (int i = 0; i < typeCheckBox.length; i++) { + if (typeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + switch (id) { + case R.id.cb_position0: + if (isChecked) + position = "0"; + break; + case R.id.cb_position1: + if (isChecked) + position = "1"; + break; + case R.id.cb_position2: + if (isChecked) + position = "2"; + break; + case R.id.cb_position3: + if (isChecked) + position = "3"; + break; + case R.id.cb_position4: + if (isChecked) + position = "4"; + break; + case R.id.cb_position5: + if (isChecked) + position = "5"; + break; + case R.id.cb_position6: + if (isChecked) + position = "6"; + break; + case R.id.cb_position7: + if (isChecked) + position = "7"; + break; + case R.id.cb_position8: + if (isChecked) + position = "8"; + break; + case R.id.cb_position9: + if (isChecked) + position = "9"; + break; + case R.id.cb_position10: + if (isChecked) + position = "10"; + break; + case R.id.cb_position11: + if (isChecked) + position = "11"; + break; + case R.id.cb_position12: + if (isChecked) + position = "12"; + break; + case R.id.cb_position13: + if (isChecked) + position = "13"; + break; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_position_sure: //完成 + if (onCompleteListener != null) { + onCompleteListener.onComplete(position, condition); + } + dismiss(); + break; + case R.id.tv_position_cancel: //重置 + dismiss(); + /*timeCheckBox[0].setChecked(true); + typeCheckBox[0].setChecked(true); + lastTimeCheckBox = timeCheckBox[0];*/ + // if (lastTimeCheckBox != null){ + // lastTimeCheckBox.setChecked(false); + // } + // for (int i = 0; i < typeCheckBox.length; i++) { + // typeCheckBox[i].setChecked(false); + // } + break; + } + } + + public void setOnCompleteListener(OnCompleteListener onCompleteListener) { + this.onCompleteListener = onCompleteListener; + } + + public interface OnCompleteListener { + void onComplete(String time, List conditionList); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/PrivacyPopupWindow.java b/app/src/main/java/com/yonsz/z1/view/PrivacyPopupWindow.java new file mode 100644 index 0000000..4f4ec45 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/PrivacyPopupWindow.java @@ -0,0 +1,129 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.PopupWindow; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.utils.AppIdUtil; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; + +public class PrivacyPopupWindow extends PopupWindow implements View.OnClickListener { + + private Context context; + private View contentView; + private OnCompleteListener onCompleteListener; + + public PrivacyPopupWindow(Context context, OnCompleteListener onCompleteListener) { + super(context); + this.context = context; + this.onCompleteListener = onCompleteListener; + init(); + } + + private void init() { + contentView = LayoutInflater.from(context).inflate(R.layout.pop_privacy, null); + contentView.findViewById(R.id.tv_position_sure).setOnClickListener(this); + contentView.findViewById(R.id.tv_position_cancel).setOnClickListener(this); + contentView.findViewById(R.id.tv_privacy).setOnClickListener(this); + TextView privacyTv = contentView.findViewById(R.id.tv_content); + setContentView(contentView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + // 设置可触 + this.setFocusable(true); + ColorDrawable dw = new ColorDrawable(0x80000000); + this.setBackgroundDrawable(dw); + + if (AppIdUtil.isChuangWei()) { + privacyTv.setText(initAssets("privacycw.txt")); + } else if (AppIdUtil.isYagene()) { + privacyTv.setText(initAssets("privacyyj.txt")); + } else { + privacyTv.setText(initAssets("privacyas.txt")); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_position_sure: //完成 + if (onCompleteListener != null) { + onCompleteListener.onComplete(); + } + dismiss(); + break; + case R.id.tv_position_cancel: + if (onCompleteListener != null) { + onCompleteListener.onFinish(); + } + dismiss(); + break; + case R.id.tv_privacy: + dismiss(); + if (onCompleteListener != null) { + onCompleteListener.onPrivacy(); + } + break; + } + } + + public void setOnCompleteListener(OnCompleteListener onCompleteListener) { + this.onCompleteListener = onCompleteListener; + } + + public interface OnCompleteListener { + void onComplete(); + + void onFinish(); + + void onPrivacy(); + } + + /** + * 从assets下的txt文件中读取数据 + */ + + public String initAssets(String fileName) { + String str = null; + try { + InputStream inputStream = context.getAssets().open(fileName); + str = getString(inputStream); + } catch (IOException e1) { + e1.printStackTrace(); + } + return str; + } + + public static String getString(InputStream inputStream) { + InputStreamReader inputStreamReader = null; + try { + inputStreamReader = new InputStreamReader(inputStream, "UTF-8"); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } + BufferedReader reader = new BufferedReader(inputStreamReader); + StringBuffer sb = new StringBuffer(""); + String line; + try { + while ((line = reader.readLine()) != null) { + sb.append(line); + sb.append("\n"); + } + + } catch (IOException e) { + e.printStackTrace(); + } + return sb.toString(); + + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/PullToRefreshLayout.java b/app/src/main/java/com/yonsz/z1/view/PullToRefreshLayout.java new file mode 100644 index 0000000..600792e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/PullToRefreshLayout.java @@ -0,0 +1,486 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.os.Handler; +import android.os.Message; +import android.os.SystemClock; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; + +import java.util.Timer; +import java.util.TimerTask; + +/** + * Created by Administrator on 2016/9/21. + */ +public class PullToRefreshLayout extends RelativeLayout { + + public boolean refreshResult = false; + public boolean loadResult = false; + private final int REFRESH = 100; + private final int LOAD = 101; + private boolean pullDownAvailable = true; + private boolean pullUpAvailable = true; + + private boolean isFirstLayout = true; + private View refreshView; + private View pullableView; + private ImageView pullRefreshIv; + private ImageView refreshingIv; + private TextView refreshStateTv; + private ImageView refreshStateIv; + private TextView loadStateTv; + private ImageView pullLoadIv; + private ImageView loadingIv; + private ImageView loadStateIv; + private float refreshDist = 200; + private float pullDownY = 0; + private float pullUpY = 0; + private boolean canPullDown = true; + private boolean canPullUp = false; + private float downY; + private float lastY; + private int mEvents; + // 初始状态 + public static final int INIT = 0; + // 释放刷新 + public static final int RELEASE_TO_REFRESH = 1; + // 正在刷新 + public static final int REFRESHING = 2; + // 释放加载 + public static final int RELEASE_TO_LOAD = 3; + // 正在加载 + public static final int LOADING = 4; + // 操作完毕 + public static final int DONE = 5; + // 当前状态 + private int state = INIT; + private float radio = 2; + private boolean isTouch = true; + private Animation reverseAnim180; + private Animation rotateAnim360; + // 刷新成功 + public static final int SUCCEED = 0; + // 刷新失败 + public static final int FAIL = 1; + private float MOVE_SPEED; + private OnRefreshListener mListener; + private Timer timer; + private View loadView; + private int loadDist; + + private Handler handler1 = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case REFRESH: + refreshFinish(refreshResult); + break; + + case LOAD: + loadFinish(loadResult); + break; + } + } + }; + + public PullToRefreshLayout(Context context) { + super(context); + initAnim(context); + } + + public PullToRefreshLayout(Context context, AttributeSet attrs) { + super(context, attrs); + initAnim(context); + } + + public PullToRefreshLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initAnim(context); + } + + public interface OnRefreshListener { + void onRefresh(); + + void onLoad(); + } + + public void setOnRefreshListener(OnRefreshListener listener) { + this.mListener = listener; + } + + public void setCanPullDown(boolean pullDownState) { + if (pullDownState) { + pullDownAvailable = true; + } else { + pullDownAvailable = false; + } + } + + public void setCanPullUp(boolean pullUpState) { + if (pullUpState) { + pullUpAvailable = true; + } else { + pullUpAvailable = false; + } + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + if (isFirstLayout) { + refreshView = getChildAt(0); + pullableView = getChildAt(1); + loadView = getChildAt(2); + initViews(); + isFirstLayout = false; + refreshDist = ((ViewGroup) refreshView).getChildAt(0).getMeasuredHeight(); + loadDist = ((ViewGroup) loadView).getChildAt(0).getMeasuredHeight(); + } + refreshView.layout(0, + (int) (pullDownY - pullUpY) - refreshView.getMeasuredHeight(), + refreshView.getMeasuredWidth(), + (int) (pullDownY - pullUpY)); + pullableView.layout(0, + (int) (pullDownY - pullUpY), + pullableView.getMeasuredWidth(), + pullableView.getMeasuredHeight() + (int) (pullDownY - pullUpY)); + loadView.layout(0, + pullableView.getMeasuredHeight() + (int) (pullDownY - pullUpY), + loadView.getMeasuredWidth(), + loadView.getMeasuredHeight() + pullableView.getMeasuredHeight() + (int) (pullDownY - pullUpY)); + + } + + private void initAnim(Context context) { + reverseAnim180 = AnimationUtils.loadAnimation(context, R.anim.rotate180_anim); + rotateAnim360 = AnimationUtils.loadAnimation(context, R.anim.rotate3601_anim); + } + + private void initViews() { + pullRefreshIv = (ImageView) refreshView.findViewById(R.id.iv_pull_refresh); + refreshingIv = (ImageView) refreshView.findViewById(R.id.iv_refreshing); + refreshStateTv = (TextView) refreshView.findViewById(R.id.tv_refresh_state); + refreshStateIv = (ImageView) refreshView.findViewById(R.id.iv_refresh_state); + + loadStateTv = (TextView) loadView.findViewById(R.id.tv_load_state); + pullLoadIv = (ImageView) loadView.findViewById(R.id.iv_pull_load); + loadingIv = (ImageView) loadView.findViewById(R.id.iv_loading); + loadStateIv = (ImageView) loadView.findViewById(R.id.iv_load_state); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + switch (ev.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + downY = ev.getY(); + lastY = downY; + mEvents = 0; + canPullDown = true; + canPullUp = false; + break; + + case MotionEvent.ACTION_POINTER_DOWN: + case MotionEvent.ACTION_POINTER_UP: + mEvents = -1; + break; + + case MotionEvent.ACTION_MOVE: + hanldeMoveEvent(ev); + break; + + case MotionEvent.ACTION_UP: + if (pullDownY > refreshDist || pullUpY > loadDist) { + isTouch = true; + } + if (state == RELEASE_TO_REFRESH) { + changeState(REFRESHING); + if (mListener != null) { + mListener.onRefresh(); + + } + } else if (state == RELEASE_TO_LOAD) { + changeState(LOADING); + if (mListener != null) { + mListener.onLoad(); + + } + } + + loopHide(); + break; + } + + super.dispatchTouchEvent(ev); + return true; + } + + private void hanldeMoveEvent(MotionEvent ev) { + if (mEvents == 0) { + if (pullDownAvailable && ((Pullable) pullableView).canPullDown() && canPullDown && state != LOADING) { + pullDownY = pullDownY + (ev.getY() - lastY) / radio; + if (pullDownY < 10) { + pullDownY = 0; + canPullDown = false; + } + if (pullDownY > getMeasuredHeight()) { + pullDownY = getMeasuredHeight(); + } + if (state == REFRESHING) { + isTouch = false; + canPullUp = false; + } + } else if (pullUpAvailable && ((Pullable) pullableView).canPullUp() && canPullUp && state != REFRESHING) { + pullUpY = pullUpY + (lastY - ev.getY()) / radio; + if (pullUpY < 0) { + pullUpY = 0; + canPullUp = false; + } + if (pullUpY > getMeasuredHeight()) { + pullUpY = getMeasuredHeight(); + } + if (state == LOADING) { + isTouch = false; + canPullDown = false; + } + } else { + canPullDown = true; + canPullUp = false; + } + } else { + mEvents = 0; + } + lastY = ev.getY(); + // 根据下拉距离改变比例 + radio = (float) (2 + 2 * Math.tan(Math.PI / 2 / getMeasuredHeight() + * (pullDownY + pullUpY))); + requestLayout(); + + if (pullDownY < refreshDist && state == RELEASE_TO_REFRESH) { + changeState(INIT); + } + if (pullDownY >= refreshDist && state == INIT) { + changeState(RELEASE_TO_REFRESH); + } + if (pullUpY < loadDist && state == RELEASE_TO_LOAD) { + changeState(INIT); + } + if (pullUpY >= loadDist && state == INIT) { + changeState(RELEASE_TO_LOAD); + } + if (pullDownY + pullUpY > 8) { + ev.setAction(MotionEvent.ACTION_CANCEL); + } + } + + private void changeState(int to) { + state = to; + switch (state) { + case INIT: + refreshStateIv.setVisibility(GONE); + pullRefreshIv.clearAnimation(); + pullRefreshIv.setVisibility(VISIBLE); + refreshStateTv.setText("下拉刷新"); + + loadStateIv.setVisibility(GONE); + loadingIv.setVisibility(GONE); + pullLoadIv.clearAnimation(); + pullLoadIv.setVisibility(VISIBLE); + loadStateTv.setText("上拉加载更多"); + break; + + case RELEASE_TO_REFRESH: + refreshStateTv.setText("释放立即刷新"); + pullRefreshIv.startAnimation(reverseAnim180); + break; + + case REFRESHING: + refreshStateTv.setText("正在刷新"); + pullRefreshIv.clearAnimation(); + pullRefreshIv.setVisibility(GONE); + refreshingIv.setVisibility(VISIBLE); + refreshingIv.startAnimation(rotateAnim360); + + new Thread() { + @Override + public void run() { + SystemClock.sleep(500); + if (refreshResult) { + handler1.sendEmptyMessage(REFRESH); + } else { + SystemClock.sleep(500); + if (refreshResult) { + handler1.sendEmptyMessage(REFRESH); + } else { + SystemClock.sleep(500); + handler1.sendEmptyMessage(REFRESH); + } + } + + } + }.start(); + + break; + + case RELEASE_TO_LOAD: + pullLoadIv.startAnimation(reverseAnim180); + loadStateTv.setText("释放立即加载"); + break; + + case LOADING: + pullLoadIv.clearAnimation(); + pullLoadIv.setVisibility(GONE); + loadingIv.setVisibility(VISIBLE); + loadingIv.startAnimation(rotateAnim360); + loadStateTv.setText("正在加载"); + + new Thread() { + @Override + public void run() { + SystemClock.sleep(500); + if (loadResult) { + handler1.sendEmptyMessage(LOAD); + } else { + SystemClock.sleep(500); + if (loadResult) { + handler1.sendEmptyMessage(LOAD); + } else { + SystemClock.sleep(500); + handler1.sendEmptyMessage(LOAD); + } + } + + } + }.start(); + + break; + + case DONE: + + break; + + } + } + + public void refreshFinish(boolean refreshResult) { + refreshingIv.clearAnimation(); + refreshingIv.setVisibility(GONE); + + if (refreshResult) { + refreshStateTv.setText("刷新成功"); + refreshStateIv.setVisibility(VISIBLE); + refreshStateIv.setImageResource(R.drawable.icon_check_n_3x); + } else { + refreshStateTv.setText("刷新成功"); + refreshStateIv.setVisibility(VISIBLE); + refreshStateIv.setImageResource(R.drawable.icon_check_n_3x); + /*refreshStateTv.setText("刷新失败"); + refreshStateIv.setVisibility(GONE); + refreshStateIv.setImageResource(R.drawable.load_failed);*/ + } + + new Handler() { + @Override + public void handleMessage(Message msg) { + changeState(DONE); + loopHide(); + } + }.sendEmptyMessageDelayed(0, 1000); + + } + + public void loadFinish(boolean loadResult) { + pullLoadIv.setVisibility(GONE); + loadingIv.clearAnimation(); + loadingIv.setVisibility(GONE); + if (loadResult) { + loadStateIv.setImageResource(R.drawable.load_succeed); + loadStateTv.setText("加载成功"); + } else { + loadStateIv.setImageResource(R.drawable.load_succeed); + loadStateTv.setText("加载成功"); + /* loadStateIv.setImageResource(R.drawable.load_failed); + loadStateTv.setText("加载失败");*/ + } + + new Handler() { + public void handleMessage(Message msg) { + changeState(DONE); + loopHide(); + } + }.sendEmptyMessageDelayed(0, 1000); + } + + Handler handler = new Handler() { + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case 1: + hide(); + break; + } + } + }; + + private void loopHide() { + if (timer != null) { + timer.cancel(); + } + timer = new Timer(); + timer.schedule(new MyTask(), 0, 5); + } + + private class MyTask extends TimerTask { + @Override + public void run() { + handler.obtainMessage(1).sendToTarget(); + } + } + + private void hide() { + float MOVE_SPEED = (float) (8 + 5 * Math.tan(Math.PI / 2 / getMeasuredHeight() * (pullDownY + pullUpY))); + if (isTouch) { + if (state == REFRESHING && pullDownY <= refreshDist) { + pullDownY = refreshDist; + } else if (state == LOADING && pullUpY <= loadDist) { + pullUpY = loadDist; + } + } + if (pullDownY > 0) { + pullDownY -= MOVE_SPEED; + } + if (pullDownY < 0) { + pullDownY = 0; + timer.cancel(); + if (state != REFRESHING) { + changeState(INIT); + } + } + if (pullUpY > 0) { + pullUpY -= MOVE_SPEED; + } + if (pullUpY < 0) { + pullUpY = 0; + timer.cancel(); + if (state != LOADING) { + changeState(INIT); + } + } + if (pullUpY == 0 && pullDownY == 0) { + timer.cancel(); + } + requestLayout(); + + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/view/Pullable.java b/app/src/main/java/com/yonsz/z1/view/Pullable.java new file mode 100644 index 0000000..8ad73ff --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/Pullable.java @@ -0,0 +1,11 @@ +package com.yonsz.z1.view; + +/** + * Created by Administrator on 2016/9/21. + */ +public interface Pullable { + + boolean canPullDown(); + + boolean canPullUp(); +} diff --git a/app/src/main/java/com/yonsz/z1/view/ResizableImageView.java b/app/src/main/java/com/yonsz/z1/view/ResizableImageView.java new file mode 100644 index 0000000..1a4f07d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/ResizableImageView.java @@ -0,0 +1,38 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.widget.ImageView; + +/** + * Created by Administrator on 2019/1/8. + */ + +public class ResizableImageView extends ImageView { + + public ResizableImageView(Context context) { + super(context); + } + + public ResizableImageView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + Drawable d = getDrawable(); + + if (d != null) { + int width = MeasureSpec.getSize(widthMeasureSpec); + float drawHeight = d.getIntrinsicHeight(); + float drawWidth = d.getIntrinsicWidth(); + // 控件的宽度width = 屏幕的宽度 MeasureSpec.getSize(widthMeasureSpec); + // 控件的高度 = 控件的宽度width*图片的宽高比 drawHeight / drawWidth; + int height = (int) Math.ceil(width * (drawHeight / drawWidth)); + setMeasuredDimension(width, height); + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/RoundBreakRectangle.java b/app/src/main/java/com/yonsz/z1/view/RoundBreakRectangle.java new file mode 100644 index 0000000..e3e9871 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/RoundBreakRectangle.java @@ -0,0 +1,140 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.View; + +import com.yonsz.z1.R; + +/** + * Created by Administrator on 2017/9/9. + */ + +public class RoundBreakRectangle extends View { + + private Paint mLinePaint; + private Paint mTextPaint; + private Paint mRoundPaint; + private String mText = "text"; + private int mTextColor; + private int mLineColor; + private int mRadius; + private int leftLineWidth = 50;//文字左边线长 + private int textSpace = 5;//文字左右间距 + + public RoundBreakRectangle(Context context){ + super(context); + } + + public RoundBreakRectangle(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + public RoundBreakRectangle(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs); + } + + + private void init(Context context, AttributeSet attrs){ + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundBreakRectangle); + mText = typedArray.getString(R.styleable.RoundBreakRectangle_roundBreakText); + mTextColor = typedArray.getColor(R.styleable.RoundBreakRectangle_roundBreakTextColor, Color.BLACK); + mLineColor = typedArray.getColor(R.styleable.RoundBreakRectangle_roundBreakLineColor, Color.BLACK); + mRadius = typedArray.getInteger(R.styleable.RoundBreakRectangle_roundBreakRadius, 10); + typedArray.recycle(); + + mLinePaint = new Paint(); + mLinePaint.setColor(mLineColor); + mLinePaint.setAntiAlias(true); + mLinePaint.setStrokeWidth(1); + + mTextPaint = new Paint(); + mTextPaint.setColor(mTextColor); + mTextPaint.setAntiAlias(true); + + mRoundPaint = new Paint(); + mRoundPaint.setColor(mLineColor); + mRoundPaint.setAntiAlias(true); + mRoundPaint.setStrokeWidth(1); + + } + + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + Rect textBounds = new Rect(); + mTextPaint.getTextBounds(mText, 0, mText.length(), textBounds); + int textHeight = textBounds.height(); + int textWidth = textBounds.width(); + + + //左上角圆弧 + RectF leftTopRf = new RectF(getPaddingLeft(), textHeight/2 + getPaddingTop(), + getPaddingLeft() + mRadius, getPaddingTop() + mRadius + textHeight/2); + canvas.drawArc(leftTopRf, -180, 90, false, mRoundPaint); + + //文字左边横线 + canvas.drawLine(getPaddingLeft() + mRadius/2, textHeight/2 + getPaddingTop(), + getPaddingLeft() + mRadius/2 + leftLineWidth, textHeight/2 + getPaddingTop(), mLinePaint); + + //文字 + canvas.drawText(mText, getPaddingLeft() + mRadius/2 + leftLineWidth + textSpace, + textHeight, mTextPaint); + + //文字右边横线 + canvas.drawLine(getPaddingLeft() + mRadius/2 + leftLineWidth + textWidth + textSpace*2, textHeight/2, + getWidth() - getPaddingRight() - mRadius/2, textHeight/2, mLinePaint); + + //右上角圆弧 + RectF rightTopRf = new RectF(getWidth() - getPaddingRight() - mRadius, textHeight/2, + getWidth() - getPaddingRight(), textHeight/2 + mRadius); + canvas.drawArc(rightTopRf, 270, 90, false, mRoundPaint); + + //左边竖线 + canvas.drawLine(getPaddingLeft(), getPaddingTop() + mRadius, getPaddingLeft(), + getHeight() - getPaddingBottom() - mRadius/2, mLinePaint); + + //左下角圆弧 + RectF leftBotRf = new RectF(getPaddingLeft(), getHeight() - getPaddingBottom() - mRadius, + getPaddingLeft() + mRadius, getHeight() - getPaddingBottom()); + canvas.drawArc(leftBotRf, 90, 90, false, mRoundPaint); + + //底边 + canvas.drawLine(getPaddingLeft() + mRadius/2, getHeight() - getPaddingBottom()-1, + getWidth() - getPaddingRight() - mRadius/2, getHeight() - getPaddingBottom()-1, mLinePaint); + + //右下角圆弧 + RectF rightBotRf = new RectF(getWidth() - getPaddingRight() - mRadius, getHeight() - getPaddingBottom() - mRadius, + getWidth() - getPaddingRight(), getHeight() - getPaddingRight()); + canvas.drawArc(rightBotRf, 0, 90, false, mRoundPaint); + + //右边线 + canvas.drawLine(getWidth() - getPaddingRight()-1, getPaddingTop() + mRadius, + getWidth() - getPaddingRight()-1, getHeight() - getPaddingRight() - mRadius/2, mRoundPaint); + + } + + private void drawLine(Canvas canvas){ +// canvas.drawLine(); + } + + private void drawRound(Canvas canvas){ +// canvas.drawRect(); + } + + private void drawText(Canvas canvas){ + + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/view/RoundImageView.java b/app/src/main/java/com/yonsz/z1/view/RoundImageView.java new file mode 100644 index 0000000..0692548 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/RoundImageView.java @@ -0,0 +1,63 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Path; +import android.os.Build; +import android.support.v7.widget.AppCompatImageView; +import android.util.AttributeSet; +import android.view.View; + +public class RoundImageView extends AppCompatImageView { + + + float width, height; + + public RoundImageView(Context context) { + this(context, null); + init(context, null); + } + + public RoundImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + init(context, attrs); + } + + public RoundImageView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs); + } + + private void init(Context context, AttributeSet attrs) { + if (Build.VERSION.SDK_INT < 18) { + setLayerType(View.LAYER_TYPE_SOFTWARE, null); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + width = getWidth(); + height = getHeight(); + } + + @Override + protected void onDraw(Canvas canvas) { + if (width >= 12 && height > 12) { + Path path = new Path(); + //四个圆角 + path.moveTo(12, 0); + path.lineTo(width - 12, 0); + path.quadTo(width, 0, width, 12); + path.lineTo(width, height - 12); + path.quadTo(width, height, width - 12, height); + path.lineTo(12, height); + path.quadTo(0, height, 0, height - 12); + path.lineTo(0, 12); + path.quadTo(0, 0, 12, 0); + + canvas.clipPath(path); + } + super.onDraw(canvas); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/SideAreaBar.java b/app/src/main/java/com/yonsz/z1/view/SideAreaBar.java new file mode 100644 index 0000000..8275ab5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/SideAreaBar.java @@ -0,0 +1,149 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Typeface; +import android.graphics.drawable.ColorDrawable; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; + + +/** + * 右侧的字母索引View + * + * @author + */ + +public class SideAreaBar extends View { + + // 26个字母 + public static String[] b = {"常用", "A", "B", "C", "D", "E", "F", "G", "H", "I", + "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", + "W", "X", "Y", "Z"}; + //触摸事件 + private OnTouchingLetterChangedListener onTouchingLetterChangedListener; + //选中 + private int choose = -1; + + private Paint paint = new Paint(); + + private TextView mTextDialog; + + public SideAreaBar(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + + public SideAreaBar(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public SideAreaBar(Context context) { + super(context); + } + + /** + * 为SideBar显示字母的TextView + * + * @param mTextDialog + */ + public void setTextView(TextView mTextDialog) { + this.mTextDialog = mTextDialog; + } + + /** + * 重写的onDraw的方法 + */ + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + int height = getHeight();//获取对应的高度 + int width = getWidth();//获取对应的宽度 + int singleHeight = height / b.length;//获取每一个字母的高度 + for (int i = 0; i < b.length; i++) { + paint.setColor(Color.rgb(120, 120, 120)); + paint.setTypeface(Typeface.DEFAULT); + paint.setAntiAlias(true); + paint.setTextSize(30); + //选中的状态 + if (i == choose) { + paint.setColor(Color.parseColor("#3399ff")); + paint.setFakeBoldText(true);//设置是否为粗体文字 + } + //x坐标等于=中间-字符串宽度的一般 + float xPos = width / 2 - paint.measureText(b[i]) / 2; + float yPos = singleHeight * i + singleHeight; + canvas.drawText(b[i], xPos, yPos, paint); + paint.reset();//重置画笔 + } + } + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + + final int action = event.getAction(); + final float y = event.getY();//点击y坐标 + final int oldChoose = choose; + + final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener; + + final int c = (int) (y / getHeight() * b.length);//点击y坐标所占高度的比例*b数组的长度就等于点击b中的个数 + + switch (action) { + case MotionEvent.ACTION_UP: + setBackgroundDrawable(new ColorDrawable(0x00000000));//设置背景颜色 + choose = -1; + invalidate(); + if (mTextDialog != null) { + mTextDialog.setVisibility(View.INVISIBLE); + } + break; + + default: + setBackgroundResource(R.drawable.sidebar_background); + if (oldChoose != c) { + if (c >= 0 && c < b.length) { + if (listener != null) { + listener.onTouchingLetterChanged(b[c]); + } + if (mTextDialog != null) { + mTextDialog.setText(b[c]); + mTextDialog.setVisibility(View.VISIBLE); + } + choose = c; + invalidate(); + } + } + break; + } + + + return true; + } + + /** + * 向外松开的方法 + * + * @param onTouchingLetterChangedListener + */ + public void setOnTouchingLetterChangedListener( + OnTouchingLetterChangedListener onTouchingLetterChangedListener) { + this.onTouchingLetterChangedListener = onTouchingLetterChangedListener; + } + + /** + * 接口 + * + * @author + */ + public interface OnTouchingLetterChangedListener { + public void onTouchingLetterChanged(String s); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/view/SpringBackScrollView.java b/app/src/main/java/com/yonsz/z1/view/SpringBackScrollView.java new file mode 100644 index 0000000..b30ce69 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/SpringBackScrollView.java @@ -0,0 +1,118 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.TranslateAnimation; +import android.widget.ScrollView; + +/** + * Created by Administrator on 2017/4/25. + */ + +public class SpringBackScrollView extends ScrollView { + + // 拖动的距离 size = 4 的意思 只允许拖动屏幕的1/4 + private static final int size = 5; + private View inner; + private float y; + private Rect normal = new Rect(); + + public SpringBackScrollView(Context context) { + super(context); + } + + public SpringBackScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onFinishInflate() { + if (getChildCount() > 0) { + inner = getChildAt(0); + } + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (inner == null) { + return super.onTouchEvent(ev); + } else { + commOnTouchEvent(ev); + } + return super.onTouchEvent(ev); + } + + public void commOnTouchEvent(MotionEvent ev) { + int action = ev.getAction(); + switch (action) { + case MotionEvent.ACTION_DOWN: + y = ev.getY(); + break; + case MotionEvent.ACTION_UP: + if (isNeedAnimation()) { + // Log.v("mlguitar", "will up and animation"); + animation(); + } + break; + case MotionEvent.ACTION_MOVE: + final float preY = y; + float nowY = ev.getY(); + /** + * size=4 表示 拖动的距离为屏幕的高度的1/4 + */ + int deltaY = (int) (preY - nowY) / size; + // 滚动 + // scrollBy(0, deltaY); + + y = nowY; + // 当滚动到最上或者最下时就不会再滚动,这时移动布局 + if (isNeedMove()) { + if (normal.isEmpty()) { + // 保存正常的布局位置 + normal.set(inner.getLeft(), inner.getTop(), + inner.getRight(), inner.getBottom()); + return; + } + int yy = inner.getTop() - deltaY; + + // 移动布局 + inner.layout(inner.getLeft(), yy, inner.getRight(), + inner.getBottom() - deltaY); + } + break; + default: + break; + } + } + + // 开启动画移动 + + public void animation() { + // 开启移动动画 + TranslateAnimation ta = new TranslateAnimation(0, 0, inner.getTop(), + normal.top); + ta.setDuration(200); + inner.startAnimation(ta); + // 设置回到正常的布局位置 + inner.layout(normal.left, normal.top, normal.right, normal.bottom); + normal.setEmpty(); + } + + // 是否需要开启动画 + public boolean isNeedAnimation() { + return !normal.isEmpty(); + } + + // 是否需要移动布局 + public boolean isNeedMove() { + int offset = inner.getMeasuredHeight() - getHeight(); + int scrollY = getScrollY(); + if (scrollY == 0 || scrollY == offset) { + return true; + } + return false; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/StateButton.java b/app/src/main/java/com/yonsz/z1/view/StateButton.java new file mode 100644 index 0000000..25974b9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/StateButton.java @@ -0,0 +1,303 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.StateListDrawable; +import android.support.annotation.ColorInt; +import android.support.annotation.FloatRange; +import android.support.annotation.IntRange; +import android.support.v7.widget.AppCompatButton; +import android.util.AttributeSet; + +import com.yonsz.z1.R; + +/** + * @author deadline + * @time 2016-11-07 + */ + +public class StateButton extends AppCompatButton { + + //text color + private int mNormalTextColor = 0; + private int mPressedTextColor = 0; + private int mUnableTextColor = 0; + ColorStateList mTextColorStateList; + + //animation duration + private int mDuration = 0; + + //radius + private float mRadius = 0; + private boolean mRound; + + //stroke + private float mStrokeDashWidth = 0; + private float mStrokeDashGap = 0; + private int mNormalStrokeWidth = 0; + private int mPressedStrokeWidth = 0; + private int mUnableStrokeWidth = 0; + private int mNormalStrokeColor = 0; + private int mPressedStrokeColor = 0; + private int mUnableStrokeColor = 0; + + //background color + private int mNormalBackgroundColor = 0; + private int mPressedBackgroundColor = 0; + private int mUnableBackgroundColor = 0; + + private GradientDrawable mNormalBackground; + private GradientDrawable mPressedBackground; + private GradientDrawable mUnableBackground; + + private int[][] states; + + StateListDrawable mStateBackground; + + public StateButton(Context context) { + this(context, null); + } + + public StateButton(Context context, AttributeSet attrs) { + this(context, attrs, android.support.v7.appcompat.R.attr.buttonStyle); + } + + public StateButton(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + setup(attrs); + } + + private void setup(AttributeSet attrs) { + + states = new int[4][]; + + Drawable drawable = getBackground(); + if(drawable != null && drawable instanceof StateListDrawable){ + mStateBackground = (StateListDrawable) drawable; + }else{ + mStateBackground = new StateListDrawable(); + } + + mNormalBackground = new GradientDrawable(); + mPressedBackground = new GradientDrawable(); + mUnableBackground = new GradientDrawable(); + + //pressed, focused, normal, unable + states[0] = new int[] { android.R.attr.state_enabled, android.R.attr.state_pressed }; + states[1] = new int[] { android.R.attr.state_enabled, android.R.attr.state_focused }; + states[3] = new int[] { -android.R.attr.state_enabled}; + states[2] = new int[] { android.R.attr.state_enabled }; + + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.StateButton); + + //get original text color as default + //set text color + mTextColorStateList = getTextColors(); + int mDefaultNormalTextColor = mTextColorStateList.getColorForState(states[2], getCurrentTextColor()); + int mDefaultPressedTextColor = mTextColorStateList.getColorForState(states[0], getCurrentTextColor()); + int mDefaultUnableTextColor = mTextColorStateList.getColorForState(states[3], getCurrentTextColor()); + mNormalTextColor = a.getColor(R.styleable.StateButton_normalTextColor, mDefaultNormalTextColor); + mPressedTextColor = a.getColor(R.styleable.StateButton_pressedTextColor, mDefaultPressedTextColor); + mUnableTextColor = a.getColor(R.styleable.StateButton_unableTextColor, mDefaultUnableTextColor); + setTextColor(); + + //set animation duration + mDuration = a.getInteger(R.styleable.StateButton_animationDuration, mDuration); + mStateBackground.setEnterFadeDuration(mDuration); + mStateBackground.setExitFadeDuration(mDuration); + + //set background color + mNormalBackgroundColor = a.getColor(R.styleable.StateButton_normalBackgroundColor, 0); + mPressedBackgroundColor = a.getColor(R.styleable.StateButton_pressedBackgroundColor, 0); + mUnableBackgroundColor = a.getColor(R.styleable.StateButton_unableBackgroundColor, 0); + mNormalBackground.setColor(mNormalBackgroundColor); + mPressedBackground.setColor(mPressedBackgroundColor); + mUnableBackground.setColor(mUnableBackgroundColor); + + //set radius + mRadius = a.getDimensionPixelSize(R.styleable.StateButton_radius, 0); + mRound = a.getBoolean(R.styleable.StateButton_round, false); + mNormalBackground.setCornerRadius(mRadius); + mPressedBackground.setCornerRadius(mRadius); + mUnableBackground.setCornerRadius(mRadius); + + //set stroke + mStrokeDashWidth = a.getDimensionPixelSize(R.styleable.StateButton_strokeDashWidth, 0); + mStrokeDashGap = a.getDimensionPixelSize(R.styleable.StateButton_strokeDashWidth, 0); + mNormalStrokeWidth = a.getDimensionPixelSize(R.styleable.StateButton_normalStrokeWidth, 0); + mPressedStrokeWidth = a.getDimensionPixelSize(R.styleable.StateButton_pressedStrokeWidth, 0); + mUnableStrokeWidth = a.getDimensionPixelSize(R.styleable.StateButton_unableStrokeWidth, 0); + mNormalStrokeColor = a.getColor(R.styleable.StateButton_normalStrokeColor, 0); + mPressedStrokeColor = a.getColor(R.styleable.StateButton_pressedStrokeColor, 0); + mUnableStrokeColor = a.getColor(R.styleable.StateButton_unableStrokeColor, 0); + setStroke(); + + //set background + mStateBackground.addState(states[0], mPressedBackground); + mStateBackground.addState(states[1], mPressedBackground); + mStateBackground.addState(states[3], mUnableBackground); + mStateBackground.addState(states[2], mNormalBackground); + setBackgroundDrawable(mStateBackground); + a.recycle(); + } + + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + setRound(mRound); + } + + /****************** stroke color *********************/ + + public void setNormalStrokeColor(@ColorInt int normalStrokeColor) { + this.mNormalStrokeColor = normalStrokeColor; + setStroke(mNormalBackground, mNormalStrokeColor, mNormalStrokeWidth); + } + + public void setPressedStrokeColor(@ColorInt int pressedStrokeColor) { + this.mPressedStrokeColor = pressedStrokeColor; + setStroke(mPressedBackground, mPressedStrokeColor, mPressedStrokeWidth); + } + + public void setUnableStrokeColor(@ColorInt int unableStrokeColor) { + this.mUnableStrokeColor = unableStrokeColor; + setStroke(mUnableBackground, mUnableStrokeColor, mUnableStrokeWidth); + } + + public void setStateStrokeColor(@ColorInt int normal, @ColorInt int pressed, @ColorInt int unable){ + mNormalStrokeColor = normal; + mPressedStrokeColor = pressed; + mUnableStrokeColor = unable; + setStroke(); + } + + /****************** stroke width *********************/ + + public void setNormalStrokeWidth(int normalStrokeWidth) { + this.mNormalStrokeWidth = normalStrokeWidth; + setStroke(mNormalBackground, mNormalStrokeColor, mNormalStrokeWidth); + } + + public void setPressedStrokeWidth(int pressedStrokeWidth) { + this.mPressedStrokeWidth = pressedStrokeWidth; + setStroke(mPressedBackground, mPressedStrokeColor, mPressedStrokeWidth); + } + + public void setUnableStrokeWidth(int unableStrokeWidth) { + this.mUnableStrokeWidth = unableStrokeWidth; + setStroke(mUnableBackground, mUnableStrokeColor, mUnableStrokeWidth); + } + + public void setStateStrokeWidth(int normal, int pressed, int unable){ + mNormalStrokeWidth = normal; + mPressedStrokeWidth = pressed; + mUnableStrokeWidth= unable; + setStroke(); + } + + public void setStrokeDash(float strokeDashWidth, float strokeDashGap) { + this.mStrokeDashWidth = strokeDashWidth; + this.mStrokeDashGap = strokeDashWidth; + setStroke(); + } + + private void setStroke(){ + setStroke(mNormalBackground, mNormalStrokeColor, mNormalStrokeWidth); + setStroke(mPressedBackground, mPressedStrokeColor, mPressedStrokeWidth); + setStroke(mUnableBackground, mUnableStrokeColor, mUnableStrokeWidth); + } + + private void setStroke(GradientDrawable mBackground, int mStrokeColor, int mStrokeWidth) { + mBackground.setStroke(mStrokeWidth, mStrokeColor, mStrokeDashWidth, mStrokeDashGap); + } + + /******************** radius *******************************/ + + public void setRadius(@FloatRange(from = 0) float radius) { + this.mRadius = radius; + mNormalBackground.setCornerRadius(mRadius); + mPressedBackground.setCornerRadius(mRadius); + mUnableBackground.setCornerRadius(mRadius); + } + + public void setRound(boolean round){ + this.mRound = round; + int height = getMeasuredHeight(); + if(mRound){ + setRadius(height / 2f); + } + } + + public void setRadius(float[] radii){ + mNormalBackground.setCornerRadii(radii); + mPressedBackground.setCornerRadii(radii); + mUnableBackground.setCornerRadii(radii); + } + + /******************** background color **********************/ + + public void setStateBackgroundColor(@ColorInt int normal, @ColorInt int pressed, @ColorInt int unable){ + mPressedBackgroundColor = normal; + mNormalBackgroundColor = pressed; + mUnableBackgroundColor = unable; + mNormalBackground.setColor(mNormalBackgroundColor); + mPressedBackground.setColor(mPressedBackgroundColor); + mUnableBackground.setColor(mUnableBackgroundColor); + } + + public void setNormalBackgroundColor(@ColorInt int normalBackgroundColor) { + this.mNormalBackgroundColor = normalBackgroundColor; + mNormalBackground.setColor(mNormalBackgroundColor); + } + + public void setPressedBackgroundColor(@ColorInt int pressedBackgroundColor) { + this.mPressedBackgroundColor = pressedBackgroundColor; + mPressedBackground.setColor(mPressedBackgroundColor); + } + + public void setUnableBackgroundColor(@ColorInt int unableBackgroundColor) { + this.mUnableBackgroundColor = unableBackgroundColor; + mUnableBackground.setColor(mUnableBackgroundColor); + } + + /*******************alpha animation duration********************/ + public void setAnimationDuration(@IntRange(from = 0)int duration){ + this.mDuration = duration; + mStateBackground.setEnterFadeDuration(mDuration); + } + + /*************** text color ***********************/ + + private void setTextColor() { + int[] colors = new int[] {mPressedTextColor, mPressedTextColor, mNormalTextColor, mUnableTextColor}; + mTextColorStateList = new ColorStateList(states, colors); + setTextColor(mTextColorStateList); + } + + public void setStateTextColor(@ColorInt int normal, @ColorInt int pressed, @ColorInt int unable){ + this.mNormalTextColor = normal; + this.mPressedTextColor = pressed; + this.mUnableTextColor = unable; + setTextColor(); + } + + public void setNormalTextColor(@ColorInt int normalTextColor) { + this.mNormalTextColor = normalTextColor; + setTextColor(); + + } + + public void setPressedTextColor(@ColorInt int pressedTextColor) { + this.mPressedTextColor = pressedTextColor; + setTextColor(); + } + + public void setUnableTextColor(@ColorInt int unableTextColor) { + this.mUnableTextColor = unableTextColor; + setTextColor(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/StickHeadScrollView.java b/app/src/main/java/com/yonsz/z1/view/StickHeadScrollView.java new file mode 100644 index 0000000..bf6ba19 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/StickHeadScrollView.java @@ -0,0 +1,67 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.support.v4.view.ViewCompat; +import android.support.v4.widget.NestedScrollView; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewTreeObserver; + +/** + * 优化嵌套滑动(可保留置顶控件) + * Created by panchenhuan on 17/1/4.. + */ + +public class StickHeadScrollView extends NestedScrollView { + + public StickHeadScrollView(Context context) { + super(context); + } + + public StickHeadScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public StickHeadScrollView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public void resetHeight(final View headView, final View nestedContent, final TitleView mTitleView) { + this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + StickHeadScrollView.this.getViewTreeObserver().removeOnGlobalLayoutListener(this); + nestedContent.getLayoutParams().height = StickHeadScrollView.this.getHeight() - headView.getHeight() - mTitleView.getHeight(); + nestedContent.requestLayout(); + } + }); + } + + @Override + public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) { + return (nestedScrollAxes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0; + } + + @Override + public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) { + //判断是否需要优先嵌套滑动,解决触摸recyclerview 无法关闭swiperefreshlayout的bug + if (!dispatchNestedPreScroll(dx, dy, consumed, null)) { + //嵌套滑动代码 + boolean hiddenTop = dy > 0 && getScrollY() < getChildAt(0).getHeight() - getHeight(); + boolean showTop = dy < 0 && getScrollY() > 0 && !ViewCompat.canScrollVertically(target, -1); + + if (hiddenTop || showTop) { + scrollBy(0, dy); + consumed[1] = dy; + } + } + } + + @Override + public boolean onNestedPreFling(View target, float velocityX, float velocityY) { + if (getScrollY() >= getChildAt(0).getHeight() - getHeight()) + return false; + fling((int) velocityY); + return true; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/SuperSwipeRefreshLayout.java b/app/src/main/java/com/yonsz/z1/view/SuperSwipeRefreshLayout.java new file mode 100644 index 0000000..ec87490 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/SuperSwipeRefreshLayout.java @@ -0,0 +1,1505 @@ +package com.yonsz.z1.view; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.animation.ValueAnimator.AnimatorUpdateListener; +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.os.Build; +import android.os.Handler; +import android.support.v4.view.MotionEventCompat; +import android.support.v4.view.ViewCompat; +import android.support.v4.widget.NestedScrollView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.StaggeredGridLayoutManager; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.Display; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.animation.Animation; +import android.view.animation.Animation.AnimationListener; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Transformation; +import android.widget.AbsListView; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; + +import com.yonsz.z1.R; + +/** + * @Author Zheng Haibo + * @PersonalWebsite http://www.mobctrl.net + * @Description 自定义CustomeSwipeRefreshLayout
+ * 支持下拉刷新和上拉加载更多
+ * 非侵入式,对原来的ListView、RecyclerView没有任何影响,用法和SwipeRefreshLayout类似。
+ * 可自定义头部View的样式,调用setHeaderView方法即可
+ * 可自定义页尾View的样式,调用setFooterView方法即可
+ * 支持RecyclerView,ListView,ScrollView,GridView等等。
+ * 被包含的View(RecyclerView,ListView etc.)可跟随手指的滑动而滑动
+ * 默认是跟随手指的滑动而滑动,也可以设置为不跟随:setTargetScrollWithLayout(false) 回调方法更多
+ * 比如:onRefresh() onPullDistance(int distance)和onPullEnable(boolean + * enable)
+ * 开发人员可以根据下拉过程中distance的值做一系列动画。
+ */ +@SuppressLint("ClickableViewAccessibility") +public class SuperSwipeRefreshLayout extends ViewGroup { + private static final String LOG_TAG = "SwipeRefreshLayout"; + private static final int HEADER_VIEW_HEIGHT = 50;// HeaderView height (dp) + + private static final float DECELERATE_INTERPOLATION_FACTOR = 2f; + private static final int INVALID_POINTER = -1; + private static final float DRAG_RATE = .5f; + + private static final int SCALE_DOWN_DURATION = 150; + private static final int ANIMATE_TO_TRIGGER_DURATION = 200; + private static final int ANIMATE_TO_START_DURATION = 200; + private static final int DEFAULT_CIRCLE_TARGET = 64; + + // SuperSwipeRefreshLayout内的目标View,比如RecyclerView,ListView,ScrollView,GridView + // etc. + private View mTarget; + + private OnPullRefreshListener mListener;// 下拉刷新listener +// private OnPushLoadMoreListener mOnPushLoadMoreListener;// 上拉加载更多 + + private boolean mRefreshing = false; + private boolean mLoadMore = false; + private int mTouchSlop; + private float mTotalDragDistance = -1; + private int mMediumAnimationDuration; + private int mCurrentTargetOffsetTop; + private boolean mOriginalOffsetCalculated = false; + + private float mInitialMotionY; + private boolean mIsBeingDragged; + private int mActivePointerId = INVALID_POINTER; + private boolean mScale; + + private boolean mReturningToStart; + private final DecelerateInterpolator mDecelerateInterpolator; + private static final int[] LAYOUT_ATTRS = new int[]{android.R.attr.enabled}; + + private HeadViewContainer mHeadViewContainer; + private RelativeLayout mFooterViewContainer; + private int mHeaderViewIndex = -1; + private int mFooterViewIndex = -1; + + protected int mFrom; + + private float mStartingScale; + + protected int mOriginalOffsetTop; + + private Animation mScaleAnimation; + + private Animation mScaleDownAnimation; + + private Animation mScaleDownToStartAnimation; + + // 最后停顿时的偏移量px,与DEFAULT_CIRCLE_TARGET正比 + private float mSpinnerFinalOffset; + + private boolean mNotify; + + private int mHeaderViewWidth;// headerView的宽度 + + private int mFooterViewWidth; + + private int mHeaderViewHeight; + + private int mFooterViewHeight; + + private boolean mUsingCustomStart; + + private boolean targetScrollWithLayout = true; + + private int pushDistance = 0; + + private CircleProgressView defaultProgressView = null; + + private boolean usingDefaultHeader = true; + + private float density = 1.0f; + + private boolean isProgressEnable = true; + + /** + * 下拉时,超过距离之后,弹回来的动画监听器 + */ + private AnimationListener mRefreshListener = new AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + isProgressEnable = false; + } + + @Override + public void onAnimationRepeat(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + isProgressEnable = true; + if (mRefreshing) { + if (mNotify) { + if (usingDefaultHeader) { + ViewCompat.setAlpha(defaultProgressView, 1.0f); + defaultProgressView.setOnDraw(true); + new Thread(defaultProgressView).start(); + } + if (mListener != null) { + textView.setText("正在刷新"); + imageView.setVisibility(View.GONE); + progressBar.setVisibility(View.VISIBLE); + mListener.onRefresh(); + } + } + } else { + mHeadViewContainer.setVisibility(View.GONE); + if (mScale) { + setAnimationProgress(0); + } else { + setTargetOffsetTopAndBottom(mOriginalOffsetTop + - mCurrentTargetOffsetTop, true); + } + } + mCurrentTargetOffsetTop = mHeadViewContainer.getTop(); + updateListenerCallBack(); + } + }; + private ProgressBar progressBar; + private TextView textView; + private View headerView; + private ImageView imageView; + + /** + * 更新回调 + */ + private void updateListenerCallBack() { + int distance = mCurrentTargetOffsetTop + mHeadViewContainer.getHeight(); + if (mListener != null) { + mListener.onPullDistance(distance); + } + if (usingDefaultHeader && isProgressEnable) { + defaultProgressView.setPullDistance(distance); + } + } + + /** + * 添加头布局 + * + * @param child + */ + public void setHeaderView(View child) { + if (child == null) { + return; + } + if (mHeadViewContainer == null) { + return; + } + usingDefaultHeader = false; + mHeadViewContainer.removeAllViews(); + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( + mHeaderViewWidth, mHeaderViewHeight); + layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); + mHeadViewContainer.addView(child, layoutParams); + headerView = child; + initHeaderView(); + } + + private void initHeaderView() { + progressBar = (ProgressBar) headerView.findViewById(R.id.pb_view); + textView = (TextView) headerView.findViewById(R.id.text_view); + textView.setText("下拉刷新"); + imageView = (ImageView) headerView.findViewById(R.id.image_view); + imageView.setVisibility(View.VISIBLE); + imageView.setImageResource(R.drawable.down_arrow); + progressBar.setVisibility(View.GONE); + } + +// private void initFootView() { +// footerProgressBar = (ProgressBar) headerView +// .findViewById(R.id.footer_pb_view); +// footerImageView = (ImageView) footerView +// .findViewById(R.id.footer_image_view); +// footerTextView = (TextView) footerView +// .findViewById(R.id.footer_text_view); +// footerProgressBar.setVisibility(View.GONE); +// footerImageView.setVisibility(View.VISIBLE); +// footerImageView.setImageResource(R.drawable.down_arrow); +// footerTextView.setText("上拉加载更多..."); +// } + + public void setFooterView(View child) { + if (child == null) { + return; + } + if (mFooterViewContainer == null) { + return; + } + mFooterViewContainer.removeAllViews(); + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( + mFooterViewWidth, mFooterViewHeight); + mFooterViewContainer.addView(child, layoutParams); +// initFootView(); + } + + public SuperSwipeRefreshLayout(Context context) { + this(context, null); + } + + @SuppressWarnings("deprecation") + public SuperSwipeRefreshLayout(Context context, AttributeSet attrs) { + super(context, attrs); + + /** + * getScaledTouchSlop是一个距离,表示滑动的时候,手的移动要大于这个距离才开始移动控件。如果小于这个距离就不触发移动控件 + */ + mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + + mMediumAnimationDuration = getResources().getInteger( + android.R.integer.config_mediumAnimTime); + + setWillNotDraw(false); + mDecelerateInterpolator = new DecelerateInterpolator( + DECELERATE_INTERPOLATION_FACTOR); + + final TypedArray a = context + .obtainStyledAttributes(attrs, LAYOUT_ATTRS); + setEnabled(a.getBoolean(0, true)); + a.recycle(); + + WindowManager wm = (WindowManager) context + .getSystemService(Context.WINDOW_SERVICE); + Display display = wm.getDefaultDisplay(); + final DisplayMetrics metrics = getResources().getDisplayMetrics(); + mHeaderViewWidth = (int) display.getWidth(); + mFooterViewWidth = (int) display.getWidth(); + mHeaderViewHeight = (int) (HEADER_VIEW_HEIGHT * metrics.density); + mFooterViewHeight = (int) (HEADER_VIEW_HEIGHT * metrics.density); + defaultProgressView = new CircleProgressView(getContext()); + createHeaderViewContainer(); + createFooterViewContainer(); + ViewCompat.setChildrenDrawingOrderEnabled(this, true); + mSpinnerFinalOffset = DEFAULT_CIRCLE_TARGET * metrics.density; + density = metrics.density; + mTotalDragDistance = mSpinnerFinalOffset; + } + + /** + * 孩子节点绘制的顺序 + * + * @param childCount + * @param i + * @return + */ + @Override + protected int getChildDrawingOrder(int childCount, int i) { + // 将新添加的View,放到最后绘制 + if (mHeaderViewIndex < 0 && mFooterViewIndex < 0) { + return i; + } + if (i == childCount - 2) { + return mHeaderViewIndex; + } + if (i == childCount - 1) { + return mFooterViewIndex; + } + int bigIndex = mFooterViewIndex > mHeaderViewIndex ? mFooterViewIndex + : mHeaderViewIndex; + int smallIndex = mFooterViewIndex < mHeaderViewIndex ? mFooterViewIndex + : mHeaderViewIndex; + if (i >= smallIndex && i < bigIndex - 1) { + return i + 1; + } + if (i >= bigIndex || (i == bigIndex - 1)) { + return i + 2; + } + return i; + } + + /** + * 创建头布局的容器 + */ + private void createHeaderViewContainer() { + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( + (int) (mHeaderViewHeight * 0.8), + (int) (mHeaderViewHeight * 0.8)); + layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL); + layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); + mHeadViewContainer = new HeadViewContainer(getContext()); + mHeadViewContainer.setVisibility(View.GONE); + defaultProgressView.setVisibility(View.VISIBLE); + defaultProgressView.setOnDraw(false); + mHeadViewContainer.addView(defaultProgressView, layoutParams); + addView(mHeadViewContainer); + } + + /** + * 添加底部布局 + */ + private void createFooterViewContainer() { + mFooterViewContainer = new RelativeLayout(getContext()); + mFooterViewContainer.setVisibility(View.GONE); + addView(mFooterViewContainer); + } + + /** + * 设置 + * + * @param listener + */ + public void setOnPullRefreshListener(OnPullRefreshListener listener) { + mListener = listener; + } + + public void setHeaderViewBackgroundColor(int color) { + mHeadViewContainer.setBackgroundColor(color); + } + + /** + * 设置上拉加载更多的接口 + * + * @param onPushLoadMoreListener + */ + public void setOnPushLoadMoreListener( + OnPushLoadMoreListener onPushLoadMoreListener) { +// this.mOnPushLoadMoreListener = onPushLoadMoreListener; + } + + /** + * Notify the widget that refresh state has changed. Do not call this when + * refresh is triggered by a swipe gesture. + * + * @param refreshing Whether or not the view should show refresh progress. + */ + public void setRefreshing(boolean refreshing) { + if (refreshing && mRefreshing != refreshing) { + // scale and show + mRefreshing = refreshing; + int endTarget = 0; + if (!mUsingCustomStart) { + endTarget = (int) (mSpinnerFinalOffset + mOriginalOffsetTop); + } else { + endTarget = (int) mSpinnerFinalOffset; + } + setTargetOffsetTopAndBottom(endTarget - mCurrentTargetOffsetTop, + true /* requires update */); + mNotify = false; + startScaleUpAnimation(mRefreshListener); + } else { + progressBar.setVisibility(GONE); + setRefreshing(refreshing, false /* notify */); + if (usingDefaultHeader) { + defaultProgressView.setOnDraw(false); + } + } + } + + private void startScaleUpAnimation(AnimationListener listener) { + mHeadViewContainer.setVisibility(View.VISIBLE); + mScaleAnimation = new Animation() { + @Override + public void applyTransformation(float interpolatedTime, + Transformation t) { + setAnimationProgress(interpolatedTime); + } + }; + mScaleAnimation.setDuration(mMediumAnimationDuration); + if (listener != null) { + mHeadViewContainer.setAnimationListener(listener); + } + mHeadViewContainer.clearAnimation(); + mHeadViewContainer.startAnimation(mScaleAnimation); + } + + private void setAnimationProgress(float progress) { + if (!usingDefaultHeader) { + progress = 1; + } + ViewCompat.setScaleX(mHeadViewContainer, progress); + ViewCompat.setScaleY(mHeadViewContainer, progress); + } + + private void setRefreshing(boolean refreshing, final boolean notify) { + if (mRefreshing != refreshing) { + mNotify = notify; + ensureTarget(); + mRefreshing = refreshing; + if (mRefreshing) { + animateOffsetToCorrectPosition(mCurrentTargetOffsetTop, + mRefreshListener); + } else { + //startScaleDownAnimation(mRefreshListener); + animateOffsetToStartPosition(mCurrentTargetOffsetTop, mRefreshListener); + } + } + } + + private void startScaleDownAnimation(AnimationListener listener) { + mScaleDownAnimation = new Animation() { + @Override + public void applyTransformation(float interpolatedTime, + Transformation t) { + setAnimationProgress(1 - interpolatedTime); + } + }; + mScaleDownAnimation.setDuration(SCALE_DOWN_DURATION); + mHeadViewContainer.setAnimationListener(listener); + mHeadViewContainer.clearAnimation(); + mHeadViewContainer.startAnimation(mScaleDownAnimation); + } + + public boolean isRefreshing() { + return mRefreshing; + } + + /** + * 确保mTarget不为空
+ * mTarget一般是可滑动的ScrollView,ListView,RecyclerView等 + */ + private void ensureTarget() { + if (mTarget == null) { + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (!child.equals(mHeadViewContainer) + && !child.equals(mFooterViewContainer)) { + mTarget = child; + break; + } + } + } + } + + /** + * Set the distance to trigger a sync in dips + * + * @param distance + */ + public void setDistanceToTriggerSync(int distance) { + mTotalDragDistance = distance; + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, + int bottom) { + final int width = getMeasuredWidth(); + final int height = getMeasuredHeight(); + if (getChildCount() == 0) { + return; + } + if (mTarget == null) { + ensureTarget(); + } + if (mTarget == null) { + return; + } + int distance = mCurrentTargetOffsetTop + mHeadViewContainer.getMeasuredHeight(); + if (!targetScrollWithLayout) { + // 判断标志位,如果目标View不跟随手指的滑动而滑动,将下拉偏移量设置为0 + distance = 0; + } + final View child = mTarget; + final int childLeft = getPaddingLeft(); + final int childTop = getPaddingTop() + distance - pushDistance;// 根据偏移量distance更新 + final int childWidth = width - getPaddingLeft() - getPaddingRight(); + final int childHeight = height - getPaddingTop() - getPaddingBottom(); + Log.d(LOG_TAG, "debug:onLayout childHeight = " + childHeight); + child.layout(childLeft, childTop, childLeft + childWidth, childTop + + childHeight);// 更新目标View的位置 + int headViewWidth = mHeadViewContainer.getMeasuredWidth(); + int headViewHeight = mHeadViewContainer.getMeasuredHeight(); + mHeadViewContainer.layout((width / 2 - headViewWidth / 2), + mCurrentTargetOffsetTop, (width / 2 + headViewWidth / 2), + mCurrentTargetOffsetTop + headViewHeight);// 更新头布局的位置 + int footViewWidth = mFooterViewContainer.getMeasuredWidth(); + int footViewHeight = mFooterViewContainer.getMeasuredHeight(); + mFooterViewContainer.layout((width / 2 - footViewWidth / 2), height + - pushDistance, (width / 2 + footViewWidth / 2), height + + footViewHeight - pushDistance); + } + + @Override + public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + if (mTarget == null) { + ensureTarget(); + } + if (mTarget == null) { + return; + } + mTarget.measure(MeasureSpec.makeMeasureSpec(getMeasuredWidth() + - getPaddingLeft() - getPaddingRight(), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(getMeasuredHeight() + - getPaddingTop() - getPaddingBottom(), + MeasureSpec.EXACTLY)); + mHeadViewContainer.measure(MeasureSpec.makeMeasureSpec( + mHeaderViewWidth, MeasureSpec.EXACTLY), MeasureSpec + .makeMeasureSpec(3 * mHeaderViewHeight, MeasureSpec.EXACTLY)); + mFooterViewContainer.measure(MeasureSpec.makeMeasureSpec( + mFooterViewWidth, MeasureSpec.EXACTLY), MeasureSpec + .makeMeasureSpec(mFooterViewHeight, MeasureSpec.EXACTLY)); + if (!mUsingCustomStart && !mOriginalOffsetCalculated) { + mOriginalOffsetCalculated = true; + mCurrentTargetOffsetTop = mOriginalOffsetTop = -mHeadViewContainer + .getMeasuredHeight(); + updateListenerCallBack(); + } + mHeaderViewIndex = -1; + for (int index = 0; index < getChildCount(); index++) { + if (getChildAt(index) == mHeadViewContainer) { + mHeaderViewIndex = index; + break; + } + } + mFooterViewIndex = -1; + for (int index = 0; index < getChildCount(); index++) { + if (getChildAt(index) == mFooterViewContainer) { + mFooterViewIndex = index; + break; + } + } + } + + /** + * 判断目标View是否滑动到顶部-还能否继续滑动 + * + * @return + */ + public boolean isChildScrollToTop() { + if (Build.VERSION.SDK_INT < 14) { + if (mTarget instanceof AbsListView) { + final AbsListView absListView = (AbsListView) mTarget; + return !(absListView.getChildCount() > 0 && (absListView + .getFirstVisiblePosition() > 0 || absListView + .getChildAt(0).getTop() < absListView.getPaddingTop())); + } else { + return !(mTarget.getScrollY() > 0); + } + } else { + return !ViewCompat.canScrollVertically(mTarget, -1); + } + } + + /** + * 是否滑动到底部 + * + * @return + */ + public boolean isChildScrollToBottom() { + if (isChildScrollToTop()) { + return false; + } + if (mTarget instanceof RecyclerView) { + RecyclerView recyclerView = (RecyclerView) mTarget; + RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); + int count = recyclerView.getAdapter().getItemCount(); + if (layoutManager instanceof LinearLayoutManager && count > 0) { + LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager; + if (linearLayoutManager.findLastCompletelyVisibleItemPosition() == count - 1) { + return true; + } + } else if (layoutManager instanceof StaggeredGridLayoutManager) { + StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager; + int[] lastItems = new int[2]; + staggeredGridLayoutManager + .findLastCompletelyVisibleItemPositions(lastItems); + int lastItem = Math.max(lastItems[0], lastItems[1]); + if (lastItem == count - 1) { + return true; + } + } + return false; + } else if (mTarget instanceof AbsListView) { + final AbsListView absListView = (AbsListView) mTarget; + int count = absListView.getAdapter().getCount(); + int fristPos = absListView.getFirstVisiblePosition(); + if (fristPos == 0 + && absListView.getChildAt(0).getTop() >= absListView + .getPaddingTop()) { + return false; + } + int lastPos = absListView.getLastVisiblePosition(); + if (lastPos > 0 && count > 0 && lastPos == count - 1) { + return true; + } + return false; + } else if (mTarget instanceof ScrollView) { + ScrollView scrollView = (ScrollView) mTarget; + View view = (View) scrollView + .getChildAt(scrollView.getChildCount() - 1); + if (view != null) { + int diff = (view.getBottom() - (scrollView.getHeight() + scrollView + .getScrollY())); + if (diff == 0) { + return true; + } + } + } else if (mTarget instanceof NestedScrollView) { + NestedScrollView nestedScrollView = (NestedScrollView) mTarget; + View view = (View) nestedScrollView.getChildAt(nestedScrollView.getChildCount() - 1); + if (view != null) { + int diff = (view.getBottom() - (nestedScrollView.getHeight() + nestedScrollView.getScrollY())); + if (diff == 0) { + return true; + } + } + } + return false; + } + + /** + * 主要判断是否应该拦截子View的事件
+ * 如果拦截,则交给自己的OnTouchEvent处理
+ * 否者,交给子View处理
+ */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + ensureTarget(); + + final int action = MotionEventCompat.getActionMasked(ev); + + if (mReturningToStart && action == MotionEvent.ACTION_DOWN) { + mReturningToStart = false; + } + if (!isEnabled() || mReturningToStart || mRefreshing || mLoadMore + || (!isChildScrollToTop() && !isChildScrollToBottom())) { + // 如果子View可以滑动,不拦截事件,交给子View处理-下拉刷新 + // 或者子View没有滑动到底部不拦截事件-上拉加载更多 + return false; + } + + // 下拉刷新判断 + switch (action) { + case MotionEvent.ACTION_DOWN: + setTargetOffsetTopAndBottom( + mOriginalOffsetTop - mHeadViewContainer.getTop(), true);// 恢复HeaderView的初始位置 + mActivePointerId = MotionEventCompat.getPointerId(ev, 0); + mIsBeingDragged = false; + final float initialMotionY = getMotionEventY(ev, mActivePointerId); + if (initialMotionY == -1) { + return false; + } + mInitialMotionY = initialMotionY;// 记录按下的位置 + + case MotionEvent.ACTION_MOVE: + if (mActivePointerId == INVALID_POINTER) { + Log.e(LOG_TAG, + "Got ACTION_MOVE event but don't have an active pointer id."); + return false; + } + + final float y = getMotionEventY(ev, mActivePointerId); + if (y == -1) { + return false; + } + float yDiff = 0; + if (isChildScrollToBottom()) { + yDiff = mInitialMotionY - y;// 计算上拉距离 + if (yDiff > mTouchSlop && !mIsBeingDragged) {// 判断是否下拉的距离足够 + mIsBeingDragged = true;// 正在上拉 + } + } else { + yDiff = y - mInitialMotionY;// 计算下拉距离 + if (yDiff > mTouchSlop && !mIsBeingDragged) {// 判断是否下拉的距离足够 + mIsBeingDragged = true;// 正在下拉 + } + } + break; + + case MotionEventCompat.ACTION_POINTER_UP: + onSecondaryPointerUp(ev); + break; + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + mIsBeingDragged = false; + mActivePointerId = INVALID_POINTER; + break; + } + + return mIsBeingDragged;// 如果正在拖动,则拦截子View的事件 + } + + private float getMotionEventY(MotionEvent ev, int activePointerId) { + final int index = MotionEventCompat.findPointerIndex(ev, + activePointerId); + if (index < 0) { + return -1; + } + return MotionEventCompat.getY(ev, index); + } + + @Override + public void requestDisallowInterceptTouchEvent(boolean b) { + // Nope. + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + final int action = MotionEventCompat.getActionMasked(ev); + + if (mReturningToStart && action == MotionEvent.ACTION_DOWN) { + mReturningToStart = false; + } + if (!isEnabled() || mReturningToStart + || (!isChildScrollToTop() && !isChildScrollToBottom())) { + // 如果子View可以滑动,不拦截事件,交给子View处理 + return false; + } + + if (isChildScrollToBottom()) {// 上拉加载更多 + return handlerPushTouchEvent(ev, action); + } else {// 下拉刷新 + return handlerPullTouchEvent(ev, action); + } + } + + private boolean handlerPullTouchEvent(MotionEvent ev, int action) { + switch (action) { + case MotionEvent.ACTION_DOWN: + mActivePointerId = MotionEventCompat.getPointerId(ev, 0); + mIsBeingDragged = false; + break; + + case MotionEvent.ACTION_MOVE: { + final int pointerIndex = MotionEventCompat.findPointerIndex(ev, + mActivePointerId); + if (pointerIndex < 0) { + Log.e(LOG_TAG, + "Got ACTION_MOVE event but have an invalid active pointer id."); + return false; + } + + final float y = MotionEventCompat.getY(ev, pointerIndex); + final float overscrollTop = (y - mInitialMotionY) * DRAG_RATE; + if (mIsBeingDragged) { + float originalDragPercent = overscrollTop / mTotalDragDistance; + if (originalDragPercent < 0) { + return false; + } + float dragPercent = Math.min(1f, Math.abs(originalDragPercent)); + float extraOS = Math.abs(overscrollTop) - mTotalDragDistance; + float slingshotDist = mUsingCustomStart ? mSpinnerFinalOffset + - mOriginalOffsetTop : mSpinnerFinalOffset; + float tensionSlingshotPercent = Math.max(0, + Math.min(extraOS, slingshotDist * 2) / slingshotDist); + float tensionPercent = (float) ((tensionSlingshotPercent / 4) - Math + .pow((tensionSlingshotPercent / 4), 2)) * 2f; + float extraMove = (slingshotDist) * tensionPercent * 2; + + int targetY = mOriginalOffsetTop + + (int) ((slingshotDist * dragPercent) + extraMove); + if (mHeadViewContainer.getVisibility() != View.VISIBLE) { + mHeadViewContainer.setVisibility(View.VISIBLE); + } + if (!mScale) { + ViewCompat.setScaleX(mHeadViewContainer, 1f); + ViewCompat.setScaleY(mHeadViewContainer, 1f); + } + if (usingDefaultHeader) { + float alpha = overscrollTop / mTotalDragDistance; + if (alpha >= 1.0f) { + alpha = 1.0f; + } + ViewCompat.setScaleX(defaultProgressView, alpha); + ViewCompat.setScaleY(defaultProgressView, alpha); + ViewCompat.setAlpha(defaultProgressView, alpha); + } + if (overscrollTop < mTotalDragDistance) { + if (mScale) { + setAnimationProgress(overscrollTop / mTotalDragDistance); + } + if (mListener != null) { + mListener.onPullEnable(false); + } + } else { + if (mListener != null) { + mListener.onPullEnable(true); + } + } + setTargetOffsetTopAndBottom(targetY - mCurrentTargetOffsetTop, + true); + } + break; + } + case MotionEventCompat.ACTION_POINTER_DOWN: { + final int index = MotionEventCompat.getActionIndex(ev); + mActivePointerId = MotionEventCompat.getPointerId(ev, index); + break; + } + + case MotionEventCompat.ACTION_POINTER_UP: + onSecondaryPointerUp(ev); + break; + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: { + if (mActivePointerId == INVALID_POINTER) { + if (action == MotionEvent.ACTION_UP) { + Log.e(LOG_TAG, + "Got ACTION_UP event but don't have an active pointer id."); + } + return false; + } + final int pointerIndex = MotionEventCompat.findPointerIndex(ev, + mActivePointerId); + final float y = MotionEventCompat.getY(ev, pointerIndex); + final float overscrollTop = (y - mInitialMotionY) * DRAG_RATE; + mIsBeingDragged = false; + if (overscrollTop > mTotalDragDistance) { + setRefreshing(true, true /* notify */); + } else { + mRefreshing = false; + AnimationListener listener = null; + if (!mScale) { + listener = new AnimationListener() { + + @Override + public void onAnimationStart(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + if (!mScale) { + startScaleDownAnimation(null); + } + } + + @Override + public void onAnimationRepeat(Animation animation) { + } + + }; + } + animateOffsetToStartPosition(mCurrentTargetOffsetTop, listener); + } + mActivePointerId = INVALID_POINTER; + return false; + } + } + + return true; + } + + /** + * 处理上拉加载更多的Touch事件 + * + * @param ev + * @param action + * @return + */ + private boolean handlerPushTouchEvent(MotionEvent ev, int action) { + switch (action) { + case MotionEvent.ACTION_DOWN: + mActivePointerId = MotionEventCompat.getPointerId(ev, 0); + mIsBeingDragged = false; + Log.d(LOG_TAG, "debug:onTouchEvent ACTION_DOWN"); + break; + case MotionEvent.ACTION_MOVE: { + final int pointerIndex = MotionEventCompat.findPointerIndex(ev, + mActivePointerId); + if (pointerIndex < 0) { + Log.e(LOG_TAG, + "Got ACTION_MOVE event but have an invalid active pointer id."); + return false; + } + final float y = MotionEventCompat.getY(ev, pointerIndex); + final float overscrollBottom = (mInitialMotionY - y) * DRAG_RATE; + if (mIsBeingDragged) { +// pushDistance = (int) overscrollBottom; +// updateFooterViewPosition(); +// if (mOnPushLoadMoreListener != null) { +// mOnPushLoadMoreListener +// .onPushEnable(pushDistance >= mFooterViewHeight); +// } + } + break; + } + case MotionEventCompat.ACTION_POINTER_DOWN: { + final int index = MotionEventCompat.getActionIndex(ev); + mActivePointerId = MotionEventCompat.getPointerId(ev, index); + break; + } + + case MotionEventCompat.ACTION_POINTER_UP: + onSecondaryPointerUp(ev); + break; + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: { + if (mActivePointerId == INVALID_POINTER) { + if (action == MotionEvent.ACTION_UP) { + Log.e(LOG_TAG, + "Got ACTION_UP event but don't have an active pointer id."); + } + return false; + } + final int pointerIndex = MotionEventCompat.findPointerIndex(ev, + mActivePointerId); + final float y = MotionEventCompat.getY(ev, pointerIndex); + final float overscrollBottom = (mInitialMotionY - y) * DRAG_RATE;// 松手是下拉的距离 + mIsBeingDragged = false; + mActivePointerId = INVALID_POINTER; +// if (overscrollBottom < mFooterViewHeight +// || mOnPushLoadMoreListener == null) {// 直接取消 +// pushDistance = 0; +// } else {// 下拉到mFooterViewHeight +// pushDistance = mFooterViewHeight; +// } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { +// updateFooterViewPosition(); +// if (pushDistance == mFooterViewHeight +// && mOnPushLoadMoreListener != null) { +// mLoadMore = true; +// mOnPushLoadMoreListener.onLoadMore(); +// } + } else { + animatorFooterToBottom((int) overscrollBottom, pushDistance); + } + return false; + } + } + return true; + } + + /** + * 松手之后,使用动画将Footer从距离start变化到end + * + * @param start + * @param end + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + private void animatorFooterToBottom(int start, final int end) { + ValueAnimator valueAnimator = ValueAnimator.ofInt(start, end); + valueAnimator.setDuration(150); + valueAnimator.addUpdateListener(new AnimatorUpdateListener() { + + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + // update + pushDistance = (Integer) valueAnimator.getAnimatedValue(); + updateFooterViewPosition(); + } + }); + valueAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { +// if (end > 0 && mOnPushLoadMoreListener != null) { +// // start loading more +// mLoadMore = true; +// mOnPushLoadMoreListener.onLoadMore(); +// } else { +// resetTargetLayout(); +// mLoadMore = false; +// } + } + }); + valueAnimator.setInterpolator(mDecelerateInterpolator); + valueAnimator.start(); + } + + /** + * 设置停止加载 + * + * @param loadMore + */ + public void setLoadMore(boolean loadMore) { + if (!loadMore && mLoadMore) {// 停止加载 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + mLoadMore = false; + pushDistance = 0; + updateFooterViewPosition(); + } else { + animatorFooterToBottom(mFooterViewHeight, 0); + } + } + } + + private void animateOffsetToCorrectPosition(int from, + AnimationListener listener) { + mFrom = from; + mAnimateToCorrectPosition.reset(); + mAnimateToCorrectPosition.setDuration(ANIMATE_TO_TRIGGER_DURATION); + mAnimateToCorrectPosition.setInterpolator(mDecelerateInterpolator); + if (listener != null) { + mHeadViewContainer.setAnimationListener(listener); + } + mHeadViewContainer.clearAnimation(); + mHeadViewContainer.startAnimation(mAnimateToCorrectPosition); + } + + private void animateOffsetToStartPosition(int from, + AnimationListener listener) { + if (mScale) { + startScaleDownReturnToStartAnimation(from, listener); + } else { + mFrom = from; + mAnimateToStartPosition.reset(); + mAnimateToStartPosition.setDuration(ANIMATE_TO_START_DURATION); + mAnimateToStartPosition.setInterpolator(mDecelerateInterpolator); + if (listener != null) { + mHeadViewContainer.setAnimationListener(listener); + } + mHeadViewContainer.clearAnimation(); + mHeadViewContainer.startAnimation(mAnimateToStartPosition); + } + resetTargetLayoutDelay(ANIMATE_TO_START_DURATION); + } + + /** + * 重置Target位置 + * + * @param delay + */ + public void resetTargetLayoutDelay(int delay) { + new Handler().postDelayed(new Runnable() { + + @Override + public void run() { + resetTargetLayout(); + } + }, delay); + } + + /** + * 重置Target的位置 + */ + public void resetTargetLayout() { + final int width = getMeasuredWidth(); + final int height = getMeasuredHeight(); + final View child = mTarget; + final int childLeft = getPaddingLeft(); + final int childTop = getPaddingTop(); + final int childWidth = child.getWidth() - getPaddingLeft() + - getPaddingRight(); + final int childHeight = child.getHeight() - getPaddingTop() + - getPaddingBottom(); + child.layout(childLeft, childTop, childLeft + childWidth, childTop + + childHeight); + + int headViewWidth = mHeadViewContainer.getMeasuredWidth(); + int headViewHeight = mHeadViewContainer.getMeasuredHeight(); + mHeadViewContainer.layout((width / 2 - headViewWidth / 2), + -headViewHeight, (width / 2 + headViewWidth / 2), 0);// 更新头布局的位置 + int footViewWidth = mFooterViewContainer.getMeasuredWidth(); + int footViewHeight = mFooterViewContainer.getMeasuredHeight(); + mFooterViewContainer.layout((width / 2 - footViewWidth / 2), height, + (width / 2 + footViewWidth / 2), height + footViewHeight); + } + + private final Animation mAnimateToCorrectPosition = new Animation() { + @Override + public void applyTransformation(float interpolatedTime, Transformation t) { + int targetTop = 0; + int endTarget = 0; + if (!mUsingCustomStart) { + endTarget = (int) (mSpinnerFinalOffset - Math + .abs(mOriginalOffsetTop)); + } else { + endTarget = (int) mSpinnerFinalOffset; + } + targetTop = (mFrom + (int) ((endTarget - mFrom) * interpolatedTime)); + int offset = targetTop - mHeadViewContainer.getTop(); + setTargetOffsetTopAndBottom(offset, false /* requires update */); + } + + @Override + public void setAnimationListener(AnimationListener listener) { + super.setAnimationListener(listener); + } + }; + + private void moveToStart(float interpolatedTime) { + int targetTop = 0; + targetTop = (mFrom + (int) ((mOriginalOffsetTop - mFrom) * interpolatedTime)); + int offset = targetTop - mHeadViewContainer.getTop(); + setTargetOffsetTopAndBottom(offset, false /* requires update */); + } + + private final Animation mAnimateToStartPosition = new Animation() { + @Override + public void applyTransformation(float interpolatedTime, Transformation t) { + moveToStart(interpolatedTime); + } + }; + + private void startScaleDownReturnToStartAnimation(int from, + AnimationListener listener) { + mFrom = from; + mStartingScale = ViewCompat.getScaleX(mHeadViewContainer); + mScaleDownToStartAnimation = new Animation() { + @Override + public void applyTransformation(float interpolatedTime, + Transformation t) { + float targetScale = (mStartingScale + (-mStartingScale * interpolatedTime)); + setAnimationProgress(targetScale); + moveToStart(interpolatedTime); + } + }; + mScaleDownToStartAnimation.setDuration(SCALE_DOWN_DURATION); + if (listener != null) { + mHeadViewContainer.setAnimationListener(listener); + } + mHeadViewContainer.clearAnimation(); + mHeadViewContainer.startAnimation(mScaleDownToStartAnimation); + } + + private void setTargetOffsetTopAndBottom(int offset, boolean requiresUpdate) { + mHeadViewContainer.bringToFront(); + mHeadViewContainer.offsetTopAndBottom(offset); + mCurrentTargetOffsetTop = mHeadViewContainer.getTop(); + if (requiresUpdate && Build.VERSION.SDK_INT < 11) { + invalidate(); + } + updateListenerCallBack(); + } + + /** + * 修改底部布局的位置-敏感pushDistance + */ + private void updateFooterViewPosition() { + mFooterViewContainer.setVisibility(View.VISIBLE); + mFooterViewContainer.bringToFront(); + //针对4.4及之前版本的兼容 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + mFooterViewContainer.getParent().requestLayout(); + } + mFooterViewContainer.offsetTopAndBottom(-pushDistance); + updatePushDistanceListener(); + } + + private void updatePushDistanceListener() { +// if (mOnPushLoadMoreListener != null) { +// mOnPushLoadMoreListener.onPushDistance(pushDistance); +// } + } + + private void onSecondaryPointerUp(MotionEvent ev) { + final int pointerIndex = MotionEventCompat.getActionIndex(ev); + final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex); + if (pointerId == mActivePointerId) { + final int newPointerIndex = pointerIndex == 0 ? 1 : 0; + mActivePointerId = MotionEventCompat.getPointerId(ev, + newPointerIndex); + } + } + + /** + * @Description 下拉刷新布局头部的容器 + */ + private class HeadViewContainer extends RelativeLayout { + + private AnimationListener mListener; + + public HeadViewContainer(Context context) { + super(context); + } + + public void setAnimationListener(AnimationListener listener) { + mListener = listener; + } + + @Override + public void onAnimationStart() { + super.onAnimationStart(); + if (mListener != null) { + mListener.onAnimationStart(getAnimation()); + } + } + + @Override + public void onAnimationEnd() { + super.onAnimationEnd(); + if (mListener != null) { + mListener.onAnimationEnd(getAnimation()); + } + } + } + + /** + * 判断子View是否跟随手指的滑动而滑动,默认跟随 + * + * @return + */ + public boolean isTargetScrollWithLayout() { + return targetScrollWithLayout; + } + + /** + * 设置子View是否跟谁手指的滑动而滑动 + * + * @param targetScrollWithLayout + */ + public void setTargetScrollWithLayout(boolean targetScrollWithLayout) { + this.targetScrollWithLayout = targetScrollWithLayout; + } + + /** + * 下拉刷新回调 + */ + public interface OnPullRefreshListener { + public void onRefresh(); + + public void onPullDistance(int distance); + + public void onPullEnable(boolean enable); + } + + /** + * 上拉加载更多 + */ + public interface OnPushLoadMoreListener { + public void onLoadMore(); + + public void onPushDistance(int distance); + + public void onPushEnable(boolean enable); + } + + /** + * Adapter + */ + public class OnPullRefreshListenerAdapter implements OnPullRefreshListener { + + @Override + public void onRefresh() { + + } + + @Override + public void onPullDistance(int distance) { + + } + + @Override + public void onPullEnable(boolean enable) { + + } + + } + + public class OnPushLoadMoreListenerAdapter implements + OnPushLoadMoreListener { + + @Override + public void onLoadMore() { + + } + + @Override + public void onPushDistance(int distance) { + + } + + @Override + public void onPushEnable(boolean enable) { + + } + + } + + /** + * 设置默认下拉刷新进度条的颜色 + * + * @param color + */ + public void setDefaultCircleProgressColor(int color) { + if (usingDefaultHeader) { + defaultProgressView.setProgressColor(color); + } + } + + /** + * 设置圆圈的背景色 + * + * @param color + */ + public void setDefaultCircleBackgroundColor(int color) { + if (usingDefaultHeader) { + defaultProgressView.setCircleBackgroundColor(color); + } + } + + public void setDefaultCircleShadowColor(int color) { + if (usingDefaultHeader) { + defaultProgressView.setShadowColor(color); + } + } + + /** + * 默认的下拉刷新样式 + */ + public class CircleProgressView extends View implements Runnable { + + private static final int PEROID = 16;// 绘制周期 + private Paint progressPaint; + private Paint bgPaint; + private int width;// view的高度 + private int height;// view的宽度 + + private boolean isOnDraw = false; + private boolean isRunning = false; + private int startAngle = 0; + private int speed = 8; + private RectF ovalRect = null; + private RectF bgRect = null; + private int swipeAngle; + private int progressColor = 0xffcccccc; + private int circleBackgroundColor = 0xffffffff; + private int shadowColor = 0xff999999; + + public CircleProgressView(Context context) { + super(context); + } + + public CircleProgressView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public CircleProgressView(Context context, AttributeSet attrs, + int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + canvas.drawArc(getBgRect(), 0, 360, false, createBgPaint()); + int index = startAngle / 360; + if (index % 2 == 0) { + swipeAngle = (startAngle % 720) / 2; + } else { + swipeAngle = 360 - (startAngle % 720) / 2; + } + canvas.drawArc(getOvalRect(), startAngle, swipeAngle, false, + createPaint()); + } + + private RectF getBgRect() { + width = getWidth(); + height = getHeight(); + if (bgRect == null) { + int offset = (int) (density * 2); + bgRect = new RectF(offset, offset, width - offset, height + - offset); + } + return bgRect; + } + + private RectF getOvalRect() { + width = getWidth(); + height = getHeight(); + if (ovalRect == null) { + int offset = (int) (density * 8); + ovalRect = new RectF(offset, offset, width - offset, height + - offset); + } + return ovalRect; + } + + public void setProgressColor(int progressColor) { + this.progressColor = progressColor; + } + + public void setCircleBackgroundColor(int circleBackgroundColor) { + this.circleBackgroundColor = circleBackgroundColor; + } + + public void setShadowColor(int shadowColor) { + this.shadowColor = shadowColor; + } + + /** + * 根据画笔的颜色,创建画笔 + * + * @return + */ + private Paint createPaint() { + if (this.progressPaint == null) { + progressPaint = new Paint(); + progressPaint.setStrokeWidth((int) (density * 3)); + progressPaint.setStyle(Paint.Style.STROKE); + progressPaint.setAntiAlias(true); + } + progressPaint.setColor(progressColor); + return progressPaint; + } + + private Paint createBgPaint() { + if (this.bgPaint == null) { + bgPaint = new Paint(); + bgPaint.setColor(circleBackgroundColor); + bgPaint.setStyle(Paint.Style.FILL); + bgPaint.setAntiAlias(true); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + this.setLayerType(LAYER_TYPE_SOFTWARE, bgPaint); + } + bgPaint.setShadowLayer(4.0f, 0.0f, 2.0f, shadowColor); + } + return bgPaint; + } + + public void setPullDistance(int distance) { + this.startAngle = distance * 2; + postInvalidate(); + } + + @Override + public void run() { + while (isOnDraw) { + isRunning = true; + long startTime = System.currentTimeMillis(); + startAngle += speed; + postInvalidate(); + long time = System.currentTimeMillis() - startTime; + if (time < PEROID) { + try { + Thread.sleep(PEROID - time); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + public void setOnDraw(boolean isOnDraw) { + this.isOnDraw = isOnDraw; + } + + public void setSpeed(int speed) { + this.speed = speed; + } + + public boolean isRunning() { + return isRunning; + } + + @Override + public void onWindowFocusChanged(boolean hasWindowFocus) { + super.onWindowFocusChanged(hasWindowFocus); + } + + @Override + protected void onDetachedFromWindow() { + isOnDraw = false; + super.onDetachedFromWindow(); + } + + } + +} diff --git a/app/src/main/java/com/yonsz/z1/view/SwitchView.java b/app/src/main/java/com/yonsz/z1/view/SwitchView.java new file mode 100644 index 0000000..cf6461f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/SwitchView.java @@ -0,0 +1,468 @@ +package com.yonsz.z1.view; + +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.RadialGradient; +import android.graphics.RectF; +import android.graphics.Shader; +import android.os.Build; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.AccelerateInterpolator; + +import com.yonsz.z1.R; + +/** + * QQ Group 274306954 + */ +public class SwitchView extends View { + /*private final int DEFAULT_COLOR_PRIMARY = 0xFF4BD763; + private final int DEFAULT_COLOR_PRIMARY_DARK = 0xFF3AC652;*/ + private final int DEFAULT_COLOR_PRIMARY = 0xFF398dee; + private final int DEFAULT_COLOR_PRIMARY_DARK = 0xFF398dee; + private final float RATIO_ASPECT = 0.68f; + private final float ANIMATION_SPEED = 0.1f; // (0,1] + private static final int STATE_SWITCH_ON = 4; // you change value you die + private static final int STATE_SWITCH_ON2 = 3; + private static final int STATE_SWITCH_OFF2 = 2; + private static final int STATE_SWITCH_OFF = 1; + + private final AccelerateInterpolator interpolator = new AccelerateInterpolator(2); + private final Paint paint = new Paint(); + private final Path sPath = new Path(); + private final Path bPath = new Path(); + private final RectF bRectF = new RectF(); + private float sAnim, bAnim; + private RadialGradient shadowGradient; + + private int state; + private int lastState; + private boolean isCanVisibleDrawing = false; + private OnClickListener mOnClickListener; + private int colorPrimary; + private int colorPrimaryDark; + private boolean hasShadow; + private boolean isOpened; + + private int mWidth, mHeight; + private int actuallyDrawingAreaLeft; + private int actuallyDrawingAreaRight; + private int actuallyDrawingAreaTop; + private int actuallyDrawingAreaBottom; + + private float sWidth, sHeight; + private float sLeft, sTop, sRight, sBottom; + private float sCenterX, sCenterY; + private float sScale; + + private float bOffset; + private float bRadius, bStrokeWidth; + private float bWidth; + private float bLeft, bTop, bRight, bBottom; + private float bOnLeftX, bOn2LeftX, bOff2LeftX, bOffLeftX; + + private float shadowReservedHeight; + + public SwitchView(Context context) { + this(context, null); + } + + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public SwitchView(Context context, AttributeSet attrs) { + super(context, attrs); + setLayerType(LAYER_TYPE_SOFTWARE, null); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SwitchView); + colorPrimary = a.getColor(R.styleable.SwitchView_primaryColor, DEFAULT_COLOR_PRIMARY); + colorPrimaryDark = a.getColor(R.styleable.SwitchView_primaryColorDark, DEFAULT_COLOR_PRIMARY_DARK); + hasShadow = a.getBoolean(R.styleable.SwitchView_hasShadow, true); + isOpened = a.getBoolean(R.styleable.SwitchView_isOpened, false); + state = isOpened ? STATE_SWITCH_ON : STATE_SWITCH_OFF; + lastState = state; + a.recycle(); + + if (colorPrimary == DEFAULT_COLOR_PRIMARY && colorPrimaryDark == DEFAULT_COLOR_PRIMARY_DARK) { + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + TypedValue primaryColorTypedValue = new TypedValue(); + context.getTheme().resolveAttribute(android.R.attr.colorPrimary, primaryColorTypedValue, true); + if (primaryColorTypedValue.data > 0) colorPrimary = primaryColorTypedValue.data; + TypedValue primaryColorDarkTypedValue = new TypedValue(); + context.getTheme().resolveAttribute(android.R.attr.colorPrimaryDark, primaryColorDarkTypedValue, true); + if (primaryColorDarkTypedValue.data > 0) + colorPrimaryDark = primaryColorDarkTypedValue.data; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public void setColor(int newColorPrimary, int newColorPrimaryDark) { + colorPrimary = newColorPrimary; + colorPrimaryDark = newColorPrimaryDark; + invalidate(); + } + + public void setShadow(boolean shadow) { + hasShadow = shadow; + invalidate(); + } + + public boolean isOpened() { + return isOpened; + } + + public void setOpened(boolean isOpened) { + int wishState = isOpened ? STATE_SWITCH_ON : STATE_SWITCH_OFF; + if (wishState == state) { + return; + } + refreshState(wishState); + } + + public void toggleSwitch(boolean isOpened) { + int wishState = isOpened ? STATE_SWITCH_ON : STATE_SWITCH_OFF; + if (wishState == state) { + return; + } + if ((wishState == STATE_SWITCH_ON && (state == STATE_SWITCH_OFF || state == STATE_SWITCH_OFF2)) + || (wishState == STATE_SWITCH_OFF && (state == STATE_SWITCH_ON || state == STATE_SWITCH_ON2))) { + sAnim = 1; + } + bAnim = 1; + refreshState(wishState); + } + + private void refreshState(int newState) { + if (!isOpened && newState == STATE_SWITCH_ON) { + isOpened = true; + } else if (isOpened && newState == STATE_SWITCH_OFF) { + isOpened = false; + } + lastState = state; + state = newState; + postInvalidate(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int widthSize = MeasureSpec.getSize(widthMeasureSpec); + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int resultWidth; + if (widthMode == MeasureSpec.EXACTLY) { + resultWidth = widthSize; + } else { + resultWidth = (int) (56 * getResources().getDisplayMetrics().density + 0.5f) + + getPaddingLeft() + getPaddingRight(); + if (widthMode == MeasureSpec.AT_MOST) { + resultWidth = Math.min(resultWidth, widthSize); + } + } + + int heightSize = MeasureSpec.getSize(heightMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + int resultHeight; + if (heightMode == MeasureSpec.EXACTLY) { + resultHeight = heightSize; + } else { + int selfExpectedResultHeight = (int) (resultWidth * RATIO_ASPECT) + getPaddingTop() + getPaddingBottom(); + resultHeight = selfExpectedResultHeight; + if (heightMode == MeasureSpec.AT_MOST) { + resultHeight = Math.min(resultHeight, heightSize); + } + } + setMeasuredDimension(resultWidth, resultHeight); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + mWidth = w; + mHeight = h; + isCanVisibleDrawing = mWidth > getPaddingLeft() + getPaddingRight() && mHeight > getPaddingTop() + getPaddingBottom(); + + if (isCanVisibleDrawing) { + int actuallyDrawingAreaWidth = mWidth - getPaddingLeft() - getPaddingRight(); + int actuallyDrawingAreaHeight = mHeight - getPaddingTop() - getPaddingBottom(); + + if (actuallyDrawingAreaWidth * RATIO_ASPECT < actuallyDrawingAreaHeight) { + actuallyDrawingAreaLeft = getPaddingLeft(); + actuallyDrawingAreaRight = mWidth - getPaddingRight(); + int heightExtraSize = (int) (actuallyDrawingAreaHeight - actuallyDrawingAreaWidth * RATIO_ASPECT); + actuallyDrawingAreaTop = getPaddingTop() + heightExtraSize / 2; + actuallyDrawingAreaBottom = getHeight() - getPaddingBottom() - heightExtraSize / 2; + } else { + int widthExtraSize = (int) (actuallyDrawingAreaWidth - actuallyDrawingAreaHeight / RATIO_ASPECT); + actuallyDrawingAreaLeft = getPaddingLeft() + widthExtraSize / 2; + actuallyDrawingAreaRight = getWidth() - getPaddingRight() - widthExtraSize / 2; + actuallyDrawingAreaTop = getPaddingTop(); + actuallyDrawingAreaBottom = getHeight() - getPaddingBottom(); + } + + shadowReservedHeight = (int) ((actuallyDrawingAreaBottom - actuallyDrawingAreaTop) * 0.09f); + sLeft = actuallyDrawingAreaLeft; + sTop = actuallyDrawingAreaTop + shadowReservedHeight; + sRight = actuallyDrawingAreaRight; + sBottom = actuallyDrawingAreaBottom - shadowReservedHeight; + + sWidth = sRight - sLeft; + sHeight = sBottom - sTop; + sCenterX = (sRight + sLeft) / 2; + sCenterY = (sBottom + sTop) / 2; + + bLeft = sLeft; + bTop = sTop; + bBottom = sBottom; + bWidth = sBottom - sTop; + bRight = sLeft + bWidth; + final float halfHeightOfS = bWidth / 2; // OfB + bRadius = halfHeightOfS * 0.95f; + bOffset = bRadius * 0.2f; // offset of switching + bStrokeWidth = (halfHeightOfS - bRadius) * 2; + bOnLeftX = sRight - bWidth; + bOn2LeftX = bOnLeftX - bOffset; + bOffLeftX = sLeft; + bOff2LeftX = bOffLeftX + bOffset; + sScale = 1 - bStrokeWidth / sHeight; + + sPath.reset(); + RectF sRectF = new RectF(); + sRectF.top = sTop; + sRectF.bottom = sBottom; + sRectF.left = sLeft; + sRectF.right = sLeft + sHeight; + sPath.arcTo(sRectF, 90, 180); + sRectF.left = sRight - sHeight; + sRectF.right = sRight; + sPath.arcTo(sRectF, 270, 180); + sPath.close(); + + bRectF.left = bLeft; + bRectF.right = bRight; + bRectF.top = bTop + bStrokeWidth / 2; + bRectF.bottom = bBottom - bStrokeWidth / 2; + float bCenterX = (bRight + bLeft) / 2; + float bCenterY = (bBottom + bTop) / 2; + + shadowGradient = new RadialGradient(bCenterX, bCenterY, bRadius, 0xff000000, 0x00000000, Shader.TileMode.CLAMP); + } + } + + private void calcBPath(float percent) { + bPath.reset(); + bRectF.left = bLeft + bStrokeWidth / 2; + bRectF.right = bRight - bStrokeWidth / 2; + bPath.arcTo(bRectF, 90, 180); + bRectF.left = bLeft + percent * bOffset + bStrokeWidth / 2; + bRectF.right = bRight + percent * bOffset - bStrokeWidth / 2; + bPath.arcTo(bRectF, 270, 180); + bPath.close(); + } + + private float calcBTranslate(float percent) { + float result = 0; + switch (state - lastState) { + case 1: + if (state == STATE_SWITCH_OFF2) { + result = bOffLeftX; // off -> off2 + } else if (state == STATE_SWITCH_ON) { + result = bOnLeftX - (bOnLeftX - bOn2LeftX) * percent; // on2 -> on + } + break; + case 2: + if (state == STATE_SWITCH_ON) { + result = bOnLeftX - (bOnLeftX - bOffLeftX) * percent; // off2 -> on + } else if (state == STATE_SWITCH_ON) { + result = bOn2LeftX - (bOn2LeftX - bOffLeftX) * percent; // off -> on2 + } + break; + case 3: + result = bOnLeftX - (bOnLeftX - bOffLeftX) * percent; // off -> on + break; + case -1: + if (state == STATE_SWITCH_ON2) { + result = bOn2LeftX + (bOnLeftX - bOn2LeftX) * percent; // on -> on2 + } else if (state == STATE_SWITCH_OFF) { + result = bOffLeftX; // off2 -> off + } + break; + case -2: + if (state == STATE_SWITCH_OFF) { + result = bOffLeftX + (bOn2LeftX - bOffLeftX) * percent; // on2 -> off + } else if (state == STATE_SWITCH_OFF2) { + result = bOff2LeftX + (bOnLeftX - bOff2LeftX) * percent; // on -> off2 + } + break; + case -3: + result = bOffLeftX + (bOnLeftX - bOffLeftX) * percent; // on -> off + break; + default: // init + case 0: + if (state == STATE_SWITCH_OFF) { + result = bOffLeftX; // off -> off + } else if (state == STATE_SWITCH_ON) { + result = bOnLeftX; // on -> on + } + break; + } + return result - bOffLeftX; + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (!isCanVisibleDrawing) return; + + paint.setAntiAlias(true); + final boolean isOn = (state == STATE_SWITCH_ON || state == STATE_SWITCH_ON2); + // Draw background + paint.setStyle(Paint.Style.FILL); + paint.setColor(isOn ? colorPrimary : 0xffE3E3E3); + canvas.drawPath(sPath, paint); + + sAnim = sAnim - ANIMATION_SPEED > 0 ? sAnim - ANIMATION_SPEED : 0; + bAnim = bAnim - ANIMATION_SPEED > 0 ? bAnim - ANIMATION_SPEED : 0; + + final float dsAnim = interpolator.getInterpolation(sAnim); + final float dbAnim = interpolator.getInterpolation(bAnim); + // Draw background animation + final float scale = sScale * (isOn ? dsAnim : 1 - dsAnim); + final float scaleOffset = (sRight - sCenterX - bRadius) * (isOn ? 1 - dsAnim : dsAnim); + canvas.save(); + canvas.scale(scale, scale, sCenterX + scaleOffset, sCenterY); + paint.setColor(0xFFFFFFFF); + canvas.drawPath(sPath, paint); + canvas.restore(); + // To prepare center bar path + canvas.save(); + canvas.translate(calcBTranslate(dbAnim), shadowReservedHeight); + final boolean isState2 = (state == STATE_SWITCH_ON2 || state == STATE_SWITCH_OFF2); + calcBPath(isState2 ? 1 - dbAnim : dbAnim); + // Use center bar path to draw shadow + if (hasShadow) { + paint.setStyle(Paint.Style.FILL); + paint.setColor(0xFF333333); + paint.setShader(shadowGradient); + canvas.drawPath(bPath, paint); + paint.setShader(null); + } + canvas.translate(0, -shadowReservedHeight); + // draw bar + canvas.scale(0.98f, 0.98f, bWidth / 2, bWidth / 2); + paint.setStyle(Paint.Style.FILL); + paint.setColor(0xffffffff); + canvas.drawPath(bPath, paint); + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeWidth(bStrokeWidth * 0.5f); + paint.setColor(isOn ? colorPrimaryDark : 0xFFBFBFBF); + canvas.drawPath(bPath, paint); + canvas.restore(); + + paint.reset(); + if (sAnim > 0 || bAnim > 0) invalidate(); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if ((state == STATE_SWITCH_ON || state == STATE_SWITCH_OFF) && (sAnim * bAnim == 0)) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + return true; + case MotionEvent.ACTION_UP: + lastState = state; + + bAnim = 1; + if (state == STATE_SWITCH_OFF) { + refreshState(STATE_SWITCH_OFF2); + listener.toggleToOn(this); + } else if (state == STATE_SWITCH_ON) { + refreshState(STATE_SWITCH_ON2); + listener.toggleToOff(this); + } + + if (mOnClickListener != null) { + mOnClickListener.onClick(this); + } + break; + } + } + return super.onTouchEvent(event); + } + + @Override + public void setOnClickListener(OnClickListener l) { + super.setOnClickListener(l); + mOnClickListener = l; + } + + public interface OnStateChangedListener { + void toggleToOn(SwitchView view); + + void toggleToOff(SwitchView view); + } + + private OnStateChangedListener listener = new OnStateChangedListener() { + @Override + public void toggleToOn(SwitchView view) { + toggleSwitch(true); + } + + @Override + public void toggleToOff(SwitchView view) { + toggleSwitch(false); + } + }; + + public void setOnStateChangedListener(OnStateChangedListener listener) { + if (listener == null) throw new IllegalArgumentException("empty listener"); + this.listener = listener; + } + + @Override + public Parcelable onSaveInstanceState() { + Parcelable superState = super.onSaveInstanceState(); + SavedState ss = new SavedState(superState); + ss.isOpened = isOpened; + return ss; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + SavedState ss = (SavedState) state; + super.onRestoreInstanceState(ss.getSuperState()); + this.isOpened = ss.isOpened; + this.state = this.isOpened ? STATE_SWITCH_ON : STATE_SWITCH_OFF; + invalidate(); + } + + @SuppressLint("ParcelCreator") + static final class SavedState extends BaseSavedState { + private boolean isOpened; + + SavedState(Parcelable superState) { + super(superState); + } + + private SavedState(Parcel in) { + super(in); + isOpened = 1 == in.readInt(); + } + + @Override + public void writeToParcel(Parcel out, int flags) { + super.writeToParcel(out, flags); + out.writeInt(isOpened ? 1 : 0); + } + } + +} diff --git a/app/src/main/java/com/yonsz/z1/view/TextViewVertical.java b/app/src/main/java/com/yonsz/z1/view/TextViewVertical.java new file mode 100644 index 0000000..5445119 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/TextViewVertical.java @@ -0,0 +1,45 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.TextView; + +/** + * Created by Administrator on 2020/10/23. + */ + +public class TextViewVertical extends TextView { + + public TextViewVertical(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + public TextViewVertical(Context context) { + super(context); + // TODO Auto-generated constructor stub + } + + @Override + public void setText(CharSequence text, BufferType type) { + // TODO Auto-generated method stub + if ("".equals(text) || text == null || text.length() == 0) { + return; + } + int m = 6; + if (text.length() > 6) { + //暂时先不限制6个了 + m = 6; + } else { + m = text.length(); + } + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < m; i++) { + CharSequence index = text.toString().subSequence(i, i + 1); + sb.append(index + "\n"); + /* if (i == 3 || i == 7 || i == 11) { + }*/ + } + super.setText(sb, type); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/TextViewVertical2.java b/app/src/main/java/com/yonsz/z1/view/TextViewVertical2.java new file mode 100644 index 0000000..d355fbd --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/TextViewVertical2.java @@ -0,0 +1,382 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Typeface; +import android.support.annotation.IntDef; +import android.util.AttributeSet; +import android.view.View; + +import com.yonsz.z1.R; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +public class TextViewVertical2 extends View { + + public static final int START_LEFT = 1; + public static final int START_RIGHT = 2; + + public static final int NONE = 0; + public static final int RIGHT_LINE = 2; + public static final int LEFT_LINE = 1; + + + @IntDef({START_LEFT, START_RIGHT}) + @Retention(RetentionPolicy.SOURCE) + public @interface START_ORIENTATION { + } + + @IntDef({NONE, RIGHT_LINE, LEFT_LINE}) + @Retention(RetentionPolicy.SOURCE) + public @interface LINE_ORIENTATION { + } + + private float textSize = 56; + private int textColor = Color.BLACK; + private String text = ""; + private int startOrientation = START_LEFT; + private int lineOrientation = NONE; + private float lineWidth = dip2px(getContext(), 0.5f); + private int lineColor = Color.BLACK; + private String cutChars; + private float textHorizontalMargin = dip2px(getContext(), 4); + private float textVerticalMargin = dip2px(getContext(), 3); + private float line2TextMargin = -1; + + Paint paint; + int width; + int height = -1; + + public TextViewVertical2(Context context) { + super(context); + init(); + } + + public TextViewVertical2(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TextViewVertical); + int count = typedArray.getIndexCount(); + for (int i = 0; i < count; i++) { + int index = typedArray.getIndex(i); + if (index == R.styleable.TextViewVertical_v_start) { + startOrientation = typedArray.getInt(index, START_LEFT); + } else if (index == R.styleable.TextViewVertical_v_text) { + text = typedArray.getString(index); + } else if (index == R.styleable.TextViewVertical_v_textColor) { + textColor = typedArray.getColor(index, Color.BLACK); + } else if (index == R.styleable.TextViewVertical_v_textSize) { + textSize = typedArray.getDimension(index, 16); + } else if (index == R.styleable.TextViewVertical_v_cutChars) { + cutChars = typedArray.getString(index); + } else if (index == R.styleable.TextViewVertical_v_textVerticalMargin) { + textVerticalMargin = typedArray.getDimension(index, textVerticalMargin); + } else if (index == R.styleable.TextViewVertical_v_textHorizontalMargin) { + textHorizontalMargin = typedArray.getDimension(index, textHorizontalMargin); + } else if (index == R.styleable.TextViewVertical_v_line) { + lineOrientation = typedArray.getInt(index, NONE); + } else if (index == R.styleable.TextViewVertical_v_lineWidth) { + lineWidth = typedArray.getDimension(index, lineWidth); + } else if (index == R.styleable.TextViewVertical_v_lineColor) { + lineColor = typedArray.getColor(index, Color.BLACK); + } else if (index == R.styleable.TextViewVertical_v_line2TextMargin) { + line2TextMargin = textHorizontalMargin / 2 + lineWidth / 2 - typedArray.getDimension(index, 0); + } + } + init(); + } + + private void init() { + paint = new Paint(); + if (textSize > 0) { + paint.setTextSize(textSize); + } + paint.setColor(textColor); + paint.setAntiAlias(true); + paint.setTextAlign(Paint.Align.CENTER); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int h = measureHeight(heightMeasureSpec); + //此处修复relativelayout下存在的异常 + if (height == -1) { + height = h; + } else { + if (height > h) { + height = h; + } + } + width = measureWidth(widthMeasureSpec); + setMeasuredDimension(width, height); + } + + public void setLine2TextMargin(float line2TextMargin) { + + this.line2TextMargin = textHorizontalMargin / 2 + lineWidth / 2 - line2TextMargin; + invalidate(); + } + + public void setStartOrientation(@LINE_ORIENTATION int startOrientation) { + this.startOrientation = startOrientation; + invalidate(); + } + + public void setLineWidth(float lineWidth) { + this.lineWidth = lineWidth; + invalidate(); + } + + public void setLineColor(int lineColor) { + this.lineColor = lineColor; + invalidate(); + } + + public void setTypeface(Typeface typeface) { + paint.setTypeface(typeface); + invalidate(); + } + + public void setTextHorizontalMargin(float textHorizontalMargin) { + this.textHorizontalMargin = textHorizontalMargin; + invalidate(); + } + + public void setTextVerticalMargin(float textVerticalMargin) { + this.textVerticalMargin = textVerticalMargin; + invalidate(); + } + + public void setLineOrientation(@LINE_ORIENTATION int lineOrientation) { + this.lineOrientation = lineOrientation; + invalidate(); + } + + public void setCutChars(String cutChars) { + this.cutChars = cutChars; + invalidate(); + } + + /** + * 设置文字尺寸 + * + * @param textSize + */ + public void setTextSize(float textSize) { + this.textSize = textSize; + invalidate(); + } + + /** + * 设置文字颜色 + * + * @param textColor + */ + public void setTextColor(int textColor) { + this.textColor = textColor; + invalidate(); + } + + /** + * 设置文字 + * + * @param text + */ + public void setText(String text) { + this.text = text; + invalidate(); + } + + /** + * 设置文字起始方向 + * + * @param startOrientation + */ + public void setStart(@START_ORIENTATION int startOrientation) { + this.startOrientation = startOrientation; + invalidate(); + } + + + private int measureWidth(int measureSpec) { + int result = 0; + int specMode = MeasureSpec.getMode(measureSpec); + int specSize = MeasureSpec.getSize(measureSpec); + + if (specMode == MeasureSpec.EXACTLY) { + + result = specSize; + } else { + return (int) measureTextWidth(); + } + return result; + } + + private int measureHeight(int measureSpec) { + int result = 0; + int specMode = MeasureSpec.getMode(measureSpec); + int specSize = MeasureSpec.getSize(measureSpec); + + if (specMode == MeasureSpec.EXACTLY) { + result = specSize; + } else { + result = (int) (getOneWordHeight() * text.length()); + if (specMode == MeasureSpec.AT_MOST) { + result = Math.min(result, specSize); + } + } + return result; + } + + private float measureTextWidth() { + if (getColNum() == 1) { + return getOneWordWidth() + getPaddingLeft() + getPaddingRight(); + } + + return getOneWordWidth() * getColNum() + getPaddingLeft() + getPaddingRight(); + } + + private float getTextBaseLine(RectF rect) { + Paint.FontMetricsInt metricsInt = paint.getFontMetricsInt(); + return (rect.top + rect.bottom - metricsInt.top - metricsInt.bottom) / 2; + } + + + private int getColNum() { + + int oneRowWordCount = getColWordCount(); + int colNum = 0; + if (cutChars != null) { + String[] textArray = text.split(cutChars); + for (int i = 0; i < textArray.length; i++) { + if (textArray[i].length() > oneRowWordCount) { + colNum += textArray[i].length() / oneRowWordCount; + if (textArray[i].length() % oneRowWordCount > 0) { + colNum++; + } + } else { + colNum++; + } + } + } else { + colNum = text.length() / oneRowWordCount; + if (text.length() % oneRowWordCount > 0) { + colNum++; + } + } + + + return colNum; + } + + private float getOneWordWidth() { + return paint.measureText(getResources().getString(R.string.word)) + textHorizontalMargin; + } + + private float getOneWordHeight() { + /* Paint.FontMetricsInt metricsInt = paint.getFontMetricsInt(); + return (metricsInt.bottom - metricsInt.top);*/ + Rect rect = new Rect(); + paint.getTextBounds(getResources().getString(R.string.word), 0, 1, rect); + return rect.height() + textVerticalMargin; + } + + private int getColWordCount() { + int oneLineWordCount = (int) (height / getOneWordHeight()); + return oneLineWordCount; + } + + public int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + int oneLineWordCount = getColWordCount(); + + float w = getOneWordWidth(); + float h = getOneWordHeight(); + + int colNum = getColNum(); + + String[] cutCharArray = cutChars == null ? null : cutChars.split("|"); + if (cutCharArray != null) { + String[] textArray = text.split(cutChars); + int stepCol = 0; + for (int n = 0; n < textArray.length; n++) { + String text = textArray[n]; + int currentCol = 0; + for (int i = 0; i < text.length(); i++) { + String str = String.valueOf(text.charAt(i)); + int currentRow = i % oneLineWordCount; + if (colNum == 1) { + currentRow = i; + } + if (colNum > 1) { + currentCol = stepCol + (i / oneLineWordCount); + } + drawText(w, h, currentCol, currentRow, str, canvas); + if (i + 1 == text.length()) { + stepCol = currentCol + 1; + } + } + } + } else { + int currentCol = 0; + for (int i = 0; i < text.length(); i++) { + String str = String.valueOf(text.charAt(i)); + int currentRow = i % oneLineWordCount; + if (colNum == 1) { + currentRow = i; + } + if (colNum > 1) { + currentCol = (i) / oneLineWordCount; + } + drawText(w, h, currentCol, currentRow, str, canvas); + + } + } + + } + + private void drawText(float w, float h, int currentCol, int currentRow, String str, Canvas canvas) { + RectF rectF; + if (startOrientation == START_LEFT) { + rectF = new RectF(currentCol * w, currentRow * h, currentCol * w + w, currentRow * h + h); + } else { + rectF = new RectF((width - (currentCol + 1) * w), currentRow * h, (width - (currentCol + 1) * w) + w, currentRow * h + h); + } + float baseline = getTextBaseLine(rectF); + paint.setColor(textColor); + paint.setStyle(Paint.Style.FILL); + canvas.drawText(str, rectF.centerX(), baseline, paint); + paint.setColor(lineColor); + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeWidth(lineWidth); + if (line2TextMargin == -1) { + line2TextMargin = lineWidth * 1f / 2; + } + if (lineOrientation == RIGHT_LINE) { + Path path = new Path(); + path.moveTo(rectF.right - line2TextMargin, rectF.top); + path.lineTo(rectF.right - line2TextMargin, rectF.bottom); + canvas.drawPath(path, paint); + } else if (lineOrientation == LEFT_LINE) { + Path path = new Path(); + path.moveTo(rectF.left + line2TextMargin, rectF.top); + path.lineTo(rectF.left + line2TextMargin, rectF.bottom); + canvas.drawPath(path, paint); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/view/TimeRangePickerDialog.java b/app/src/main/java/com/yonsz/z1/view/TimeRangePickerDialog.java new file mode 100644 index 0000000..58447bc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/TimeRangePickerDialog.java @@ -0,0 +1,213 @@ +package com.yonsz.z1.view; + +import android.app.Dialog; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.drawable.ColorDrawable; +import android.os.Build; +import android.os.Bundle; +import android.util.DisplayMetrics; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.NumberPicker; +import android.widget.TimePicker; + +import com.yonsz.z1.R; +import com.yonsz.z1.utils.CommonUtils; + +import java.lang.reflect.Field; +import java.util.List; + +/** + * Created by zhxh on 2018/4/28. + */ + +public class TimeRangePickerDialog extends Dialog { + private Context context; + + private String startTime; + private String endTime; + + private int screenWidth; + + private TimePicker timePickerStart; + private TimePicker timePickerEnd; + + private View cancelBtn, submitBtn; + + private ConfirmAction confirmAction; + + public TimeRangePickerDialog(Context context) { + + super(context); + + this.context = context; + } + + public TimeRangePickerDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { + super(context, cancelable, cancelListener); + + this.context = context; + } + + public TimeRangePickerDialog(Context context, int theme) { + + super(context, theme); + + this.context = context; + } + + public TimeRangePickerDialog(Context context, String startAndEndTime, ConfirmAction confirmAction) { + super(context, R.style.dialog); + + this.context = context; + + List strings = CommonUtils.getRegEx(startAndEndTime, "\\d+:\\d+"); + if (!CommonUtils.isNull(strings) && strings.size() >= 2) { + this.startTime = CommonUtils.getRegEx(startAndEndTime, "\\d+:\\d+").get(0); + this.endTime = CommonUtils.getRegEx(startAndEndTime, "\\d+:\\d+").get(1); + } + + this.confirmAction = confirmAction; + + DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + screenWidth = metrics.widthPixels - getDensityValue(80, context); + + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + View view = LayoutInflater.from(context).inflate(R.layout.dialog_time_range_picker, null); + setContentView(view); + getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + + initView(); + initData(); + setEvent(); + + } + + private void initView() { + + timePickerStart = (TimePicker) findViewById(R.id.timePickerStart); + timePickerEnd = (TimePicker) findViewById(R.id.timePickerEnd); + cancelBtn = findViewById(R.id.cancelBtn); + submitBtn = findViewById(R.id.submitBtn); + + } + + private void initData() { + + timePickerStart.setIs24HourView(true); + timePickerEnd.setIs24HourView(true); + timePickerStart.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); + timePickerEnd.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); + + setTimePickerDividerColor(timePickerStart); + setTimePickerDividerColor(timePickerEnd); + + if (!CommonUtils.isNull(startTime) && !CommonUtils.isNull(endTime)) { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + timePickerStart.setHour(Integer.parseInt(startTime.substring(0, startTime.indexOf(":")))); + timePickerStart.setMinute(Integer.parseInt(startTime.substring(startTime.indexOf(":") + 1))); + + timePickerEnd.setHour(Integer.parseInt(endTime.substring(0, endTime.indexOf(":")))); + timePickerEnd.setMinute(Integer.parseInt(endTime.substring(endTime.indexOf(":") + 1))); + } else { + timePickerStart.setCurrentHour(Integer.parseInt(startTime.substring(0, startTime.indexOf(":")))); + timePickerStart.setCurrentMinute(Integer.parseInt(startTime.substring(startTime.indexOf(":") + 1))); + + timePickerEnd.setCurrentHour(Integer.parseInt(endTime.substring(0, endTime.indexOf(":")))); + timePickerEnd.setCurrentMinute(Integer.parseInt(endTime.substring(endTime.indexOf(":") + 1))); + } + + } + + timePickerStart.setOnTimeChangedListener((timePicker, hourOfDay, minute) -> { + + String h = hourOfDay < 10 ? "0" + hourOfDay : "" + hourOfDay; + String m = minute < 10 ? "0" + minute : "" + minute; + startTime = h + ":" + m; + }); + timePickerEnd.setOnTimeChangedListener((timePicker, hourOfDay, minute) -> { + String h = hourOfDay < 10 ? "0" + hourOfDay : "" + hourOfDay; + String m = minute < 10 ? "0" + minute : "" + minute; + endTime = h + ":" + m; + }); + } + + private void setEvent() { + + cancelBtn.setOnClickListener(v -> { + + confirmAction.onLeftClick(); + dismiss(); + }); + + submitBtn.setOnClickListener(v -> { + + confirmAction.onRightClick(startTime + " - " + endTime); + dismiss(); + }); + + this.setCanceledOnTouchOutside(true); + + } + + private void setTimePickerDividerColor(TimePicker timePicker) { + LinearLayout llFirst = (LinearLayout) timePicker.getChildAt(0); + LinearLayout mSpinners = (LinearLayout) llFirst.getChildAt(1); + for (int i = 0; i < mSpinners.getChildCount(); i++) { + if (mSpinners.getChildAt(i) instanceof NumberPicker) { + Field[] pickerFields = NumberPicker.class.getDeclaredFields(); + setPickerMargin((NumberPicker) mSpinners.getChildAt(i)); + for (Field pf : pickerFields) { + if (pf.getName().equals("mSelectionDivider")) { + pf.setAccessible(true); + try { + pf.set(mSpinners.getChildAt(i), new ColorDrawable()); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (Resources.NotFoundException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + break; + } + } + } + } + } + + /** + * 设置picker之间的间距 + */ + private void setPickerMargin(NumberPicker picker) { + LinearLayout.LayoutParams p = (LinearLayout.LayoutParams) picker.getLayoutParams(); + p.setMargins(-getDensityValue(16, context), 0, -getDensityValue(16, context), 0); + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR1) { + p.setMarginStart(-getDensityValue(16, context)); + p.setMarginEnd(-getDensityValue(16, context)); + } + } + + + public interface ConfirmAction { + + void onLeftClick(); + + void onRightClick(String startAndEndTime); + } + + public static int getDensityValue(float value, Context activity) { + + DisplayMetrics displayMetrics = activity.getResources().getDisplayMetrics(); + + return (int) Math.ceil(value * displayMetrics.density); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/TitleView.java b/app/src/main/java/com/yonsz/z1/view/TitleView.java new file mode 100644 index 0000000..4bf92bd --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/TitleView.java @@ -0,0 +1,386 @@ +package com.yonsz.z1.view; + +import android.content.Context; +import android.graphics.Color; +import android.os.Build; +import android.support.annotation.DrawableRes; +import android.support.annotation.RequiresApi; +import android.support.annotation.StringRes; +import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.utils.SharedpreferencesUtil; + +/** + * Created by Administrator on 2017/5/26. + */ + +public class TitleView extends RelativeLayout implements View.OnClickListener { + private ImageView mBack; + private RelativeLayout mBackRl; + private ImageView mSet; + private FcousTextView mHead; + private TextView mHeadFuntion; + private TextView mHeadBack; + private RelativeLayout mFuntion; + private OnTitleItemClickListener mListener; + private TextView redCircleMe; + private TextView tv_home_name; + private LinearLayout ll_home_name; + private ImageView iv_home_pic; + private View view; + private View bar; + + public TitleView(Context context) { + super(context); + initView(context); + } + + public TitleView(Context context, AttributeSet attrs) { + super(context, attrs); + initView(context); + } + + public TitleView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initView(context); + } + + private void initView(Context context) { + view = LayoutInflater.from(context).inflate(R.layout.title_layout, this); + bar = (View) findViewById(R.id.bar); + mBack = (ImageView) findViewById(R.id.iv_back); + mBackRl = (RelativeLayout) findViewById(R.id.rl_back); + mHeadBack = (TextView) findViewById(R.id.tv_back_txt); + redCircleMe = (TextView) findViewById(R.id.tv_notify_red_circle_me); + mHead = (FcousTextView) findViewById(R.id.tv_title); + mFuntion = (RelativeLayout) findViewById(R.id.iv_funtion); + mSet = (ImageView) findViewById(R.id.iv_set); + ll_home_name = (LinearLayout) findViewById(R.id.ll_home_name); + tv_home_name = (TextView) findViewById(R.id.tv_home_name); + mHeadFuntion = (TextView) findViewById(R.id.tv_set); + iv_home_pic = (ImageView) findViewById(R.id.iv_home_pic); + mBackRl.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mListener != null) { + mListener.onBack(); + } + } + }); + ll_home_name.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mListener != null) { + mListener.onBack(); + } + } + }); + mHeadBack.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mListener != null) { + mListener.onBack(); + } + } + }); + mFuntion.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mListener != null) { + mListener.onFunction(); + } + } + }); + mHead.setVisibility(GONE); + mHeadFuntion.setVisibility(GONE); + mSet.setVisibility(GONE); + if (Build.VERSION.SDK_INT >= 19) { + bar.setVisibility(View.VISIBLE); + } else { + bar.setVisibility(View.GONE); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + } + String phoneModel = Build.MODEL; +// String s = SharedpreferencesUtil.get(Constans.ISALLSCREEN, ""); + if (phoneModel.contains("P40") || phoneModel.contains("Mate 40") || phoneModel.contains("Magic3") || phoneModel.contains("OXF-AN00")|| phoneModel.contains("OXP-AN00")) { +// || s.equals("true")) { + setBarHigh(130); + } + } + + public void setTitleListener(OnTitleItemClickListener listener) { + mListener = listener; + } + + @Override + public void onClick(View view) { + switch (view.getId()) { + /* case R.id.iv_back: + if (mListener != null) { + mListener.onBack(); + } + break; + case R.id.iv_funtion: + if (mListener != null) { + mListener.onFunction(); + } + break; + case R.id.tv_back_txt: + if (mListener != null) { + mListener.onBack(); + } + break;*/ + /*case R.id.tv_set: + if (mListener != null){ + mListener.onFunctionText(); + } + break;*/ + } + } + + public void setHead(String text) { + mHead.setText(text); + mHead.setVisibility(VISIBLE); + } + + public void setHeadColor(int color) { + mHead.setTextColor(color); + mHead.setVisibility(VISIBLE); + } + + public String getHead() { + return mHead.getText().toString(); + } + + public void setHead(@StringRes int text) { + mHead.setText(text); + mHead.setVisibility(VISIBLE); + } + + public void setHeadFuntionTxt(@StringRes int text) { + mHeadFuntion.setText(text); + mHeadFuntion.setVisibility(VISIBLE); + } + + public String getHeadFuntionTxt() { + return null != mHeadFuntion.getText().toString() ? mHeadFuntion.getText().toString() : ""; + } + + public void setHeadFuntionTxt(String text) { + mHeadFuntion.setText(text); + mHeadFuntion.setVisibility(VISIBLE); + mHeadFuntion.setEnabled(false); + mHeadFuntion.setTextColor(getResources().getColor(R.color.z1_333333)); + } + + public void setHeadFuntionTxtAndSise(String text) { + mHeadFuntion.setText(text); + mHeadFuntion.setTextSize(14); + mHeadFuntion.setVisibility(VISIBLE); + mHeadFuntion.setEnabled(false); + mHeadFuntion.setTextColor(getResources().getColor(R.color.z1_333333)); + } + + public void setHeadFuntionTxtAndSise16(String text) { + mHeadFuntion.setText(text); + mHeadFuntion.setTextSize(16); + mHeadFuntion.setVisibility(VISIBLE); + mHeadFuntion.setEnabled(false); + mHeadFuntion.setTextColor(getResources().getColor(R.color.z1_333333)); + } + + public void setHeadFuntionTxtAndSise16Gray(String text) { + mHeadFuntion.setText(text); + mHeadFuntion.setTextSize(16); + mHeadFuntion.setVisibility(VISIBLE); + mHeadFuntion.setEnabled(false); + mHeadFuntion.setTextColor(getResources().getColor(R.color.z1_999999)); + } + + public void setHeadBackRed(boolean isEnabled) { + if (isEnabled) { + redCircleMe.setVisibility(VISIBLE); + } else { + redCircleMe.setVisibility(GONE); + } + } + + public void setHeadFuntionTxtColor(boolean isEnabled) { + /*if (isEnabled) { + mHeadFuntion.setVisibility(VISIBLE); + mHeadFuntion.setTextColor(getResources().getColor(R.color.z1_ffffff)); + mHeadFuntion.setEnabled(true); + // mHeadFuntion.setClickable(true); + } else { + mHeadFuntion.setVisibility(VISIBLE); + mHeadFuntion.setTextColor(getResources().getColor(R.color.z1_9cc6f6)); + mHeadFuntion.setEnabled(false); + // mHeadFuntion.setClickable(false); + }*/ + } + + public void setHeadFuntionTxtGone() { + mHeadFuntion.setVisibility(GONE); + } + + public void setHeadBackGone() { + mBack.setVisibility(GONE); + mBackRl.setVisibility(GONE); + } + + public void setHeadHomeVisible() { + ll_home_name.setVisibility(VISIBLE); + mBack.setVisibility(GONE); + mBackRl.setVisibility(GONE); + } + + public void setHeadHomeVisible(@DrawableRes int drawable) { + ll_home_name.setVisibility(VISIBLE); + mBack.setVisibility(GONE); + mBackRl.setVisibility(GONE); + iv_home_pic.setImageResource(drawable); + tv_home_name.setTextColor(getResources().getColor(R.color.z1_333333)); + } + + public void setHeadFuntion(@DrawableRes int drawable) { + mSet.setImageResource(drawable); + mSet.setVisibility(VISIBLE); + } + + public void setHeadFuntionGone() { + mSet.setVisibility(GONE); + } + + public boolean getHeadFuntionImg() { + if (mSet.getVisibility() == View.VISIBLE) { + return true; + } else { + return false; + } + } + + public void setBackFuntion(@DrawableRes int drawable) { + mBack.setImageResource(drawable); + mBack.setVisibility(VISIBLE); + mBackRl.setVisibility(VISIBLE); + } + + public void setBackTxt(String text) { + mBack.setVisibility(GONE); + mBackRl.setVisibility(GONE); + mHeadBack.setVisibility(VISIBLE); + mHeadBack.setText(text); + } + + public String getHomeNameTxt() { + return tv_home_name.getText().toString(); + } + + public void setHomeNameTxt(String text) { + tv_home_name.setText(text); + } + + public void setBackGone() { + mBack.setVisibility(GONE); + mBackRl.setVisibility(GONE); + } + + public void setBackVisible() { + mBack.setVisibility(VISIBLE); + mBackRl.setVisibility(VISIBLE); + } + + public void clearBackGroud() { + findViewById(R.id.root).setBackgroundResource(R.color.z1_00000000); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + public void showBackGroud1() { + findViewById(R.id.root).setBackground(getResources().getDrawable(R.drawable.color_fromx_d6_e7_50)); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + public void showBackGroud2() { + findViewById(R.id.root).setBackground(getResources().getDrawable(R.drawable.color_fromx_d6_e7)); + } + + public void showBackGroud3() { + findViewById(R.id.root).setBackgroundResource(R.color.z1_3CA2E9); + } + + public void showBackGroud() { + findViewById(R.id.root).setBackgroundResource(R.color.z1_398dee); + } + + public void showBackGroud4() { + findViewById(R.id.root).setBackgroundResource(R.color.z1_f0f0fa); + } + + public void showBackGroud5() { + findViewById(R.id.root).setBackgroundResource(R.color.z1_ffffff); + } + + public void showBackGroud6() { + findViewById(R.id.root).setBackgroundResource(R.color.z1_80ffffff); + } + + public void showBackGroud7(float alpha) { + View viewById = findViewById(R.id.root); + Log.i("TAG", "MainFragment5 onScrolled()" + alpha / 1000); + if (alpha < 100) { + viewById.setBackgroundResource(R.color.z1_00000000); + viewById.setAlpha(1.0f); + } else { +// viewById.setBackgroundResource(R.color.z1_A6C1CC); +// viewById.setBackgroundResource(R.color.z1_E4F0FC); + viewById.setBackgroundResource(R.color.z1_e3e3e3); + viewById.setAlpha(alpha / 1000); + } + /*if (alpha >= 1000) { + viewById.setBackgroundResource(R.color.z1_A6C1CC); + } else if (alpha > 900) { + viewById.setBackgroundResource(R.color.z1_A6C1CC); + } else if (alpha > 800) { + viewById.setBackgroundResource(R.color.z1_A6C1CC); + } else if (alpha > 700) { + viewById.setBackgroundResource(R.color.z1_A6C1CC); + } else if (alpha > 600) { + viewById.setBackgroundResource(R.color.z1_A6C1CC); + } else if (alpha > 500) { + viewById.setBackgroundResource(R.color.z1_A6C1CC); + } else if (alpha > 400) { + viewById.setBackgroundResource(R.color.z1_A6C1CC); + } else if (alpha > 300) { + viewById.setBackgroundResource(R.color.z1_A6C1CC); + } else if (alpha > 200) { + viewById.setBackgroundResource(R.color.z1_A6C1CC); + } else if (alpha > 100) { + viewById.setBackgroundResource(R.color.z1_A6C1CC); + } else { + viewById.setBackgroundResource(R.color.z1_A6C1CC); + }*/ + } + + public void setBarHigh(int height) { + LayoutParams lp; + lp = (LayoutParams) bar.getLayoutParams(); + lp.height = height; + bar.setLayoutParams(lp); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/ToastDialog.java b/app/src/main/java/com/yonsz/z1/view/ToastDialog.java new file mode 100644 index 0000000..a825058 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/ToastDialog.java @@ -0,0 +1,73 @@ +package com.yonsz.z1.view; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.view.KeyEvent; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.listener.OnDialogDismissListener; + +public class ToastDialog extends Dialog { + private Context mContext; + private TextView mMsg; + private OnDialogDismissListener mDialogDismissListener; + + public ToastDialog(Context context) { + super(context, R.style.toast); + setContentView(R.layout.dialog_toast); + mContext = context; + initView(); + } + + private void initView() { + mMsg = (TextView) findViewById(R.id.msg); + setOnShowListener(new OnShowListener() { + @Override + public void onShow(DialogInterface dialogInterface) { + mMsg.postDelayed(new Runnable() { + @Override + public void run() { + dismiss(); + ToastDialog.this.cancel(); + } + }, 1000); + } + }); + setOnDismissListener(new OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialogInterface) { + if (mDialogDismissListener != null){ + mDialogDismissListener.onReSet(); + } + } + }); + setOnKeyListener(keylistener); + } + + public void setMessage(String msg){ + mMsg.setText(msg); + } + public void setMessage(int msgId){ + mMsg.setText(msgId); + } + + public void setOnDialogDismissListener(OnDialogDismissListener listener){ + this.mDialogDismissListener = listener; + } + + private OnKeyListener keylistener = new OnKeyListener() { + public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { + return false; + } else { + return false; + } + } + }; + @Override + public void onBackPressed() { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/coordinatormenu/CoordinatorMenu.java b/app/src/main/java/com/yonsz/z1/view/coordinatormenu/CoordinatorMenu.java new file mode 100644 index 0000000..f16df89 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/coordinatormenu/CoordinatorMenu.java @@ -0,0 +1,303 @@ +package com.yonsz.z1.view.coordinatormenu; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Parcel; +import android.os.Parcelable; +import android.support.v4.os.ParcelableCompat; +import android.support.v4.os.ParcelableCompatCreatorCallbacks; +import android.support.v4.view.AbsSavedState; +import android.support.v4.view.ViewCompat; +import android.support.v4.widget.ViewDragHelper; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.FrameLayout; + +/** + * Created by qiantao on 2017/1/10. + * 仿QQ的协同侧滑菜单 + */ + +public class CoordinatorMenu extends FrameLayout { + private static final String TAG = "DragViewGroup"; + private final int mScreenWidth; + private final int mScreenHeight; + + private View mMenuView; + private MainSlideView mMainSlideView; + + private ViewDragHelper mViewDragHelper; + + private static final int MENU_CLOSED = 1; + private static final int MENU_OPENED = 2; + private int mMenuState = MENU_CLOSED; + + private int mDragOrientation; + private static final int LEFT_TO_RIGHT = 3; + private static final int RIGHT_TO_LEFT = 4; + + private static final float SPRING_BACK_VELOCITY = 1500; + private static final int SPRING_BACK_DISTANCE = 80; + private int mSpringBackDistance; + + private static final int MENU_MARGIN_RIGHT = 64; + private int mMenuWidth; + + private static final int MENU_OFFSET = 128; + private int mMenuOffset; + + private static final float TOUCH_SLOP_SENSITIVITY = 1.f; + + private static final String DEFAULT_SHADOW_OPACITY = "00"; + private String mShadowOpacity = DEFAULT_SHADOW_OPACITY; + + public CoordinatorMenu(Context context) { + this(context, null); + } + + public CoordinatorMenu(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public CoordinatorMenu(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + final float density = getResources().getDisplayMetrics().density;//屏幕密度 + + mScreenWidth = getResources().getDisplayMetrics().widthPixels; + mScreenHeight = getResources().getDisplayMetrics().heightPixels; + + mSpringBackDistance = (int) (SPRING_BACK_DISTANCE * density + 0.5f); + + mMenuOffset = (int) (MENU_OFFSET * density + 0.5f); + + mMenuWidth = mScreenWidth - (int) (MENU_MARGIN_RIGHT * density + 0.5f); + + mViewDragHelper = ViewDragHelper.create(this, TOUCH_SLOP_SENSITIVITY, new CoordinatorCallback()); + + } + + private class CoordinatorCallback extends ViewDragHelper.Callback { + + @Override + public boolean tryCaptureView(View child, int pointerId) { + return mMainSlideView == child || mMenuView == child; + } + + @Override + public void onViewCaptured(View capturedChild, int activePointerId) { + if (capturedChild == mMenuView) { + mViewDragHelper.captureChildView(mMainSlideView, activePointerId); + } + } + + @Override + public int getViewHorizontalDragRange(View child) { + return 1; + } + + @Override + public int clampViewPositionHorizontal(View child, int left, int dx) { + if (left < 0) { + left = 0; + } else if (left > mMenuWidth) { + left = mMenuWidth; + } + return left; + } + + @Override + public void onViewReleased(View releasedChild, float xvel, float yvel) { + super.onViewReleased(releasedChild, xvel, yvel); + Log.e(TAG, "onViewReleased: xvel: " + xvel); + if (mDragOrientation == LEFT_TO_RIGHT) { + if (xvel > SPRING_BACK_VELOCITY || mMainSlideView.getLeft() > mSpringBackDistance) { + openMenu(); + } else { + closeMenu(); + } + } else if (mDragOrientation == RIGHT_TO_LEFT) { + if (xvel < -SPRING_BACK_VELOCITY || mMainSlideView.getLeft() < mMenuWidth - mSpringBackDistance) { + closeMenu(); + } else { + openMenu(); + } + } + } + + @Override + public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { + Log.w(TAG, "onViewPositionChanged: dx:" + dx); + if (dx > 0) { + mDragOrientation = LEFT_TO_RIGHT; + } else if (dx < 0) { + mDragOrientation = RIGHT_TO_LEFT; + } + float scale = (float) (mMenuWidth - mMenuOffset) / (float) mMenuWidth; + int menuLeft = left - ((int) (scale * left) + mMenuOffset); + mMenuView.layout(menuLeft, mMenuView.getTop(), + menuLeft + mMenuWidth, mMenuView.getBottom()); + float showing = (float) (mScreenWidth - left) / (float) mScreenWidth; + int hex = 255 - Math.round(showing * 255); + if (hex < 16) { + mShadowOpacity = "0" + Integer.toHexString(hex); + } else { + mShadowOpacity = Integer.toHexString(hex); + } + } + } + + //加载完布局文件后调用 + @Override + protected void onFinishInflate() { + mMenuView = getChildAt(0); + mMainSlideView = (MainSlideView) getChildAt(1); + mMainSlideView.setParent(this); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + return mViewDragHelper.shouldInterceptTouchEvent(event); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + //将触摸事件传递给ViewDragHelper,此操作必不可少 + mViewDragHelper.processTouchEvent(event); + return true; + } + + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + Log.d(TAG, "onLayout: "); + super.onLayout(changed, left, top, right, bottom); + MarginLayoutParams menuParams = (MarginLayoutParams) mMenuView.getLayoutParams(); + menuParams.width = mMenuWidth; + mMenuView.setLayoutParams(menuParams); + if (mMenuState == MENU_OPENED) { + mMenuView.layout(0, 0, mMenuWidth, bottom); + mMainSlideView.layout(mMenuWidth, 0, mMenuWidth + mScreenWidth, bottom); + return; + } + mMenuView.layout(-mMenuOffset, top, mMenuWidth - mMenuOffset, bottom); + } + + @Override + protected boolean drawChild(Canvas canvas, View child, long drawingTime) { + final int restoreCount = canvas.save();//保存画布当前的剪裁信息 + + final int height = getHeight(); + final int clipLeft = 0; + int clipRight = mMainSlideView.getLeft(); + if (child == mMenuView) { + canvas.clipRect(clipLeft, 0, clipRight, height);//剪裁显示的区域 + } + + boolean result = super.drawChild(canvas, child, drawingTime);//绘制当前view + + //恢复画布之前保存的剪裁信息 + //以正常绘制之后的view + canvas.restoreToCount(restoreCount); + + + int shadowLeft = mMainSlideView.getLeft(); + Log.e(TAG, "drawChild: shadowLeft: " + shadowLeft); + final Paint shadowPaint = new Paint(); + Log.e(TAG, "drawChild: mShadowOpacity: " + mShadowOpacity); + shadowPaint.setColor(Color.parseColor("#" + mShadowOpacity + "777777")); + shadowPaint.setStyle(Paint.Style.FILL); + canvas.drawRect(shadowLeft, 0, mScreenWidth, mScreenHeight, shadowPaint); + return result; + } + + @Override + public void computeScroll() { + if (mViewDragHelper.continueSettling(true)) { + ViewCompat.postInvalidateOnAnimation(this); + } + if (mMainSlideView.getLeft() == 0) { + mMenuState = MENU_CLOSED; + } else if (mMainSlideView.getLeft() == mMenuWidth) { + mMenuState = MENU_OPENED; + } + } + + public void openMenu() { + mViewDragHelper.smoothSlideViewTo(mMainSlideView, mMenuWidth, 0); + ViewCompat.postInvalidateOnAnimation(CoordinatorMenu.this); + } + + public void closeMenu() { + mViewDragHelper.smoothSlideViewTo(mMainSlideView, 0, 0); + ViewCompat.postInvalidateOnAnimation(CoordinatorMenu.this); + } + + public boolean isOpened() { + return mMenuState == MENU_OPENED; + } + + @Override + protected Parcelable onSaveInstanceState() { + final Parcelable superState = super.onSaveInstanceState(); + final SavedState ss = new SavedState(superState); + ss.menuState = mMenuState; + return ss; + } + + @Override + protected void onRestoreInstanceState(Parcelable state) { + if (!(state instanceof SavedState)) { + super.onRestoreInstanceState(state); + return; + } + + final SavedState ss = (SavedState) state; + super.onRestoreInstanceState(ss.getSuperState()); + + if (ss.menuState == MENU_OPENED) { + openMenu(); + } + } + + protected static class SavedState extends AbsSavedState { + int menuState; + + SavedState(Parcel in, ClassLoader loader) { + super(in, loader); + menuState = in.readInt(); + } + + SavedState(Parcelable superState) { + super(superState); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(menuState); + } + + public static final Creator CREATOR = ParcelableCompat.newCreator( + new ParcelableCompatCreatorCallbacks() { + @Override + public SavedState createFromParcel(Parcel in, ClassLoader loader) { + return new SavedState(in, loader); + } + + @Override + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/view/coordinatormenu/MainSlideView.java b/app/src/main/java/com/yonsz/z1/view/coordinatormenu/MainSlideView.java new file mode 100644 index 0000000..317c996 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/coordinatormenu/MainSlideView.java @@ -0,0 +1,55 @@ +package com.yonsz.z1.view.coordinatormenu; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.widget.RelativeLayout; + +/** + * Created by qiantao on 2017/1/16. + * 主界面 + */ + +public class MainSlideView extends RelativeLayout { + private CoordinatorMenu mCoordinatorMenu; + + public MainSlideView(Context context) { + this(context, null, 0); + } + + public MainSlideView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public MainSlideView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + } + + public void setParent(CoordinatorMenu coordinatorMenu) { + mCoordinatorMenu = coordinatorMenu; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + if (mCoordinatorMenu.isOpened()) { + return true;//拦截事件,不往下传递 + } + return super.onInterceptTouchEvent(event); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (mCoordinatorMenu.isOpened()) { + if (event.getAction() == MotionEvent.ACTION_UP) { + mCoordinatorMenu.closeMenu(); + } + return true; + } + return super.onTouchEvent(event); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/listpopupwindow/ListPopupWindowAdapter.java b/app/src/main/java/com/yonsz/z1/view/listpopupwindow/ListPopupWindowAdapter.java new file mode 100644 index 0000000..7503a6c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/listpopupwindow/ListPopupWindowAdapter.java @@ -0,0 +1,88 @@ +package com.yonsz.z1.view.listpopupwindow; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2018/8/31. + */ + +public class ListPopupWindowAdapter extends BaseAdapter { + private List mStringList = new ArrayList<>(); + private Context mContext; + private String nowSeleteName; + private int itemHeight; + + public ListPopupWindowAdapter(Context context, List list, String selectName, float height) { + mContext = context; + mStringList = list; + nowSeleteName = selectName; + itemHeight = (int) height; + } + + @Override + public int getCount() { + return mStringList.size(); + } + + @Override + public Object getItem(int i) { + return mStringList.get(i); + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + ViewHolder lViewHolder = null; //一开始为null + if (view == null) { + lViewHolder = new ViewHolder(); + view = View.inflate(mContext, R.layout.list_item_rank_title_content, null); + lViewHolder.itemTextView = (TextView) view.findViewById(R.id.tv_ranking_title_item); + lViewHolder.line = (View) view.findViewById(R.id.view_line); + view.setTag(lViewHolder); + } else { + lViewHolder = (ViewHolder) view.getTag(); + } + //文字内容设置 + lViewHolder.itemTextView.setText(mStringList.get(i)); + LinearLayout.LayoutParams lp; + lp = (LinearLayout.LayoutParams) lViewHolder.itemTextView.getLayoutParams(); + lp.height = itemHeight; + lViewHolder.itemTextView.setLayoutParams(lp); + + if (mStringList.get(i).equals(nowSeleteName)) { //判断选中项 + lViewHolder.itemTextView.setTextColor(mContext.getResources().getColor(R.color.z1_398dee)); + // lViewHolder.itemTextView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.drop_down_list_item_selected)); + } else { + if (nowSeleteName.length() > 14 && mStringList.get(i).contains(nowSeleteName)) { + lViewHolder.itemTextView.setTextColor(mContext.getResources().getColor(R.color.z1_398dee)); + } else { + lViewHolder.itemTextView.setTextColor(mContext.getResources().getColor(R.color.z1_333333)); + } + } + if (i == mStringList.size() - 1) { + lViewHolder.line.setVisibility(View.GONE); + } else { + lViewHolder.line.setVisibility(View.VISIBLE); + } + return view; + } + + private class ViewHolder { + TextView itemTextView; + View line; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/listpopupwindow/RankingPopupWindow.java b/app/src/main/java/com/yonsz/z1/view/listpopupwindow/RankingPopupWindow.java new file mode 100644 index 0000000..5018012 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/listpopupwindow/RankingPopupWindow.java @@ -0,0 +1,173 @@ +package com.yonsz.z1.view.listpopupwindow; + +import android.app.Activity; +import android.graphics.drawable.ColorDrawable; +import android.util.DisplayMetrics; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.GridView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; + +import com.yonsz.z1.R; +import com.yonsz.z1.utils.AppIdUtil; + +import java.util.List; + +import xander.elasticity.ElasticityHelper; + +/** + * Created by Administrator on 2018/8/31. + */ + +public class RankingPopupWindow extends PopupWindow { + private ListPopupWindowAdapter mListPopupWindowAdapter; + private Listener mListener; + + public RankingPopupWindow(final Activity context, List list, String selectName, Listener listener, View view, int flag) { + super(context); + mListener = listener; + //拿到基本的item高度,这里给定每个Item的高度和宽度 + DisplayMetrics metric = new DisplayMetrics(); + context.getWindowManager().getDefaultDisplay().getMetrics(metric); + float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5) + int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240) + float titleItemHeight = density * 40; //50dp,高 + float paddingWight = density * 12; //12dp + WindowManager wm = context.getWindowManager(); + int width = wm.getDefaultDisplay().getWidth(); + //拿到要显示的总高度,超过5个条目时只显示5个,其余滑动显示 + int height; + if (flag == 3) { + if (list.size() > 3) { + height = (int) titleItemHeight * 3; + } else { + height = (int) titleItemHeight * list.size(); + } + } else { + if (list.size() > 8) { + height = (int) titleItemHeight * 8; + } else { + height = (int) titleItemHeight * list.size(); + } + } + + this.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT); + this.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT); + View contentView = LayoutInflater.from(context).inflate(R.layout.popup_window_ranking_classify, null); + this.setContentView(contentView); + + LinearLayout llbootom = (LinearLayout) contentView.findViewById(R.id.ll_manage); + if (flag == 0) { + llbootom.setVisibility(View.VISIBLE); + RelativeLayout.LayoutParams lp1; + lp1 = (RelativeLayout.LayoutParams) llbootom.getLayoutParams(); + lp1.height = (int) titleItemHeight; + if (flag == 3) { + lp1.width = width * 68 / 100; //两边有点点空隙 + } else if (flag == 0) { + lp1.width = width / 5 * 3 - (int) paddingWight; //两边有点点空隙 + } else { + lp1.width = width / 2 - (int) paddingWight; //两边有点点空隙 + } + llbootom.setLayoutParams(lp1); + + llbootom.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + mListener.onItemClickListener(100); + } + }); + } else { + llbootom.setVisibility(View.GONE); + } + + GridView listView = (GridView) contentView.findViewById(R.id.lv_ranking_classify); +// ElasticityHelper.setUpOverScroll(listView); + RelativeLayout.LayoutParams lp; + lp = (RelativeLayout.LayoutParams) listView.getLayoutParams(); + lp.height = height; + if (flag == 3) { + lp.width = width * 68 / 100; //两边有点点空隙 + } else if (flag == 0) { + lp.width = width / 5 * 3 - (int) paddingWight; //两边有点点空隙 + } else { + lp.width = width / 2 - (int) paddingWight; //两边有点点空隙 + } + //设置整个ListView的给定宽高 + listView.setLayoutParams(lp); + //初始化list适配器,并把数据设置入listView中 + if (mListPopupWindowAdapter != null) { + mListPopupWindowAdapter = null; + } + mListPopupWindowAdapter = new ListPopupWindowAdapter(context, list, selectName, titleItemHeight); + listView.setAdapter(mListPopupWindowAdapter); + + this.setFocusable(true); + this.setAnimationStyle(R.style.AnimList); + ColorDrawable dw = new ColorDrawable(context.getResources().getColor(R.color.transparent)); + this.setBackgroundDrawable(dw); + if (flag == 1) { + listView.setBackground(context.getResources().getDrawable(R.drawable.btn_round_ffffff_2dp)); + this.showAsDropDown(view, view.getWidth(), -5); + } else if (flag == 2) { + this.showAsDropDown(view, 0, 0); + } else { +// listView.setBackground(context.getResources().getDrawable(R.drawable.btn_round_ffffff_2dp)); + if (AppIdUtil.isChuangWei()) { + this.showAsDropDown(view, 40, 0); + } else { + this.showAsDropDown(view, 20, 0); + + } + } + + //点击Item + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + dismiss(); + mListener.onItemClickListener(position); + } + }); + //点击返回键 + listView.setOnKeyListener(new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + // TODO Auto-generated method stub + dismiss(); + return true; + } + }); + + //消失监听 + this.setOnDismissListener(new OnDismissListener() { + @Override + public void onDismiss() { + mListener.onPopupWindowDismissListener(); + } + }); + + //点击外围 + this.getContentView().setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + setFocusable(false); + dismiss(); + return true; + } + }); + } + + public interface Listener { + void onPopupWindowDismissListener(); //弹框消失监听 + + void onItemClickListener(int position); //条目点击监听 + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/loading/AVLoadingIndicatorView.java b/app/src/main/java/com/yonsz/z1/view/loading/AVLoadingIndicatorView.java new file mode 100644 index 0000000..7555ecb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/loading/AVLoadingIndicatorView.java @@ -0,0 +1,418 @@ +package com.yonsz.z1.view.loading; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Rect; +import android.graphics.drawable.Animatable; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.view.animation.AnimationUtils; + +import com.yonsz.z1.R; + +public class AVLoadingIndicatorView extends View { + + private static final String TAG="AVLoadingIndicatorView"; + + private static final BallPulseIndicator DEFAULT_INDICATOR=new BallPulseIndicator(); + + private static final int MIN_SHOW_TIME = 500; // ms + private static final int MIN_DELAY = 500; // ms + + private long mStartTime = -1; + + private boolean mPostedHide = false; + + private boolean mPostedShow = false; + + private boolean mDismissed = false; + + private final Runnable mDelayedHide = new Runnable() { + + @Override + public void run() { + mPostedHide = false; + mStartTime = -1; + setVisibility(View.GONE); + } + }; + + private final Runnable mDelayedShow = new Runnable() { + + @Override + public void run() { + mPostedShow = false; + if (!mDismissed) { + mStartTime = System.currentTimeMillis(); + setVisibility(View.VISIBLE); + } + } + }; + + int mMinWidth; + int mMaxWidth; + int mMinHeight; + int mMaxHeight; + + private Indicator mIndicator; + private int mIndicatorColor; + + private boolean mShouldStartAnimationDrawable; + + public AVLoadingIndicatorView(Context context) { + super(context); + init(context, null,0,0); + } + + public AVLoadingIndicatorView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs,0, R.style.AVLoadingIndicatorView); + } + + public AVLoadingIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs,defStyleAttr,R.style.AVLoadingIndicatorView); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public AVLoadingIndicatorView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(context,attrs,defStyleAttr,R.style.AVLoadingIndicatorView); + } + + private void init(Context context,AttributeSet attrs,int defStyleAttr, int defStyleRes) { + mMinWidth = 24; + mMaxWidth = 48; + mMinHeight = 24; + mMaxHeight = 48; + + final TypedArray a = context.obtainStyledAttributes( + attrs, R.styleable.AVLoadingIndicatorView, defStyleAttr, defStyleRes); + + mMinWidth = a.getDimensionPixelSize(R.styleable.AVLoadingIndicatorView_minWidth, mMinWidth); + mMaxWidth = a.getDimensionPixelSize(R.styleable.AVLoadingIndicatorView_maxWidth, mMaxWidth); + mMinHeight = a.getDimensionPixelSize(R.styleable.AVLoadingIndicatorView_minHeight, mMinHeight); + mMaxHeight = a.getDimensionPixelSize(R.styleable.AVLoadingIndicatorView_maxHeight, mMaxHeight); + String indicatorName=a.getString(R.styleable.AVLoadingIndicatorView_indicatorName); + mIndicatorColor=a.getColor(R.styleable.AVLoadingIndicatorView_indicatorColor, Color.WHITE); + setIndicator(indicatorName); + if (mIndicator==null){ + setIndicator(DEFAULT_INDICATOR); + } + a.recycle(); + } + + public Indicator getIndicator() { + return mIndicator; + } + + public void setIndicator(Indicator d) { + if (mIndicator != d) { + if (mIndicator != null) { + mIndicator.setCallback(null); + unscheduleDrawable(mIndicator); + } + + mIndicator = d; + //need to set indicator color again if you didn't specified when you update the indicator . + setIndicatorColor(mIndicatorColor); + if (d != null) { + d.setCallback(this); + } + postInvalidate(); + } + } + + + /** + * setIndicatorColor(0xFF00FF00) + * or + * setIndicatorColor(Color.BLUE) + * or + * setIndicatorColor(Color.parseColor("#FF4081")) + * or + * setIndicatorColor(0xFF00FF00) + * or + * setIndicatorColor(getResources().getColor(android.R.color.black)) + * @param color + */ + public void setIndicatorColor(int color){ + this.mIndicatorColor=color; + mIndicator.setColor(color); + } + + + /** + * You should pay attention to pass this parameter with two way: + * for example: + * 1. Only class Name,like "SimpleIndicator".(This way would use default package name with + * "com.fenghai.hightlight.view.avi.indicators") + * 2. Class name with full package,like "com.my.android.indicators.SimpleIndicator". + * @param indicatorName the class must be extend Indicator . + */ + public void setIndicator(String indicatorName){ + if (TextUtils.isEmpty(indicatorName)){ + return; + } + StringBuilder drawableClassName=new StringBuilder(); + if (!indicatorName.contains(".")){ + String defaultPackageName=getClass().getPackage().getName(); + drawableClassName.append(defaultPackageName) + .append(".indicators") + .append("."); + } + drawableClassName.append(indicatorName); + try { + Class drawableClass = Class.forName(drawableClassName.toString()); + Indicator indicator = (Indicator) drawableClass.newInstance(); + setIndicator(indicator); + } catch (ClassNotFoundException e) { + Log.e(TAG,"Didn't find your class , check the name again !"); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + + public void smoothToShow(){ + startAnimation(AnimationUtils.loadAnimation(getContext(),android.R.anim.fade_in)); + setVisibility(VISIBLE); + } + + public void smoothToHide(){ + startAnimation(AnimationUtils.loadAnimation(getContext(),android.R.anim.fade_out)); + setVisibility(GONE); + } + + public void hide() { + mDismissed = true; + removeCallbacks(mDelayedShow); + long diff = System.currentTimeMillis() - mStartTime; + if (diff >= MIN_SHOW_TIME || mStartTime == -1) { + // The progress spinner has been shown long enough + // OR was not shown yet. If it wasn't shown yet, + // it will just never be shown. + setVisibility(View.GONE); + } else { + // The progress spinner is shown, but not long enough, + // so put a delayed message in to hide it when its been + // shown long enough. + if (!mPostedHide) { + postDelayed(mDelayedHide, MIN_SHOW_TIME - diff); + mPostedHide = true; + } + } + } + + public void show() { + // Reset the start time. + mStartTime = -1; + mDismissed = false; + removeCallbacks(mDelayedHide); + if (!mPostedShow) { + postDelayed(mDelayedShow, MIN_DELAY); + mPostedShow = true; + } + } + + @Override + protected boolean verifyDrawable(Drawable who) { + return who == mIndicator + || super.verifyDrawable(who); + } + + void startAnimation() { + if (getVisibility() != VISIBLE) { + return; + } + + if (mIndicator instanceof Animatable) { + mShouldStartAnimationDrawable = true; + } + postInvalidate(); + } + + void stopAnimation() { + if (mIndicator instanceof Animatable) { + mIndicator.stop(); + mShouldStartAnimationDrawable = false; + } + postInvalidate(); + } + + @Override + public void setVisibility(int v) { + if (getVisibility() != v) { + super.setVisibility(v); + if (v == GONE || v == INVISIBLE) { + stopAnimation(); + } else { + startAnimation(); + } + } + } + + @Override + protected void onVisibilityChanged(View changedView, int visibility) { + super.onVisibilityChanged(changedView, visibility); + if (visibility == GONE || visibility == INVISIBLE) { + stopAnimation(); + } else { + startAnimation(); + } + } + + @Override + public void invalidateDrawable(Drawable dr) { + if (verifyDrawable(dr)) { + final Rect dirty = dr.getBounds(); + final int scrollX = getScrollX() + getPaddingLeft(); + final int scrollY = getScrollY() + getPaddingTop(); + + invalidate(dirty.left + scrollX, dirty.top + scrollY, + dirty.right + scrollX, dirty.bottom + scrollY); + } else { + super.invalidateDrawable(dr); + } + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + updateDrawableBounds(w, h); + } + + private void updateDrawableBounds(int w, int h) { + // onDraw will translate the canvas so we draw starting at 0,0. + // Subtract out padding for the purposes of the calculations below. + w -= getPaddingRight() + getPaddingLeft(); + h -= getPaddingTop() + getPaddingBottom(); + + int right = w; + int bottom = h; + int top = 0; + int left = 0; + + if (mIndicator != null) { + // Maintain aspect ratio. Certain kinds of animated drawables + // get very confused otherwise. + final int intrinsicWidth = mIndicator.getIntrinsicWidth(); + final int intrinsicHeight = mIndicator.getIntrinsicHeight(); + final float intrinsicAspect = (float) intrinsicWidth / intrinsicHeight; + final float boundAspect = (float) w / h; + if (intrinsicAspect != boundAspect) { + if (boundAspect > intrinsicAspect) { + // New width is larger. Make it smaller to match height. + final int width = (int) (h * intrinsicAspect); + left = (w - width) / 2; + right = left + width; + } else { + // New height is larger. Make it smaller to match width. + final int height = (int) (w * (1 / intrinsicAspect)); + top = (h - height) / 2; + bottom = top + height; + } + } + mIndicator.setBounds(left, top, right, bottom); + } + } + + @Override + protected synchronized void onDraw(Canvas canvas) { + super.onDraw(canvas); + drawTrack(canvas); + } + + void drawTrack(Canvas canvas) { + final Drawable d = mIndicator; + if (d != null) { + // Translate canvas so a indeterminate circular progress bar with padding + // rotates properly in its animation + final int saveCount = canvas.save(); + + canvas.translate(getPaddingLeft(), getPaddingTop()); + + d.draw(canvas); + canvas.restoreToCount(saveCount); + + if (mShouldStartAnimationDrawable && d instanceof Animatable) { + ((Animatable) d).start(); + mShouldStartAnimationDrawable = false; + } + } + } + + @Override + protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int dw = 0; + int dh = 0; + + final Drawable d = mIndicator; + if (d != null) { + dw = Math.max(mMinWidth, Math.min(mMaxWidth, d.getIntrinsicWidth())); + dh = Math.max(mMinHeight, Math.min(mMaxHeight, d.getIntrinsicHeight())); + } + + updateDrawableState(); + + dw += getPaddingLeft() + getPaddingRight(); + dh += getPaddingTop() + getPaddingBottom(); + + final int measuredWidth = resolveSizeAndState(dw, widthMeasureSpec, 0); + final int measuredHeight = resolveSizeAndState(dh, heightMeasureSpec, 0); + setMeasuredDimension(measuredWidth, measuredHeight); + } + + @Override + protected void drawableStateChanged() { + super.drawableStateChanged(); + updateDrawableState(); + } + + private void updateDrawableState() { + final int[] state = getDrawableState(); + if (mIndicator != null && mIndicator.isStateful()) { + mIndicator.setState(state); + } + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override + public void drawableHotspotChanged(float x, float y) { + super.drawableHotspotChanged(x, y); + + if (mIndicator != null) { + mIndicator.setHotspot(x, y); + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + startAnimation(); + removeCallbacks(); + } + + @Override + protected void onDetachedFromWindow() { + stopAnimation(); + // This should come after stopAnimation(), otherwise an invalidate message remains in the + // queue, which can prevent the entire view hierarchy from being GC'ed during a rotation + super.onDetachedFromWindow(); + removeCallbacks(); + } + + private void removeCallbacks() { + removeCallbacks(mDelayedHide); + removeCallbacks(mDelayedShow); + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/view/loading/BallPulseIndicator.java b/app/src/main/java/com/yonsz/z1/view/loading/BallPulseIndicator.java new file mode 100644 index 0000000..ac49eea --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/loading/BallPulseIndicator.java @@ -0,0 +1,65 @@ +package com.yonsz.z1.view.loading; + +import android.animation.ValueAnimator; +import android.graphics.Canvas; +import android.graphics.Paint; + +import java.util.ArrayList; + +/** + * Created by Jack on 2015/10/16. + */ +public class BallPulseIndicator extends Indicator { + + public static final float SCALE=1.0f; + + //scale x ,y + private float[] scaleFloats=new float[]{SCALE, + SCALE, + SCALE}; + + + + @Override + public void draw(Canvas canvas, Paint paint) { + float circleSpacing=4; + float radius=(Math.min(getWidth(),getHeight())-circleSpacing*2)/6; + float x = getWidth()/ 2-(radius*2+circleSpacing); + float y=getHeight() / 2; + for (int i = 0; i < 3; i++) { + canvas.save(); + float translateX=x+(radius*2)*i+circleSpacing*i; + canvas.translate(translateX, y); + canvas.scale(scaleFloats[i], scaleFloats[i]); + canvas.drawCircle(0, 0, radius, paint); + canvas.restore(); + } + } + + @Override + public ArrayList onCreateAnimators() { + ArrayList animators=new ArrayList<>(); + int[] delays=new int[]{120,240,360}; + for (int i = 0; i < 3; i++) { + final int index=i; + + ValueAnimator scaleAnim=ValueAnimator.ofFloat(1,0.3f,1); + + scaleAnim.setDuration(750); + scaleAnim.setRepeatCount(-1); + scaleAnim.setStartDelay(delays[i]); + + addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + scaleFloats[index] = (float) animation.getAnimatedValue(); + postInvalidate(); + } + }); + animators.add(scaleAnim); + } + return animators; + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/view/loading/Indicator.java b/app/src/main/java/com/yonsz/z1/view/loading/Indicator.java new file mode 100644 index 0000000..b3e6e67 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/loading/Indicator.java @@ -0,0 +1,201 @@ +package com.yonsz.z1.view.loading; + +import android.animation.ValueAnimator; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.drawable.Animatable; +import android.graphics.drawable.Drawable; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * Created by Jack Wang on 2016/8/5. + */ + +public abstract class Indicator extends Drawable implements Animatable { + + private HashMap mUpdateListeners=new HashMap<>(); + + private ArrayList mAnimators; + private int alpha = 255; + private static final Rect ZERO_BOUNDS_RECT = new Rect(); + protected Rect drawBounds = ZERO_BOUNDS_RECT; + + private boolean mHasAnimators; + + private Paint mPaint=new Paint(); + + public Indicator(){ + mPaint.setColor(Color.WHITE); + mPaint.setStyle(Paint.Style.FILL); + mPaint.setAntiAlias(true); + } + + public int getColor() { + return mPaint.getColor(); + } + + public void setColor(int color) { + mPaint.setColor(color); + } + + @Override + public void setAlpha(int alpha) { + this.alpha = alpha; + } + + @Override + public int getAlpha() { + return alpha; + } + + @Override + public int getOpacity() { + return PixelFormat.OPAQUE; + } + + @Override + public void setColorFilter(ColorFilter colorFilter) { + + } + + @Override + public void draw(Canvas canvas) { + draw(canvas,mPaint); + } + + public abstract void draw(Canvas canvas, Paint paint); + + public abstract ArrayList onCreateAnimators(); + + @Override + public void start() { + ensureAnimators(); + + if (mAnimators == null) { + return; + } + + // If the animators has not ended, do nothing. + if (isStarted()) { + return; + } + startAnimators(); + invalidateSelf(); + } + + private void startAnimators() { + for (int i = 0; i < mAnimators.size(); i++) { + ValueAnimator animator = mAnimators.get(i); + + //when the animator restart , add the updateListener again because they + // was removed by animator stop . + ValueAnimator.AnimatorUpdateListener updateListener=mUpdateListeners.get(animator); + if (updateListener!=null){ + animator.addUpdateListener(updateListener); + } + + animator.start(); + } + } + + private void stopAnimators() { + if (mAnimators!=null){ + for (ValueAnimator animator : mAnimators) { + if (animator != null && animator.isStarted()) { + animator.removeAllUpdateListeners(); + animator.end(); + } + } + } + } + + private void ensureAnimators() { + if (!mHasAnimators) { + mAnimators = onCreateAnimators(); + mHasAnimators = true; + } + } + + @Override + public void stop() { + stopAnimators(); + } + + private boolean isStarted() { + for (ValueAnimator animator : mAnimators) { + return animator.isStarted(); + } + return false; + } + + @Override + public boolean isRunning() { + for (ValueAnimator animator : mAnimators) { + return animator.isRunning(); + } + return false; + } + + /** + * Your should use this to add AnimatorUpdateListener when + * create animator , otherwise , animator doesn't work when + * the animation restart . + * @param updateListener + */ + public void addUpdateListener(ValueAnimator animator, ValueAnimator.AnimatorUpdateListener updateListener){ + mUpdateListeners.put(animator,updateListener); + } + + @Override + protected void onBoundsChange(Rect bounds) { + super.onBoundsChange(bounds); + setDrawBounds(bounds); + } + + public void setDrawBounds(Rect drawBounds) { + setDrawBounds(drawBounds.left, drawBounds.top, drawBounds.right, drawBounds.bottom); + } + + public void setDrawBounds(int left, int top, int right, int bottom) { + this.drawBounds = new Rect(left, top, right, bottom); + } + + public void postInvalidate(){ + invalidateSelf(); + } + + public Rect getDrawBounds() { + return drawBounds; + } + + public int getWidth(){ + return drawBounds.width(); + } + + public int getHeight(){ + return drawBounds.height(); + } + + public int centerX(){ + return drawBounds.centerX(); + } + + public int centerY(){ + return drawBounds.centerY(); + } + + public float exactCenterX(){ + return drawBounds.exactCenterX(); + } + + public float exactCenterY(){ + return drawBounds.exactCenterY(); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/view/loading/LoadingDialog.java b/app/src/main/java/com/yonsz/z1/view/loading/LoadingDialog.java new file mode 100644 index 0000000..b24d995 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/loading/LoadingDialog.java @@ -0,0 +1,63 @@ +package com.yonsz.z1.view.loading; + +import android.app.Dialog; +import android.content.Context; +import android.view.View; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.listener.OnDialogItemClickListener; + +public class LoadingDialog extends Dialog implements View.OnClickListener{ + private Context mContext; + private TextView mMsg; + + + public LoadingDialog(Context context) { + super(context, R.style.toast); + setContentView(R.layout.loading_dialog); + mContext = context; + initView(); + } + + private void initView() { + mMsg = (TextView) findViewById(R.id.tv_msg); +// mCancel = (TextView) findViewById(R.id.cancel); +// mSure = (TextView) findViewById(R.id.sure); +// +// mCancel.setOnClickListener(this); +// mSure.setOnClickListener(this); +// +// Window window = getWindow(); +// WindowManager.LayoutParams lp = window.getAttributes(); +// lp.width = DensityUtil.dip2px(getContext(),300); //设置宽度 +// window.setAttributes(lp); + } + + public void setMessage(String msg){ + mMsg.setText(msg); + } + public void setMessage(int msgId){ + mMsg.setText(msgId); + } + + public void setOnDialogItemClickListener(OnDialogItemClickListener listener){ +// this.mOnDialogItemListener = listener; + } + @Override + public void onClick(View view) { +// switcher (view.getId()){ +// case R.id.cancel: +// dismiss(); +// break; +// case R.id.sure: +// dismiss(); +// if (mOnDialogItemListener != null){ +// mOnDialogItemListener.onSure(); +// } +// break; +// } + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/FragmentContainerHelper.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/FragmentContainerHelper.java new file mode 100644 index 0000000..439a0af --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/FragmentContainerHelper.java @@ -0,0 +1,162 @@ +package com.yonsz.z1.view.magicindicator; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.annotation.TargetApi; +import android.os.Build; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.Interpolator; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.model.PositionData; + +import java.util.ArrayList; +import java.util.List; + + +/** + * 使得MagicIndicator在FragmentContainer中使用 + * Created by hackware on 2016/9/4. + */ + +@TargetApi(Build.VERSION_CODES.HONEYCOMB) +public class FragmentContainerHelper { + private List mMagicIndicators = new ArrayList(); + private ValueAnimator mScrollAnimator; + private int mLastSelectedIndex; + private int mDuration = 150; + private Interpolator mInterpolator = new AccelerateDecelerateInterpolator(); + + private Animator.AnimatorListener mAnimatorListener = new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + dispatchPageScrollStateChanged(ScrollState.SCROLL_STATE_IDLE); + mScrollAnimator = null; + } + }; + + private ValueAnimator.AnimatorUpdateListener mAnimatorUpdateListener = new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float positionOffsetSum = (Float) animation.getAnimatedValue(); + int position = (int) positionOffsetSum; + float positionOffset = positionOffsetSum - position; + if (positionOffsetSum < 0) { + position = position - 1; + positionOffset = 1.0f + positionOffset; + } + dispatchPageScrolled(position, positionOffset, 0); + } + }; + + public FragmentContainerHelper() { + } + + public FragmentContainerHelper(MagicIndicator magicIndicator) { + + mMagicIndicators.add(magicIndicator); + } + + /** + * IPagerIndicator支持弹性效果的辅助方法 + * + * @param positionDataList + * @param index + * @return + */ + public static PositionData getImitativePositionData(List positionDataList, int index) { + if (index >= 0 && index <= positionDataList.size() - 1) { // 越界后,返回假的PositionData + return positionDataList.get(index); + } else { + PositionData result = new PositionData(); + PositionData referenceData; + int offset; + if (index < 0) { + offset = index; + referenceData = positionDataList.get(0); + } else { + offset = index - positionDataList.size() + 1; + referenceData = positionDataList.get(positionDataList.size() - 1); + } + result.mLeft = referenceData.mLeft + offset * referenceData.width(); + result.mTop = referenceData.mTop; + result.mRight = referenceData.mRight + offset * referenceData.width(); + result.mBottom = referenceData.mBottom; + result.mContentLeft = referenceData.mContentLeft + offset * referenceData.width(); + result.mContentTop = referenceData.mContentTop; + result.mContentRight = referenceData.mContentRight + offset * referenceData.width(); + result.mContentBottom = referenceData.mContentBottom; + return result; + } + } + + public void handlePageSelected(int selectedIndex) { + handlePageSelected(selectedIndex, true); + } + + public void handlePageSelected(int selectedIndex, boolean smooth) { + if (mLastSelectedIndex == selectedIndex) { + return; + } + if (smooth) { + if (mScrollAnimator == null || !mScrollAnimator.isRunning()) { + dispatchPageScrollStateChanged(ScrollState.SCROLL_STATE_SETTLING); + } + dispatchPageSelected(selectedIndex); + float currentPositionOffsetSum = mLastSelectedIndex; + if (mScrollAnimator != null) { + currentPositionOffsetSum = (Float) mScrollAnimator.getAnimatedValue(); + mScrollAnimator.cancel(); + mScrollAnimator = null; + } + mScrollAnimator = new ValueAnimator(); + mScrollAnimator.setFloatValues(currentPositionOffsetSum, selectedIndex); // position = selectedIndex, positionOffset = 0.0f + mScrollAnimator.addUpdateListener(mAnimatorUpdateListener); + mScrollAnimator.addListener(mAnimatorListener); + mScrollAnimator.setInterpolator(mInterpolator); + mScrollAnimator.setDuration(mDuration); + mScrollAnimator.start(); + } else { + dispatchPageSelected(selectedIndex); + if (mScrollAnimator != null && mScrollAnimator.isRunning()) { + dispatchPageScrolled(mLastSelectedIndex, 0.0f, 0); + } + dispatchPageScrollStateChanged(ScrollState.SCROLL_STATE_IDLE); + dispatchPageScrolled(selectedIndex, 0.0f, 0); + } + mLastSelectedIndex = selectedIndex; + } + + public void setDuration(int duration) { + mDuration = duration; + } + + public void setInterpolator(Interpolator interpolator) { + if (interpolator == null) { + mInterpolator = new AccelerateDecelerateInterpolator(); + } else { + mInterpolator = interpolator; + } + } + + public void attachMagicIndicator(MagicIndicator magicIndicator) { + mMagicIndicators.add(magicIndicator); + } + + private void dispatchPageSelected(int pageIndex) { + for (MagicIndicator magicIndicator : mMagicIndicators) { + magicIndicator.onPageSelected(pageIndex); + } + } + + private void dispatchPageScrollStateChanged(int state) { + for (MagicIndicator magicIndicator : mMagicIndicators) { + magicIndicator.onPageScrollStateChanged(state); + } + } + + private void dispatchPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + for (MagicIndicator magicIndicator : mMagicIndicators) { + magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/MagicIndicator.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/MagicIndicator.java new file mode 100644 index 0000000..7e1af9c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/MagicIndicator.java @@ -0,0 +1,64 @@ +package com.yonsz.z1.view.magicindicator; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.FrameLayout; + +import com.yonsz.z1.view.magicindicator.abs.IPagerNavigator; + + +/** + * 整个框架的入口,核心 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class MagicIndicator extends FrameLayout { + private IPagerNavigator mNavigator; + + public MagicIndicator(Context context) { + super(context); + } + + public MagicIndicator(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + if (mNavigator != null) { + mNavigator.onPageScrolled(position, positionOffset, positionOffsetPixels); + } + } + + public void onPageSelected(int position) { + if (mNavigator != null) { + mNavigator.onPageSelected(position); + } + } + + public void onPageScrollStateChanged(int state) { + if (mNavigator != null) { + mNavigator.onPageScrollStateChanged(state); + } + } + + public IPagerNavigator getNavigator() { + return mNavigator; + } + + public void setNavigator(IPagerNavigator navigator) { + if (mNavigator == navigator) { + return; + } + if (mNavigator != null) { + mNavigator.onDetachFromMagicIndicator(); + } + mNavigator = navigator; + removeAllViews(); + if (mNavigator instanceof View) { + LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + addView((View) mNavigator, lp); + mNavigator.onAttachToMagicIndicator(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/NavigatorHelper.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/NavigatorHelper.java new file mode 100644 index 0000000..6a4924f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/NavigatorHelper.java @@ -0,0 +1,170 @@ +package com.yonsz.z1.view.magicindicator; + +import android.util.SparseArray; +import android.util.SparseBooleanArray; + +/** + * 方便扩展IPagerNavigator的帮助类,将ViewPager的3个回调方法转换成 + * onSelected、onDeselected、onEnter等回调,方便扩展 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class NavigatorHelper { + private SparseBooleanArray mDeselectedItems = new SparseBooleanArray(); + private SparseArray mLeavedPercents = new SparseArray(); + + private int mTotalCount; + private int mCurrentIndex; + private int mLastIndex; + private float mLastPositionOffsetSum; + private int mScrollState; + + private boolean mSkimOver; + private NavigatorHelper.OnNavigatorScrollListener mNavigatorScrollListener; + + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + float currentPositionOffsetSum = position + positionOffset; + boolean leftToRight = false; + if (mLastPositionOffsetSum <= currentPositionOffsetSum) { + leftToRight = true; + } + if (mScrollState != ScrollState.SCROLL_STATE_IDLE) { + if (currentPositionOffsetSum == mLastPositionOffsetSum) { + return; + } + int nextPosition = position + 1; + boolean normalDispatch = true; + if (positionOffset == 0.0f) { + if (leftToRight) { + nextPosition = position - 1; + normalDispatch = false; + } + } + for (int i = 0; i < mTotalCount; i++) { + if (i == position || i == nextPosition) { + continue; + } + Float leavedPercent = mLeavedPercents.get(i, 0.0f); + if (leavedPercent != 1.0f) { + dispatchOnLeave(i, 1.0f, leftToRight, true); + } + } + if (normalDispatch) { + if (leftToRight) { + dispatchOnLeave(position, positionOffset, true, false); + dispatchOnEnter(nextPosition, positionOffset, true, false); + } else { + dispatchOnLeave(nextPosition, 1.0f - positionOffset, false, false); + dispatchOnEnter(position, 1.0f - positionOffset, false, false); + } + } else { + dispatchOnLeave(nextPosition, 1.0f - positionOffset, true, false); + dispatchOnEnter(position, 1.0f - positionOffset, true, false); + } + } else { + for (int i = 0; i < mTotalCount; i++) { + if (i == mCurrentIndex) { + continue; + } + boolean deselected = mDeselectedItems.get(i); + if (!deselected) { + dispatchOnDeselected(i); + } + Float leavedPercent = mLeavedPercents.get(i, 0.0f); + if (leavedPercent != 1.0f) { + dispatchOnLeave(i, 1.0f, false, true); + } + } + dispatchOnEnter(mCurrentIndex, 1.0f, false, true); + dispatchOnSelected(mCurrentIndex); + } + mLastPositionOffsetSum = currentPositionOffsetSum; + } + + private void dispatchOnEnter(int index, float enterPercent, boolean leftToRight, boolean force) { + if (mSkimOver || index == mCurrentIndex || mScrollState == ScrollState.SCROLL_STATE_DRAGGING || force) { + if (mNavigatorScrollListener != null) { + mNavigatorScrollListener.onEnter(index, mTotalCount, enterPercent, leftToRight); + } + mLeavedPercents.put(index, 1.0f - enterPercent); + } + } + + private void dispatchOnLeave(int index, float leavePercent, boolean leftToRight, boolean force) { + if (mSkimOver || index == mLastIndex || mScrollState == ScrollState.SCROLL_STATE_DRAGGING || ((index == mCurrentIndex - 1 || index == mCurrentIndex + 1) && mLeavedPercents.get(index, 0.0f) != 1.0f) || force) { + if (mNavigatorScrollListener != null) { + mNavigatorScrollListener.onLeave(index, mTotalCount, leavePercent, leftToRight); + } + mLeavedPercents.put(index, leavePercent); + } + } + + private void dispatchOnSelected(int index) { + if (mNavigatorScrollListener != null) { + mNavigatorScrollListener.onSelected(index, mTotalCount); + } + mDeselectedItems.put(index, false); + } + + private void dispatchOnDeselected(int index) { + if (mNavigatorScrollListener != null) { + mNavigatorScrollListener.onDeselected(index, mTotalCount); + } + mDeselectedItems.put(index, true); + } + + public void onPageSelected(int position) { + mLastIndex = mCurrentIndex; + mCurrentIndex = position; + dispatchOnSelected(mCurrentIndex); + for (int i = 0; i < mTotalCount; i++) { + if (i == mCurrentIndex) { + continue; + } + boolean deselected = mDeselectedItems.get(i); + if (!deselected) { + dispatchOnDeselected(i); + } + } + } + + public void onPageScrollStateChanged(int state) { + mScrollState = state; + } + + public void setNavigatorScrollListener(NavigatorHelper.OnNavigatorScrollListener navigatorScrollListener) { + mNavigatorScrollListener = navigatorScrollListener; + } + + public void setSkimOver(boolean skimOver) { + mSkimOver = skimOver; + } + + public int getTotalCount() { + return mTotalCount; + } + + public void setTotalCount(int totalCount) { + mTotalCount = totalCount; + mDeselectedItems.clear(); + mLeavedPercents.clear(); + } + + public int getCurrentIndex() { + return mCurrentIndex; + } + + public int getScrollState() { + return mScrollState; + } + + public interface OnNavigatorScrollListener { + void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight); + + void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight); + + void onSelected(int index, int totalCount); + + void onDeselected(int index, int totalCount); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/ScrollState.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/ScrollState.java new file mode 100644 index 0000000..1b7b15e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/ScrollState.java @@ -0,0 +1,12 @@ +package com.yonsz.z1.view.magicindicator; + +/** + * 自定义滚动状态,消除对ViewPager的依赖 + * Created by hackware on 2016/8/27. + */ + +public interface ScrollState { + int SCROLL_STATE_IDLE = 0; + int SCROLL_STATE_DRAGGING = 1; + int SCROLL_STATE_SETTLING = 2; +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/ViewPagerHelper.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/ViewPagerHelper.java new file mode 100644 index 0000000..acaacd7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/ViewPagerHelper.java @@ -0,0 +1,30 @@ +package com.yonsz.z1.view.magicindicator; + +import android.support.v4.view.ViewPager; + +/** + * 简化和ViewPager绑定 + * Created by hackware on 2016/8/17. + */ + +public class ViewPagerHelper { + public static void bind(final MagicIndicator magicIndicator, ViewPager viewPager) { + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels); + } + + @Override + public void onPageSelected(int position) { + magicIndicator.onPageSelected(position); + } + + @Override + public void onPageScrollStateChanged(int state) { + magicIndicator.onPageScrollStateChanged(state); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/abs/IPagerNavigator.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/abs/IPagerNavigator.java new file mode 100644 index 0000000..417b7e3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/abs/IPagerNavigator.java @@ -0,0 +1,32 @@ +package com.yonsz.z1.view.magicindicator.abs; + +/** + * 抽象的ViewPager导航器 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public interface IPagerNavigator { + + ///////////////////////// ViewPager的3个回调 + void onPageScrolled(int position, float positionOffset, int positionOffsetPixels); + + void onPageSelected(int position); + + void onPageScrollStateChanged(int state); + ///////////////////////// + + /** + * 当IPagerNavigator被添加到MagicIndicator时调用 + */ + void onAttachToMagicIndicator(); + + /** + * 当IPagerNavigator从MagicIndicator上移除时调用 + */ + void onDetachFromMagicIndicator(); + + /** + * ViewPager内容改变时需要先调用此方法,自定义的IPagerNavigator应当遵守此约定 + */ + void notifyDataSetChanged(); +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/ArgbEvaluatorHolder.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/ArgbEvaluatorHolder.java new file mode 100644 index 0000000..11cb6c7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/ArgbEvaluatorHolder.java @@ -0,0 +1,28 @@ +package com.yonsz.z1.view.magicindicator.buildins; + + +/** + * 实现颜色渐变,考虑到兼容性,不使用内置的ArgbEvaluator + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class ArgbEvaluatorHolder { + public static int eval(float fraction, int startValue, int endValue) { + int startA = (startValue >> 24) & 0xff; + int startR = (startValue >> 16) & 0xff; + int startG = (startValue >> 8) & 0xff; + int startB = startValue & 0xff; + + int endA = (endValue >> 24) & 0xff; + int endR = (endValue >> 16) & 0xff; + int endG = (endValue >> 8) & 0xff; + int endB = endValue & 0xff; + + int currentA = (startA + (int) (fraction * (endA - startA))) << 24; + int currentR = (startR + (int) (fraction * (endR - startR))) << 16; + int currentG = (startG + (int) (fraction * (endG - startG))) << 8; + int currentB = startB + (int) (fraction * (endB - startB)); + + return currentA | currentR | currentG | currentB; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/UIUtil.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/UIUtil.java new file mode 100644 index 0000000..2e3e7c5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/UIUtil.java @@ -0,0 +1,19 @@ +package com.yonsz.z1.view.magicindicator.buildins; + +import android.content.Context; + +/** + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public final class UIUtil { + + public static int dip2px(Context context, double dpValue) { + float density = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * density + 0.5); + } + + public static int getScreenWidth(Context context) { + return context.getResources().getDisplayMetrics().widthPixels; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/circlenavigator/CircleNavigator.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/circlenavigator/CircleNavigator.java new file mode 100644 index 0000000..d86cbdc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/circlenavigator/CircleNavigator.java @@ -0,0 +1,309 @@ +package com.yonsz.z1.view.magicindicator.buildins.circlenavigator; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PointF; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; + +import com.yonsz.z1.view.magicindicator.abs.IPagerNavigator; +import com.yonsz.z1.view.magicindicator.buildins.UIUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * 圆圈式的指示器 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class CircleNavigator extends View implements IPagerNavigator { + private int mRadius; + private int mCircleColor; + private int mStrokeWidth; + private int mCircleSpacing; + private int mCurrentIndex; + private int mTotalCount; + private Interpolator mStartInterpolator = new LinearInterpolator(); + + private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private List mCirclePoints = new ArrayList(); + private float mIndicatorX; + + // 事件回调 + private boolean mTouchable; + private OnCircleClickListener mCircleClickListener; + private float mDownX; + private float mDownY; + private int mTouchSlop; + + private boolean mFollowTouch = true; // 是否跟随手指滑动 + + public CircleNavigator(Context context) { + super(context); + init(context); + } + + private void init(Context context) { + mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + mRadius = UIUtil.dip2px(context, 3); + mCircleSpacing = UIUtil.dip2px(context, 8); + mStrokeWidth = UIUtil.dip2px(context, 1); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); + } + + private int measureWidth(int widthMeasureSpec) { + int mode = MeasureSpec.getMode(widthMeasureSpec); + int width = MeasureSpec.getSize(widthMeasureSpec); + int result = 0; + switch (mode) { + case MeasureSpec.EXACTLY: + result = width; + break; + case MeasureSpec.AT_MOST: + case MeasureSpec.UNSPECIFIED: + result = mTotalCount * mRadius * 2 + (mTotalCount - 1) * mCircleSpacing + getPaddingLeft() + getPaddingRight() + mStrokeWidth * 2; + break; + default: + break; + } + return result; + } + + private int measureHeight(int heightMeasureSpec) { + int mode = MeasureSpec.getMode(heightMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + int result = 0; + switch (mode) { + case MeasureSpec.EXACTLY: + result = height; + break; + case MeasureSpec.AT_MOST: + case MeasureSpec.UNSPECIFIED: + result = mRadius * 2 + mStrokeWidth * 2 + getPaddingTop() + getPaddingBottom(); + break; + default: + break; + } + return result; + } + + @Override + protected void onDraw(Canvas canvas) { + mPaint.setColor(mCircleColor); + drawCircles(canvas); + drawIndicator(canvas); + } + + private void drawCircles(Canvas canvas) { + mPaint.setStyle(Paint.Style.STROKE); + mPaint.setStrokeWidth(mStrokeWidth); + for (int i = 0, j = mCirclePoints.size(); i < j; i++) { + PointF pointF = mCirclePoints.get(i); + canvas.drawCircle(pointF.x, pointF.y, mRadius, mPaint); + } + } + + private void drawIndicator(Canvas canvas) { + mPaint.setStyle(Paint.Style.FILL); + if (mCirclePoints.size() > 0) { + canvas.drawCircle(mIndicatorX, (int) (getHeight() / 2.0f + 0.5f), mRadius, mPaint); + } + } + + private void prepareCirclePoints() { + mCirclePoints.clear(); + if (mTotalCount > 0) { + int y = (int) (getHeight() / 2.0f + 0.5f); + int centerSpacing = mRadius * 2 + mCircleSpacing; + int startX = mRadius + (int) (mStrokeWidth / 2.0f + 0.5f) + getPaddingLeft(); + for (int i = 0; i < mTotalCount; i++) { + PointF pointF = new PointF(startX, y); + mCirclePoints.add(pointF); + startX += centerSpacing; + } + mIndicatorX = mCirclePoints.get(mCurrentIndex).x; + } + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + if (mFollowTouch) { + if (mCirclePoints.isEmpty()) { + return; + } + + int currentPosition = Math.min(mCirclePoints.size() - 1, position); + int nextPosition = Math.min(mCirclePoints.size() - 1, position + 1); + PointF current = mCirclePoints.get(currentPosition); + PointF next = mCirclePoints.get(nextPosition); + + mIndicatorX = current.x + (next.x - current.x) * mStartInterpolator.getInterpolation(positionOffset); + + invalidate(); + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + float x = event.getX(); + float y = event.getY(); + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + if (mTouchable) { + mDownX = x; + mDownY = y; + return true; + } + break; + case MotionEvent.ACTION_UP: + if (mCircleClickListener != null) { + if (Math.abs(x - mDownX) <= mTouchSlop && Math.abs(y - mDownY) <= mTouchSlop) { + float max = Float.MAX_VALUE; + int index = 0; + for (int i = 0; i < mCirclePoints.size(); i++) { + PointF pointF = mCirclePoints.get(i); + float offset = Math.abs(pointF.x - x); + if (offset < max) { + max = offset; + index = i; + } + } + mCircleClickListener.onClick(index); + } + } + break; + default: + break; + } + return super.onTouchEvent(event); + } + + @Override + public void onPageSelected(int position) { + mCurrentIndex = position; + if (!mFollowTouch) { + mIndicatorX = mCirclePoints.get(mCurrentIndex).x; + invalidate(); + } + } + + @Override + public void onPageScrollStateChanged(int state) { + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + prepareCirclePoints(); + } + + @Override + public void onAttachToMagicIndicator() { + } + + @Override + public void notifyDataSetChanged() { + prepareCirclePoints(); + invalidate(); + } + + @Override + public void onDetachFromMagicIndicator() { + } + + public int getRadius() { + return mRadius; + } + + public void setRadius(int radius) { + mRadius = radius; + prepareCirclePoints(); + invalidate(); + } + + public int getCircleColor() { + return mCircleColor; + } + + public void setCircleColor(int circleColor) { + mCircleColor = circleColor; + invalidate(); + } + + public int getStrokeWidth() { + return mStrokeWidth; + } + + public void setStrokeWidth(int strokeWidth) { + mStrokeWidth = strokeWidth; + invalidate(); + } + + public int getCircleSpacing() { + return mCircleSpacing; + } + + public void setCircleSpacing(int circleSpacing) { + mCircleSpacing = circleSpacing; + prepareCirclePoints(); + invalidate(); + } + + public Interpolator getStartInterpolator() { + return mStartInterpolator; + } + + public void setStartInterpolator(Interpolator startInterpolator) { + mStartInterpolator = startInterpolator; + if (mStartInterpolator == null) { + mStartInterpolator = new LinearInterpolator(); + } + } + + public int getCircleCount() { + return mTotalCount; + } + + public void setCircleCount(int count) { + mTotalCount = count; // 此处不调用invalidate,让外部调用notifyDataSetChanged + } + + public boolean isTouchable() { + return mTouchable; + } + + public void setTouchable(boolean touchable) { + mTouchable = touchable; + } + + public boolean isFollowTouch() { + return mFollowTouch; + } + + public void setFollowTouch(boolean followTouch) { + mFollowTouch = followTouch; + } + + public OnCircleClickListener getCircleClickListener() { + return mCircleClickListener; + } + + public void setCircleClickListener(OnCircleClickListener circleClickListener) { + if (!mTouchable) { + mTouchable = true; + } + mCircleClickListener = circleClickListener; + } + + public interface OnCircleClickListener { + void onClick(int index); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/CommonNavigator.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/CommonNavigator.java new file mode 100644 index 0000000..92d7cab --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/CommonNavigator.java @@ -0,0 +1,424 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator; + +import android.content.Context; +import android.database.DataSetObserver; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.HorizontalScrollView; +import android.widget.LinearLayout; +import com.yonsz.z1.R; +import com.yonsz.z1.view.magicindicator.NavigatorHelper; +import com.yonsz.z1.view.magicindicator.ScrollState; +import com.yonsz.z1.view.magicindicator.abs.IPagerNavigator; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IMeasurablePagerTitleView; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IPagerIndicator; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IPagerTitleView; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.model.PositionData; + +import java.util.ArrayList; +import java.util.List; + +/** + * 通用的ViewPager指示器,包含PagerTitle和PagerIndicator + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class CommonNavigator extends FrameLayout implements IPagerNavigator, NavigatorHelper.OnNavigatorScrollListener { + private HorizontalScrollView mScrollView; + private LinearLayout mTitleContainer; + private LinearLayout mIndicatorContainer; + private IPagerIndicator mIndicator; + + private CommonNavigatorAdapter mAdapter; + private NavigatorHelper mNavigatorHelper; + + /** + * 提供给外部的参数配置 + */ + /****************************************************/ + private boolean mAdjustMode; // 自适应模式,适用于数目固定的、少量的title + private boolean mEnablePivotScroll; // 启动中心点滚动 + private float mScrollPivotX = 0.5f; // 滚动中心点 0.0f - 1.0f + private boolean mSmoothScroll = true; // 是否平滑滚动,适用于 !mAdjustMode && !mFollowTouch + private boolean mFollowTouch = true; // 是否手指跟随滚动 + private int mRightPadding; + private int mLeftPadding; + private boolean mIndicatorOnTop; // 指示器是否在title上层,默认为下层 + private boolean mSkimOver; // 跨多页切换时,中间页是否显示 "掠过" 效果 + private boolean mReselectWhenLayout = true; // PositionData准备好时,是否重新选中当前页,为true可保证在极端情况下指示器状态正确 + /****************************************************/ + + // 保存每个title的位置信息,为扩展indicator提供保障 + private List mPositionDataList = new ArrayList(); + + private DataSetObserver mObserver = new DataSetObserver() { + + @Override + public void onChanged() { + mNavigatorHelper.setTotalCount(mAdapter.getCount()); // 如果使用helper,应始终保证helper中的totalCount为最新 + init(); + } + + @Override + public void onInvalidated() { + // 没什么用,暂不做处理 + } + }; + + public CommonNavigator(Context context) { + super(context); + mNavigatorHelper = new NavigatorHelper(); + mNavigatorHelper.setNavigatorScrollListener(this); + } + + @Override + public void notifyDataSetChanged() { + if (mAdapter != null) { + mAdapter.notifyDataSetChanged(); + } + } + + public boolean isAdjustMode() { + return mAdjustMode; + } + + public void setAdjustMode(boolean is) { + mAdjustMode = is; + } + + public CommonNavigatorAdapter getAdapter() { + return mAdapter; + } + + public void setAdapter(CommonNavigatorAdapter adapter) { + if (mAdapter == adapter) { + return; + } + if (mAdapter != null) { + mAdapter.unregisterDataSetObserver(mObserver); + } + mAdapter = adapter; + if (mAdapter != null) { + mAdapter.registerDataSetObserver(mObserver); + mNavigatorHelper.setTotalCount(mAdapter.getCount()); + if (mTitleContainer != null) { // adapter改变时,应该重新init,但是第一次设置adapter不用,onAttachToMagicIndicator中有init + mAdapter.notifyDataSetChanged(); + } + } else { + mNavigatorHelper.setTotalCount(0); + init(); + } + } + + private void init() { + removeAllViews(); + + View root; + if (mAdjustMode) { + root = LayoutInflater.from(getContext()).inflate(R.layout.pager_navigator_layout_no_scroll, this); + } else { + root = LayoutInflater.from(getContext()).inflate(R.layout.pager_navigator_layout, this); + } + + mScrollView = (HorizontalScrollView) root.findViewById(R.id.scroll_view); // mAdjustMode为true时,mScrollView为null + + mTitleContainer = (LinearLayout) root.findViewById(R.id.title_container); + mTitleContainer.setPadding(mLeftPadding, 0, mRightPadding, 0); + + mIndicatorContainer = (LinearLayout) root.findViewById(R.id.indicator_container); + if (mIndicatorOnTop) { + mIndicatorContainer.getParent().bringChildToFront(mIndicatorContainer); + } + + initTitlesAndIndicator(); + } + + /** + * 初始化title和indicator + */ + private void initTitlesAndIndicator() { + for (int i = 0, j = mNavigatorHelper.getTotalCount(); i < j; i++) { + IPagerTitleView v = mAdapter.getTitleView(getContext(), i); + if (v instanceof View) { + View view = (View) v; + LinearLayout.LayoutParams lp; + if (mAdjustMode) { + lp = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT); + lp.weight = mAdapter.getTitleWeight(getContext(), i); + } else { + lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); + } + mTitleContainer.addView(view, lp); + } + } + if (mAdapter != null) { + mIndicator = mAdapter.getIndicator(getContext()); + if (mIndicator instanceof View) { + LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + mIndicatorContainer.addView((View) mIndicator, lp); + } + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + if (mAdapter != null) { + preparePositionData(); + if (mIndicator != null) { + mIndicator.onPositionDataProvide(mPositionDataList); + } + if (mReselectWhenLayout && mNavigatorHelper.getScrollState() == ScrollState.SCROLL_STATE_IDLE) { + onPageSelected(mNavigatorHelper.getCurrentIndex()); + onPageScrolled(mNavigatorHelper.getCurrentIndex(), 0.0f, 0); + } + } + } + + /** + * 获取title的位置信息,为打造不同的指示器、各种效果提供可能 + */ + private void preparePositionData() { + mPositionDataList.clear(); + for (int i = 0, j = mNavigatorHelper.getTotalCount(); i < j; i++) { + PositionData data = new PositionData(); + View v = mTitleContainer.getChildAt(i); + if (v != null) { + data.mLeft = v.getLeft(); + data.mTop = v.getTop(); + data.mRight = v.getRight(); + data.mBottom = v.getBottom(); + if (v instanceof IMeasurablePagerTitleView) { + IMeasurablePagerTitleView view = (IMeasurablePagerTitleView) v; + data.mContentLeft = view.getContentLeft(); + data.mContentTop = view.getContentTop(); + data.mContentRight = view.getContentRight(); + data.mContentBottom = view.getContentBottom(); + } else { + data.mContentLeft = data.mLeft; + data.mContentTop = data.mTop; + data.mContentRight = data.mRight; + data.mContentBottom = data.mBottom; + } + } + mPositionDataList.add(data); + } + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + if (mAdapter != null) { + + mNavigatorHelper.onPageScrolled(position, positionOffset, positionOffsetPixels); + if (mIndicator != null) { + mIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels); + } + + // 手指跟随滚动 + if (mScrollView != null && mPositionDataList.size() > 0 && position >= 0 && position < mPositionDataList.size()) { + if (mFollowTouch) { + int currentPosition = Math.min(mPositionDataList.size() - 1, position); + int nextPosition = Math.min(mPositionDataList.size() - 1, position + 1); + PositionData current = mPositionDataList.get(currentPosition); + PositionData next = mPositionDataList.get(nextPosition); + float scrollTo = current.horizontalCenter() - mScrollView.getWidth() * mScrollPivotX; + float nextScrollTo = next.horizontalCenter() - mScrollView.getWidth() * mScrollPivotX; + mScrollView.scrollTo((int) (scrollTo + (nextScrollTo - scrollTo) * positionOffset), 0); + } else if (!mEnablePivotScroll) { + // TODO 实现待选中项完全显示出来 + } + } + } + } + + public float getScrollPivotX() { + return mScrollPivotX; + } + + public void setScrollPivotX(float scrollPivotX) { + mScrollPivotX = scrollPivotX; + } + + @Override + public void onPageSelected(int position) { + if (mAdapter != null) { + mNavigatorHelper.onPageSelected(position); + if (mIndicator != null) { + mIndicator.onPageSelected(position); + } + } + } + + @Override + public void onPageScrollStateChanged(int state) { + if (mAdapter != null) { + mNavigatorHelper.onPageScrollStateChanged(state); + if (mIndicator != null) { + mIndicator.onPageScrollStateChanged(state); + } + } + } + + @Override + public void onAttachToMagicIndicator() { + init(); // 将初始化延迟到这里 + } + + @Override + public void onDetachFromMagicIndicator() { + } + + public IPagerIndicator getPagerIndicator() { + return mIndicator; + } + + public boolean isEnablePivotScroll() { + return mEnablePivotScroll; + } + + public void setEnablePivotScroll(boolean is) { + mEnablePivotScroll = is; + } + + @Override + public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) { + if (mTitleContainer == null) { + return; + } + View v = mTitleContainer.getChildAt(index); + if (v instanceof IPagerTitleView) { + ((IPagerTitleView) v).onEnter(index, totalCount, enterPercent, leftToRight); + } + } + + @Override + public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) { + if (mTitleContainer == null) { + return; + } + View v = mTitleContainer.getChildAt(index); + if (v instanceof IPagerTitleView) { + ((IPagerTitleView) v).onLeave(index, totalCount, leavePercent, leftToRight); + } + } + + public boolean isSmoothScroll() { + return mSmoothScroll; + } + + public void setSmoothScroll(boolean smoothScroll) { + mSmoothScroll = smoothScroll; + } + + public boolean isFollowTouch() { + return mFollowTouch; + } + + public void setFollowTouch(boolean followTouch) { + mFollowTouch = followTouch; + } + + public boolean isSkimOver() { + return mSkimOver; + } + + public void setSkimOver(boolean skimOver) { + mSkimOver = skimOver; + mNavigatorHelper.setSkimOver(skimOver); + } + + @Override + public void onSelected(int index, int totalCount) { + if (mTitleContainer == null) { + return; + } + View v = mTitleContainer.getChildAt(index); + if (v instanceof IPagerTitleView) { + ((IPagerTitleView) v).onSelected(index, totalCount); + } + if (!mAdjustMode && !mFollowTouch && mScrollView != null && mPositionDataList.size() > 0) { + int currentIndex = Math.min(mPositionDataList.size() - 1, index); + PositionData current = mPositionDataList.get(currentIndex); + if (mEnablePivotScroll) { + float scrollTo = current.horizontalCenter() - mScrollView.getWidth() * mScrollPivotX; + if (mSmoothScroll) { + mScrollView.smoothScrollTo((int) (scrollTo), 0); + } else { + mScrollView.scrollTo((int) (scrollTo), 0); + } + } else { + // 如果当前项被部分遮挡,则滚动显示完全 + if (mScrollView.getScrollX() > current.mLeft) { + if (mSmoothScroll) { + mScrollView.smoothScrollTo(current.mLeft, 0); + } else { + mScrollView.scrollTo(current.mLeft, 0); + } + } else if (mScrollView.getScrollX() + getWidth() < current.mRight) { + if (mSmoothScroll) { + mScrollView.smoothScrollTo(current.mRight - getWidth(), 0); + } else { + mScrollView.scrollTo(current.mRight - getWidth(), 0); + } + } + } + } + } + + @Override + public void onDeselected(int index, int totalCount) { + if (mTitleContainer == null) { + return; + } + View v = mTitleContainer.getChildAt(index); + if (v instanceof IPagerTitleView) { + ((IPagerTitleView) v).onDeselected(index, totalCount); + } + } + + public IPagerTitleView getPagerTitleView(int index) { + if (mTitleContainer == null) { + return null; + } + return (IPagerTitleView) mTitleContainer.getChildAt(index); + } + + public LinearLayout getTitleContainer() { + return mTitleContainer; + } + + public int getRightPadding() { + return mRightPadding; + } + + public void setRightPadding(int rightPadding) { + mRightPadding = rightPadding; + } + + public int getLeftPadding() { + return mLeftPadding; + } + + public void setLeftPadding(int leftPadding) { + mLeftPadding = leftPadding; + } + + public boolean isIndicatorOnTop() { + return mIndicatorOnTop; + } + + public void setIndicatorOnTop(boolean indicatorOnTop) { + mIndicatorOnTop = indicatorOnTop; + } + + public boolean isReselectWhenLayout() { + return mReselectWhenLayout; + } + + public void setReselectWhenLayout(boolean reselectWhenLayout) { + mReselectWhenLayout = reselectWhenLayout; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/CommonNavigatorAdapter.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/CommonNavigatorAdapter.java new file mode 100644 index 0000000..b15a91a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/CommonNavigatorAdapter.java @@ -0,0 +1,41 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs; + +import android.content.Context; +import android.database.DataSetObservable; +import android.database.DataSetObserver; + +/** + * CommonNavigator适配器,通过它可轻松切换不同的指示器样式 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public abstract class CommonNavigatorAdapter { + + private final DataSetObservable mDataSetObservable = new DataSetObservable(); + + public abstract int getCount(); + + public abstract IPagerTitleView getTitleView(Context context, int index); + + public abstract IPagerIndicator getIndicator(Context context); + + public float getTitleWeight(Context context, int index) { + return 1; + } + + public final void registerDataSetObserver(DataSetObserver observer) { + mDataSetObservable.registerObserver(observer); + } + + public final void unregisterDataSetObserver(DataSetObserver observer) { + mDataSetObservable.unregisterObserver(observer); + } + + public final void notifyDataSetChanged() { + mDataSetObservable.notifyChanged(); + } + + public final void notifyDataSetInvalidated() { + mDataSetObservable.notifyInvalidated(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/IMeasurablePagerTitleView.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/IMeasurablePagerTitleView.java new file mode 100644 index 0000000..06f000b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/IMeasurablePagerTitleView.java @@ -0,0 +1,16 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs; + +/** + * 可测量内容区域的指示器标题 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public interface IMeasurablePagerTitleView extends IPagerTitleView { + int getContentLeft(); + + int getContentTop(); + + int getContentRight(); + + int getContentBottom(); +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/IPagerIndicator.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/IPagerIndicator.java new file mode 100644 index 0000000..8da8c3a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/IPagerIndicator.java @@ -0,0 +1,21 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs; + + +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.model.PositionData; + +import java.util.List; + +/** + * 抽象的viewpager指示器,适用于CommonNavigator + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public interface IPagerIndicator { + void onPageScrolled(int position, float positionOffset, int positionOffsetPixels); + + void onPageSelected(int position); + + void onPageScrollStateChanged(int state); + + void onPositionDataProvide(List dataList); +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/IPagerTitleView.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/IPagerTitleView.java new file mode 100644 index 0000000..df71ac7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/abs/IPagerTitleView.java @@ -0,0 +1,34 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs; + +/** + * 抽象的指示器标题,适用于CommonNavigator + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public interface IPagerTitleView { + /** + * 被选中 + */ + void onSelected(int index, int totalCount); + + /** + * 未被选中 + */ + void onDeselected(int index, int totalCount); + + /** + * 离开 + * + * @param leavePercent 离开的百分比, 0.0f - 1.0f + * @param leftToRight 从左至右离开 + */ + void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight); + + /** + * 进入 + * + * @param enterPercent 进入的百分比, 0.0f - 1.0f + * @param leftToRight 从左至右离开 + */ + void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight); +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/BezierPagerIndicator.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/BezierPagerIndicator.java new file mode 100644 index 0000000..8af2d8d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/BezierPagerIndicator.java @@ -0,0 +1,164 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.indicators; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.view.View; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; +import com.yonsz.z1.view.magicindicator.FragmentContainerHelper; +import com.yonsz.z1.view.magicindicator.buildins.ArgbEvaluatorHolder; +import com.yonsz.z1.view.magicindicator.buildins.UIUtil; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IPagerIndicator; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.model.PositionData; + +import java.util.Arrays; +import java.util.List; + +/** + * 贝塞尔曲线ViewPager指示器,带颜色渐变 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class BezierPagerIndicator extends View implements IPagerIndicator { + private List mPositionDataList; + + private float mLeftCircleRadius; + private float mLeftCircleX; + private float mRightCircleRadius; + private float mRightCircleX; + + private float mYOffset; + private float mMaxCircleRadius; + private float mMinCircleRadius; + + private Paint mPaint; + private Path mPath = new Path(); + + private List mColors; + private Interpolator mStartInterpolator = new AccelerateInterpolator(); + private Interpolator mEndInterpolator = new DecelerateInterpolator(); + + public BezierPagerIndicator(Context context) { + super(context); + init(context); + } + + private void init(Context context) { + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStyle(Paint.Style.FILL); + mMaxCircleRadius = UIUtil.dip2px(context, 3.5); + mMinCircleRadius = UIUtil.dip2px(context, 2); + mYOffset = UIUtil.dip2px(context, 1.5); + } + + @Override + protected void onDraw(Canvas canvas) { + canvas.drawCircle(mLeftCircleX, getHeight() - mYOffset - mMaxCircleRadius, mLeftCircleRadius, mPaint); + canvas.drawCircle(mRightCircleX, getHeight() - mYOffset - mMaxCircleRadius, mRightCircleRadius, mPaint); + drawBezierCurve(canvas); + } + + /** + * 绘制贝塞尔曲线 + * + * @param canvas + */ + private void drawBezierCurve(Canvas canvas) { + mPath.reset(); + float y = getHeight() - mYOffset - mMaxCircleRadius; + mPath.moveTo(mRightCircleX, y); + mPath.lineTo(mRightCircleX, y - mRightCircleRadius); + mPath.quadTo(mRightCircleX + (mLeftCircleX - mRightCircleX) / 2.0f, y, mLeftCircleX, y - mLeftCircleRadius); + mPath.lineTo(mLeftCircleX, y + mLeftCircleRadius); + mPath.quadTo(mRightCircleX + (mLeftCircleX - mRightCircleX) / 2.0f, y, mRightCircleX, y + mRightCircleRadius); + mPath.close(); // 闭合 + canvas.drawPath(mPath, mPaint); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + if (mPositionDataList == null || mPositionDataList.isEmpty()) { + return; + } + + // 计算颜色 + if (mColors != null && mColors.size() > 0) { + int currentColor = mColors.get(Math.abs(position) % mColors.size()); + int nextColor = mColors.get(Math.abs(position + 1) % mColors.size()); + int color = ArgbEvaluatorHolder.eval(positionOffset, currentColor, nextColor); + mPaint.setColor(color); + } + + // 计算锚点位置 + PositionData current = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position); + PositionData next = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position + 1); + + float leftX = current.mLeft + (current.mRight - current.mLeft) / 2; + float rightX = next.mLeft + (next.mRight - next.mLeft) / 2; + + mLeftCircleX = leftX + (rightX - leftX) * mStartInterpolator.getInterpolation(positionOffset); + mRightCircleX = leftX + (rightX - leftX) * mEndInterpolator.getInterpolation(positionOffset); + mLeftCircleRadius = mMaxCircleRadius + (mMinCircleRadius - mMaxCircleRadius) * mEndInterpolator.getInterpolation(positionOffset); + mRightCircleRadius = mMinCircleRadius + (mMaxCircleRadius - mMinCircleRadius) * mStartInterpolator.getInterpolation(positionOffset); + + invalidate(); + } + + @Override + public void onPageSelected(int position) { + } + + @Override + public void onPageScrollStateChanged(int state) { + } + + @Override + public void onPositionDataProvide(List dataList) { + mPositionDataList = dataList; + } + + public float getMaxCircleRadius() { + return mMaxCircleRadius; + } + + public void setMaxCircleRadius(float maxCircleRadius) { + mMaxCircleRadius = maxCircleRadius; + } + + public float getMinCircleRadius() { + return mMinCircleRadius; + } + + public void setMinCircleRadius(float minCircleRadius) { + mMinCircleRadius = minCircleRadius; + } + + public float getYOffset() { + return mYOffset; + } + + public void setYOffset(float yOffset) { + mYOffset = yOffset; + } + + public void setColors(Integer... colors) { + mColors = Arrays.asList(colors); + } + + public void setStartInterpolator(Interpolator startInterpolator) { + mStartInterpolator = startInterpolator; + if (mStartInterpolator == null) { + mStartInterpolator = new AccelerateInterpolator(); + } + } + + public void setEndInterpolator(Interpolator endInterpolator) { + mEndInterpolator = endInterpolator; + if (mEndInterpolator == null) { + mEndInterpolator = new DecelerateInterpolator(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/LinePagerIndicator.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/LinePagerIndicator.java new file mode 100644 index 0000000..706ee52 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/LinePagerIndicator.java @@ -0,0 +1,209 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.indicators; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.view.View; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; +import com.yonsz.z1.view.magicindicator.FragmentContainerHelper; +import com.yonsz.z1.view.magicindicator.buildins.ArgbEvaluatorHolder; +import com.yonsz.z1.view.magicindicator.buildins.UIUtil; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IPagerIndicator; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.model.PositionData; + +import java.util.Arrays; +import java.util.List; + +/** + * 直线viewpager指示器,带颜色渐变 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class LinePagerIndicator extends View implements IPagerIndicator { + public static final int MODE_MATCH_EDGE = 0; // 直线宽度 == title宽度 - 2 * mXOffset + public static final int MODE_WRAP_CONTENT = 1; // 直线宽度 == title内容宽度 - 2 * mXOffset + public static final int MODE_EXACTLY = 2; // 直线宽度 == mLineWidth + + private int mMode; // 默认为MODE_MATCH_EDGE模式 + + // 控制动画 + private Interpolator mStartInterpolator = new LinearInterpolator(); + private Interpolator mEndInterpolator = new LinearInterpolator(); + + private float mYOffset; // 相对于底部的偏移量,如果你想让直线位于title上方,设置它即可 + private float mLineHeight; + private float mXOffset; + private float mLineWidth; + private float mRoundRadius; + + private Paint mPaint; + private List mPositionDataList; + private List mColors; + + private RectF mLineRect = new RectF(); + + public LinePagerIndicator(Context context) { + super(context); + init(context); + } + + private void init(Context context) { + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStyle(Paint.Style.FILL); + mLineHeight = UIUtil.dip2px(context, 3); + mLineWidth = UIUtil.dip2px(context, 10); + } + + @Override + protected void onDraw(Canvas canvas) { + canvas.drawRoundRect(mLineRect, mRoundRadius, mRoundRadius, mPaint); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + if (mPositionDataList == null || mPositionDataList.isEmpty()) { + return; + } + + // 计算颜色 + if (mColors != null && mColors.size() > 0) { + int currentColor = mColors.get(Math.abs(position) % mColors.size()); + int nextColor = mColors.get(Math.abs(position + 1) % mColors.size()); + int color = ArgbEvaluatorHolder.eval(positionOffset, currentColor, nextColor); + mPaint.setColor(color); + } + + // 计算锚点位置 + PositionData current = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position); + PositionData next = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position + 1); + + float leftX; + float nextLeftX; + float rightX; + float nextRightX; + if (mMode == MODE_MATCH_EDGE) { + leftX = current.mLeft + mXOffset; + nextLeftX = next.mLeft + mXOffset; + rightX = current.mRight - mXOffset; + nextRightX = next.mRight - mXOffset; + } else if (mMode == MODE_WRAP_CONTENT) { + leftX = current.mContentLeft + mXOffset; + nextLeftX = next.mContentLeft + mXOffset; + rightX = current.mContentRight - mXOffset; + nextRightX = next.mContentRight - mXOffset; + } else { // MODE_EXACTLY + leftX = current.mLeft + (current.width() - mLineWidth) / 2; + nextLeftX = next.mLeft + (next.width() - mLineWidth) / 2; + rightX = current.mLeft + (current.width() + mLineWidth) / 2; + nextRightX = next.mLeft + (next.width() + mLineWidth) / 2; + } + + mLineRect.left = leftX + (nextLeftX - leftX) * mStartInterpolator.getInterpolation(positionOffset); + mLineRect.right = rightX + (nextRightX - rightX) * mEndInterpolator.getInterpolation(positionOffset); + mLineRect.top = getHeight() - mLineHeight - mYOffset; + mLineRect.bottom = getHeight() - mYOffset; + + invalidate(); + } + + @Override + public void onPageSelected(int position) { + } + + @Override + public void onPageScrollStateChanged(int state) { + } + + @Override + public void onPositionDataProvide(List dataList) { + mPositionDataList = dataList; + } + + public float getYOffset() { + return mYOffset; + } + + public void setYOffset(float yOffset) { + mYOffset = yOffset; + } + + public float getXOffset() { + return mXOffset; + } + + public void setXOffset(float xOffset) { + mXOffset = xOffset; + } + + public float getLineHeight() { + return mLineHeight; + } + + public void setLineHeight(float lineHeight) { + mLineHeight = lineHeight; + } + + public float getLineWidth() { + return mLineWidth; + } + + public void setLineWidth(float lineWidth) { + mLineWidth = lineWidth; + } + + public float getRoundRadius() { + return mRoundRadius; + } + + public void setRoundRadius(float roundRadius) { + mRoundRadius = roundRadius; + } + + public int getMode() { + return mMode; + } + + public void setMode(int mode) { + if (mode == MODE_EXACTLY || mode == MODE_MATCH_EDGE || mode == MODE_WRAP_CONTENT) { + mMode = mode; + } else { + throw new IllegalArgumentException("mode " + mode + " not supported."); + } + } + + public Paint getPaint() { + return mPaint; + } + + public List getColors() { + return mColors; + } + + public void setColors(Integer... colors) { + mColors = Arrays.asList(colors); + } + + public Interpolator getStartInterpolator() { + return mStartInterpolator; + } + + public void setStartInterpolator(Interpolator startInterpolator) { + mStartInterpolator = startInterpolator; + if (mStartInterpolator == null) { + mStartInterpolator = new LinearInterpolator(); + } + } + + public Interpolator getEndInterpolator() { + return mEndInterpolator; + } + + public void setEndInterpolator(Interpolator endInterpolator) { + mEndInterpolator = endInterpolator; + if (mEndInterpolator == null) { + mEndInterpolator = new LinearInterpolator(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/TestPagerIndicator.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/TestPagerIndicator.java new file mode 100644 index 0000000..290aa0c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/TestPagerIndicator.java @@ -0,0 +1,102 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.indicators; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.view.View; + +import com.yonsz.z1.view.magicindicator.FragmentContainerHelper; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IPagerIndicator; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.model.PositionData; + +import java.util.List; + + +/** + * 用于测试的指示器,可用来检测自定义的IMeasurablePagerTitleView是否正确测量内容区域 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class TestPagerIndicator extends View implements IPagerIndicator { + private Paint mPaint; + private int mOutRectColor; + private int mInnerRectColor; + private RectF mOutRect = new RectF(); + private RectF mInnerRect = new RectF(); + + private List mPositionDataList; + + public TestPagerIndicator(Context context) { + super(context); + init(context); + } + + private void init(Context context) { + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStyle(Paint.Style.STROKE); + mOutRectColor = Color.RED; + mInnerRectColor = Color.GREEN; + } + + @Override + protected void onDraw(Canvas canvas) { + mPaint.setColor(mOutRectColor); + canvas.drawRect(mOutRect, mPaint); + mPaint.setColor(mInnerRectColor); + canvas.drawRect(mInnerRect, mPaint); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + if (mPositionDataList == null || mPositionDataList.isEmpty()) { + return; + } + + // 计算锚点位置 + PositionData current = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position); + PositionData next = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position + 1); + + mOutRect.left = current.mLeft + (next.mLeft - current.mLeft) * positionOffset; + mOutRect.top = current.mTop + (next.mTop - current.mTop) * positionOffset; + mOutRect.right = current.mRight + (next.mRight - current.mRight) * positionOffset; + mOutRect.bottom = current.mBottom + (next.mBottom - current.mBottom) * positionOffset; + + mInnerRect.left = current.mContentLeft + (next.mContentLeft - current.mContentLeft) * positionOffset; + mInnerRect.top = current.mContentTop + (next.mContentTop - current.mContentTop) * positionOffset; + mInnerRect.right = current.mContentRight + (next.mContentRight - current.mContentRight) * positionOffset; + mInnerRect.bottom = current.mContentBottom + (next.mContentBottom - current.mContentBottom) * positionOffset; + + invalidate(); + } + + @Override + public void onPageSelected(int position) { + } + + @Override + public void onPageScrollStateChanged(int state) { + } + + @Override + public void onPositionDataProvide(List dataList) { + mPositionDataList = dataList; + } + + public int getOutRectColor() { + return mOutRectColor; + } + + public void setOutRectColor(int outRectColor) { + mOutRectColor = outRectColor; + } + + public int getInnerRectColor() { + return mInnerRectColor; + } + + public void setInnerRectColor(int innerRectColor) { + mInnerRectColor = innerRectColor; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/TriangularPagerIndicator.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/TriangularPagerIndicator.java new file mode 100644 index 0000000..c2a39d7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/TriangularPagerIndicator.java @@ -0,0 +1,161 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.indicators; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.view.View; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; + +import com.yonsz.z1.view.magicindicator.FragmentContainerHelper; +import com.yonsz.z1.view.magicindicator.buildins.UIUtil; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IPagerIndicator; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.model.PositionData; + +import java.util.List; + +/** + * 带有小尖角的直线指示器 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class TriangularPagerIndicator extends View implements IPagerIndicator { + private List mPositionDataList; + private Paint mPaint; + private int mLineHeight; + private int mLineColor; + private int mTriangleHeight; + private int mTriangleWidth; + private boolean mReverse; + private float mYOffset; + + private Path mPath = new Path(); + private Interpolator mStartInterpolator = new LinearInterpolator(); + private float mAnchorX; + + public TriangularPagerIndicator(Context context) { + super(context); + init(context); + } + + private void init(Context context) { + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStyle(Paint.Style.FILL); + mLineHeight = UIUtil.dip2px(context, 3); + mTriangleWidth = UIUtil.dip2px(context, 14); + mTriangleHeight = UIUtil.dip2px(context, 8); + } + + @Override + protected void onDraw(Canvas canvas) { + mPaint.setColor(mLineColor); + if (mReverse) { + canvas.drawRect(0, getHeight() - mYOffset - mTriangleHeight, getWidth(), getHeight() - mYOffset - mTriangleHeight + mLineHeight, mPaint); + } else { + canvas.drawRect(0, getHeight() - mLineHeight - mYOffset, getWidth(), getHeight() - mYOffset, mPaint); + } + mPath.reset(); + if (mReverse) { + mPath.moveTo(mAnchorX - mTriangleWidth / 2, getHeight() - mYOffset - mTriangleHeight); + mPath.lineTo(mAnchorX, getHeight() - mYOffset); + mPath.lineTo(mAnchorX + mTriangleWidth / 2, getHeight() - mYOffset - mTriangleHeight); + } else { + mPath.moveTo(mAnchorX - mTriangleWidth / 2, getHeight() - mYOffset); + mPath.lineTo(mAnchorX, getHeight() - mTriangleHeight - mYOffset); + mPath.lineTo(mAnchorX + mTriangleWidth / 2, getHeight() - mYOffset); + } + mPath.close(); + canvas.drawPath(mPath, mPaint); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + if (mPositionDataList == null || mPositionDataList.isEmpty()) { + return; + } + + // 计算锚点位置 + PositionData current = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position); + PositionData next = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position + 1); + + float leftX = current.mLeft + (current.mRight - current.mLeft) / 2; + float rightX = next.mLeft + (next.mRight - next.mLeft) / 2; + + mAnchorX = leftX + (rightX - leftX) * mStartInterpolator.getInterpolation(positionOffset); + + invalidate(); + } + + @Override + public void onPageSelected(int position) { + } + + @Override + public void onPageScrollStateChanged(int state) { + } + + @Override + public void onPositionDataProvide(List dataList) { + mPositionDataList = dataList; + } + + public int getLineHeight() { + return mLineHeight; + } + + public void setLineHeight(int lineHeight) { + mLineHeight = lineHeight; + } + + public int getLineColor() { + return mLineColor; + } + + public void setLineColor(int lineColor) { + mLineColor = lineColor; + } + + public int getTriangleHeight() { + return mTriangleHeight; + } + + public void setTriangleHeight(int triangleHeight) { + mTriangleHeight = triangleHeight; + } + + public int getTriangleWidth() { + return mTriangleWidth; + } + + public void setTriangleWidth(int triangleWidth) { + mTriangleWidth = triangleWidth; + } + + public Interpolator getStartInterpolator() { + return mStartInterpolator; + } + + public void setStartInterpolator(Interpolator startInterpolator) { + mStartInterpolator = startInterpolator; + if (mStartInterpolator == null) { + mStartInterpolator = new LinearInterpolator(); + } + } + + public boolean isReverse() { + return mReverse; + } + + public void setReverse(boolean reverse) { + mReverse = reverse; + } + + public float getYOffset() { + return mYOffset; + } + + public void setYOffset(float yOffset) { + mYOffset = yOffset; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/WrapPagerIndicator.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/WrapPagerIndicator.java new file mode 100644 index 0000000..3530a7d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/indicators/WrapPagerIndicator.java @@ -0,0 +1,149 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.indicators; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.view.View; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; + +import com.yonsz.z1.view.magicindicator.FragmentContainerHelper; +import com.yonsz.z1.view.magicindicator.buildins.UIUtil; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IPagerIndicator; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.model.PositionData; + +import java.util.List; + + +/** + * 包裹住内容区域的指示器,类似天天快报的切换效果,需要和IMeasurablePagerTitleView配合使用 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class WrapPagerIndicator extends View implements IPagerIndicator { + private int mVerticalPadding; + private int mHorizontalPadding; + private int mFillColor; + private float mRoundRadius; + private Interpolator mStartInterpolator = new LinearInterpolator(); + private Interpolator mEndInterpolator = new LinearInterpolator(); + + private List mPositionDataList; + private Paint mPaint; + + private RectF mRect = new RectF(); + private boolean mRoundRadiusSet; + + public WrapPagerIndicator(Context context) { + super(context); + init(context); + } + + private void init(Context context) { + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStyle(Paint.Style.FILL); + mVerticalPadding = UIUtil.dip2px(context, 6); + mHorizontalPadding = UIUtil.dip2px(context, 10); + } + + @Override + protected void onDraw(Canvas canvas) { + mPaint.setColor(mFillColor); + canvas.drawRoundRect(mRect, mRoundRadius, mRoundRadius, mPaint); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + if (mPositionDataList == null || mPositionDataList.isEmpty()) { + return; + } + + // 计算锚点位置 + PositionData current = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position); + PositionData next = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position + 1); + + mRect.left = current.mContentLeft - mHorizontalPadding + (next.mContentLeft - current.mContentLeft) * mEndInterpolator.getInterpolation(positionOffset); + mRect.top = current.mContentTop - mVerticalPadding; + mRect.right = current.mContentRight + mHorizontalPadding + (next.mContentRight - current.mContentRight) * mStartInterpolator.getInterpolation(positionOffset); + mRect.bottom = current.mContentBottom + mVerticalPadding; + + if (!mRoundRadiusSet) { + mRoundRadius = mRect.height() / 2; + } + + invalidate(); + } + + @Override + public void onPageSelected(int position) { + } + + @Override + public void onPageScrollStateChanged(int state) { + } + + @Override + public void onPositionDataProvide(List dataList) { + mPositionDataList = dataList; + } + + public Paint getPaint() { + return mPaint; + } + + public int getVerticalPadding() { + return mVerticalPadding; + } + + public void setVerticalPadding(int verticalPadding) { + mVerticalPadding = verticalPadding; + } + + public int getHorizontalPadding() { + return mHorizontalPadding; + } + + public void setHorizontalPadding(int horizontalPadding) { + mHorizontalPadding = horizontalPadding; + } + + public int getFillColor() { + return mFillColor; + } + + public void setFillColor(int fillColor) { + mFillColor = fillColor; + } + + public float getRoundRadius() { + return mRoundRadius; + } + + public void setRoundRadius(float roundRadius) { + mRoundRadius = roundRadius; + mRoundRadiusSet = true; + } + + public Interpolator getStartInterpolator() { + return mStartInterpolator; + } + + public void setStartInterpolator(Interpolator startInterpolator) { + mStartInterpolator = startInterpolator; + if (mStartInterpolator == null) { + mStartInterpolator = new LinearInterpolator(); + } + } + + public Interpolator getEndInterpolator() { + return mEndInterpolator; + } + + public void setEndInterpolator(Interpolator endInterpolator) { + mEndInterpolator = endInterpolator; + if (mEndInterpolator == null) { + mEndInterpolator = new LinearInterpolator(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/model/PositionData.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/model/PositionData.java new file mode 100644 index 0000000..56ccf2d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/model/PositionData.java @@ -0,0 +1,41 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.model; + +/** + * 保存指示器标题的坐标 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class PositionData { + public int mLeft; + public int mTop; + public int mRight; + public int mBottom; + public int mContentLeft; + public int mContentTop; + public int mContentRight; + public int mContentBottom; + + public int width() { + return mRight - mLeft; + } + + public int height() { + return mBottom - mTop; + } + + public int contentWidth() { + return mContentRight - mContentLeft; + } + + public int contentHeight() { + return mContentBottom - mContentTop; + } + + public int horizontalCenter() { + return mLeft + width() / 2; + } + + public int verticalCenter() { + return mTop + height() / 2; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/ClipPagerTitleView.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/ClipPagerTitleView.java new file mode 100644 index 0000000..46eb9c5 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/ClipPagerTitleView.java @@ -0,0 +1,195 @@ +/* +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.titles; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import com.yonsz.z1.view.magicindicator.buildins.UIUtil; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IMeasurablePagerTitleView; + +*/ +/** + * 类似今日头条切换效果的指示器标题 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + *//* + +public class ClipPagerTitleView extends View implements IMeasurablePagerTitleView { + private String mText; + private int mTextColor; + private int mClipColor; + private boolean mLeftToRight; + private float mClipPercent; + + private Paint mPaint; + private Rect mTextBounds = new Rect(); + + public ClipPagerTitleView(Context context) { + super(context); + init(context); + } + + private void init(Context context) { + int textSize = UIUtil.dip2px(context, 16); + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setTextSize(textSize); + int padding = UIUtil.dip2px(context, 10); + setPadding(padding, 0, padding, 0); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + measureTextBounds(); + setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); + } + + private int measureWidth(int widthMeasureSpec) { + int mode = MeasureSpec.getMode(widthMeasureSpec); + int size = MeasureSpec.getSize(widthMeasureSpec); + int result = size; + switch (mode) { + case MeasureSpec.AT_MOST: + int width = mTextBounds.width() + getPaddingLeft() + getPaddingRight(); + result = Math.min(width, size); + break; + case MeasureSpec.UNSPECIFIED: + result = mTextBounds.width() + getPaddingLeft() + getPaddingRight(); + break; + default: + break; + } + return result; + } + + private int measureHeight(int heightMeasureSpec) { + int mode = MeasureSpec.getMode(heightMeasureSpec); + int size = MeasureSpec.getSize(heightMeasureSpec); + int result = size; + switch (mode) { + case MeasureSpec.AT_MOST: + int height = mTextBounds.height() + getPaddingTop() + getPaddingBottom(); + result = Math.min(height, size); + break; + case MeasureSpec.UNSPECIFIED: + result = mTextBounds.height() + getPaddingTop() + getPaddingBottom(); + break; + default: + break; + } + return result; + } + + @Override + protected void onDraw(Canvas canvas) { + int x = (getWidth() - mTextBounds.width()) / 2; + Paint.FontMetrics fontMetrics = mPaint.getFontMetrics(); + int y = (int) ((getHeight() - fontMetrics.bottom - fontMetrics.top) / 2); + + // 画底层 + mPaint.setColor(mTextColor); + canvas.drawText(mText, x, y, mPaint); + + // 画clip层 + canvas.save(Canvas.CLIP_SAVE_FLAG); + if (mLeftToRight) { + canvas.clipRect(0, 0, getWidth() * mClipPercent, getHeight()); + } else { + canvas.clipRect(getWidth() * (1 - mClipPercent), 0, getWidth(), getHeight()); + } + mPaint.setColor(mClipColor); + canvas.drawText(mText, x, y, mPaint); + canvas.restore(); + } + + @Override + public void onSelected(int index, int totalCount) { + } + + @Override + public void onDeselected(int index, int totalCount) { + } + + @Override + public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) { + mLeftToRight = !leftToRight; + mClipPercent = 1.0f - leavePercent; + invalidate(); + } + + @Override + public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) { + mLeftToRight = leftToRight; + mClipPercent = enterPercent; + invalidate(); + } + + private void measureTextBounds() { + mPaint.getTextBounds(mText, 0, mText == null ? 0 : mText.length(), mTextBounds); + } + + public String getText() { + return mText; + } + + public void setText(String text) { + mText = text; + requestLayout(); + } + + public float getTextSize() { + return mPaint.getTextSize(); + } + + public void setTextSize(float textSize) { + mPaint.setTextSize(textSize); + requestLayout(); + } + + public int getTextColor() { + return mTextColor; + } + + public void setTextColor(int textColor) { + mTextColor = textColor; + invalidate(); + } + + public int getClipColor() { + return mClipColor; + } + + public void setClipColor(int clipColor) { + mClipColor = clipColor; + invalidate(); + } + + @Override + public int getContentLeft() { + int contentWidth = mTextBounds.width(); + return getLeft() + getWidth() / 2 - contentWidth / 2; + } + + @Override + public int getContentTop() { + Paint.FontMetrics metrics = mPaint.getFontMetrics(); + float contentHeight = metrics.bottom - metrics.top; + return (int) (getHeight() / 2 - contentHeight / 2); + } + + @Override + public int getContentRight() { + int contentWidth = mTextBounds.width(); + return getLeft() + getWidth() / 2 + contentWidth / 2; + } + + @Override + public int getContentBottom() { + Paint.FontMetrics metrics = mPaint.getFontMetrics(); + float contentHeight = metrics.bottom - metrics.top; + return (int) (getHeight() / 2 + contentHeight / 2); + } +} +*/ diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/ColorTransitionPagerTitleView.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/ColorTransitionPagerTitleView.java new file mode 100644 index 0000000..eb63c72 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/ColorTransitionPagerTitleView.java @@ -0,0 +1,37 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.titles; + +import android.content.Context; + +import com.yonsz.z1.view.magicindicator.buildins.ArgbEvaluatorHolder; + +/** + * 两种颜色过渡的指示器标题 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class ColorTransitionPagerTitleView extends SimplePagerTitleView { + + public ColorTransitionPagerTitleView(Context context) { + super(context); + } + + @Override + public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) { + int color = ArgbEvaluatorHolder.eval(leavePercent, mSelectedColor, mNormalColor); + setTextColor(color); + } + + @Override + public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) { + int color = ArgbEvaluatorHolder.eval(enterPercent, mNormalColor, mSelectedColor); + setTextColor(color); + } + + @Override + public void onSelected(int index, int totalCount) { + } + + @Override + public void onDeselected(int index, int totalCount) { + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/CommonPagerTitleView.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/CommonPagerTitleView.java new file mode 100644 index 0000000..bf65ff9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/CommonPagerTitleView.java @@ -0,0 +1,143 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.titles; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; + +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IMeasurablePagerTitleView; + +/** + * 通用的指示器标题,子元素内容由外部提供,事件回传给外部 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/7/3. + */ +public class CommonPagerTitleView extends FrameLayout implements IMeasurablePagerTitleView { + private OnPagerTitleChangeListener mOnPagerTitleChangeListener; + private ContentPositionDataProvider mContentPositionDataProvider; + + public CommonPagerTitleView(Context context) { + super(context); + } + + @Override + public void onSelected(int index, int totalCount) { + if (mOnPagerTitleChangeListener != null) { + mOnPagerTitleChangeListener.onSelected(index, totalCount); + } + } + + @Override + public void onDeselected(int index, int totalCount) { + if (mOnPagerTitleChangeListener != null) { + mOnPagerTitleChangeListener.onDeselected(index, totalCount); + } + } + + @Override + public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) { + if (mOnPagerTitleChangeListener != null) { + mOnPagerTitleChangeListener.onLeave(index, totalCount, leavePercent, leftToRight); + } + } + + @Override + public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) { + if (mOnPagerTitleChangeListener != null) { + mOnPagerTitleChangeListener.onEnter(index, totalCount, enterPercent, leftToRight); + } + } + + @Override + public int getContentLeft() { + if (mContentPositionDataProvider != null) { + return mContentPositionDataProvider.getContentLeft(); + } + return getLeft(); + } + + @Override + public int getContentTop() { + if (mContentPositionDataProvider != null) { + return mContentPositionDataProvider.getContentTop(); + } + return getTop(); + } + + @Override + public int getContentRight() { + if (mContentPositionDataProvider != null) { + return mContentPositionDataProvider.getContentRight(); + } + return getRight(); + } + + @Override + public int getContentBottom() { + if (mContentPositionDataProvider != null) { + return mContentPositionDataProvider.getContentBottom(); + } + return getBottom(); + } + + /** + * 外部直接将布局设置进来 + * + * @param contentView + */ + public void setContentView(View contentView) { + setContentView(contentView, null); + } + + public void setContentView(View contentView, FrameLayout.LayoutParams lp) { + removeAllViews(); + if (contentView != null) { + if (lp == null) { + lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + } + addView(contentView, lp); + } + } + + public void setContentView(int layoutId) { + View child = LayoutInflater.from(getContext()).inflate(layoutId, null); + setContentView(child, null); + } + + public OnPagerTitleChangeListener getOnPagerTitleChangeListener() { + return mOnPagerTitleChangeListener; + } + + public void setOnPagerTitleChangeListener(OnPagerTitleChangeListener onPagerTitleChangeListener) { + mOnPagerTitleChangeListener = onPagerTitleChangeListener; + } + + public ContentPositionDataProvider getContentPositionDataProvider() { + return mContentPositionDataProvider; + } + + public void setContentPositionDataProvider(ContentPositionDataProvider contentPositionDataProvider) { + mContentPositionDataProvider = contentPositionDataProvider; + } + + public interface OnPagerTitleChangeListener { + void onSelected(int index, int totalCount); + + void onDeselected(int index, int totalCount); + + void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight); + + void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight); + } + + public interface ContentPositionDataProvider { + int getContentLeft(); + + int getContentTop(); + + int getContentRight(); + + int getContentBottom(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/DummyPagerTitleView.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/DummyPagerTitleView.java new file mode 100644 index 0000000..d7f8a3b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/DummyPagerTitleView.java @@ -0,0 +1,34 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.titles; + +import android.content.Context; +import android.view.View; + +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IPagerTitleView; + +/** + * 空指示器标题,用于只需要指示器而不需要title的需求 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class DummyPagerTitleView extends View implements IPagerTitleView { + + public DummyPagerTitleView(Context context) { + super(context); + } + + @Override + public void onSelected(int index, int totalCount) { + } + + @Override + public void onDeselected(int index, int totalCount) { + } + + @Override + public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) { + } + + @Override + public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) { + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/SimplePagerTitleView.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/SimplePagerTitleView.java new file mode 100644 index 0000000..fc1c5ee --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/SimplePagerTitleView.java @@ -0,0 +1,99 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.titles; + +import android.content.Context; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; +import android.view.Gravity; +import android.widget.TextView; + +import com.yonsz.z1.view.magicindicator.buildins.UIUtil; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IMeasurablePagerTitleView; + + +/** + * 带文本的指示器标题 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class SimplePagerTitleView extends TextView implements IMeasurablePagerTitleView { + protected int mSelectedColor; + protected int mNormalColor; + + public SimplePagerTitleView(Context context) { + super(context, null); + init(context); + } + + private void init(Context context) { + setGravity(Gravity.CENTER); + int padding = UIUtil.dip2px(context, 10); + setPadding(padding, 0, padding, 0); + setSingleLine(); + setEllipsize(TextUtils.TruncateAt.END); + } + + @Override + public void onSelected(int index, int totalCount) { + setTextColor(mSelectedColor); + } + + @Override + public void onDeselected(int index, int totalCount) { + setTextColor(mNormalColor); + } + + @Override + public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) { + } + + @Override + public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) { + } + + @Override + public int getContentLeft() { + Rect bound = new Rect(); + getPaint().getTextBounds(getText().toString(), 0, getText().length(), bound); + int contentWidth = bound.width(); + return getLeft() + getWidth() / 2 - contentWidth / 2; + } + + @Override + public int getContentTop() { + Paint.FontMetrics metrics = getPaint().getFontMetrics(); + float contentHeight = metrics.bottom - metrics.top; + return (int) (getHeight() / 2 - contentHeight / 2); + } + + @Override + public int getContentRight() { + Rect bound = new Rect(); + getPaint().getTextBounds(getText().toString(), 0, getText().length(), bound); + int contentWidth = bound.width(); + return getLeft() + getWidth() / 2 + contentWidth / 2; + } + + @Override + public int getContentBottom() { + Paint.FontMetrics metrics = getPaint().getFontMetrics(); + float contentHeight = metrics.bottom - metrics.top; + return (int) (getHeight() / 2 + contentHeight / 2); + } + + public int getSelectedColor() { + return mSelectedColor; + } + + public void setSelectedColor(int selectedColor) { + mSelectedColor = selectedColor; + } + + public int getNormalColor() { + return mNormalColor; + } + + public void setNormalColor(int normalColor) { + mNormalColor = normalColor; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/badge/BadgeAnchor.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/badge/BadgeAnchor.java new file mode 100644 index 0000000..b936326 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/badge/BadgeAnchor.java @@ -0,0 +1,22 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.titles.badge; + +/** + * 角标的锚点 + * Created by hackware on 2016/7/19. + */ +public enum BadgeAnchor { + LEFT, + TOP, + RIGHT, + BOTTOM, + CONTENT_LEFT, + CONTENT_TOP, + CONTENT_RIGHT, + CONTENT_BOTTOM, + CENTER_X, + CENTER_Y, + LEFT_EDGE_CENTER_X, + TOP_EDGE_CENTER_Y, + RIGHT_EDGE_CENTER_X, + BOTTOM_EDGE_CENTER_Y +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/badge/BadgePagerTitleView.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/badge/BadgePagerTitleView.java new file mode 100644 index 0000000..b3ee9a6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/badge/BadgePagerTitleView.java @@ -0,0 +1,221 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.titles.badge; + +import android.content.Context; +import android.view.View; +import android.widget.FrameLayout; + +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IMeasurablePagerTitleView; +import com.yonsz.z1.view.magicindicator.buildins.commonnavigator.abs.IPagerTitleView; + +/** + * 支持显示角标的title,角标布局可自定义 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/7/18. + */ +public class BadgePagerTitleView extends FrameLayout implements IMeasurablePagerTitleView { + private IPagerTitleView mInnerPagerTitleView; + private View mBadgeView; + private boolean mAutoCancelBadge = true; + + private BadgeRule mXBadgeRule; + private BadgeRule mYBadgeRule; + + public BadgePagerTitleView(Context context) { + super(context); + } + + @Override + public void onSelected(int index, int totalCount) { + if (mInnerPagerTitleView != null) { + mInnerPagerTitleView.onSelected(index, totalCount); + } + if (mAutoCancelBadge) { + setBadgeView(null); + } + } + + @Override + public void onDeselected(int index, int totalCount) { + if (mInnerPagerTitleView != null) { + mInnerPagerTitleView.onDeselected(index, totalCount); + } + } + + @Override + public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) { + if (mInnerPagerTitleView != null) { + mInnerPagerTitleView.onLeave(index, totalCount, leavePercent, leftToRight); + } + } + + @Override + public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) { + if (mInnerPagerTitleView != null) { + mInnerPagerTitleView.onEnter(index, totalCount, enterPercent, leftToRight); + } + } + + public IPagerTitleView getInnerPagerTitleView() { + return mInnerPagerTitleView; + } + + public void setInnerPagerTitleView(IPagerTitleView innerPagerTitleView) { + if (mInnerPagerTitleView == innerPagerTitleView) { + return; + } + mInnerPagerTitleView = innerPagerTitleView; + removeAllViews(); + if (mInnerPagerTitleView instanceof View) { + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); + addView((View) mInnerPagerTitleView, lp); + } + if (mBadgeView != null) { + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + addView(mBadgeView, lp); + } + } + + public View getBadgeView() { + return mBadgeView; + } + + public void setBadgeView(View badgeView) { + if (mBadgeView == badgeView) { + return; + } + mBadgeView = badgeView; + removeAllViews(); + if (mInnerPagerTitleView instanceof View) { + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); + addView((View) mInnerPagerTitleView, lp); + } + if (mBadgeView != null) { + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + addView(mBadgeView, lp); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + if (mInnerPagerTitleView instanceof View && mBadgeView != null) { + int[] position = new int[14]; // 14种角标定位方式 + View v = (View) mInnerPagerTitleView; + position[0] = v.getLeft(); + position[1] = v.getTop(); + position[2] = v.getRight(); + position[3] = v.getBottom(); + if (mInnerPagerTitleView instanceof IMeasurablePagerTitleView) { + IMeasurablePagerTitleView view = (IMeasurablePagerTitleView) mInnerPagerTitleView; + position[4] = view.getContentLeft(); + position[5] = view.getContentTop(); + position[6] = view.getContentRight(); + position[7] = view.getContentBottom(); + } else { + for (int i = 4; i < 8; i++) { + position[i] = position[i - 4]; + } + } + position[8] = v.getWidth() / 2; + position[9] = v.getHeight() / 2; + position[10] = position[4] / 2; + position[11] = position[5] / 2; + position[12] = position[6] + (position[2] - position[6]) / 2; + position[13] = position[7] + (position[3] - position[7]) / 2; + + // 根据设置的BadgeRule调整角标的位置 + if (mXBadgeRule != null) { + int x = position[mXBadgeRule.getAnchor().ordinal()]; + int offset = mXBadgeRule.getOffset(); + int newLeft = x + offset; + mBadgeView.offsetLeftAndRight(newLeft - mBadgeView.getLeft()); + } + if (mYBadgeRule != null) { + int y = position[mYBadgeRule.getAnchor().ordinal()]; + int offset = mYBadgeRule.getOffset(); + int newTop = y + offset; + mBadgeView.offsetTopAndBottom(newTop - mBadgeView.getTop()); + } + } + } + + @Override + public int getContentLeft() { + if (mInnerPagerTitleView instanceof IMeasurablePagerTitleView) { + return getLeft() + ((IMeasurablePagerTitleView) mInnerPagerTitleView).getContentLeft(); + } + return getLeft(); + } + + @Override + public int getContentTop() { + if (mInnerPagerTitleView instanceof IMeasurablePagerTitleView) { + return ((IMeasurablePagerTitleView) mInnerPagerTitleView).getContentTop(); + } + return getTop(); + } + + @Override + public int getContentRight() { + if (mInnerPagerTitleView instanceof IMeasurablePagerTitleView) { + return getLeft() + ((IMeasurablePagerTitleView) mInnerPagerTitleView).getContentRight(); + } + return getRight(); + } + + @Override + public int getContentBottom() { + if (mInnerPagerTitleView instanceof IMeasurablePagerTitleView) { + return ((IMeasurablePagerTitleView) mInnerPagerTitleView).getContentBottom(); + } + return getBottom(); + } + + public BadgeRule getXBadgeRule() { + return mXBadgeRule; + } + + public void setXBadgeRule(BadgeRule badgeRule) { + if (badgeRule != null) { + BadgeAnchor anchor = badgeRule.getAnchor(); + if (anchor != BadgeAnchor.LEFT + && anchor != BadgeAnchor.RIGHT + && anchor != BadgeAnchor.CONTENT_LEFT + && anchor != BadgeAnchor.CONTENT_RIGHT + && anchor != BadgeAnchor.CENTER_X + && anchor != BadgeAnchor.LEFT_EDGE_CENTER_X + && anchor != BadgeAnchor.RIGHT_EDGE_CENTER_X) { + throw new IllegalArgumentException("x badge rule is wrong."); + } + } + mXBadgeRule = badgeRule; + } + + public BadgeRule getYBadgeRule() { + return mYBadgeRule; + } + + public void setYBadgeRule(BadgeRule badgeRule) { + if (badgeRule != null) { + BadgeAnchor anchor = badgeRule.getAnchor(); + if (anchor != BadgeAnchor.TOP + && anchor != BadgeAnchor.BOTTOM + && anchor != BadgeAnchor.CONTENT_TOP + && anchor != BadgeAnchor.CONTENT_BOTTOM + && anchor != BadgeAnchor.CENTER_Y + && anchor != BadgeAnchor.TOP_EDGE_CENTER_Y + && anchor != BadgeAnchor.BOTTOM_EDGE_CENTER_Y) { + throw new IllegalArgumentException("y badge rule is wrong."); + } + } + mYBadgeRule = badgeRule; + } + + public boolean isAutoCancelBadge() { + return mAutoCancelBadge; + } + + public void setAutoCancelBadge(boolean autoCancelBadge) { + mAutoCancelBadge = autoCancelBadge; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/badge/BadgeRule.java b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/badge/BadgeRule.java new file mode 100644 index 0000000..baf228e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/magicindicator/buildins/commonnavigator/titles/badge/BadgeRule.java @@ -0,0 +1,31 @@ +package com.yonsz.z1.view.magicindicator.buildins.commonnavigator.titles.badge; + +/** + * 角标的定位规则 + * Created by hackware on 2016/7/19. + */ +public class BadgeRule { + private BadgeAnchor mAnchor; + private int mOffset; + + public BadgeRule(BadgeAnchor anchor, int offset) { + mAnchor = anchor; + mOffset = offset; + } + + public BadgeAnchor getAnchor() { + return mAnchor; + } + + public void setAnchor(BadgeAnchor anchor) { + mAnchor = anchor; + } + + public int getOffset() { + return mOffset; + } + + public void setOffset(int offset) { + mOffset = offset; + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/slidingclose/SlidingLayout.java b/app/src/main/java/com/yonsz/z1/view/slidingclose/SlidingLayout.java new file mode 100644 index 0000000..1f61ff6 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/slidingclose/SlidingLayout.java @@ -0,0 +1,190 @@ +package com.yonsz.z1.view.slidingclose; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.Scroller; + +import com.yonsz.z1.R; + +/** + * Created by chenyan.wang on 2015/10/29. + */ +public class SlidingLayout extends FrameLayout { + // 页面边缘阴影的宽度默认值 + private static final int SHADOW_WIDTH = 16; + private Activity mActivity; + private Scroller mScroller; + // 页面边缘的阴影图 + private Drawable mLeftShadow; + // 页面边缘阴影的宽度 + private int mShadowWidth; + private int mInterceptDownX; + private int mLastInterceptX; + private int mLastInterceptY; + private int mTouchDownX; + private int mLastTouchX; + private int mLastTouchY; + private boolean isConsumed = false; + + public SlidingLayout(Context context) { + this(context, null); + } + + public SlidingLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public SlidingLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initView(context); + } + + private void initView(Context context) { + mScroller = new Scroller(context); + mLeftShadow = getResources().getDrawable(R.drawable.left_shadow); + int density = (int) getResources().getDisplayMetrics().density; + mShadowWidth = SHADOW_WIDTH * density; + } + + /** + * 绑定Activity + */ + public void bindActivity(Activity activity) { + mActivity = activity; + ViewGroup decorView = (ViewGroup) mActivity.getWindow().getDecorView(); + View child = decorView.getChildAt(0); + decorView.removeView(child); + addView(child); + decorView.addView(this); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + boolean intercept = false; + int x = (int) ev.getX(); + int y = (int) ev.getY(); + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + intercept = false; + mInterceptDownX = x; + mLastInterceptX = x; + mLastInterceptY = y; + break; + case MotionEvent.ACTION_MOVE: + int deltaX = x - mLastInterceptX; + int deltaY = y - mLastInterceptY; + // 手指处于屏幕边缘,且横向滑动距离大于纵向滑动距离时,拦截事件 + if (mInterceptDownX < (getWidth() / 10) && Math.abs(deltaX) > Math.abs(deltaY)) { + intercept = true; + } else { + intercept = false; + } + mLastInterceptX = x; + mLastInterceptY = y; + break; + case MotionEvent.ACTION_UP: + intercept = false; + mInterceptDownX = mLastInterceptX = mLastInterceptY = 0; + break; + } + return intercept; + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + int x = (int) ev.getX(); + int y = (int) ev.getY(); + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + mTouchDownX = x; + mLastTouchX = x; + mLastTouchY = y; + break; + case MotionEvent.ACTION_MOVE: + int deltaX = x - mLastTouchX; + int deltaY = y - mLastTouchY; + + if (!isConsumed && mTouchDownX < (getWidth() / 10) && Math.abs(deltaX) > Math.abs(deltaY)) { + isConsumed = true; + } + + if (isConsumed) { + int rightMovedX = mLastTouchX - (int) ev.getX(); + // 左侧即将滑出屏幕 + if (getScrollX() + rightMovedX >= 0) { + scrollTo(0, 0); + } else { + scrollBy(rightMovedX, 0); + } + } + mLastTouchX = x; + mLastTouchY = y; + break; + case MotionEvent.ACTION_UP: + isConsumed = false; + mTouchDownX = mLastTouchX = mLastTouchY = 0; + // 根据手指释放时的位置决定回弹还是关闭 + if (-getScrollX() < getWidth() / 2) { + scrollBack(); + } else { + scrollClose(); + } + break; + } + return true; + } + + /** + * 滑动返回 + */ + private void scrollBack() { + int startX = getScrollX(); + int dx = -getScrollX(); + mScroller.startScroll(startX, 0, dx, 0, 300); + invalidate(); + } + + /** + * 滑动关闭 + */ + private void scrollClose() { + int startX = getScrollX(); + int dx = -getScrollX() - getWidth(); + mScroller.startScroll(startX, 0, dx, 0, 300); + invalidate(); + } + + @Override + public void computeScroll() { + if (mScroller.computeScrollOffset()) { + scrollTo(mScroller.getCurrX(), 0); + postInvalidate(); + } else if (-getScrollX() >= getWidth()) { + mActivity.finish(); + } + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + drawShadow(canvas); + } + + /** + * 绘制边缘的阴影 + */ + private void drawShadow(Canvas canvas) { + mLeftShadow.setBounds(0, 0, mShadowWidth, getHeight()); + canvas.save(); + canvas.translate(-mShadowWidth, 0); + mLeftShadow.draw(canvas); + canvas.restore(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/springmenu/MenuListener.java b/app/src/main/java/com/yonsz/z1/view/springmenu/MenuListener.java new file mode 100644 index 0000000..6208ccc --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/springmenu/MenuListener.java @@ -0,0 +1,31 @@ +package com.yonsz.z1.view.springmenu; + +/** + * Date: 17-9-10 下午1:37 + * + * @E-mail peng8350@gmail.com + * @Description If you want do something after the menu is closed or opened. + * you can use this listener to listen open and close event + */ +public interface MenuListener { + + /** + * Menu open Callback + */ + void onMenuOpen(); + + /** + * Menu close Callback + */ + void onMenuClose(); + + /** + * When the menu is opening or closing,the method will call back(contain dragging arc) + * + * @value: 0f-2f,0f indicates that the menu is closed,2f indicates that opening + * @bouncing: this Boolean value is used to determine whether or not it is in bouncing, + * when in bouncing,The value is infinitely close to 2f,else is 0f + */ + void onProgressUpdate(float value, boolean bouncing); + +} diff --git a/app/src/main/java/com/yonsz/z1/view/springmenu/SpringMenu.java b/app/src/main/java/com/yonsz/z1/view/springmenu/SpringMenu.java new file mode 100644 index 0000000..079cfc9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/springmenu/SpringMenu.java @@ -0,0 +1,616 @@ +package com.yonsz.z1.view.springmenu; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Outline; +import android.graphics.Path; +import android.graphics.Rect; +import android.os.Build; +import android.util.DisplayMetrics; +import android.view.KeyCharacterMap; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewOutlineProvider; +import android.widget.FrameLayout; +import android.widget.RelativeLayout; + +import com.facebook.rebound.SimpleSpringListener; +import com.facebook.rebound.Spring; +import com.facebook.rebound.SpringChain; +import com.facebook.rebound.SpringConfig; +import com.facebook.rebound.SpringListener; +import com.facebook.rebound.SpringSystem; + +import java.util.ArrayList; +import java.util.List; + +/** + * Author jpeng + * Date: 17-9-10 下午1:41 + * E-mail:peng8350@gmail.com + * Description: + */ +public class SpringMenu extends RelativeLayout implements SpringListener { + private static final float START_VALUE = 0f; + private static final float END_VALUE = 2f; + public static final int DIRECTION_LEFT = 0; + public static final int DIRECTION_RIGHT = 1; + + /** + * endX:The dividing X between the content page and the menu page + */ + private float endX = 800; + /** + * point value when touch down + */ + private int lastDownX, lastDownY; + /** + * distance of enable menu drag + */ + private int mDragoffset; + private int arcDrawY; + private int statusHeight; + private int mDirection; + /** + * views which intercept touch events + */ + private List mIgnores; + + /** + * if the content need dark effect + **/ + private boolean mNeedFade; + /** + * check if user is in dragging + */ + private boolean isDragging = false; + private boolean isOpen; + /** + * use to disable Bouncing when closing the menu + */ + private boolean isBouncing; + private boolean disableDrag; + /** + * main controller of bouncing animate + */ + private Spring mSpring; + private DisplayMetrics displayMetrics = new DisplayMetrics(); + private MenuView mMenuView; + private ViewGroup mContent; + /** + * Black mask View + */ + private View mFadeView; + private ViewGroup mDecorView; + + private MenuListener menuListener; + + public SpringMenu(Context context, int layoutRes) { + super(context); + initSpring(); + initView(context, layoutRes); + attachToActivity((Activity) context); + initData(); + } + + private void initData() { + mIgnores = new ArrayList<>(); + mDragoffset = (int) (0.3f * getScreenWidth()); + // statusHeight = getStatusBarHeight(); + setMenuWidth(0.75f); + } + + private void initView(Context context, int layoutRes) { + mDecorView = (ViewGroup) ((Activity) context).getWindow().getDecorView(); + mContent = (ViewGroup) mDecorView.getChildAt(0); + mMenuView = new MenuView(getContext(), layoutRes); + mFadeView = new View(context); + mFadeView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + mFadeView.setBackgroundColor(Color.argb(180, 0, 0, 0)); + mFadeView.setAlpha(0); + } + + private void initSpring() { + SpringSystem springSystem = SpringSystem.create(); + mSpring = springSystem.createSpring(); + setMenuSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(20, 3)); + mSpring.addListener(this); + } + + /** + * If the motion event was relative to the view + * which in ignored view list,return true; + */ + private boolean isInIgnoredView(MotionEvent ev) { + Rect rect = new Rect(); + for (View v : mIgnores) { + v.getGlobalVisibleRect(rect); + if (rect.contains((int) ev.getX(), (int) ev.getY())) { + return true; + } + } + return false; + } + + /** + * make the Spring close Bouncing when the widget is still in + * Bouncing + */ + private void endSpring() { + if (!mSpring.isAtRest()) { + mSpring.setAtRest(); + } + } + + /** + * Controls the drawing of Beckinsale curves when touching + * + * @param x The drag distance ratio which takes up endX + */ + private void drawArc(float x) { + if (x < 0) { + return; + } + float nowValue = x / endX; + if (!isOpen) { + mSpring.setCurrentValue(nowValue >= 1f ? 0.99f : nowValue); + } else { + mSpring.setCurrentValue(nowValue >= 1f ? 1.01f : END_VALUE - nowValue); + } + } + + /** + * reset the menu state when user drag the menu but the drag distance + * is smaller than the requirement + */ + private void resumeMenu() { + if (!isOpen) { + mSpring.setEndValue(START_VALUE); + } else { + mSpring.setEndValue(END_VALUE); + } + } + + /** + * make menu bind up with the activity + */ + public void attachToActivity(Activity act) { + mDecorView.removeViewAt(0); + addView(mContent); + addView(mFadeView, 1); + addView(mMenuView, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); + mDecorView.addView(this); + } + + public void openMenu() { + mMenuView.setDisableTouch(false); + mSpring.setEndValue(END_VALUE); + mMenuView.toggleItems(true); + } + + public void closeMenu() { + mMenuView.setDisableTouch(true); + mSpring.setEndValue(START_VALUE); + mMenuView.toggleItems(false); + } + + /** + * get the MainLayout in MenuView + */ + public View getMenuView() { + if (mMenuView != null) { + return mMenuView.getLayout(); + } + return null; + } + + /** + * If there were some view you don't want reside menu + * to intercept their touch event, you could add it to + * ignored views. + */ + public void addIgnoredView(View v) { + mIgnores.add(v); + } + + public void removeIgnoredView(View v) { + mIgnores.remove(v); + } + + public void clearIgnoredViewList() { + mIgnores.clear(); + } + + public boolean isOpened() { + return isOpen; + } + + /** + * set menu layout's width + */ + public void setMenuWidth(int width) { + endX = width; + mMenuView.getLayoutParams().width = width + 100; + } + + public void setMenuListener(MenuListener listener) { + menuListener = listener; + } + + /** + * If enable,It will make mContentView have a darker cell view when opening menu + */ + public void setFadeEnable(boolean enable) { + mNeedFade = enable; + } + + /** + * set drag distance to open + * + * @param ratio the ratio of screenwidth + */ + public void setDragOffset(float ratio) { + mDragoffset = (int) (ratio * getScreenWidth()); + } + + /** + * set drag distance to open + * + * @param width menuwidth + */ + public void setDragOffset(int width) { + mDragoffset = width; + } + + public void setMenuWidth(float screenRatio) { + int width = (int) (getScreenWidth() * screenRatio); + setMenuWidth(width); + } + + /** + * change the Menu Scroll direction + * + * @param direction left or right + */ + public void setDirection(int direction) { + this.mDirection = direction; + RelativeLayout.LayoutParams params = (LayoutParams) mMenuView.getLayoutParams(); + // This code can be replaced as removeRule to remove,but the api>= 17 + params.addRule(direction == DIRECTION_LEFT ? ALIGN_PARENT_RIGHT : ALIGN_PARENT_LEFT, 0); + params.addRule(direction == DIRECTION_LEFT ? ALIGN_PARENT_LEFT : ALIGN_PARENT_RIGHT); + mMenuView.requestLayout(); + } + + /** + * set the bouncing power and speed,just SpringConfig + */ + public void setMenuSpringConfig(SpringConfig config) { + mSpring.setSpringConfig(config); + } + + /** + * This configuration affects the speed at + * which child controls appear on the menu + */ + public void setChildSpringConfig(SpringConfig config) { + mMenuView.setAttachmentConfig(config); + } + + private int getScreenHeight() { + ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + return displayMetrics.heightPixels; + } + + private int getScreenWidth() { + ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + return displayMetrics.widthPixels; + } + + private int getNavigationBarHeight() { + Resources resources = getResources(); + int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); + if (resourceId > 0) { + return resources.getDimensionPixelSize(resourceId); + } + return 0; + } + + private int getStatusBarHeight() { + Resources resources = getResources(); + int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android"); + if (resourceId > 0) { + return resources.getDimensionPixelSize(resourceId); + } + return 0; + } + + @Override + public void onSpringAtRest(Spring spring) { + arcDrawY = 0; + isBouncing = false; + } + + @Override + public void onSpringActivate(Spring spring) { + } + + @Override + public void onSpringEndStateChange(Spring spring) { + } + + @Override + public void onSpringUpdate(Spring spring) { + float value = (float) spring.getCurrentValue(); + mMenuView.updateByProgress(value + ); + if (!isOpen && value >= END_VALUE) { + isOpen = true; + if (menuListener != null) { + menuListener.onMenuOpen(); + } + } else if (isOpen && value <= 0) { + isOpen = false; + if (menuListener != null) { + menuListener.onMenuClose(); + } + } + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_MOVE || ev.getAction() == MotionEvent.ACTION_UP) { + //If Action_Down is in IgnoreViews + if (disableDrag) { + return super.dispatchTouchEvent(ev); + } + if (!isOpen) { + //If touch down X is over Offset distance,It will interfere with the touch event of the menu + if (mDirection == DIRECTION_RIGHT && lastDownX < getScreenWidth() - mDragoffset) { + return super.dispatchTouchEvent(ev); + } else if (mDirection == DIRECTION_LEFT && lastDownX > mDragoffset) { + return super.dispatchTouchEvent(ev); + } + } + } + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + lastDownX = (int) ev.getRawX(); + lastDownY = (int) ev.getRawY(); + disableDrag = isInIgnoredView(ev) && !isOpen; + if (isOpen) { + if (mDirection == DIRECTION_RIGHT && lastDownX < getWidth() - endX) { + return true; + } else if (mDirection == DIRECTION_LEFT && lastDownX > endX) { + return true; + } + } + break; + case MotionEvent.ACTION_MOVE: + int xOffset = (int) (ev.getRawX() - lastDownX); + int yOffset = (int) (ev.getRawY() - lastDownY); + if (!isDragging) { + if (yOffset > 25 || yOffset < -25 || xOffset > 25 || xOffset < -25) { + isDragging = true; + ev.setAction(MotionEvent.ACTION_CANCEL); + } + } else { + arcDrawY = (int) ev.getRawY() - statusHeight; + // If arcDrawY < 0,It will make ArcPath is not Convex + arcDrawY = arcDrawY < 0 ? 1 : arcDrawY; + endSpring(); + float dis = !isOpen ? ev.getRawX() - lastDownX : -ev.getRawX() + lastDownX; + drawArc(mDirection == DIRECTION_LEFT ? dis : -dis); + return true; + } + break; + case MotionEvent.ACTION_UP: + // When the menu is opened, the menu closes if the user touches the content page + if (!isDragging && isOpen) { + if (mDirection == DIRECTION_LEFT && lastDownX > endX) { + closeMenu(); + } else if (mDirection == DIRECTION_RIGHT && lastDownX < getWidth() - endX) { + closeMenu(); + } + } else if (isDragging) { + if (!isOpen) { + if (mSpring.getCurrentValue() > 0.55f) { + openMenu(); + } else if (mSpring.getCurrentValue() > START_VALUE) { + resumeMenu(); + } + } else { + if (mSpring.getCurrentValue() < 1.5f) { + closeMenu(); + } else { + resumeMenu(); + } + } + } + isDragging = false; + break; + default: + break; + } + return super.dispatchTouchEvent(ev); + } + + @Override + protected boolean fitSystemWindows(Rect insets) { + int bottomPadding = mContent.getPaddingBottom() + insets.bottom; + boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); + boolean hasHomeKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME); + //妈的,害我找这么久,华为的适配不了呀这样 + /*if (!hasBackKey && !hasHomeKey) { + bottomPadding += getNavigationBarHeight(); + }*/ + if (Build.VERSION.SDK_INT >= 19) { + + } else { + this.setPadding(mContent.getPaddingLeft() + insets.left, + mContent.getPaddingTop() + insets.top, + mContent.getPaddingRight() + insets.right, + bottomPadding); + insets.left = insets.top = insets.right = insets.bottom = 0; + } + return true; + } + + private class MenuView extends FrameLayout { + private Path mArcPath; + /** + * when menu is open,the value is false, + * else true,use to Intercept menu Touch + */ + private boolean disableTouch = true; + + private ViewGroup mLayout; + + private SpringChain mSpringChain; + + public MenuView(Context context, int layoutRes) { + super(context); + init(context, layoutRes); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + setElevation(36); + setClipToOutline(true); + setOutlineProvider(new BgOutLineProvider()); + } + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + class BgOutLineProvider extends ViewOutlineProvider { + @Override + public void getOutline(View view, Outline outline) { + if (mArcPath.isConvex()) { + outline.setConvexPath(mArcPath); + } + } + } + + /** + * use to draw the Beckinsale curves when open menu (0f-2f) + */ + private void updateByProgress(float progress) { + mArcPath.reset(); + float startX = mDirection == DIRECTION_LEFT ? 0 : getWidth(); + + if (progress >= START_VALUE && progress <= END_VALUE && mNeedFade) { + mFadeView.setAlpha(progress / 2); + } + if (progress >= 1f) { + float progressX = endX * (progress - 1f); + float realX = mDirection == DIRECTION_LEFT ? progressX : startX - progressX; + mArcPath.moveTo(startX, 0); + mArcPath.lineTo(realX, 0); + mArcPath.quadTo(mDirection == DIRECTION_LEFT ? endX : startX - endX, arcDrawY == 0 ? getHeight() / 2 : arcDrawY, realX, getHeight()); + mArcPath.lineTo(startX, getHeight()); + mContent.setTranslationX(mDirection == DIRECTION_LEFT ? progressX : -progressX); + if (progress >= END_VALUE) { + isBouncing = true; + } + } else { + mArcPath.moveTo(startX, 0); + if (isOpen) { + mArcPath.quadTo(mDirection == DIRECTION_LEFT ? endX * progress : getScreenWidth() - endX * progress, arcDrawY == 0 ? getHeight() / 2 : arcDrawY, startX, getHeight()); + if (progress <= START_VALUE) { + isBouncing = true; + } + mContent.setTranslationX(0); + } else { + mArcPath.quadTo(mDirection == DIRECTION_LEFT ? endX * 2 * progress : startX - (endX * 2 * progress), arcDrawY == 0 ? getHeight() / 2 : arcDrawY, startX, getHeight()); + } + + } + mArcPath.close(); + if (menuListener != null) { + menuListener.onProgressUpdate(progress, isBouncing); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + if (mSpring.getCurrentValue() <= END_VALUE) { + invalidateOutline(); + } + } + postInvalidate(); + } + + private void init(Context context, int layoutRes) { + mLayout = (ViewGroup) LayoutInflater.from(context).inflate(layoutRes, null); + mSpringChain = SpringChain.create(); + addView(mLayout); + addSpringForChild(mLayout); + mSpringChain.setControlSpringIndex(0); + List springs = mSpringChain.getAllSprings(); + for (Spring s : springs) { + s.setCurrentValue(1f); + } + toggleItems(false); + mArcPath = new Path(); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) { + setLayerType(View.LAYER_TYPE_SOFTWARE, null); + } + } + + private void addSpringForChild(ViewGroup group) { + for (int i = 0; i < group.getChildCount(); i++) { + final View v = group.getChildAt(i); + mSpringChain.addSpring(new SimpleSpringListener() { + @Override + public void onSpringUpdate(Spring spring) { + float value = (float) spring.getCurrentValue(); + v.setTranslationX(mDirection == DIRECTION_LEFT ? -endX + value * endX : endX - value * endX); + } + }); + } + } + + private void setAttachmentConfig(SpringConfig config) { + List springs = mSpringChain.getAllSprings(); + for (Spring s : springs) { + s.setSpringConfig(config); + } + } + + /** + * make the child widgets of menuLayout showing or hiding + */ + private void toggleItems(boolean show) { + mSpringChain.getControlSpring().setEndValue(show ? 1f : 0f); + } + + private ViewGroup getLayout() { + return mLayout; + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + return disableTouch || isDragging; + } + + private void setDisableTouch(boolean disableTouch) { + this.disableTouch = disableTouch; + } + + /** + * Clipping Region from the path + */ + @Override + protected void dispatchDraw(Canvas canvas) { + canvas.save(); + canvas.clipPath(mArcPath); + super.dispatchDraw(canvas); + canvas.restore(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/view/transform/ABaseTransformer.java b/app/src/main/java/com/yonsz/z1/view/transform/ABaseTransformer.java new file mode 100644 index 0000000..46d66d2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/transform/ABaseTransformer.java @@ -0,0 +1,130 @@ +/* + * Copyright 2014 Toxic Bakery + * + * 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.yonsz.z1.view.transform; + +import android.support.v4.view.ViewPager.PageTransformer; +import android.view.View; + +public abstract class ABaseTransformer implements PageTransformer { + + /** + * Called each {@link #transformPage(View, float)}. + * + * @param page + * Apply the transformation to this page + * @param position + * Position of page relative to the current front-and-center position of the pager. 0 is front and + * center. 1 is one full page position to the right, and -1 is one page position to the left. + */ + protected abstract void onTransform(View page, float position); + + /** + * Apply a property transformation to the given page. For most use cases, this method should not be overridden. + * Instead use {@link #transformPage(View, float)} to perform typical transformations. + * + * @param page + * Apply the transformation to this page + * @param position + * Position of page relative to the current front-and-center position of the pager. 0 is front and + * center. 1 is one full page position to the right, and -1 is one page position to the left. + */ + @Override + public void transformPage(View page, float position) { + onPreTransform(page, position); + onTransform(page, position); + onPostTransform(page, position); + } + + /** + * If the position offset of a fragment is less than negative one or greater than one, returning true will set the + * fragment alpha to 0f. Otherwise fragment alpha is always defaulted to 1f. + * + * @return + */ + protected boolean hideOffscreenPages() { + return true; + } + + /** + * Indicates if the default animations of the view pager should be used. + * + * @return + */ + protected boolean isPagingEnabled() { + return false; + } + + /** + * Called each {@link #transformPage(View, float)} before {{@link #onTransform(View, float)}. + *

+ * The default implementation attempts to reset all view properties. This is useful when toggling transforms that do + * not modify the same page properties. For instance changing from a transformation that applies rotation to a + * transformation that fades can inadvertently leave a fragment stuck with a rotation or with some degree of applied + * alpha. + * + * @param page + * Apply the transformation to this page + * @param position + * Position of page relative to the current front-and-center position of the pager. 0 is front and + * center. 1 is one full page position to the right, and -1 is one page position to the left. + */ + protected void onPreTransform(View page, float position) { + final float width = page.getWidth(); + + page.setRotationX(0); + page.setRotationY(0); + page.setRotation(0); + page.setScaleX(1); + page.setScaleY(1); + page.setPivotX(0); + page.setPivotY(0); + page.setTranslationY(0); + page.setTranslationX(isPagingEnabled() ? 0f : -width * position); + + if (hideOffscreenPages()) { + page.setAlpha(position <= -1f || position >= 1f ? 0f : 1f); + page.setEnabled(false); + } else { + page.setEnabled(true); + page.setAlpha(1f); + } + } + + /** + * Called each {@link #transformPage(View, float)} after {@link #onTransform(View, float)}. + * + * @param page + * Apply the transformation to this page + * @param position + * Position of page relative to the current front-and-center position of the pager. 0 is front and + * center. 1 is one full page position to the right, and -1 is one page position to the left. + */ + protected void onPostTransform(View page, float position) { + } + + /** + * Same as {@link Math#min(double, double)} without double casting, zero closest to infinity handling, or NaN support. + * + * @param val + * @param min + * @return + */ + protected static final float min(float val, float min) { + return val < min ? min : val; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/view/transform/AccordionTransformer.java b/app/src/main/java/com/yonsz/z1/view/transform/AccordionTransformer.java new file mode 100644 index 0000000..d914f2e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/view/transform/AccordionTransformer.java @@ -0,0 +1,29 @@ +/* + * Copyright 2014 Toxic Bakery + * + * 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.yonsz.z1.view.transform; + +import android.view.View; + +public class AccordionTransformer extends ABaseTransformer { + + @Override + protected void onTransform(View view, float position) { + view.setPivotX(position < 0 ? 0 : view.getWidth()); + view.setScaleX(position < 0 ? 1f + position : 1f - position); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/ElectricByMonthActivity.java b/app/src/main/java/com/yonsz/z1/wifi/ElectricByMonthActivity.java new file mode 100644 index 0000000..3560da8 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/ElectricByMonthActivity.java @@ -0,0 +1,164 @@ +package com.yonsz.z1.wifi; + +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entity5.ElectricMonthEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.LineChartView; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_ELECTRICQUANTITYBYMONTH; + +public class ElectricByMonthActivity extends BaseActivity { + private TitleView titleView; + private String deviceName, deviceModel, deviceType, deviceId, addressId; + private TextView monthName, monthElctric; + + LineChartView lineChartView; + + private int[] dataArr = new int[]{}; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_electric_month); + + initView(); + initListener(); + } + + + private void initView() { + titleView = (TitleView) findViewById(R.id.title_electric_quantity); + monthName = (TextView) findViewById(R.id.tv_month_name); + monthElctric = (TextView) findViewById(R.id.tv_month_electric); + lineChartView = (LineChartView) findViewById(R.id.line_chart_view); + deviceName = getIntent().getExtras().get("deviceName").toString(); + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + deviceType = getIntent().getExtras().get("deviceType").toString(); + deviceId = getIntent().getExtras().get("deviceId").toString(); + addressId = getIntent().getExtras().get("addressId").toString(); + monthName.setText(getIntent().getExtras().get("monthName").toString() + "电量(度)"); + monthElctric.setText(getIntent().getExtras().get("monthElctric").toString()); + + titleView.setHead("用电量"); + titleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + getElectricQuantityByMonth(); + } + + private void initListener() { + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FIND_DEVICES_SUCCESS: + ElectricMonthEntity obj = (ElectricMonthEntity) msg.obj; + List data1 = obj.getData(); + Collections.sort(data1); + List datas = new ArrayList<>(); + int maxNumber = 0; + for (ElectricMonthEntity.DataBean dataBean : data1) { + double value = Double.parseDouble(dataBean.getValue()); + int v = (int) (value * 100); + if (v > maxNumber) { + maxNumber = v; + } + LineChartView.Data data = new LineChartView.Data(v); + datas.add(data); + } + lineChartView.setData(datas); + if (lineChartView != null) { + int result; + if (maxNumber > 10000) { + result = maxNumber / 10000 * 10000; + if (result < maxNumber) { + result += 10000; + } + } else if (maxNumber > 1000) { + result = maxNumber / 1000 * 1000; + if (result < maxNumber) { + result += 1000; + } + } else { + result = maxNumber / 100 * 100; + if (result < maxNumber) { + result += 100; + } + } + + lineChartView.setRulerYSpace(result / 10); + lineChartView.setStepSpace(30); + lineChartView.setBezierLine(true); + lineChartView.setShowTable(true); + } + break; + case FIND_DEVICES_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private synchronized void getElectricQuantityByMonth() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("month", getIntent().getExtras().get("month").toString()); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestGetByAsy(SUBSET_ELECTRICQUANTITYBYMONTH, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("electricQuantityByMonth", "onSuccess()" + respone); + ElectricMonthEntity obj = JSON.parseObject(respone, ElectricMonthEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/BindDeviceUtils.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/BindDeviceUtils.java new file mode 100644 index 0000000..455a441 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/BindDeviceUtils.java @@ -0,0 +1,23 @@ +package com.yonsz.z1.wifi.switcher; + +import android.text.TextUtils; + +import com.tuya.smart.android.device.utils.WiFiUtil; +import com.tuya.smart.sdk.TuyaSdk; + +/** + * Created by letian on 16/6/3. + */ +public class BindDeviceUtils { + + public static boolean isAPMode() { + String ssid = ""; + if (TextUtils.isEmpty(ssid)) { + ssid = CommonConfig.DEFAULT_COMMON_AP_SSID; + } + String currentSSID = WiFiUtil.getCurrentSSID(TuyaSdk.getApplication()).toLowerCase(); + return !TextUtils.isEmpty(currentSSID) && (currentSSID.startsWith(ssid.toLowerCase()) || + currentSSID.startsWith(CommonConfig.DEFAULT_OLD_AP_SSID.toLowerCase()) || + currentSSID.contains(CommonConfig.DEFAULT_KEY_AP_SSID.toLowerCase())); + } +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/CommonConfig.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/CommonConfig.java new file mode 100644 index 0000000..20b5cda --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/CommonConfig.java @@ -0,0 +1,20 @@ +package com.yonsz.z1.wifi.switcher; + +/** + * Created by mikeshou on 15/5/26. + */ +public class CommonConfig { + + public static final String RESET_URL = "http://smart.tuya.com/reset"; + + public static final String FAILURE_URL = "http://smart.tuya.com/failure"; + + public static final String TY_WIFI_PASSWD = "TY_WIFI_PASSWD"; + + // FIXME: 16/4/7 改成通用 + public static final String DEFAULT_OLD_AP_SSID = "TuyaSmart"; + public static final String DEFAULT_COMMON_AP_SSID = "SmartLife"; + + public static final String TY_ROUTER = "TY_ROUTER"; + public static final String DEFAULT_KEY_AP_SSID = "-TLinkAP-"; +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/DeviceBindModel.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/DeviceBindModel.java new file mode 100644 index 0000000..e761d5a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/DeviceBindModel.java @@ -0,0 +1,154 @@ +package com.yonsz.z1.wifi.switcher; + +import android.content.Context; + +import com.tuya.smart.android.common.utils.SafeHandler; +import com.tuya.smart.android.mvp.model.BaseModel; +import com.tuya.smart.home.sdk.TuyaHomeSdk; +import com.tuya.smart.home.sdk.builder.ActivatorBuilder; +import com.tuya.smart.sdk.api.ITuyaActivator; +import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener; +import com.tuya.smart.sdk.bean.DeviceBean; +import com.tuya.smart.sdk.enums.ActivatorAPStepCode; +import com.tuya.smart.sdk.enums.ActivatorEZStepCode; +import com.tuya.smart.sdk.enums.ActivatorModelEnum; + +import static com.tuya.smart.sdk.enums.ActivatorModelEnum.TY_AP; +import static com.tuya.smart.sdk.enums.ActivatorModelEnum.TY_EZ; + +/** + * Created by letian on 16/3/30. + */ +public class DeviceBindModel extends BaseModel implements IDeviceBindModel { + public static final String STATUS_FAILURE_WITH_NETWORK_ERROR = "1001"; + public static final String STATUS_FAILURE_WITH_BIND_GWIDS = "1002"; + public static final String STATUS_FAILURE_WITH_BIND_GWIDS_1 = "1003"; + public static final String STATUS_FAILURE_WITH_GET_TOKEN = "1004"; + public static final String STATUS_FAILURE_WITH_CHECK_ONLINE_FAILURE = "1005"; + public static final String STATUS_FAILURE_WITH_OUT_OF_TIME = "1006"; + public static final String STATUS_DEV_CONFIG_ERROR_LIST = "1007"; + public static final int WHAT_EC_ACTIVE_ERROR = 0x02; + public static final int WHAT_EC_ACTIVE_SUCCESS = 0x03; + public static final int WHAT_AP_ACTIVE_ERROR = 0x04; + public static final int WHAT_AP_ACTIVE_SUCCESS = 0x05; + public static final int WHAT_EC_GET_TOKEN_ERROR = 0x06; + public static final int WHAT_DEVICE_FIND = 0x07; + public static final int WHAT_BIND_DEVICE_SUCCESS = 0x08; + private static final long CONFIG_TIME_OUT = 100; + + private ITuyaActivator mTuyaActivator; + private ActivatorModelEnum mModelEnum; + + public DeviceBindModel(Context ctx, SafeHandler handler) { + super(ctx, handler); + } + + + @Override + public void start() { + if (mTuyaActivator != null) { + mTuyaActivator.start(); + } + } + + @Override + public void cancel() { + if (mTuyaActivator != null) { + mTuyaActivator.stop(); + } + } + + @Override + public void setEC(String ssid, String password, String token) { + mModelEnum = TY_EZ; + mTuyaActivator = TuyaHomeSdk.getActivatorInstance().newMultiActivator(new ActivatorBuilder() + .setSsid(ssid) + .setContext(mContext) + .setPassword(password) + .setActivatorModel(TY_EZ) + .setTimeOut(CONFIG_TIME_OUT) + .setToken(token).setListener(new ITuyaSmartActivatorListener() { + @Override + public void onError(String s, String s1) { + switch (s) { + case STATUS_FAILURE_WITH_GET_TOKEN: + resultError(WHAT_EC_GET_TOKEN_ERROR, "wifiError", s1); + return; + } + resultError(WHAT_EC_ACTIVE_ERROR, s, s1); + } + + @Override + public void onActiveSuccess(DeviceBean gwDevResp) { + resultSuccess(WHAT_EC_ACTIVE_SUCCESS, gwDevResp); + } + + @Override + public void onStep(String s, Object o) { + switch (s) { + case ActivatorEZStepCode.DEVICE_BIND_SUCCESS: + resultSuccess(WHAT_BIND_DEVICE_SUCCESS, o); + break; + case ActivatorEZStepCode.DEVICE_FIND: + resultSuccess(WHAT_DEVICE_FIND, o); + break; + } + } + })); + } + + @Override + public void setAP(String ssid, String password, String token) { + mModelEnum = TY_AP; + mTuyaActivator = TuyaHomeSdk.getActivatorInstance().newActivator(new ActivatorBuilder() + .setSsid(ssid) + .setContext(mContext) + .setPassword(password) + .setActivatorModel(TY_AP) + .setTimeOut(CONFIG_TIME_OUT) + .setToken(token).setListener(new ITuyaSmartActivatorListener() { + @Override + public void onError(String error, String s1) { + resultError(WHAT_AP_ACTIVE_ERROR, error, s1); + } + + @Override + public void onActiveSuccess(DeviceBean gwDevResp) { + resultSuccess(WHAT_AP_ACTIVE_SUCCESS, gwDevResp); + } + + @Override + public void onStep(String step, Object o) { + switch (step) { + case ActivatorAPStepCode.DEVICE_BIND_SUCCESS: + resultSuccess(WHAT_BIND_DEVICE_SUCCESS, o); + break; + case ActivatorAPStepCode.DEVICE_FIND: + resultSuccess(WHAT_DEVICE_FIND, o); + break; + } + } + })); + + } + + @Override + public void configFailure() { + if (mModelEnum == null) + return; + if (mModelEnum == TY_AP) { + //ap超时提示错误页面 + resultError(WHAT_AP_ACTIVE_ERROR, "TIME_ERROR", "OutOfTime"); + } else { + //ez超时进入ap配网 + resultError(WHAT_EC_ACTIVE_ERROR, "TIME_ERROR", "OutOfTime"); + } + } + + @Override + public void onDestroy() { + if (mTuyaActivator != null) + mTuyaActivator.onDestroy(); + + } +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/ECActivity.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/ECActivity.java new file mode 100644 index 0000000..6c2355e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/ECActivity.java @@ -0,0 +1,213 @@ +/* +package com.yonsz.z1.wifi.switcher; + +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.content.res.TypedArray; +import android.graphics.Color; +import android.graphics.drawable.VectorDrawable; +import android.location.LocationManager; +import android.os.Bundle; +import android.os.Message; +import android.text.InputType; +import android.view.KeyEvent; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.TextView; + +import com.tuya.smart.sdk.TuyaSdk; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; + +*/ +/** + * Created by letian on 15/6/29. + *//* + +public class ECActivity extends BaseActivity implements IECView { + + public static final String CONFIG_MODE = "config_mode"; + public static final String CONFIG_PASSWORD = "config_password"; + public static final String CONFIG_SSID = "config_ssid"; + private static final String TAG = "ECActivity"; + public static final int AP_MODE = 0; + public static final int EC_MODE = 1; + + public TextView mSSID; + public EditText mPassword; + public ImageButton mPasswordSwitch; + ImageView mIvWifi; + TextView mTvWifiStatus; + TextView mTvOtherWifi; + + private ECPresenter mECPresenter; + + private boolean passwordOn = true; + private int mWifiOnColor; + private View m5gNetworkTip; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ec_mode); + initToolbar(); + initView(); + initMenu(); + initPresenter(); + + TypedArray a = obtainStyledAttributes(new int[]{ + R.attr.navbar_font_color}); + mWifiOnColor = a.getColor(0, getResources().getColor(R.color.color_primary)); + a.recycle(); + } + + private void initPresenter() { + mECPresenter = new ECPresenter(this, this); + mECPresenter.showLocationError(); + } + + + public void clickPasswordSwitch(View v) { + passwordOn = !passwordOn; + if (passwordOn) { + mPasswordSwitch.setImageResource(R.drawable.ty_password_on); + mPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); + } else { + mPasswordSwitch.setImageResource(R.drawable.ty_password_off); + mPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } + if (mPassword.getText().length() > 0) { + mPassword.setSelection(mPassword.getText().length()); + } + } + + private View.OnClickListener mOnClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + if (v.getId() == R.id.tv_other_wifi) { + mECPresenter.userOtherWifi(); + } else if (v.getId() == R.id.ec_password_switch) { + clickPasswordSwitch(v); + } else if (v.getId() == R.id.tv_bottom_button) { + mECPresenter.goNextStep(); + } + } + }; + + private void initView() { + mSSID = (TextView) findViewById(R.id.tv_network); + mSSID.setVisibility(View.VISIBLE); + + mPassword = (EditText) findViewById(R.id.et_password); + mPasswordSwitch = (ImageButton) findViewById(R.id.ec_password_switch); + mPasswordSwitch.setOnClickListener(mOnClickListener); + mIvWifi = (ImageView) findViewById(R.id.iv_wifi); + setWifiVectorDrawable(mIvWifi); + mIvWifi.setColorFilter(mWifiOnColor); + + mTvWifiStatus = (TextView) findViewById(R.id.tv_wifi_status); + mTvOtherWifi = (TextView) findViewById(R.id.tv_other_wifi); + mTvOtherWifi.setOnClickListener(mOnClickListener); + findViewById(R.id.tv_bottom_button).setOnClickListener(mOnClickListener); + m5gNetworkTip = findViewById(R.id.network_tip); + } + + private void initMenu() { + setTitle(getString(R.string.ty_ez_wifi_title)); + setDisplayHomeAsUpEnabled(); + } + + private void setWifiVectorDrawable(ImageView view) { + VectorDrawable drawable = VectorDrawable.getDrawable(TuyaSdk.getApplication(), R.drawable.wifi_status); + mIvWifi.setBackground(getResources().getDrawable(R.drawable.bg_bt_circle)); + drawable.setAlpha(128); + view.setImageDrawable(drawable); + } + + @Override + protected void onResume() { + super.onResume(); + mECPresenter.checkWifiNetworkStatus(); + } + + @Override + protected boolean onPanelKeyDown(int keyCode, KeyEvent event) { + switch (keyCode) { + case KeyEvent.KEYCODE_BACK: + mECPresenter.closeECModeActivity(); + return true; + } + return false; + } + + @Override + public void setWifiSSID(String ssId) { + setViewVisible(mSSID); + mIvWifi.setColorFilter(mWifiOnColor); + mTvWifiStatus.setText(getString(R.string.ty_ez_current_wifi_android)); + mSSID.setText(ssId); + } + + @Override + public void setWifiPass(String pass) { + mPassword.setText(pass); + } + + @Override + public String getWifiPass() { + return mPassword.getText().toString(); + } + + @Override + public String getWifiSsId() { + return mSSID.getText().toString(); + } + + @Override + public void showNoWifi() { + setViewGone(mSSID); + hide5gTip(); + setWifiPass(""); + mIvWifi.setColorFilter(Color.GRAY); + mTvWifiStatus.setText(getString(R.string.ty_ez_current_no_wifi)); + } + + @Override + public void show5gTip() { + setViewVisible(m5gNetworkTip); + } + + @Override + public void hide5gTip() { + setViewGone(m5gNetworkTip); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mECPresenter.onDestroy(); + } + + @Override + public void callBackUiThread(Message msg) { + + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + switch (requestCode) { + case PRIVATE_CODE: + LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); + boolean isOpen = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); + if (isOpen) { + mECPresenter.checkSinglePermission(Manifest.permission.ACCESS_FINE_LOCATION, CODE_FOR_LOCATION_PERMISSION); + } + break; + } + } +} +*/ diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/ECBindActivity.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/ECBindActivity.java new file mode 100644 index 0000000..30b52f4 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/ECBindActivity.java @@ -0,0 +1,355 @@ +/* +package com.yonsz.z1.wifi.switcher; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.graphics.Color; +import android.net.NetworkInfo; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Message; +import android.provider.Settings; +import android.view.View; +import android.view.animation.LinearInterpolator; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.tuya.smart.sdk.TuyaSdk; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.wifi.switcher.circleprogress.CircleProgressView; + +import butterknife.ButterKnife; +import butterknife.OnClick; +import butterknife.Unbinder; + +public class ECBindActivity extends BaseActivity implements IECBindView { + private static final String TAG = "ECBindActivity"; + CircleProgressView mCircleView; + TextView mEcConnectTip; + LinearLayout mEcConnecting; + Button mTvFinishButton; + Button mTvShareButton; + Button mTvRetryButton; + TextView mTvAddDeviceSuccess; + LinearLayout mLlFailureView; + TextView mNetworkTip; + private ECBindPresenter mECBindPresenter; + private View mRetryContactTip; + private TextView mHelp; + + private TextView mDeviceFindTip; + private TextView mDeviceBindSussessTip; + private TextView mDeviceInitTip; + private TextView mDeviceInitFailureTip; + + private RelativeLayout mSwitchWifiLayout; + private Unbinder mBind; + private boolean isPause = true; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ec_bind1); + mBind = ButterKnife.bind(this); + initView(); +// initToolbar(); + initMenu(); + initPresenter(); + mCircleView.setValueInterpolator(new LinearInterpolator()); + registerWifiReceiver(); + } + + private View.OnClickListener mOnClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + if (v.getId() == R.id.tv_retry_button) { + onClickRetry(); + } else if (v.getId() == R.id.tv_share_button) { + onClickConnect(); + } else if (v.getId() == R.id.tv_finish_button) { + onClickFinish(); + } else if (v.getId() == R.id.tv_ec_find_search_help) { + onClickFins(); + } + } + }; + + private void initView() { + mCircleView = (CircleProgressView) findViewById(R.id.circleView); + mEcConnectTip = (TextView) findViewById(R.id.ec_connect_tip); + mEcConnecting = (LinearLayout) findViewById(R.id.ec_connecting); + mTvFinishButton = (Button) findViewById(R.id.tv_finish_button); + mTvFinishButton.setOnClickListener(mOnClickListener); + mTvShareButton = (Button) findViewById(R.id.tv_share_button); + mTvShareButton.setOnClickListener(mOnClickListener); + mTvRetryButton = (Button) findViewById(R.id.tv_retry_button); + mTvRetryButton.setOnClickListener(mOnClickListener); + mTvAddDeviceSuccess = (TextView) findViewById(R.id.tv_add_device_success); + mLlFailureView = (LinearLayout) findViewById(R.id.ll_failure_view); + mNetworkTip = (TextView) findViewById(R.id.network_tip); + mRetryContactTip = findViewById(R.id.tv_add_device_contact_tip); + mHelp = (TextView) findViewById(R.id.tv_ec_find_search_help); + mHelp.setOnClickListener(mOnClickListener); + int color = ViewUtils.getColor(this, R.color.z1_control); + mCircleView.setBarColor(color); + mCircleView.setSpinBarColor(color); + mCircleView.setTextColor(color); + mCircleView.setUnitColor(color); + mCircleView.setRimColor(Color.argb(51, Color.red(color), Color.green(color), Color.blue(color))); + + ImageView failIv = (ImageView) findViewById(R.id.iv_add_device_fail); + */ +/*VectorDrawable drawable = VectorDrawable.getDrawable(TuyaSdk.getApplication(), R.drawable.add_device_fail_icon); + failIv.setImageDrawable(drawable);*//* + + + mDeviceFindTip = (TextView) findViewById(R.id.tv_dev_find); + mDeviceBindSussessTip = (TextView) findViewById(R.id.tv_bind_success); + mDeviceInitTip = (TextView) findViewById(R.id.tv_device_init); + mDeviceInitFailureTip = (TextView) findViewById(R.id.tv_device_init_tip); + + // ap配网辅助页面 + mSwitchWifiLayout = (RelativeLayout) findViewById(R.id.switch_wifi_layout); + ((TextView) findViewById(R.id.tv_ap_ssid)).setText(CommonConfig.DEFAULT_COMMON_AP_SSID.concat("_XXX")); + } + + @OnClick(R.id.tv_bottom_button) + public void onClickSettings() { + Intent wifiSettingsIntent = new Intent("android.settings.WIFI_SETTINGS"); + if (null != wifiSettingsIntent.resolveActivity(getPackageManager())) { + startActivity(wifiSettingsIntent); + } else { + wifiSettingsIntent = new Intent(Settings.ACTION_WIFI_SETTINGS); + if (null != wifiSettingsIntent.resolveActivity(getPackageManager())) { + startActivity(wifiSettingsIntent); + } + } + } + + */ +/* @OnClick(R.id.add_device_tip_help) + public void onClickHelp() { + Intent intent = new Intent(this, BrowserActivity.class); + intent.putExtra(BrowserActivity.EXTRA_LOGIN, false); + intent.putExtra(BrowserActivity.EXTRA_REFRESH, true); + intent.putExtra(BrowserActivity.EXTRA_TOOLBAR, true); + intent.putExtra(BrowserActivity.EXTRA_TITLE, getString(R.string.ty_ez_help)); + intent.putExtra(BrowserActivity.EXTRA_URI, CommonConfig.RESET_URL); + startActivity(intent); + }*//* + + + // 配网子页面 + @Override + public void showSubPage() { + setViewVisible(mSwitchWifiLayout); + } + + @Override + public void hideSubPage() { + setViewGone(mSwitchWifiLayout); + } + + // 配网主页面 + @Override + public void showMainPage() { + setViewVisible(mDeviceFindTip); + setViewVisible(mDeviceBindSussessTip); + setViewVisible(mDeviceInitTip); + } + + @Override + public void hideMainPage() { + setViewGone(mEcConnecting); + setViewGone(mTvFinishButton); + setViewGone(mTvShareButton); + setViewGone(mTvRetryButton); + setViewGone(mRetryContactTip); + setViewGone(mTvAddDeviceSuccess); + setViewGone(mDeviceInitFailureTip); + setViewGone(mLlFailureView); + setViewGone(mDeviceFindTip); + setViewGone(mDeviceBindSussessTip); + setViewGone(mDeviceInitTip); + } + + private void initPresenter() { + mECBindPresenter = new ECBindPresenter(this, this); + } + + private void initMenu() { + */ +/*setTitle(getString(R.string.ty_ez_connecting_device_title)); + setDisplayHomeAsUpEnabled();*//* + + } + + public void showSuccessPage() { + setAddDeviceTipGone(); + setViewVisible(mTvAddDeviceSuccess); + setViewVisible(mTvFinishButton); + setViewVisible(mTvShareButton); + setViewGone(mEcConnecting); + } + + private void setAddDeviceTipGone() { + setViewGone(mDeviceBindSussessTip); + setViewGone(mDeviceFindTip); + setViewGone(mDeviceInitTip); + } + + public void showFailurePage() { + setAddDeviceTipGone(); + setTitle(getString(R.string.ty_ap_error_title)); + setViewGone(mEcConnecting); + setViewVisible(mLlFailureView); + setViewVisible(mTvRetryButton); + setViewVisible(mRetryContactTip); + mHelp.setText(R.string.ty_ap_error_description); + } + + public void showConnectPage() { + setTitle(getString(R.string.ty_ez_connecting_device_title)); + setViewVisible(mEcConnecting); + setViewGone(mLlFailureView); + setViewGone(mTvRetryButton); + setViewGone(mRetryContactTip); + } + + public void setConnectProgress(float progress, int animationDuration) { + mCircleView.setValueAnimated(progress, animationDuration); + } + + @Override + public void showNetWorkFailurePage() { + showFailurePage(); + setViewGone(mRetryContactTip); + mHelp.setText(R.string.network_time_out); + } + + @Override + public void showBindDeviceSuccessTip() { + ViewUtils.setTextViewDrawableLeft(TuyaSdk.getApplication(), mDeviceBindSussessTip, R.drawable.ty_add_device_ok_tip); + } + + @Override + public void showDeviceFindTip(String gwId) { + ViewUtils.setTextViewDrawableLeft(TuyaSdk.getApplication(), mDeviceFindTip, R.drawable.ty_add_device_ok_tip); + } + + @Override + public void showConfigSuccessTip() { + ViewUtils.setTextViewDrawableLeft(TuyaSdk.getApplication(), mDeviceInitTip, R.drawable.ty_add_device_ok_tip); + } + + @Override + public void showBindDeviceSuccessFinalTip() { + showSuccessPage(); + setViewVisible(mDeviceInitFailureTip); + } + + @Override + public void setAddDeviceName(String name) { + mTvAddDeviceSuccess.setText(String.format("%s%s", name, mTvAddDeviceSuccess.getText().toString())); + } + + public void onClickRetry() { + mCircleView.setValue(0); + mECBindPresenter.reStartEZConfig(); + } + + public void onClickConnect() { + mECBindPresenter.gotoShareActivity(); + } + + public void onClickFinish() { + onBackPressed(); + + } + + public void onClickFins() { + mECBindPresenter.goForHelp(); + } + + @Override + public void onResume() { + super.onResume(); + isPause = false; + checkSSIDAndGoNext(); + } + + @Override + public void onDestroy() { + mBind.unbind(); + mECBindPresenter.onDestroy(); + unRegisterWifiReceiver(); + super.onDestroy(); + } + + @Override + public void callBackUiThread(Message msg) { + + } + + // AP模式配网 + private void checkSSIDAndGoNext() { + if (isPause) return; + if (BindDeviceUtils.isAPMode()) { + unRegisterWifiReceiver(); + hideSubPage(); + showMainPage(); + mECBindPresenter.startSearch(); + } + } + + // 监听网络 + private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context c, final Intent intent) { + if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { + NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); + if (networkInfo.isAvailable() && networkInfo.isConnected()) { + checkSSIDAndGoNext(); + } + } + } + }; + + private void registerWifiReceiver() { + try { + registerReceiver(mBroadcastReceiver, new IntentFilter( + WifiManager.NETWORK_STATE_CHANGED_ACTION)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void unRegisterWifiReceiver() { + try { + if (mBroadcastReceiver != null) { + unregisterReceiver(mBroadcastReceiver); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void setViewVisible(View view) { + if (view.getVisibility() != View.VISIBLE) { + view.setVisibility(View.VISIBLE); + } + } + + private void setViewGone(View view) { + if (view.getVisibility() != View.GONE) { + view.setVisibility(View.GONE); + } + } +} +*/ diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/ECBindPresenter.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/ECBindPresenter.java new file mode 100644 index 0000000..7f2af5b --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/ECBindPresenter.java @@ -0,0 +1,261 @@ +/* +package com.yonsz.z1.wifi.switcher; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Message; +import android.widget.Toast; + +import com.tuya.smart.android.common.utils.L; +import com.tuya.smart.android.device.utils.WiFiUtil; +import com.tuya.smart.android.mvp.bean.Result; +import com.tuya.smart.android.mvp.presenter.BasePresenter; +import com.tuya.smart.home.sdk.TuyaHomeSdk; +import com.tuya.smart.interior.device.bean.GwDevResp; +import com.tuya.smart.sdk.api.ITuyaActivatorGetToken; +import com.tuya.smart.sdk.bean.DeviceBean; +import com.yonsz.z1.R; + + +*/ +/** + * Created by letian on 16/1/8. + *//* + +public class ECBindPresenter extends BasePresenter { + + private static final String TAG = "ECBindPresenter"; + private static final int MESSAGE_SHOW_SUCCESS_PAGE = 1001; + private final Context mContext; + private final IECBindView mView; + + private static final int MESSAGE_CONFIG_WIFI_OUT_OF_TIME = 0x16; + private final int mConfigMode; + private int mTime; + private boolean mStop; + private DeviceBindModel mModel; + private final String mPassWord; + private final String mSSId; + private boolean mBindDeviceSuccess; + + public ECBindPresenter(Context context, IECBindView view) { + super(context); + mContext = context; + mView = view; + mConfigMode = ((Activity) mContext).getIntent().getIntExtra(ECActivity.CONFIG_MODE, ECActivity.EC_MODE); + mModel = new DeviceBindModel(context, mHandler); + mPassWord = ((Activity) mContext).getIntent().getStringExtra(ECActivity.CONFIG_PASSWORD); + mSSId = ((Activity) mContext).getIntent().getStringExtra(ECActivity.CONFIG_SSID); + showConfigDevicePage(); + getTokenForConfigDevice(); + } + + private void showConfigDevicePage() { + if (mConfigMode == ECActivity.EC_MODE) { + mView.hideSubPage(); + } else { + mView.hideMainPage(); + mView.showSubPage(); + } + } + + private void getTokenForConfigDevice() { + ProgressUtil.showLoading(mContext, R.string.loading); + long homeId = FamilyManager.getInstance().getCurrentHomeId(); + TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId, new ITuyaActivatorGetToken() { + @Override + public void onSuccess(String token) { + ProgressUtil.hideLoading(); + initConfigDevice(token); + } + + @Override + public void onFailure(String s, String s1) { + ProgressUtil.hideLoading(); + if (mConfigMode == ECActivity.EC_MODE) { + mView.showNetWorkFailurePage(); + } + } + }); + + } + + private void initConfigDevice(String token) { + if (mConfigMode == ECActivity.EC_MODE) { + mModel.setEC(mSSId, mPassWord, token); + startSearch(); + } else if(mConfigMode == ECActivity.AP_MODE){ + mModel.setAP(mSSId, mPassWord, token); + } + } + + public void startSearch() { + mModel.start(); + mView.showConnectPage(); + mBindDeviceSuccess = false; + startLoop(); + } + + private void startLoop() { + mTime = 0; + mStop = false; + mHandler.sendEmptyMessage(MESSAGE_CONFIG_WIFI_OUT_OF_TIME); + } + + */ +/** + * 重新开始配置 + *//* + + public void reStartEZConfig() { + //ap模式重试,要重新切回到EC模式里 + if (mConfigMode == ECActivity.AP_MODE) { + ActivityUtils.startActivity((Activity) mContext, new Intent(mContext, AddDeviceTipActivity.class), ActivityUtils.ANIMATE_FORWARD, true); + } else { + //EZ模式只有在token获取失败的时候可以重试进行配网。 + goToEZActivity(); + } + } + + private void goToEZActivity() { + Intent intent = new Intent(mContext, ECActivity.class); + ActivityUtils.startActivity((Activity) mContext, intent, ActivityUtils.ANIMATE_FORWARD, true); + } + + @Override + public boolean handleMessage(Message msg) { + switch (msg.what) { + case MESSAGE_SHOW_SUCCESS_PAGE: + mView.showSuccessPage(); + break; + case MESSAGE_CONFIG_WIFI_OUT_OF_TIME: + checkLoop(); + break; + //网络错误异常情况 + case DeviceBindModel.WHAT_EC_GET_TOKEN_ERROR: //获取token失败 + stopSearch(); + mView.showNetWorkFailurePage(); + break; + //ec激活失败 + case DeviceBindModel.WHAT_EC_ACTIVE_ERROR: + L.d(TAG, "ec_active_error"); + stopSearch(); + if (mBindDeviceSuccess) { + mView.showBindDeviceSuccessFinalTip(); + break; + } + mView.showFailurePage(); + break; + + //AP激活失败 + case DeviceBindModel.WHAT_AP_ACTIVE_ERROR: + L.d(TAG, "ap_active_error"); + stopSearch(); + if (mBindDeviceSuccess) { + mView.showBindDeviceSuccessFinalTip(); + break; + } + mView.showFailurePage(); + String currentSSID = WiFiUtil.getCurrentSSID(mContext); + if (BindDeviceUtils.isAPMode()) + WiFiUtil.removeNetwork(mContext, currentSSID); + break; + + case DeviceBindModel.WHAT_EC_ACTIVE_SUCCESS: //EC激活成功 + case DeviceBindModel.WHAT_AP_ACTIVE_SUCCESS: //AP激活成功 + L.d(TAG, "active_success"); + DeviceBean configDev = (DeviceBean) ((Result)msg.obj).getObj(); + stopSearch(); + configSuccess(configDev); + break; + + case DeviceBindModel.WHAT_DEVICE_FIND: + L.d(TAG, "device_find"); + deviceFind((String) ((Result) (msg.obj)).getObj()); + break; + case DeviceBindModel.WHAT_BIND_DEVICE_SUCCESS: + L.d(TAG, "bind_device_success"); + bindDeviceSuccess(((GwDevResp) ((Result) (msg.obj)).getObj()).getName()); + break; + + } + return super.handleMessage(msg); + } + + private void bindDeviceSuccess(String name) { + if (!mStop) { + mBindDeviceSuccess = true; + mView.setAddDeviceName(name); + mView.showBindDeviceSuccessTip(); + } + } + + private void deviceFind(String gwId) { + if (!mStop) { + mView.showDeviceFindTip(gwId); + } + } + + private void checkLoop() { + if (mStop) return; + if (mTime >= 100) { + stopSearch(); + mModel.configFailure(); + } else { + mView.setConnectProgress(mTime++, 1000); + mHandler.sendEmptyMessageDelayed(MESSAGE_CONFIG_WIFI_OUT_OF_TIME, 1000); + } + } + + //配网成功 + private void configSuccess(DeviceBean deviceBean) { + if (deviceBean != null){ + Toast.makeText(mContext,"the device id is: " + deviceBean.getDevId(), Toast.LENGTH_SHORT).show(); + } + stopSearch(); + mView.showConfigSuccessTip(); + mView.setConnectProgress(100, 800); + mHandler.sendEmptyMessageDelayed(MESSAGE_SHOW_SUCCESS_PAGE, 1000); + } + + //暂停配网 + private void stopSearch() { + mStop = true; + mHandler.removeMessages(MESSAGE_CONFIG_WIFI_OUT_OF_TIME); + mModel.cancel(); + } + + */ +/** + * 进入分享页面 + *//* + + public void gotoShareActivity() { +// ActivityUtils.gotoActivity((Activity) mContext, SharedActivity.class, ActivityUtils.ANIMATE_FORWARD, true); + } + + */ +/** + * 查看帮助 + *//* + + public void goForHelp() { + Intent intent = new Intent(mContext, BrowserActivity.class); + intent.putExtra(BrowserActivity.EXTRA_LOGIN, false); + intent.putExtra(BrowserActivity.EXTRA_REFRESH, true); + intent.putExtra(BrowserActivity.EXTRA_TOOLBAR, true); + intent.putExtra(BrowserActivity.EXTRA_TITLE, mContext.getString(R.string.ty_ez_help)); + intent.putExtra(BrowserActivity.EXTRA_URI, CommonConfig.FAILURE_URL); + mContext.startActivity(intent); + } + + @Override + public void onDestroy() { + mHandler.removeMessages(MESSAGE_CONFIG_WIFI_OUT_OF_TIME); + mHandler.removeMessages(MESSAGE_SHOW_SUCCESS_PAGE); + mModel.onDestroy(); + super.onDestroy(); + } +} +*/ diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/ElectricAllAdapter.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/ElectricAllAdapter.java new file mode 100644 index 0000000..a9de83a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/ElectricAllAdapter.java @@ -0,0 +1,133 @@ +package com.yonsz.z1.wifi.switcher; + +import android.content.Context; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entity5.AllDeviceTypeEntity; +import com.yonsz.z1.database.entity.entity5.ElectricQuantityEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.version5.adapter.AsxAddDeviceAdapter; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; + +import java.util.List; + +/** + * Created by Administrator on 2018/7/18. + */ + +public class ElectricAllAdapter extends RecyclerView.Adapter { + + private List mObjEntity; + private Context mContext; + private OnExbandItemClickListener mOnItemClickListener; + + public ElectricAllAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_elctric_all, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity == null ? 0 : mObjEntity.size(); + } + + public void setmOnItemClickListener(OnExbandItemClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private final RelativeLayout root_relativelayout; + private TextView electricNumber, monthName; + private View line2; + private RecyclerView mGridView; + private AsxAddDeviceAdapter mAdapter; + + + public MessageViewHolder(View view) { + super(view); + monthName = (TextView) view.findViewById(R.id.tv_month_name); + electricNumber = (TextView) view.findViewById(R.id.tv_electric_number); + root_relativelayout = (RelativeLayout) view.findViewById(R.id.root_relativelayout); + } + + public void setViews(final int position) { + monthName.setText(getMonth(mObjEntity.get(position).getDate().substring(4, 6))); + electricNumber.setText(mObjEntity.get(position).getValue()); + + root_relativelayout.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onClick(v, position, 0, 0, 0, monthName.getText().toString()); + } + } + }); + } + } + + private String getMonth(String month) { + String thisMonth = ""; + switch (month) { + case "01": + thisMonth = "一月"; + break; + case "02": + thisMonth = "二月"; + break; + case "03": + thisMonth = "三月"; + break; + case "04": + thisMonth = "四月"; + break; + case "05": + thisMonth = "五月"; + break; + case "06": + thisMonth = "六月"; + break; + case "07": + thisMonth = "七月"; + break; + case "08": + thisMonth = "八月"; + break; + case "09": + thisMonth = "九月"; + break; + case "10": + thisMonth = "十月"; + break; + case "11": + thisMonth = "十一月"; + break; + case "12": + thisMonth = "十二月"; + break; + } + return thisMonth; + } +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/ElectricQuantityActivity.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/ElectricQuantityActivity.java new file mode 100644 index 0000000..6bd7179 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/ElectricQuantityActivity.java @@ -0,0 +1,183 @@ +package com.yonsz.z1.wifi.switcher; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.util.TimeUtils; +import android.view.View; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entity5.ElectricQuantityEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DateTimeUitl; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.adapter.AddListAdapter; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.wifi.ElectricByMonthActivity; + +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_ELECTRICQUANTITY; + +public class ElectricQuantityActivity extends BaseActivity { + private TitleView mtTitleView; + private ElectricQuantityEntity electricQuantityEntity; + private String deviceName, deviceModel, deviceType, deviceId, addressId; + private TextView todayTv, curCurrentTv, curPowerTv, curVoltageTv, tatalTv, yearTv; + private RecyclerView verticalRecyclerView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_electric_quantity); + initView(); + initListener(); + } + + + private void initView() { + deviceName = getIntent().getExtras().get("deviceName").toString(); + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + deviceType = getIntent().getExtras().get("deviceType").toString(); + deviceId = getIntent().getExtras().get("deviceId").toString(); + addressId = getIntent().getExtras().get("addressId").toString(); + verticalRecyclerView = (RecyclerView) findViewById(R.id.vertical_RecyclerView); + yearTv = (TextView) findViewById(R.id.tv_year); + todayTv = (TextView) findViewById(R.id.tv_today); + curCurrentTv = (TextView) findViewById(R.id.tv_curCurrent); + curPowerTv = (TextView) findViewById(R.id.tv_curPower); + curVoltageTv = (TextView) findViewById(R.id.tv_curVoltage); + tatalTv = (TextView) findViewById(R.id.tv_total); + mtTitleView = (TitleView) findViewById(R.id.title_electric_quantity); + mtTitleView.setHead("用电量"); + mtTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + Calendar cd = Calendar.getInstance(); + yearTv.setText(cd.get(Calendar.YEAR) + ""); + getElectricQuantity(); + } + + private void initListener() { + /*todayTv.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent = new Intent(ElectricQuantityActivity.this, ElectricByMonthActivity.class); + intent.putExtra("deviceName", deviceName); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("deviceId", deviceId); + intent.putExtra("addressId", addressId); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + startActivity(intent); + } + });*/ + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FIND_DEVICES_SUCCESS: + electricQuantityEntity = (ElectricQuantityEntity) msg.obj; + todayTv.setText(electricQuantityEntity.getData().getToday()); + curCurrentTv.setText(electricQuantityEntity.getData().getCurCurrent()); + curPowerTv.setText(electricQuantityEntity.getData().getCurPower()); + curVoltageTv.setText(electricQuantityEntity.getData().getCurVoltage()); + tatalTv.setText(electricQuantityEntity.getData().getTotal()); + + + ElectricAllAdapter electricAllAdapter = new ElectricAllAdapter(this, electricQuantityEntity.getData().getStatus()); + RecyclerViewNoBugLinearLayoutManager manage1 = new RecyclerViewNoBugLinearLayoutManager(this); + manage1.setOrientation(LinearLayoutManager.VERTICAL); + verticalRecyclerView.setHasFixedSize(true); + verticalRecyclerView.setLayoutManager(manage1); + verticalRecyclerView.setAdapter(electricAllAdapter); + + electricAllAdapter.setmOnItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String monthName) { + //跳转 + Intent intent = new Intent(ElectricQuantityActivity.this, ElectricByMonthActivity.class); + intent.putExtra("deviceName", deviceName); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("deviceId", deviceId); + intent.putExtra("addressId", addressId); + intent.putExtra("month", electricQuantityEntity.getData().getStatus().get(parentPosition).getDate()); + intent.putExtra("monthElctric", electricQuantityEntity.getData().getStatus().get(parentPosition).getValue()); + intent.putExtra("monthName", monthName); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + startActivity(intent); + } + }); + break; + case FIND_DEVICES_FAIL: + ToastUtil.show(ElectricQuantityActivity.this, String.valueOf(msg.obj)); + break; + } + } + + + private void getElectricQuantity() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestGetByAsy(SUBSET_ELECTRICQUANTITY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getElectricQuantity", "onSuccess()" + respone); + ElectricQuantityEntity obj = JSON.parseObject(respone, ElectricQuantityEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/IDeviceBindModel.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/IDeviceBindModel.java new file mode 100644 index 0000000..4630762 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/IDeviceBindModel.java @@ -0,0 +1,16 @@ +package com.yonsz.z1.wifi.switcher; + +/** + * Created by letian on 16/3/30. + */ +public interface IDeviceBindModel { + void start(); + + void cancel(); + + void setEC(String ssid, String password, String token); + + void setAP(String ssid, String password, String token); + + void configFailure(); +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/IECBindView.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/IECBindView.java new file mode 100644 index 0000000..2507ba9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/IECBindView.java @@ -0,0 +1,32 @@ +package com.yonsz.z1.wifi.switcher; + +/** + * Created by letian on 16/1/8. + */ +public interface IECBindView { + + void showSuccessPage(); + + void showFailurePage(); + + void showConnectPage(); + + void setConnectProgress(float progress, int animationDuration); + + void showNetWorkFailurePage(); + + void showBindDeviceSuccessTip(); + + void showDeviceFindTip(String gwId); + + void showConfigSuccessTip(); + + void showBindDeviceSuccessFinalTip(); + + void setAddDeviceName(String name); + + void showMainPage(); + void hideMainPage(); + void showSubPage(); + void hideSubPage(); +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/IECView.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/IECView.java new file mode 100644 index 0000000..121ef07 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/IECView.java @@ -0,0 +1,50 @@ +package com.yonsz.z1.wifi.switcher; + + +import com.tuya.smart.android.mvp.view.IView; + +/** + * Created by letian on 15/6/29. + */ +public interface IECView extends IView { + /** + * 设置SSID + * + * @param ssId + */ + void setWifiSSID(String ssId); + + /** + * 设置WiFi密码 + * + * @param pass + */ + void setWifiPass(String pass); + + + /** + * 获取wifi 密码 + * + * @return + */ + String getWifiPass(); + + /** + * 获取SSID + * + * @return + */ + String getWifiSsId(); + + void showNoWifi(); + + /** + * 显示 只支持 网络提示 + */ + void show5gTip(); + + /** + * 隐藏 5g 网络提示 + */ + void hide5gTip(); +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/ProgressUtil.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/ProgressUtil.java new file mode 100644 index 0000000..54bc203 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/ProgressUtil.java @@ -0,0 +1,167 @@ +/* +package com.yonsz.z1.wifi.switcher; + +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.WindowManager; +import android.widget.TextView; + +import com.yonsz.z1.R; + + +*/ +/** + * Created by mikeshou on 15/6/18. + *//* + +public class ProgressUtil { + + private static Dialog progressDialog; + + public static void showLoading(Context context, String message) { + if (progressDialog == null) { + progressDialog = getSimpleProgressDialog(context, "", new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + progressDialog = null; + } + }); + } + if (!TextUtils.isEmpty(message)) { + ((TextView) progressDialog.findViewById(R.id.progress_dialog_message)).setText(message); + } + if (!isShowLoading()) { + progressDialog.show(); + } + } + + public static void setAlpha(float dimAmount, float alpha) { + WindowManager.LayoutParams lp = progressDialog.getWindow().getAttributes(); + lp.dimAmount = dimAmount; + lp.alpha = alpha; + progressDialog.getWindow().setAttributes(lp); + progressDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); + } + + + public static void showLoading(Context context, CharSequence title, CharSequence message) { + showLoading(context, title, message, false); + } + + public static void showLoading(Context context, CharSequence title, int resId) { + showLoading(context, title, resId, false); + + } + + public static void showLoading(Context context, CharSequence title, CharSequence message, boolean isCancelable) { + showLoading(context, title, message, isCancelable, false, null); + } + + public static void showLoading(Context context, CharSequence title, int resId, boolean isCancelable) { + showLoading(context, title, resId, isCancelable, false, null); + } + + public static void showLoading(Context context, CharSequence title, CharSequence message, boolean isCancelable, DialogInterface.OnCancelListener listener) { + showLoading(context, title, message, isCancelable, false, listener); + } + + public static void showLoading(Context context, CharSequence title, int resId, boolean isCancelable, DialogInterface.OnCancelListener listener) { + showLoading(context, title, resId, isCancelable, false, listener); + } + + public static void showLoading(Context context, CharSequence title, int resId, boolean isCancelable, boolean isCancelOnTouchOutside, DialogInterface.OnCancelListener listener) { + if (context == null) return; + String message = context.getResources().getString(resId); + showLoading(context, title, message, isCancelable, isCancelOnTouchOutside, listener); + } + + public static void showLoading(Context context, CharSequence title, CharSequence message, boolean isCancelable, boolean isCancelOnTouchOutside, DialogInterface.OnCancelListener listener) { + if (context == null) return; + if (progressDialog != null) hideLoading(); + progressDialog = ProgressDialog.show(context, title, message, false, isCancelable, listener); + progressDialog.setCanceledOnTouchOutside(isCancelOnTouchOutside); + } + + public static void showLoading(Context context, int resId) { + showLoading(context, context.getString(resId)); + } + + public static boolean isShowLoading() { + if (progressDialog == null) { + return false; + } + return progressDialog.isShowing(); + } + + public static void hideLoading() { + if (progressDialog != null && progressDialog.getContext() != null) { + progressDialog.hide(); + try { + progressDialog.dismiss(); + } catch (Exception e) { + e.printStackTrace(); + } + } + progressDialog = null; + } + + */ +/** + * 获取进度条对话框 + * + * @param mContext + * @param title + * @param msg + * @return + *//* + + public static ProgressDialog getProgressDialog(Context mContext, String title, String msg) { + ProgressDialog progressDialog = new ProgressDialog(mContext); + if (!TextUtils.isEmpty(title)) { + progressDialog.setTitle(title); + } + if (!TextUtils.isEmpty(msg)) { + progressDialog.setMessage(msg); + } + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setCancelable(false); + Drawable drawable = mContext.getResources().getDrawable(R.drawable.progress_normal); + progressDialog.setProgressDrawable(drawable); + progressDialog.setIndeterminate(false); + return progressDialog; + } + + */ +/** + * 简单菊花进度 + * + * @param mContext + * @param msg + * @return + *//* + + public static Dialog getSimpleProgressDialog(Context mContext, String msg) { + return getSimpleProgressDialog(mContext, msg, null); + } + + public static Dialog getSimpleProgressDialog(Context mContext, String msg, DialogInterface.OnCancelListener listener) { + Dialog dialog = new Dialog(mContext, R.style.TY_Progress_Dialog); + dialog.setContentView(R.layout.ty_progress_dialog_h); + if (!TextUtils.isEmpty(msg)) { + ((TextView) dialog.findViewById(R.id.progress_dialog_message)).setText(msg); + } + dialog.setCancelable(true); + dialog.setCanceledOnTouchOutside(false); + if (listener != null) { + dialog.setOnCancelListener(listener); + } + return dialog; + } + + +} +*/ diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/TuyaEzConfigActivity.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/TuyaEzConfigActivity.java new file mode 100644 index 0000000..7cf80d2 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/TuyaEzConfigActivity.java @@ -0,0 +1,430 @@ +package com.yonsz.z1.wifi.switcher; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.graphics.Color; +import android.graphics.Paint; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.wifi.ScanResult; +import android.net.wifi.SupplicantState; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.animation.AnimationUtils; +import android.view.animation.RotateAnimation; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.tuya.smart.android.common.utils.SafeHandler; +import com.tuya.smart.android.mvp.bean.Result; +import com.tuya.smart.sdk.bean.DeviceBean; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.BindDeviceEntity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entity5.LockKeyEntity; +import com.yonsz.z1.database.entity.entity5.TuyaDeviceEntity; +import com.yonsz.z1.device.deviceadd.SearchFailActivity; +import com.yonsz.z1.device.deviceadd.SearchWaitActivity; +import com.yonsz.z1.fragment.scene.CircularProgressBar; +import com.yonsz.z1.gateway.AddLCSafeCompleteActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.BIND_FAIL; +import static com.yonsz.z1.net.Constans.BIND_SUCCESS; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.TUYA_DEVICELISTOFTOKEN_FAIL; +import static com.yonsz.z1.net.Constans.TUYA_DEVICELISTOFTOKEN_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.NetWorkUrl.TUYA_DEVICELISTOFTOKEN; +import static com.yonsz.z1.net.NetWorkUrl.TUYA_GETDEVICETOKEN; + +public class TuyaEzConfigActivity extends BaseActivity { + private static final String TAG = "ApConfigActivity1111"; + protected EditText mSsidEditText; + protected EditText mPasswordEditText; + protected ImageView mStartButton; + private TitleView mTitleView; + private TextView apTopTv; + + //涂鸦插座 + private DeviceBindModel mModel; + private TextView mStatusTextView; + private SafeHandler mSafeHandler; + private Button mButtonNext; + private Button mButtonTryAgain; + private ImageView apStageIv; + private TextView apStageTv; + private String tuyaToken = ""; + private int sec = 0; + private CircularProgressBar circularProgressBar; + private TextView progressTv; + private LockKeyEntity lockKeyEntity; + private TuyaDeviceEntity tuyaDeviceEntity; + + public TuyaEzConfigActivity() { + mSafeHandler = new SafeHandler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + //网络错误异常情况 + case DeviceBindModel.WHAT_EC_GET_TOKEN_ERROR: //获取token失败 + ToastUtil.show(TuyaEzConfigActivity.this, "网络错误异常情况"); + apStageTv.setText("网络错误异常情况"); + break; + //ec激活失败 + case DeviceBindModel.WHAT_EC_ACTIVE_ERROR: + Log.i(TAG, "ec_active_error"); +// ToastUtil.show(TuyaEzConfigActivity.this, "ec激活失败"); +// apStageTv.setText("ec激活失败"); + break; + + //AP激活失败 + case DeviceBindModel.WHAT_AP_ACTIVE_ERROR: + Log.i(TAG, "ap_active_error"); +// ToastUtil.show(TuyaEzConfigActivity.this, "ec激活失败"); +// apStageTv.setText("ec激活失败"); + break; + + case DeviceBindModel.WHAT_EC_ACTIVE_SUCCESS: //EC激活成功 + case DeviceBindModel.WHAT_AP_ACTIVE_SUCCESS: //AP激活成功 + Log.i(TAG, "active_success"); + DeviceBean configDev = (DeviceBean) ((Result) msg.obj).getObj(); + ToastUtil.show(TuyaEzConfigActivity.this, "ec激活成功"); + apStageTv.setText("ec激活成功"); + break; + + case DeviceBindModel.WHAT_DEVICE_FIND: + Log.i(TAG, "device_find"); + ToastUtil.show(TuyaEzConfigActivity.this, "发现设备"); + apStageTv.setText("发现设备"); + break; + case DeviceBindModel.WHAT_BIND_DEVICE_SUCCESS: + Log.i(TAG, "bind_device_success"); + ToastUtil.show(TuyaEzConfigActivity.this, "绑定成功"); + apStageTv.setText("绑定成功"); + break; + } + } + }; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tuya_config); + + initView(); + initListener(); + + getDeviceToken(); + mModel = new DeviceBindModel(TuyaEzConfigActivity.this, mSafeHandler); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mModel.onDestroy(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.button_next: + Log.i(TAG, "ApConfigActivity onClick()" + "点击了"); + finish(); + break; + case R.id.button_try_again: + break; + } + } + + @Override + public void onResume() { + super.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + } + + private void initView() { + mStatusTextView = (TextView) findViewById(R.id.textView2); + Paint paint = mStatusTextView.getPaint(); + paint.setAntiAlias(true); + paint.setUnderlineText(true); + apStageIv = (ImageView) findViewById(R.id.iv_ap_stage); + apStageTv = (TextView) findViewById(R.id.tv_ap_stage); + progressTv = (TextView) findViewById(R.id.tv_progress_text); + mButtonNext = (Button) findViewById(R.id.button_next); + mButtonTryAgain = (Button) findViewById(R.id.button_try_again); + apTopTv = (TextView) findViewById(R.id.tv_ap_top); + apTopTv.setVisibility(View.INVISIBLE); + mSsidEditText = (EditText) findViewById(R.id.editText_hiflying_smartlinker_ssid); + mPasswordEditText = (EditText) findViewById(R.id.editText_hiflying_smartlinker_password); + mStartButton = (ImageView) findViewById(R.id.button_hiflying_smartlinker_start); + circularProgressBar = (CircularProgressBar) findViewById(R.id.progressbar_circle); + mTitleView = (TitleView) findViewById(R.id.title_wifi_connect); + mTitleView.setHead("连接设备"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + + } + + private void initListener() { + mButtonTryAgain.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + finish(); + } + }); + } + + + private void getDeviceToken() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + netWorkUtil.requestGetByAsy(TUYA_GETDEVICETOKEN, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getDeviceToken", "onSuccess()" + respone); + LockKeyEntity obj = JSON.parseObject(respone, LockKeyEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getDeviceListOfToken() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("token", lockKeyEntity.getData().getToken()); + netWorkUtil.requestGetByAsy(TUYA_DEVICELISTOFTOKEN, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getDeviceListOfToken", "onSuccess()" + respone); + TuyaDeviceEntity obj = JSON.parseObject(respone, TuyaDeviceEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(TUYA_DEVICELISTOFTOKEN_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(TUYA_DEVICELISTOFTOKEN_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(TUYA_DEVICELISTOFTOKEN_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private synchronized void subsetAdd() { + TuyaDeviceEntity.DataBean.SuccessDevicesBean successDevicesBean = new TuyaDeviceEntity.DataBean.SuccessDevicesBean(); + if (null != getIntent().getExtras().get("floor")) { + successDevicesBean.setFloor(getIntent().getExtras().get("floor").toString()); + } + successDevicesBean.setDeviceId(tuyaDeviceEntity.getData().getSuccessDevices().get(0).getId()); + String body = JSONObject.toJSONString(successDevicesBean); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", "4"); + map.put("deviceType", SWITCH_TAG); + map.put("subtype", getIntent().getExtras().get("plugType").toString()); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("addressId", getIntent().getExtras().get("deviceAddress").toString()); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initConfigDevice() { + mModel.setEC(getIntent().getExtras().get("ssid").toString(), getIntent().getExtras().get("password").toString(), tuyaToken); + startSearch(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + public void startSearch() { + mModel.start(); + startLoop(); + } + + private void startLoop() { + + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_SEC: + if (sec < 100) { + sec++; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + circularProgressBar.setProgress(sec); + progressTv.setText(sec + "%"); + if (sec > 10 && (sec % 5 == 0)) { + getDeviceListOfToken(); + } + } else if (sec == 100) { + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(TuyaEzConfigActivity.this, SearchFailActivity.class); + intent.putExtra("ssid", getIntent().getExtras().get("ssid").toString()); + intent.putExtra("password", getIntent().getExtras().get("password").toString()); + intent.putExtra("houseId", getIntent().getExtras().get("houseId").toString()); + if (null != getIntent().getExtras().get("addressTypeCode")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("addressTypeCode").toString()); + } else if (null != getIntent().getExtras().get("deviceAddress")) { + intent.putExtra("addressTypeCode", getIntent().getExtras().get("deviceAddress").toString()); + } + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("plugType", getIntent().getExtras().get("plugType").toString()); + intent.putExtra("ziId", ""); + startActivity(intent); + finish(); + } + break; + case BIND_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case BIND_SUCCESS: + BindDeviceEntity entity = (BindDeviceEntity) msg.obj; + // apConfigCb.setChecked(true); + apStageIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_search_complete)); + apStageTv.setText(R.string.complete); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + startActivity(new Intent(TuyaEzConfigActivity.this, SearchWaitActivity.class)); + finish(); + } + }, 1000); + break; + case FIND_DEVICES_SUCCESS: + lockKeyEntity = (LockKeyEntity) msg.obj; + tuyaToken = lockKeyEntity.getData().getDeviceTokenToApp(); + initConfigDevice(); + break; + case TUYA_DEVICELISTOFTOKEN_SUCCESS: + tuyaDeviceEntity = (TuyaDeviceEntity) msg.obj; + if (tuyaDeviceEntity.getData().getSuccessDevices().size() != 0) { + apStageIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_search_secondsteps)); + apStageTv.setText("注册设备到云端"); + sec = 101; + subsetAdd(); + } + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + BaseVersion5Entity obj = (BaseVersion5Entity) msg.obj; + apStageIv.setImageDrawable(getResources().getDrawable(R.drawable.icon_search_thirdsteps)); + apStageTv.setText("设备初始化"); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + Intent intent = new Intent(TuyaEzConfigActivity.this, AddLCSafeCompleteActivity.class); + intent.putExtra("deviceId", obj.getData().getId()); + intent.putExtra("deviceSN", ""); + intent.putExtra("deviceCode", ""); + intent.putExtra("subType", getIntent().getExtras().get("plugType").toString()); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("deviceModel", "4"); + intent.putExtra("addressId", getIntent().getExtras().get("deviceAddress").toString()); + startActivity(intent); + finish(); + break; + + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/ViewUtils.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/ViewUtils.java new file mode 100644 index 0000000..052088d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/ViewUtils.java @@ -0,0 +1,34 @@ +package com.yonsz.z1.wifi.switcher; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.widget.TextView; + +/** + * Created by letian on 16/5/14. + */ +public class ViewUtils { + + + public static void setTextViewDrawableLeft(Context context, TextView textView, int drawId) { + Drawable drawable; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + drawable = context.getResources().getDrawable(drawId, null); + } else { + drawable = context.getResources().getDrawable(drawId); + } + if (drawable != null) { + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + textView.setCompoundDrawables(drawable, null, null, null); + } + } + + public static int getColor(Context context, int color) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + return context.getColor(color); + } else { + return context.getResources().getColor(color); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/WifiSolidVersionActivity.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/WifiSolidVersionActivity.java new file mode 100644 index 0000000..7c748fd --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/WifiSolidVersionActivity.java @@ -0,0 +1,221 @@ +package com.yonsz.z1.wifi.switcher; + +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entitya2.SolidEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.HashMap; + +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.GET_NEWOTA_VER_FAIL; +import static com.yonsz.z1.net.Constans.GET_NEWOTA_VER_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_WIFI_UPGRADEINFO; + +/** + * Created by Administrator on 2018/4/2. + */ + +public class WifiSolidVersionActivity extends BaseActivity { + private TitleView mTitleView; + private RelativeLayout newVersion; + private TextView nowVersion; + private TextView newVersionName; + private TextView toUpadate; + private SolidEntity mSolidEntity; + private SolidEntity.ObjBean mViewDate; + private boolean isUpadate = false; + private LoadingDialog mLoadingDialog; + private String subVersion = ""; + private String deviceName, deviceModel, deviceType, deviceId, addressId; + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_wifi_solid_version); + initView(); + getUpgradeInfo(); + } + + @Override + public void onResume() { + super.onResume(); + } + + private void initView() { + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + deviceType = getIntent().getExtras().get("deviceType").toString(); + deviceId = getIntent().getExtras().get("deviceId").toString(); + addressId = getIntent().getExtras().get("deviceAddress").toString(); + mTitleView = (TitleView) findViewById(R.id.title_solid_version); + mTitleView.setHead("查看固件升级"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + newVersion = (RelativeLayout) findViewById(R.id.rl_new_version); + nowVersion = (TextView) findViewById(R.id.tv_now_version); + newVersionName = (TextView) findViewById(R.id.tv_new_version_name); + toUpadate = (TextView) findViewById(R.id.tv_to_update); + toUpadate.setOnClickListener(this); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case GET_NEWOTA_VER_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + mSolidEntity = (SolidEntity) msg.obj; + if (null != mSolidEntity.getObj()) { + setViewDate(mSolidEntity.getObj()); + } else { + newVersion.setVisibility(View.GONE); + } + break; + case GET_NEWOTA_VER_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void setViewDate(SolidEntity.ObjBean viewDate) { + mViewDate = viewDate; + if (mViewDate.getVersionName().compareTo(getIntent().getExtras().get("nowVersion").toString()) > 0 || getIntent().getExtras().get("isNewOtaFlag").equals("1")) { + newVersion.setVisibility(View.VISIBLE); + newVersionName.setText(mSolidEntity.getObj().getVersionName()); + toUpadate.setVisibility(View.VISIBLE); + } else { + newVersion.setVisibility(View.GONE); + toUpadate.setVisibility(View.GONE); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_to_update: + ConfirmDialog dialog1 = new ConfirmDialog(this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + confirmUpgrade(); + break; + } + } + }); + dialog1.setContent("是否升级?"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + break; + } + } + + private void getUpgradeInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestGetByAsy(SUBSET_WIFI_UPGRADEINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getUpgradeInfo", "onSuccess()" + respone); + /*BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + }*/ + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void confirmUpgrade() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + util.requestPostByAsynewApi(NetWorkUrl.SUBSET_WIFI_CONFIRMUPGRADE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateBlindEntityName", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = deviceName; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/WifiSwitcherDetailActivity.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/WifiSwitcherDetailActivity.java new file mode 100644 index 0000000..e189129 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/WifiSwitcherDetailActivity.java @@ -0,0 +1,549 @@ +package com.yonsz.z1.wifi.switcher; + +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.createfamily.floor.ChooseRoomInFloorActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.ChooseHomeEvent; +import com.yonsz.z1.database.entity.entity4.DeviceSimpleEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.new433.switcher.SwitcherModifyActivity; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.fragment.SwitchFragment; +import com.yonsz.z1.version5.ChooseA1OrUnbindActivity; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.view.TitleView; + +import java.io.Serializable; +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.net.Constans.CHECK_USER_BIND_FAIL; +import static com.yonsz.z1.net.Constans.DELLIGHT_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_FAIL; +import static com.yonsz.z1.net.Constans.FIND_DEVICES_SUCCESS; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_FAIL; +import static com.yonsz.z1.net.Constans.GET_USERDEVICES4_SIMPLEINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_INFO; +import static com.yonsz.z1.net.NetWorkUrl.UNBIND_DEVICE; + + +public class WifiSwitcherDetailActivity extends BaseActivity { + private TitleView mTitleView; + private TextView deleteDevice; + private TextView tv_wifi_name, tv_device_name, tv_device_version, tv_device_model, tv_device_number, tv_device_address, iv_user_modifyPw_mac, tv_bind_name, tv_is_bind; + private String deviceName, deviceModel, deviceType, deviceId, addressId; + private RelativeLayout rl_device_detail_top, rl_device_night_light, rl_device_storage, rl_device_wifi, rl_device_bind; + private BaseVersion5Entity obj; + private String plugType = ""; + private String bindZiId = "", gatewayName = ""; + + public void onEventMainThread(ChooseHomeEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + if (msg.equals("1") || msg.equals("3") || msg.equals("2") || msg.equals("5")) { + + } else { + tv_device_name.setText(msg); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_wifi_switcher); + initView(); + initListener(); + } + + + private void initView() { + bindZiId = getIntent().getExtras().get("ziId").toString(); + deviceName = getIntent().getExtras().get("deviceName").toString(); + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + deviceType = getIntent().getExtras().get("deviceType").toString(); + deviceId = getIntent().getExtras().get("deviceId").toString(); + addressId = getIntent().getExtras().get("addressId").toString(); + rl_device_detail_top = (RelativeLayout) findViewById(R.id.rl_device_detail_top); + rl_device_night_light = (RelativeLayout) findViewById(R.id.rl_device_night_light); + rl_device_storage = (RelativeLayout) findViewById(R.id.rl_device_storage); + rl_device_wifi = (RelativeLayout) findViewById(R.id.rl_device_wifi); + rl_device_bind = (RelativeLayout) findViewById(R.id.rl_device_bind); + iv_user_modifyPw_mac = (TextView) findViewById(R.id.iv_user_modifyPw_mac); + tv_device_name = (TextView) findViewById(R.id.tv_device_name); + tv_device_version = (TextView) findViewById(R.id.tv_device_version); + tv_device_model = (TextView) findViewById(R.id.tv_device_model); + tv_device_number = (TextView) findViewById(R.id.tv_device_number); + tv_wifi_name = (TextView) findViewById(R.id.tv_wifi_name); + tv_bind_name = (TextView) findViewById(R.id.tv_bind_name); + tv_is_bind = (TextView) findViewById(R.id.tv_is_bind); + deleteDevice = (TextView) findViewById(R.id.tv_delete_device); + tv_device_address = (TextView) findViewById(R.id.tv_device_address); + mTitleView = (TitleView) findViewById(R.id.title_device_detail); + mTitleView.setHead("设备详情"); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + Intent intent = new Intent(WifiSwitcherDetailActivity.this, SwitchFragment.class); + intent.putExtra("devicePosition", tv_device_address.getText().toString()); + intent.putExtra("addressId", AddressNameUtil.getAddressId(tv_device_address.getText().toString())); + intent.putExtra("gatewayName", gatewayName); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + tv_device_name.setText(deviceName); + tv_device_address.setText(AddressNameUtil.getAddressName(addressId)); + + getDeviceInfo(); + } + + @Override + public void onBackPressed() { + Intent intent = new Intent(WifiSwitcherDetailActivity.this, SwitchFragment.class); + intent.putExtra("devicePosition", tv_device_address.getText().toString()); + intent.putExtra("addressId", AddressNameUtil.getAddressId(tv_device_address.getText().toString())); + intent.putExtra("plugType", plugType); + intent.putExtra("plugName", tv_wifi_name.getText().toString()); + intent.putExtra("gatewayName", gatewayName); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + } + + private void setPlugName(String plugType) { + switch (plugType) { + case "0"://插座 + tv_wifi_name.setText(R.string.chazuo); + break; + case "1"://台灯 + tv_wifi_name.setText(R.string.tai_deng); + break; + case "2"://热水器(厨电) + tv_wifi_name.setText(R.string.chu_dian); + break; + case "3"://墙壁插座 + tv_wifi_name.setText(R.string.bi_cha); + break; + case "4"://热水壶 + tv_wifi_name.setText(R.string.reshui_hu); + break; + case "5"://取暖器 + tv_wifi_name.setText(R.string.qunuan_qi); + break; + case "6"://电蚊香 + tv_wifi_name.setText(R.string.dianwen_xiang); + break; + case "7"://紫外消毒灯 + tv_wifi_name.setText("紫外消毒灯"); + break; + default: + tv_wifi_name.setText(R.string.chazuo); + break; + } + } + + private void initListener() { + deleteDevice.setOnClickListener(this); + tv_device_address.setOnClickListener(this); + iv_user_modifyPw_mac.setOnClickListener(this); + rl_device_detail_top.setOnClickListener(this); + rl_device_night_light.setOnClickListener(this); + rl_device_storage.setOnClickListener(this); + rl_device_wifi.setOnClickListener(this); + rl_device_bind.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_delete_device: + ConfirmDialog dialog = new ConfirmDialog(this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: +// unBindDevice(); + subsetDelete(); + break; + } + } + }); + dialog.setContent("是否删除设备?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.tv_device_address: + Intent intent2; + if (!TextUtils.isEmpty(homeListEntity.getData().get(deviceNumListPosition).getFloorList())) { + intent2 = new Intent(this, ChooseRoomInFloorActivity.class); + intent2.putExtra("floorList", homeListEntity.getData().get(deviceNumListPosition).getFloorList()); + intent2.putExtra("houseTypeName", "房间选择"); + intent2.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent2.putExtra("ziId", ""); + intent2.putExtra("deviceType", SWITCH_TAG); + intent2.putExtra("deviceModel", deviceModel); + intent2.putExtra("addressId", addressId); + intent2.putExtra("deviceId", deviceId); + startActivityForResult(intent2, MODIFY_DEVICE_NAME); + } else { + intent2 = new Intent(WifiSwitcherDetailActivity.this, ModifyRoomActivity.class); + intent2.putExtra("ziId", ""); + intent2.putExtra("deviceType", deviceType); + intent2.putExtra("deviceModel", deviceModel); + intent2.putExtra("addressId", addressId); + intent2.putExtra("deviceId", deviceId); + startActivityForResult(intent2, MODIFY_DEVICE_NAME); + } + break; + case R.id.iv_user_modifyPw_mac: + ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setText(tv_device_number.getText()); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可 + cmb.getText();//获取粘贴信息 + Toast.makeText(WifiSwitcherDetailActivity.this, "复制成功!", Toast.LENGTH_SHORT).show(); + break; + case R.id.rl_device_detail_top: + + break; + case R.id.rl_device_night_light: + //恢复出厂设置 + ConfirmDialog dialog1 = new ConfirmDialog(this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + resetFactory(); + break; + } + } + }); + dialog1.setContent("恢复出厂设置会删除设备,后续需使用需重新添加设备,是否确定恢复出厂设置?"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + break; + case R.id.rl_device_storage: + //检查固件升级 + /*Intent intent1 = new Intent(WifiSwitcherDetailActivity.this, WifiSolidVersionActivity.class); + intent1.putExtra("deviceType", deviceType); + intent1.putExtra("deviceId", deviceId); + intent1.putExtra("deviceAddress", addressId); + intent1.putExtra("deviceModel", deviceModel); + intent1.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + startActivityForResult(intent1, MODIFY_DEVICE_NAME);*/ + ToastUtil.show(WifiSwitcherDetailActivity.this, "已经是最新固件"); + break; + case R.id.rl_device_wifi: + //修改设备类型 + Intent intent = new Intent(WifiSwitcherDetailActivity.this, SwitcherModifyActivity.class); + intent.putExtra("plugType", plugType); + intent.putExtra("switcherId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("deviceAddress", addressId); + intent.putExtra("largeClass", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + break; + case R.id.rl_device_bind: + getAideviceList(SWITCH_TAG); + /*Intent intent3 = new Intent(WifiSwitcherDetailActivity.this, SwitcherModifyActivity.class); + intent3.putExtra("plugType", plugType); + intent3.putExtra("switcherId", getIntent().getExtras().get("deviceId").toString()); + intent3.putExtra("deviceAddress", addressId); + intent3.putExtra("largeClass", getIntent().getExtras().get("deviceModel").toString()); + intent3.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + startActivityForResult(intent3, MODIFY_DEVICE_NAME);*/ + break; + } + } + + private void getAideviceList(String deviceTypeCode) { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("standardCodes", ""); + map.put("deviceType", deviceTypeCode); + util.requestGetByAsy(NetWorkUrl.DEIVCE_AIDEVICE_LIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + // Log.i("getZ1Info", "MainFragment4 onSuccess()" + respone); + ToastUtil.i("getAideviceList", respone); + DeviceSimpleEntity entity = JSON.parseObject(respone, DeviceSimpleEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_SUCCESS); + msg.obj = entity; + msg.arg1 = 0; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(GET_USERDEVICES4_SIMPLEINFO_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(); + msg.what = GET_USERDEVICES4_SIMPLEINFO_FAIL; + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", deviceModel); + map.put("deviceType", SWITCH_TAG); +// map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELLIGHT_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void unBindDevice() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + netWorkUtil.requestPostByAsynewApi(UNBIND_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("unBindDevice", "onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + finish(); + } else { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(CHECK_USER_BIND_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case FIND_DEVICES_SUCCESS: + obj = (BaseVersion5Entity) msg.obj; + tv_device_number.setText(obj.getData().getThirdDeviceId());//设备ID + tv_device_model.setText(obj.getData().getIp());//ip地址 + // tv_wifi_name.setText(obj.getData().getSubType());//设备类型 + tv_device_version.setText(""); + gatewayName = obj.getData().getGatewayName(); + tv_bind_name.setText(gatewayName); + bindZiId = obj.getData().getZiId(); + if (!bindZiId.contains("wifi")) { + tv_is_bind.setText("已绑定"); + } else { + tv_is_bind.setText("未绑定"); + } + plugType = obj.getData().getSubType(); + setPlugName(plugType); + break; + case CHECK_USER_BIND_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + case UPDATE_BLINDENTITY_NAME_SUCCESS: + /*String obj1 = (String) msg.obj; + deviceName = obj1; + tv_device_name.setText(deviceName);*/ + EventBus.getDefault().post( + new EventBusEntity("插座已删除")); + finish(); + break; + case DELLIGHT_ENTITY_SUCCESS: + EventBus.getDefault().post( + new EventBusEntity("插座已删除")); + finish(); + break; + case GET_USERDEVICES4_SIMPLEINFO_SUCCESS: + DeviceSimpleEntity simpleEntity = (DeviceSimpleEntity) msg.obj; + if (simpleEntity.getData().size() != 0) { + Intent intent = new Intent(WifiSwitcherDetailActivity.this, ChooseA1OrUnbindActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("dataBeanList", (Serializable) simpleEntity.getData()); + intent.putExtras(bundle); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("deviceType", SWITCH_TAG); + intent.putExtra("deviceModel", "4"); + intent.putExtra("deviceId", getIntent().getExtras().get("deviceId").toString()); + intent.putExtra("subType", plugType); + intent.putExtra("ziId", bindZiId); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + } else { + ToastUtil.show(this, "暂无可绑定的语音管家"); + } + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + String addressId = data.getExtras().get("addressId").toString(); + tv_device_address.setText(AddressNameUtil.getAddressName(addressId)); + // addressId = data.getExtras().get("addressId").toString(); + } + if (data != null && data.getExtras().get("plugType") != null) { + plugType = data.getExtras().get("plugType").toString(); + tv_wifi_name.setText(data.getExtras().get("plugName").toString()); + tv_device_name.setText(data.getExtras().get("plugName").toString()); + setPlugName(plugType); + } + if (data != null && data.getExtras().get("gateWayName") != null) { + getDeviceInfo(); + /*if (!data.getExtras().get("gateWayName").toString().equals(bindZiId)) { + bindZiId = data.getExtras().get("gateWayName").toString(); + getDeviceInfo(); + }*/ + } + break; + } + } + + private synchronized void getDeviceInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); +// map.put("ziId", bindZiId); + netWorkUtil.requestGetByAsy(SUBSET_INFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getDeviceInfo", "onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(FIND_DEVICES_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void resetFactory() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + util.requestPostByAsynewApi(NetWorkUrl.SUBSET_WIFI_RESETFACTORY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateBlindEntityName", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = deviceName; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationHandler.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationHandler.java new file mode 100644 index 0000000..eef4144 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationHandler.java @@ -0,0 +1,386 @@ +package com.yonsz.z1.wifi.switcher.circleprogress; + +import android.animation.TimeInterpolator; +import android.os.Handler; +import android.os.Message; +import android.os.SystemClock; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.DecelerateInterpolator; + +import java.lang.ref.WeakReference; + +public class AnimationHandler extends Handler { + + private final WeakReference mCircleViewWeakReference; + // Spin bar length in degree at start of animation + private float mSpinningBarLengthStart; + private long mAnimationStartTime; + private long mLengthChangeAnimationStartTime; + private TimeInterpolator mLengthChangeInterpolator = new DecelerateInterpolator(); + // The interpolator for value animations + private TimeInterpolator mInterpolator = new AccelerateDecelerateInterpolator(); + private double mLengthChangeAnimationDuration; + private long mFrameStartTime = 0; + + AnimationHandler(CircleProgressView circleView) { + super(circleView.getContext().getMainLooper()); + mCircleViewWeakReference = new WeakReference(circleView); + } + + + /** + * Sets interpolator for value animations. + * + * @param mInterpolator the m interpolator + */ + public void setValueInterpolator(TimeInterpolator mInterpolator) { + this.mInterpolator = mInterpolator; + } + + + /** + * Sets the interpolator for length changes of the bar. + * + * @param mLengthChangeInterpolator the m length change interpolator + */ + public void setLengthChangeInterpolator(TimeInterpolator mLengthChangeInterpolator) { + this.mLengthChangeInterpolator = mLengthChangeInterpolator; + } + + @Override + public void handleMessage(Message msg) { + CircleProgressView circleView = mCircleViewWeakReference.get(); + if (circleView == null) { + return; + } + AnimationMsg msgType = AnimationMsg.values()[msg.what]; + if (msgType == AnimationMsg.TICK) { + removeMessages(AnimationMsg.TICK.ordinal()); // necessary to remove concurrent ticks. + } + + //if (msgType != AnimationMsg.TICK) + // Log.d("JaGr", TAG + "LOG00099: State:" + circleView.mAnimationState + " Received: " + msgType); + mFrameStartTime = SystemClock.uptimeMillis(); + switch (circleView.mAnimationState) { + + + case IDLE: + switch (msgType) { + + case START_SPINNING: + enterSpinning(circleView); + + break; + case STOP_SPINNING: + //IGNORE not spinning + break; + case SET_VALUE: + setValue(msg, circleView); + break; + case SET_VALUE_ANIMATED: + + enterSetValueAnimated(msg, circleView); + break; + case TICK: + removeMessages(AnimationMsg.TICK.ordinal()); // remove old ticks + //IGNORE nothing to do + break; + } + break; + case SPINNING: + switch (msgType) { + + case START_SPINNING: + //IGNORE already spinning + break; + case STOP_SPINNING: + enterEndSpinning(circleView); + + break; + case SET_VALUE: + setValue(msg, circleView); + break; + case SET_VALUE_ANIMATED: + enterEndSpinningStartAnimating(circleView, msg); + break; + case TICK: + // set length + + float length_delta = circleView.mSpinningBarLengthCurrent - circleView.mSpinningBarLengthOrig; + float t = (float) ((System.currentTimeMillis() - mLengthChangeAnimationStartTime) + / mLengthChangeAnimationDuration); + t = t > 1.0f ? 1.0f : t; + float interpolatedRatio = mLengthChangeInterpolator.getInterpolation(t); + + if (Math.abs(length_delta) < 1) { + //spinner length is within bounds + circleView.mSpinningBarLengthCurrent = circleView.mSpinningBarLengthOrig; + } else if (circleView.mSpinningBarLengthCurrent < circleView.mSpinningBarLengthOrig) { + //spinner to short, --> grow + circleView.mSpinningBarLengthCurrent = mSpinningBarLengthStart + ((circleView.mSpinningBarLengthOrig - mSpinningBarLengthStart) * interpolatedRatio); + } else { + //spinner to long, --> shrink + circleView.mSpinningBarLengthCurrent = (mSpinningBarLengthStart - ((mSpinningBarLengthStart - circleView.mSpinningBarLengthOrig) * interpolatedRatio)); + } + + circleView.mCurrentSpinnerDegreeValue += circleView.mSpinSpeed; // spin speed value (in degree) + + if (circleView.mCurrentSpinnerDegreeValue > 360) { + circleView.mCurrentSpinnerDegreeValue = 0; + } + sendEmptyMessageDelayed(AnimationMsg.TICK.ordinal(), circleView.mFrameDelayMillis-(SystemClock.uptimeMillis() - mFrameStartTime)); + circleView.invalidate(); + break; + } + + break; + case END_SPINNING: + switch (msgType) { + + case START_SPINNING: + circleView.mAnimationState = AnimationState.SPINNING; + if (circleView.mAnimationStateChangedListener != null) { + circleView.mAnimationStateChangedListener.onAnimationStateChanged(circleView.mAnimationState); + } + sendEmptyMessageDelayed(AnimationMsg.TICK.ordinal(), circleView.mFrameDelayMillis-(SystemClock.uptimeMillis() - mFrameStartTime)); + + break; + case STOP_SPINNING: + //IGNORE already stopping + break; + case SET_VALUE: + setValue(msg, circleView); + break; + case SET_VALUE_ANIMATED: + enterEndSpinningStartAnimating(circleView, msg); + + break; + case TICK: + + float t = (float) ((System.currentTimeMillis() - mLengthChangeAnimationStartTime) + / mLengthChangeAnimationDuration); + t = t > 1.0f ? 1.0f : t; + float interpolatedRatio = mLengthChangeInterpolator.getInterpolation(t); + circleView.mSpinningBarLengthCurrent = (mSpinningBarLengthStart) * (1f - interpolatedRatio); + + circleView.mCurrentSpinnerDegreeValue += circleView.mSpinSpeed; // spin speed value (not in percent) + if (circleView.mSpinningBarLengthCurrent < 0.01f) { + //end here, spinning finished + circleView.mAnimationState = AnimationState.IDLE; + if (circleView.mAnimationStateChangedListener != null) { + circleView.mAnimationStateChangedListener.onAnimationStateChanged(circleView.mAnimationState); + } + } + sendEmptyMessageDelayed(AnimationMsg.TICK.ordinal(), circleView.mFrameDelayMillis-(SystemClock.uptimeMillis() - mFrameStartTime)); + circleView.invalidate(); + break; + } + + break; + case END_SPINNING_START_ANIMATING: + switch (msgType) { + + case START_SPINNING: + circleView.mDrawBarWhileSpinning = false; + enterSpinning(circleView); + + break; + case STOP_SPINNING: + //IGNORE already stopping + break; + case SET_VALUE: + circleView.mDrawBarWhileSpinning = false; + setValue(msg, circleView); + + break; + case SET_VALUE_ANIMATED: + circleView.mValueFrom = 0; // start from zero after spinning + circleView.mValueTo = ((float[]) msg.obj)[1]; + sendEmptyMessageDelayed(AnimationMsg.TICK.ordinal(), circleView.mFrameDelayMillis-(SystemClock.uptimeMillis() - mFrameStartTime)); + + break; + case TICK: + //shrink spinner till it has its original length + if (circleView.mSpinningBarLengthCurrent > circleView.mSpinningBarLengthOrig && !circleView.mDrawBarWhileSpinning) { + //spinner to long, --> shrink + float t = (float) ((System.currentTimeMillis() - mLengthChangeAnimationStartTime) + / mLengthChangeAnimationDuration); + t = t > 1.0f ? 1.0f : t; + float interpolatedRatio = mLengthChangeInterpolator.getInterpolation(t); + circleView.mSpinningBarLengthCurrent = (mSpinningBarLengthStart) * (1f - interpolatedRatio); + } + + // move spinner for spin speed value (not in percent) + circleView.mCurrentSpinnerDegreeValue += circleView.mSpinSpeed; + + //if the start of the spinner reaches zero, start animating the value + if (circleView.mCurrentSpinnerDegreeValue > 360 && !circleView.mDrawBarWhileSpinning) { + mAnimationStartTime = System.currentTimeMillis(); + circleView.mDrawBarWhileSpinning = true; + initReduceAnimation(circleView); + if (circleView.mAnimationStateChangedListener != null) { + circleView.mAnimationStateChangedListener.onAnimationStateChanged(AnimationState.START_ANIMATING_AFTER_SPINNING); + } + } + + //value is already animating, calc animation value and reduce spinner + if (circleView.mDrawBarWhileSpinning) { + circleView.mCurrentSpinnerDegreeValue = 360; + circleView.mSpinningBarLengthCurrent -= circleView.mSpinSpeed; + calcNextAnimationValue(circleView); + + float t = (float) ((System.currentTimeMillis() - mLengthChangeAnimationStartTime) + / mLengthChangeAnimationDuration); + t = t > 1.0f ? 1.0f : t; + float interpolatedRatio = mLengthChangeInterpolator.getInterpolation(t); + circleView.mSpinningBarLengthCurrent = (mSpinningBarLengthStart) * (1f - interpolatedRatio); + } + + //spinner is no longer visible switch state to animating + if (circleView.mSpinningBarLengthCurrent < 0.1) { + //spinning finished, start animating the current value + circleView.mAnimationState = AnimationState.ANIMATING; + if (circleView.mAnimationStateChangedListener != null) { + circleView.mAnimationStateChangedListener.onAnimationStateChanged(circleView.mAnimationState); + } + circleView.invalidate(); + circleView.mDrawBarWhileSpinning = false; + circleView.mSpinningBarLengthCurrent = circleView.mSpinningBarLengthOrig; + + } else { + circleView.invalidate(); + } + sendEmptyMessageDelayed(AnimationMsg.TICK.ordinal(), circleView.mFrameDelayMillis-(SystemClock.uptimeMillis() - mFrameStartTime)); + break; + } + + break; + case ANIMATING: + switch (msgType) { + + case START_SPINNING: + enterSpinning(circleView); + break; + case STOP_SPINNING: + //Ignore, not spinning + break; + case SET_VALUE: + setValue(msg, circleView); + break; + case SET_VALUE_ANIMATED: + mAnimationStartTime = System.currentTimeMillis(); + //restart animation from current value + circleView.mValueFrom = circleView.mCurrentValue; + circleView.mValueTo = ((float[]) msg.obj)[1]; + + break; + case TICK: + if (calcNextAnimationValue(circleView)) { + //animation finished + circleView.mAnimationState = AnimationState.IDLE; + if (circleView.mAnimationStateChangedListener != null) { + circleView.mAnimationStateChangedListener.onAnimationStateChanged(circleView.mAnimationState); + } + circleView.mCurrentValue = circleView.mValueTo; + } + sendEmptyMessageDelayed(AnimationMsg.TICK.ordinal(), circleView.mFrameDelayMillis-(SystemClock.uptimeMillis() - mFrameStartTime)); + circleView.invalidate(); + break; + } + + break; + + } + } + + private void enterSetValueAnimated(Message msg, CircleProgressView circleView) { + circleView.mValueFrom = ((float[]) msg.obj)[0]; + circleView.mValueTo = ((float[]) msg.obj)[1]; + mAnimationStartTime = System.currentTimeMillis(); + circleView.mAnimationState = AnimationState.ANIMATING; + if (circleView.mAnimationStateChangedListener != null) { + circleView.mAnimationStateChangedListener.onAnimationStateChanged(circleView.mAnimationState); + } + sendEmptyMessageDelayed(AnimationMsg.TICK.ordinal(), circleView.mFrameDelayMillis-(SystemClock.uptimeMillis() - mFrameStartTime)); + } + + private void enterEndSpinningStartAnimating(CircleProgressView circleView, Message msg) { + circleView.mAnimationState = AnimationState.END_SPINNING_START_ANIMATING; + if (circleView.mAnimationStateChangedListener != null) { + circleView.mAnimationStateChangedListener.onAnimationStateChanged(circleView.mAnimationState); + } + circleView.mValueFrom = 0; // start from zero after spinning + circleView.mValueTo = ((float[]) msg.obj)[1]; + + mLengthChangeAnimationStartTime = System.currentTimeMillis(); + mSpinningBarLengthStart = circleView.mSpinningBarLengthCurrent; + + sendEmptyMessageDelayed(AnimationMsg.TICK.ordinal(), circleView.mFrameDelayMillis-(SystemClock.uptimeMillis() - mFrameStartTime)); + + } + + private void enterEndSpinning(CircleProgressView circleView) { + circleView.mAnimationState = AnimationState.END_SPINNING; + initReduceAnimation(circleView); + if (circleView.mAnimationStateChangedListener != null) { + circleView.mAnimationStateChangedListener.onAnimationStateChanged(circleView.mAnimationState); + } + sendEmptyMessageDelayed(AnimationMsg.TICK.ordinal(), circleView.mFrameDelayMillis-(SystemClock.uptimeMillis() - mFrameStartTime)); + } + + private void initReduceAnimation(CircleProgressView circleView) { + float degreesTillFinish = circleView.mSpinningBarLengthCurrent; + float stepsTillFinish = degreesTillFinish / circleView.mSpinSpeed; + mLengthChangeAnimationDuration = (stepsTillFinish * circleView.mFrameDelayMillis) * 2f; + + mLengthChangeAnimationStartTime = System.currentTimeMillis(); + mSpinningBarLengthStart = circleView.mSpinningBarLengthCurrent; + } + + private void enterSpinning(CircleProgressView circleView) { + circleView.mAnimationState = AnimationState.SPINNING; + if (circleView.mAnimationStateChangedListener != null) { + circleView.mAnimationStateChangedListener.onAnimationStateChanged(circleView.mAnimationState); + } + circleView.mSpinningBarLengthCurrent = (360f / circleView.mMaxValue * circleView.mCurrentValue); + circleView.mCurrentSpinnerDegreeValue = (360f / circleView.mMaxValue * circleView.mCurrentValue); + mLengthChangeAnimationStartTime = System.currentTimeMillis(); + mSpinningBarLengthStart = circleView.mSpinningBarLengthCurrent; + + + //calc animation time + float stepsTillFinish = circleView.mSpinningBarLengthOrig / circleView.mSpinSpeed; + mLengthChangeAnimationDuration = ((stepsTillFinish * circleView.mFrameDelayMillis) * 2f); + + + sendEmptyMessageDelayed(AnimationMsg.TICK.ordinal(), circleView.mFrameDelayMillis-(SystemClock.uptimeMillis() - mFrameStartTime)); + } + + + /** + * * + * + * @param circleView the circle view + * @return false if animation still running, true if animation is finished. + */ + private boolean calcNextAnimationValue(CircleProgressView circleView) { + float t = (float) ((System.currentTimeMillis() - mAnimationStartTime) + / circleView.mAnimationDuration); + t = t > 1.0f ? 1.0f : t; + float interpolatedRatio = mInterpolator.getInterpolation(t); + + circleView.mCurrentValue = (circleView.mValueFrom + ((circleView.mValueTo - circleView.mValueFrom) * interpolatedRatio)); + + return t >= 1; + } + + private void setValue(Message msg, CircleProgressView circleView) { + circleView.mValueFrom = circleView.mValueTo; + circleView.mCurrentValue = circleView.mValueTo = ((float[]) msg.obj)[0]; + circleView.mAnimationState = AnimationState.IDLE; + if (circleView.mAnimationStateChangedListener != null) { + circleView.mAnimationStateChangedListener.onAnimationStateChanged(circleView.mAnimationState); + } + circleView.invalidate(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationMsg.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationMsg.java new file mode 100644 index 0000000..d989c78 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationMsg.java @@ -0,0 +1,11 @@ +package com.yonsz.z1.wifi.switcher.circleprogress; + +enum AnimationMsg { + + START_SPINNING, + STOP_SPINNING, + SET_VALUE, + SET_VALUE_ANIMATED, + TICK + +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationState.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationState.java new file mode 100644 index 0000000..472a982 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationState.java @@ -0,0 +1,11 @@ +package com.yonsz.z1.wifi.switcher.circleprogress; + +public enum AnimationState { + + IDLE, + SPINNING, + END_SPINNING, + END_SPINNING_START_ANIMATING, + START_ANIMATING_AFTER_SPINNING, ANIMATING + +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationStateChangedListener.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationStateChangedListener.java new file mode 100644 index 0000000..6adc3e0 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/AnimationStateChangedListener.java @@ -0,0 +1,11 @@ +package com.yonsz.z1.wifi.switcher.circleprogress; + +public interface AnimationStateChangedListener{ + + /** + * Call if animation state changes. + * This code runs in the animation loop, so keep your code short! + * @param _animationState + */ + void onAnimationStateChanged(AnimationState _animationState); +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/CircleProgressView.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/CircleProgressView.java new file mode 100644 index 0000000..4e796a4 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/CircleProgressView.java @@ -0,0 +1,1709 @@ +package com.yonsz.z1.wifi.switcher.circleprogress; + +import android.animation.TimeInterpolator; +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Paint.Style; +import android.graphics.PointF; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Shader; +import android.graphics.SweepGradient; +import android.graphics.Typeface; +import android.os.Build; +import android.os.Message; +import android.support.annotation.ColorInt; +import android.support.annotation.FloatRange; +import android.support.annotation.IntRange; +import android.support.annotation.NonNull; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import com.yonsz.z1.R; + +import java.text.DecimalFormat; + +/** + * An circle view, similar to Android's ProgressBar. + * Can be used in 'value mode' or 'spinning mode'. + *

+ * In spinning mode it can be used like a intermediate progress bar. + *

+ * In value mode it can be used as a progress bar or to visualize any other value. + * Setting a value is fully animated. There are also nice transitions from animating to value mode. + *

+ * Typical use case would be to load a new value. During the loading time set the CircleView to spinning. + * As soon as you get your value, just set it with {@link #setValueAnimated(float, long)}. + * + * @author Jakob Grabner, based on the Progress wheel of Todd Davies + * https://github.com/Todd-Davies/CircleView + *

+ * Licensed under the Creative Commons Attribution 3.0 license see: + * http://creativecommons.org/licenses/by/3.0/ + */ +@SuppressWarnings("unused") +public class CircleProgressView extends View { + + /** + * The log tag. + */ + private final static String TAG = "CircleView"; + private static final boolean DEBUG = false; + //---------------------------------- + //region members + + //value animation + float mCurrentValue = 42; + float mValueTo = 0; + float mValueFrom = 0; + float mMaxValue = 100; + + // spinner animation + float mSpinningBarLengthCurrent = 0; + float mSpinningBarLengthOrig = 42; + float mCurrentSpinnerDegreeValue = 0; + //Animation + //The amount of degree to move the bar by on each draw + float mSpinSpeed = 2.8f; + /** + * The animation duration in ms + */ + double mAnimationDuration = 900; + //The number of milliseconds to wait in between each draw + int mFrameDelayMillis = 10; + // helper for AnimationState.END_SPINNING_START_ANIMATING + boolean mDrawBarWhileSpinning; + //The animation handler containing the animation state machine. + AnimationHandler mAnimationHandler = new AnimationHandler(this); + //The current state of the animation state machine. + AnimationState mAnimationState = AnimationState.IDLE; + AnimationStateChangedListener mAnimationStateChangedListener; + protected int mLayoutHeight = 0; + protected int mLayoutWidth = 0; + private int mBarWidth = 40; + private int mRimWidth = 40; + private int mStartAngle = 270; + private float mContourSize = 1; + //Default text sizes + private int mUnitTextSize = 10; + private int mTextSize = 10; + //Text scale + private float mTextScale = 1; + private float mUnitScale = 1; + //Colors (with defaults) + private final int mBarColorStandard = 0xff009688; //stylish blue + private int mContourColor = 0xAA000000; + private int mSpinnerColor = mBarColorStandard; //stylish blue + private int mBackgroundCircleColor = 0x00000000; //transparent + private int mRimColor = 0xAA83d0c9; + private int mTextColor = 0xFF000000; + private int mUnitColor = 0xFF000000; + private boolean mIsAutoColorEnabled = false; + private int[] mBarColors = new int[]{ + mBarColorStandard //stylish blue + }; + //Caps + private Paint.Cap mBarStrokeCap = Paint.Cap.BUTT; + private Paint.Cap mSpinnerStrokeCap = Paint.Cap.BUTT; + //Paints + private Paint mBarPaint = new Paint(); + private Paint mBarSpinnerPaint = new Paint(); + private Paint mBackgroundCirclePaint = new Paint(); + private Paint mRimPaint = new Paint(); + private Paint mTextPaint = new Paint(); + private Paint mUnitTextPaint = new Paint(); + private Paint mContourPaint = new Paint(); + //Rectangles + protected RectF mCircleBounds = new RectF(); + protected RectF mInnerCircleBound = new RectF(); + protected PointF mCenter; + /** + * Maximum size of the text. + */ + protected RectF mOuterTextBounds = new RectF(); + /** + * Actual size of the text. + */ + protected RectF mActualTextBounds = new RectF(); + protected RectF mUnitBounds = new RectF(); + protected RectF mCircleOuterContour = new RectF(); + protected RectF mCircleInnerContour = new RectF(); + //Other + // The text to show + private String mText = ""; + private int mTextLength; + private String mUnit = ""; + private UnitPosition mUnitPosition = UnitPosition.RIGHT_TOP; + /** + * Indicates if the given text, the current percentage, or the current value should be shown. + */ + private TextMode mTextMode = TextMode.PERCENT; + private boolean mIsAutoTextSize; + private boolean mShowUnit = false; + //clipping + private Bitmap mClippingBitmap; + private Paint mMaskPaint; + /** + * Relative size of the unite string to the value string. + */ + private float mRelativeUniteSize = 1f; + private boolean mSeekModeEnabled = false; + private boolean mShowTextWhileSpinning = false; + private boolean mShowBlock = false; + private int mBlockCount = 18; + private float mBlockScale = 0.9f; + private float mBlockDegree = 360 / mBlockCount; + private float mBlockScaleDegree = mBlockDegree * mBlockScale; + + + private int mTouchEventCount; + private OnProgressChangedListener onProgressChangedListener; + private float previousProgressChangedValue; + + + private DecimalFormat decimalFormat = new DecimalFormat("0"); + + // Text typeface + private Typeface textTypeface; + private Typeface unitTextTypeface; + //endregion members + //---------------------------------- + + //---------------------------------- + //region getter/setter + public int[] getBarColors() { + return mBarColors; + } + + public Paint.Cap getBarStrokeCap() { + return mBarStrokeCap; + } + + /** + * @param _barStrokeCap The stroke cap of the progress bar. + */ + public void setBarStrokeCap(Paint.Cap _barStrokeCap) { + mBarStrokeCap = _barStrokeCap; + mBarPaint.setStrokeCap(_barStrokeCap); + } + + public int getBarWidth() { + return mBarWidth; + } + + /** + * @param barWidth The width of the progress bar in pixel. + */ + public void setBarWidth(@FloatRange(from = 0.0) int barWidth) { + this.mBarWidth = barWidth; + mBarPaint.setStrokeWidth(barWidth); + mBarSpinnerPaint.setStrokeWidth(barWidth); + } + + public int getBlockCount() { + return mBlockCount; + } + + public void setBlockCount(int blockCount) { + if (blockCount > 1) { + mShowBlock = true; + mBlockCount = blockCount; + mBlockDegree = 360.0f / blockCount; + mBlockScaleDegree = mBlockDegree * mBlockScale; + } else { + mShowBlock = false; + } + } + + public float getBlockScale() { + return mBlockScale; + } + + public void setBlockScale(@FloatRange(from = 0.0, to = 1) float blockScale) { + if (blockScale >= 0.0f && blockScale <= 1.0f) { + mBlockScale = blockScale; + mBlockScaleDegree = mBlockDegree * blockScale; + } + } + + public int getContourColor() { + return mContourColor; + } + + /** + * @param _contourColor The color of the background contour of the circle. + */ + public void setContourColor(@ColorInt int _contourColor) { + mContourColor = _contourColor; + mContourPaint.setColor(_contourColor); + } + + public float getContourSize() { + return mContourSize; + } + + /** + * @param _contourSize The size of the background contour of the circle. + */ + public void setContourSize(@FloatRange(from = 0.0) float _contourSize) { + mContourSize = _contourSize; + mContourPaint.setStrokeWidth(_contourSize); + } + + /** + * @return The number of ms to wait between each draw call. + */ + public int getDelayMillis() { + return mFrameDelayMillis; + } + + /** + * @param delayMillis The number of ms to wait between each draw call. + */ + public void setDelayMillis(int delayMillis) { + this.mFrameDelayMillis = delayMillis; + } + + + public int getFillColor() { + return mBackgroundCirclePaint.getColor(); + } + + public float getMaxValue() { + return mMaxValue; + } + + /** + * The max value of the progress bar. Used to calculate the percentage of the current value. + * The bar fills according to the percentage. The default value is 100. + * + * @param _maxValue The max value. + */ + public void setMaxValue(@FloatRange(from = 0) float _maxValue) { + mMaxValue = _maxValue; + } + + /** + * @return The relative size (scale factor) of the unit text size to the text size + */ + public float getRelativeUniteSize() { + return mRelativeUniteSize; + } + + public int getRimColor() { + return mRimColor; + } + + /** + * @param rimColor The color of the rim around the Circle. + */ + public void setRimColor(@ColorInt int rimColor) { + mRimColor = rimColor; + mRimPaint.setColor(rimColor); + } + + public Shader getRimShader() { + return mRimPaint.getShader(); + } + + public void setRimShader(Shader shader) { + this.mRimPaint.setShader(shader); + } + + public int getRimWidth() { + return mRimWidth; + } + + /** + * @param rimWidth The width in pixel of the rim around the circle + */ + public void setRimWidth(@IntRange(from = 0) int rimWidth) { + mRimWidth = rimWidth; + mRimPaint.setStrokeWidth(rimWidth); + } + + public float getSpinSpeed() { + return mSpinSpeed; + } + + /** + * The amount of degree to move the bar on every draw call. + * + * @param spinSpeed the speed of the spinner + */ + public void setSpinSpeed(float spinSpeed) { + mSpinSpeed = spinSpeed; + } + + public Paint.Cap getSpinnerStrokeCap() { + return mSpinnerStrokeCap; + } + + /** + * @param _spinnerStrokeCap The stroke cap of the progress bar in spinning mode. + */ + public void setSpinnerStrokeCap(Paint.Cap _spinnerStrokeCap) { + mSpinnerStrokeCap = _spinnerStrokeCap; + mBarSpinnerPaint.setStrokeCap(_spinnerStrokeCap); + } + + public int getStartAngle() { + return mStartAngle; + } + + public void setStartAngle(int _startAngle) { + // get a angle between 0 and 360 + mStartAngle = (int) normalizeAngle(_startAngle); + } + + public int calcTextColor() { + return mTextColor; + } + + /** + * Sets the text color. + * You also need to set {@link #setTextColorAuto(boolean)} to false to see your color. + * + * @param textColor the color + */ + public void setTextColor(@ColorInt int textColor) { + mTextColor = textColor; + mTextPaint.setColor(textColor); + } + + /** + * @return The scale value + */ + public float getTextScale() { + return mTextScale; + } + + /** + * Scale factor for main text in the center of the circle view. + * Only used if auto text size is enabled. + * + * @param _textScale The scale value. + */ + public void setTextScale(@FloatRange(from = 0.0) float _textScale) { + mTextScale = _textScale; + } + + public int getTextSize() { + return mTextSize; + } + + /** + * Text size of the text string. Disables auto text size + * If auto text size is on, use {@link #setTextScale(float)} to scale textSize. + * + * @param textSize The text size of the unit. + */ + public void setTextSize(@IntRange(from = 0) int textSize) { + this.mTextPaint.setTextSize(textSize); + mTextSize = textSize; + mIsAutoTextSize = false; + } + + public String getUnit() { + return mUnit; + } + + /** + * @param _unit The unit to show next to the current value. + * You also need to set {@link #setUnitVisible(boolean)} to true. + */ + public void setUnit(String _unit) { + if (_unit == null) { + mUnit = ""; + } else { + mUnit = _unit; + } + invalidate(); + } + + /** + * @return The scale value + */ + public float getUnitScale() { + return mUnitScale; + } + + /** + * Scale factor for unit text next to the main text. + * Only used if auto text size is enabled. + * + * @param _unitScale The scale value. + */ + public void setUnitScale(@FloatRange(from = 0.0) float _unitScale) { + mUnitScale = _unitScale; + } + + public int getUnitSize() { + return mUnitTextSize; + } + + /** + * Text size of the unit string. Only used if text size is also set. (So automatic text size + * calculation is off. see {@link #setTextSize(int)}). + * If auto text size is on, use {@link #setUnitScale(float)} to scale unit size. + * + * @param unitSize The text size of the unit. + */ + public void setUnitSize(@IntRange(from = 0) int unitSize) { + mUnitTextSize = unitSize; + mUnitTextPaint.setTextSize(unitSize); + } + + /** + * @return true if auto text size is enabled, false otherwise. + */ + public boolean isAutoTextSize() { + return mIsAutoTextSize; + } + + /** + * @param _autoTextSize true to enable auto text size calculation. + */ + public void setAutoTextSize(boolean _autoTextSize) { + mIsAutoTextSize = _autoTextSize; + } + + public boolean isSeekModeEnabled() { + return mSeekModeEnabled; + } + + public void setSeekModeEnabled(boolean _seekModeEnabled) { + mSeekModeEnabled = _seekModeEnabled; + } + + public boolean isShowBlock() { + return mShowBlock; + } + + public void setShowBlock(boolean showBlock) { + mShowBlock = showBlock; + } + + public boolean isShowTextWhileSpinning() { + return mShowTextWhileSpinning; + } + + /** + * @param shouldDrawTextWhileSpinning True to show text in spinning mode, false to hide it. + */ + public void setShowTextWhileSpinning(boolean shouldDrawTextWhileSpinning) { + mShowTextWhileSpinning = shouldDrawTextWhileSpinning; + } + + public boolean isUnitVisible() { + return mShowUnit; + } + + /** + * @param _showUnit True to show unit, false to hide it. + */ + public void setUnitVisible(boolean _showUnit) { + if (_showUnit != mShowUnit) { + mShowUnit = _showUnit; + triggerReCalcTextSizesAndPositions(); // triggers recalculating text sizes + } + } + + /** + * Sets the color of progress bar. + * + * @param barColors One or more colors. If more than one color is specified, a gradient of the colors is used. + */ + public void setBarColor(@ColorInt int... barColors) { + this.mBarColors = barColors; + if (barColors.length > 1) { + mBarPaint.setShader(new SweepGradient(mCircleBounds.centerX(), mCircleBounds.centerY(), barColors, null)); + Matrix matrix = new Matrix(); + mBarPaint.getShader().getLocalMatrix(matrix); + + matrix.postTranslate(-mCircleBounds.centerX(), -mCircleBounds.centerY()); + matrix.postRotate(mStartAngle); + matrix.postTranslate(mCircleBounds.centerX(), mCircleBounds.centerY()); + mBarPaint.getShader().setLocalMatrix(matrix); + mBarPaint.setColor(barColors[0]); + } else if (barColors.length == 1) { + mBarPaint.setColor(barColors[0]); + mBarPaint.setShader(null); + } else { + mBarPaint.setColor(mBarColorStandard); + mBarPaint.setShader(null); + } + } + + /** + * @param _clippingBitmap The bitmap used for clipping. Set to null to disable clipping. + * Default: No clipping. + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public void setClippingBitmap(Bitmap _clippingBitmap) { + + if (getWidth() > 0 && getHeight() > 0) { + mClippingBitmap = Bitmap.createScaledBitmap(_clippingBitmap, getWidth(), getHeight(), false); + } else { + mClippingBitmap = _clippingBitmap; + } + if (mClippingBitmap == null) { + // enable HW acceleration + setLayerType(View.LAYER_TYPE_HARDWARE, null); + } else { + // disable HW acceleration + setLayerType(View.LAYER_TYPE_SOFTWARE, null); + } + } + + /** + * Sets the background color of the entire Progress Circle. + * Set the color to 0x00000000 (Color.TRANSPARENT) to hide it. + * + * @param circleColor the color. + */ + public void setFillCircleColor(@ColorInt int circleColor) { + mBackgroundCircleColor = circleColor; + mBackgroundCirclePaint.setColor(circleColor); + } + + public void setOnAnimationStateChangedListener(AnimationStateChangedListener _animationStateChangedListener) { + mAnimationStateChangedListener = _animationStateChangedListener; + } + + public void setOnProgressChangedListener(OnProgressChangedListener listener) { + onProgressChangedListener = listener; + } + + /** + * @param _color The color of progress the bar in spinning mode. + */ + public void setSpinBarColor(@ColorInt int _color) { + mSpinnerColor = _color; + mBarSpinnerPaint.setColor(mSpinnerColor); + } + + /** + * Length of spinning bar in degree. + * + * @param barLength length in degree + */ + public void setSpinningBarLength(@FloatRange(from = 0.0) float barLength) { + this.mSpinningBarLengthCurrent = mSpinningBarLengthOrig = barLength; + } + + /** + * Set the text in the middle of the circle view. + * You need also set the {@link TextMode} to TextMode.TEXT to see the text. + * + * @param text The text to show + */ + public void setText(String text) { + mText = text != null ? text : ""; + invalidate(); + } + + /** + * If auto text color is enabled, the text color and the unit color is always the same as the rim color. + * This is useful if the rim has multiple colors (color gradient), than the text will always have + * the color of the tip of the rim. + * + * @param isEnabled true to enable, false to disable + */ + public void setTextColorAuto(boolean isEnabled) { + mIsAutoColorEnabled = isEnabled; + } + + /** + * Sets the auto text mode. + * + * @param _textValue The mode + */ + public void setTextMode(TextMode _textValue) { + mTextMode = _textValue; + } + + /** + * @param typeface The typeface to use for the text + */ + public void setTextTypeface(Typeface typeface) { + mTextPaint.setTypeface(typeface); + } + + /** + * Sets the unit text color. + * Also sets {@link #setTextColorAuto(boolean)} to false + * + * @param unitColor The color. + */ + public void setUnitColor(@ColorInt int unitColor) { + mUnitColor = unitColor; + mUnitTextPaint.setColor(unitColor); + mIsAutoColorEnabled = false; + } + + public void setUnitPosition(UnitPosition _unitPosition) { + mUnitPosition = _unitPosition; + triggerReCalcTextSizesAndPositions(); // triggers recalculating text sizes + } + + /** + * @param typeface The typeface to use for the unit text + */ + public void setUnitTextTypeface(Typeface typeface) { + mUnitTextPaint.setTypeface(typeface); + } + + /** + * @param _relativeUniteSize The relative scale factor of the unit text size to the text size. + * Only useful for autotextsize=true; Effects both, the unit text size and the text size. + */ + public void setUnitToTextScale(@FloatRange(from = 0.0) float _relativeUniteSize) { + mRelativeUniteSize = _relativeUniteSize; + triggerReCalcTextSizesAndPositions(); + } + + /** + * Set the value of the circle view without an animation. + * Stops any currently active animations. + * + * @param _value The value. + */ + public void setValue(float _value) { + Message msg = new Message(); + msg.what = AnimationMsg.SET_VALUE.ordinal(); + msg.obj = new float[]{_value, _value}; + mAnimationHandler.sendMessage(msg); + triggerOnProgressChanged(_value); + } + + /** + * Sets the value of the circle view with an animation. + * The current value is used as the start value of the animation + * + * @param _valueTo value after animation + */ + public void setValueAnimated(float _valueTo) { + setValueAnimated(_valueTo, 1200); + } + + /** + * Sets the value of the circle view with an animation. + * The current value is used as the start value of the animation + * + * @param _valueTo value after animation + * @param _animationDuration the duration of the animation in milliseconds. + */ + public void setValueAnimated(float _valueTo, long _animationDuration) { + setValueAnimated(mCurrentValue, _valueTo, _animationDuration); + } + + /** + * Sets the value of the circle view with an animation. + * + * @param _valueFrom start value of the animation + * @param _valueTo value after animation + * @param _animationDuration the duration of the animation in milliseconds + */ + public void setValueAnimated(float _valueFrom, float _valueTo, long _animationDuration) { + mAnimationDuration = _animationDuration; + Message msg = new Message(); + msg.what = AnimationMsg.SET_VALUE_ANIMATED.ordinal(); + msg.obj = new float[]{_valueFrom, _valueTo}; + mAnimationHandler.sendMessage(msg); + triggerOnProgressChanged(_valueTo); + } + + public DecimalFormat getDecimalFormat() { + return decimalFormat; + } + + public void setDecimalFormat(DecimalFormat decimalFormat) { + if (decimalFormat == null) { + throw new IllegalArgumentException("decimalFormat must not be null!"); + } + this.decimalFormat = decimalFormat; + } + + /** + * Sets interpolator for value animations. + * + * @param interpolator the interpolator + */ + public void setValueInterpolator(TimeInterpolator interpolator) { + mAnimationHandler.setValueInterpolator(interpolator); + } + + + /** + * Sets the interpolator for length changes of the bar. + * + * @param interpolator the interpolator + */ + public void setLengthChangeInterpolator(TimeInterpolator interpolator) { + mAnimationHandler.setLengthChangeInterpolator(interpolator); + } + + //endregion getter/setter + //---------------------------------- + + /** + * The constructor for the CircleView + * + * @param context The context. + * @param attrs The attributes. + */ + public CircleProgressView(Context context, AttributeSet attrs) { + super(context, attrs); + + parseAttributes(context.obtainStyledAttributes(attrs, + R.styleable.CircleProgressView)); + + if (!isInEditMode()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + setLayerType(View.LAYER_TYPE_HARDWARE, null); + } + } + + mMaskPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mMaskPaint.setFilterBitmap(false); + mMaskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); + setupPaints(); + } + + /** + * Parse the attributes passed to the view from the XML + * + * @param a the attributes to parse + */ + private void parseAttributes(TypedArray a) { + setBarWidth((int) a.getDimension(R.styleable.CircleProgressView_cpv_barWidth, + mBarWidth)); + + setRimWidth((int) a.getDimension(R.styleable.CircleProgressView_cpv_rimWidth, + mRimWidth)); + + setSpinSpeed((int) a.getFloat(R.styleable.CircleProgressView_cpv_spinSpeed, + mSpinSpeed)); + + float value = a.getFloat(R.styleable.CircleProgressView_cpv_value, mCurrentValue); + setValue(value); + mCurrentValue = value; + + if (a.hasValue(R.styleable.CircleProgressView_cpv_barColor) && a.hasValue(R.styleable.CircleProgressView_cpv_barColor1) && a.hasValue(R.styleable.CircleProgressView_cpv_barColor2) && a.hasValue(R.styleable.CircleProgressView_cpv_barColor3)) { + mBarColors = new int[]{a.getColor(R.styleable.CircleProgressView_cpv_barColor, mBarColorStandard), a.getColor(R.styleable.CircleProgressView_cpv_barColor1, mBarColorStandard), a.getColor(R.styleable.CircleProgressView_cpv_barColor2, mBarColorStandard), a.getColor(R.styleable.CircleProgressView_cpv_barColor3, mBarColorStandard)}; + + } else if (a.hasValue(R.styleable.CircleProgressView_cpv_barColor) && a.hasValue(R.styleable.CircleProgressView_cpv_barColor1) && a.hasValue(R.styleable.CircleProgressView_cpv_barColor2)) { + + mBarColors = new int[]{a.getColor(R.styleable.CircleProgressView_cpv_barColor, mBarColorStandard), a.getColor(R.styleable.CircleProgressView_cpv_barColor1, mBarColorStandard), a.getColor(R.styleable.CircleProgressView_cpv_barColor2, mBarColorStandard)}; + + } else if (a.hasValue(R.styleable.CircleProgressView_cpv_barColor) && a.hasValue(R.styleable.CircleProgressView_cpv_barColor1)) { + + mBarColors = new int[]{a.getColor(R.styleable.CircleProgressView_cpv_barColor, mBarColorStandard), a.getColor(R.styleable.CircleProgressView_cpv_barColor1, mBarColorStandard)}; + + } else { + mBarColors = new int[]{a.getColor(R.styleable.CircleProgressView_cpv_barColor, mBarColorStandard), a.getColor(R.styleable.CircleProgressView_cpv_barColor, mBarColorStandard)}; + } + + setSpinBarColor(a.getColor(R.styleable.CircleProgressView_cpv_spinColor, mSpinnerColor)); + + + setSpinningBarLength(a.getFloat(R.styleable.CircleProgressView_cpv_spinBarLength, + mSpinningBarLengthOrig)); + + + if (a.hasValue(R.styleable.CircleProgressView_cpv_textSize)) { + setTextSize((int) a.getDimension(R.styleable.CircleProgressView_cpv_textSize, mTextSize)); + } + if (a.hasValue(R.styleable.CircleProgressView_cpv_unitSize)) { + setUnitSize((int) a.getDimension(R.styleable.CircleProgressView_cpv_unitSize, mUnitTextSize)); + } + if (a.hasValue(R.styleable.CircleProgressView_cpv_textColor)) { + setTextColor(a.getColor(R.styleable.CircleProgressView_cpv_textColor, mTextColor)); + } + if (a.hasValue(R.styleable.CircleProgressView_cpv_unitColor)) { + setUnitColor(a.getColor(R.styleable.CircleProgressView_cpv_unitColor, mUnitColor)); + } + if (a.hasValue(R.styleable.CircleProgressView_cpv_autoTextColor)) { + setTextColorAuto(a.getBoolean(R.styleable.CircleProgressView_cpv_autoTextColor, mIsAutoColorEnabled)); + } + if (a.hasValue(R.styleable.CircleProgressView_cpv_autoTextSize)) { + setAutoTextSize(a.getBoolean(R.styleable.CircleProgressView_cpv_autoTextSize, mIsAutoTextSize)); + } + if (a.hasValue(R.styleable.CircleProgressView_cpv_textMode)) { + setTextMode(TextMode.values()[a.getInt(R.styleable.CircleProgressView_cpv_textMode, 0)]); + } + if (a.hasValue(R.styleable.CircleProgressView_cpv_unitPosition)) { + setUnitPosition(UnitPosition.values()[a.getInt(R.styleable.CircleProgressView_cpv_unitPosition, 3)]); + } + //if the mText is empty, show current percentage value + if (a.hasValue(R.styleable.CircleProgressView_cpv_text)) { + setText(a.getString(R.styleable.CircleProgressView_cpv_text)); + } + + setUnitToTextScale(a.getFloat(R.styleable.CircleProgressView_cpv_unitToTextScale, 1f)); + + setRimColor(a.getColor(R.styleable.CircleProgressView_cpv_rimColor, + mRimColor)); + + setFillCircleColor(a.getColor(R.styleable.CircleProgressView_cpv_fillColor, + mBackgroundCircleColor)); + + setContourColor(a.getColor(R.styleable.CircleProgressView_cpv_contourColor, mContourColor)); + setContourSize(a.getDimension(R.styleable.CircleProgressView_cpv_contourSize, mContourSize)); + + setMaxValue(a.getFloat(R.styleable.CircleProgressView_cpv_maxValue, mMaxValue)); + + setUnit(a.getString(R.styleable.CircleProgressView_cpv_unit)); + setUnitVisible(a.getBoolean(R.styleable.CircleProgressView_cpv_showUnit, mShowUnit)); + + setTextScale(a.getFloat(R.styleable.CircleProgressView_cpv_textScale, mTextScale)); + setUnitScale(a.getFloat(R.styleable.CircleProgressView_cpv_unitScale, mUnitScale)); + + setSeekModeEnabled(a.getBoolean(R.styleable.CircleProgressView_cpv_seekMode, mSeekModeEnabled)); + + setStartAngle(a.getInt(R.styleable.CircleProgressView_cpv_startAngle, mStartAngle)); + + setShowTextWhileSpinning(a.getBoolean(R.styleable.CircleProgressView_cpv_showTextInSpinningMode, mShowTextWhileSpinning)); + + if (a.hasValue(R.styleable.CircleProgressView_cpv_blockCount)) { + setBlockCount(a.getInt(R.styleable.CircleProgressView_cpv_blockCount, 1)); + setBlockScale(a.getFloat(R.styleable.CircleProgressView_cpv_blockScale, 0.9f)); + } + + + if (a.hasValue(R.styleable.CircleProgressView_cpv_textTypeface)) { + try { + textTypeface = Typeface.createFromAsset(getContext().getAssets(), a.getString(R.styleable.CircleProgressView_cpv_textTypeface)); + } catch (Exception exception) { + // error while trying to inflate typeface (is the path set correctly?) + } + } + if (a.hasValue(R.styleable.CircleProgressView_cpv_unitTypeface)) { + try { + unitTextTypeface = Typeface.createFromAsset(getContext().getAssets(), a.getString(R.styleable.CircleProgressView_cpv_unitTypeface)); + } catch (Exception exception) { + // error while trying to inflate typeface (is the path set correctly?) + } + } + + if (a.hasValue(R.styleable.CircleProgressView_cpv_decimalFormat)) { + try { + String pattern = a.getString(R.styleable.CircleProgressView_cpv_decimalFormat); + if (pattern != null) { + decimalFormat = new DecimalFormat(pattern); + } + + } catch (Exception exception) { + Log.w(TAG, exception.getMessage()); + } + } + + + // Recycle + a.recycle(); + } + + /* + * When this is called, make the view square. + * From: http://www.jayway.com/2012/12/12/creating-custom-android-views-part-4-measuring-and-how-to-force-a-view-to-be-square/ + * + */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + // The first thing that happen is that we call the superclass + // implementation of onMeasure. The reason for that is that measuring + // can be quite a complex process and calling the super method is a + // convenient way to get most of this complexity handled. + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + // We can’t use getWidth() or getHeight() here. During the measuring + // pass the view has not gotten its final size yet (this happens first + // at the start of the layout pass) so we have to use getMeasuredWidth() + // and getMeasuredHeight(). + int size; + int width = getMeasuredWidth(); + int height = getMeasuredHeight(); + int widthWithoutPadding = width - getPaddingLeft() - getPaddingRight(); + int heightWithoutPadding = height - getPaddingTop() - getPaddingBottom(); + + + // Finally we have some simple logic that calculates the size of the view + // and calls setMeasuredDimension() to set that size. + // Before we compare the width and height of the view, we remove the padding, + // and when we set the dimension we add it back again. Now the actual content + // of the view will be square, but, depending on the padding, the total dimensions + // of the view might not be. + if (widthWithoutPadding > heightWithoutPadding) { + size = heightWithoutPadding; + } else { + size = widthWithoutPadding; + } + + // If you override onMeasure() you have to call setMeasuredDimension(). + // This is how you report back the measured size. If you don’t call + // setMeasuredDimension() the parent will throw an exception and your + // application will crash. + // We are calling the onMeasure() method of the superclass so we don’t + // actually need to call setMeasuredDimension() since that takes care + // of that. However, the purpose with overriding onMeasure() was to + // change the default behaviour and to do that we need to call + // setMeasuredDimension() with our own values. + setMeasuredDimension(size + getPaddingLeft() + getPaddingRight(), size + getPaddingTop() + getPaddingBottom()); + } + + /** + * Use onSizeChanged instead of onAttachedToWindow to get the dimensions of the view, + * because this method is called after measuring the dimensions of MATCH_PARENT and WRAP_CONTENT. + * Use this dimensions to setup the bounds and paints. + */ + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + + // Share the dimensions + mLayoutWidth = w; + mLayoutHeight = h; + + setupBounds(); + setupBarPaint(); + + if (mClippingBitmap != null) { + mClippingBitmap = Bitmap.createScaledBitmap(mClippingBitmap, getWidth(), getHeight(), false); + } + + invalidate(); + } + + //---------------------------------- + // region helper + private float calcTextSizeForCircle(String _text, Paint _textPaint, RectF _circleBounds) { + + //get mActualTextBounds bounds + RectF innerCircleBounds = getInnerCircleRect(_circleBounds); + return calcTextSizeForRect(_text, _textPaint, innerCircleBounds); + + } + + private RectF getInnerCircleRect(RectF _circleBounds) { + + double circleWidth = +_circleBounds.width() - (Math.max(mBarWidth, mRimWidth)) - (mContourSize * 2); + double width = ((circleWidth / 2d) * Math.sqrt(2d)); + float widthDelta = (_circleBounds.width() - (float) width) / 2f; + + float scaleX = 1; + float scaleY = 1; + if (isUnitVisible()) { + switch (mUnitPosition) { + case TOP: + case BOTTOM: + scaleX = 1.1f; // scaleX square to rectangle, so the longer text with unit fits better + scaleY = 0.88f; + break; + case LEFT_TOP: + case RIGHT_TOP: + case LEFT_BOTTOM: + case RIGHT_BOTTOM: + scaleX = 0.77f; // scaleX square to rectangle, so the longer text with unit fits better + scaleY = 1.33f; + break; + } + + } + return new RectF(_circleBounds.left + (widthDelta * scaleX), _circleBounds.top + (widthDelta * scaleY), _circleBounds.right - (widthDelta * scaleX), _circleBounds.bottom - (widthDelta * scaleY)); + + } + + private static float calcTextSizeForRect(String _text, Paint _textPaint, RectF _rectBounds) { + + Matrix matrix = new Matrix(); + Rect textBoundsTmp = new Rect(); + //replace ones because for some fonts the 1 takes less space which causes issues + String text = _text.replace('1', '0'); + + //get current mText bounds + _textPaint.getTextBounds(text, 0, text.length(), textBoundsTmp); + + RectF textBoundsTmpF = new RectF(textBoundsTmp); + + matrix.setRectToRect(textBoundsTmpF, _rectBounds, Matrix.ScaleToFit.CENTER); + float values[] = new float[9]; + matrix.getValues(values); + return _textPaint.getTextSize() * values[Matrix.MSCALE_X]; + + + } + + + private void triggerOnProgressChanged(float value) { + if (onProgressChangedListener != null && value != previousProgressChangedValue) { + onProgressChangedListener.onProgressChanged(value); + previousProgressChangedValue = value; + } + } + + private void triggerReCalcTextSizesAndPositions() { + mTextLength = -1; + mOuterTextBounds = getInnerCircleRect(mCircleBounds); + invalidate(); + } + + /** + * @param _angle The angle in degree to normalize + * @return the angle between 0 (EAST) and 360 + */ + private static float normalizeAngle(float _angle) { + return (((_angle % 360) + 360) % 360); + } + + /** + * Calculates the angle from centerPt to targetPt in degrees. + * The return should range from [0,360), rotating CLOCKWISE, + * 0 and 360 degrees represents EAST, + * 90 degrees represents SOUTH, etc... + *

+ * Assumes all points are in the same coordinate space. If they are not, + * you will need to call SwingUtilities.convertPointToScreen or equivalent + * on all arguments before passing them to this function. + * + * @param centerPt Point we are rotating around. + * @param targetPt Point we want to calculate the angle to. + * @return angle in degrees. This is the angle from centerPt to targetPt. + */ + public static double calcRotationAngleInDegrees(PointF centerPt, PointF targetPt) { + // calculate the angle theta from the deltaY and deltaX values + // (atan2 returns radians values from [-PI,PI]) + // 0 currently points EAST. + // NOTE: By preserving Y and X param order to atan2, we are expecting + // a CLOCKWISE angle direction. + double theta = Math.atan2(targetPt.y - centerPt.y, targetPt.x - centerPt.x); + + // rotate the theta angle clockwise by 90 degrees + // (this makes 0 point NORTH) + // NOTE: adding to an angle rotates it clockwise. + // subtracting would rotate it counter-clockwise +// theta += Math.PI/2.0; + + // convert from radians to degrees + // this will give you an angle from [0->270],[-180,0] + double angle = Math.toDegrees(theta); + + // convert to positive range [0-360) + // since we want to prevent negative angles, adjust them now. + // we can assume that atan2 will not return a negative value + // greater than one partial rotation + if (angle < 0) { + angle += 360; + } + + return angle; + } + + private int calcTextColor(double value) { + if (mBarColors.length > 1) { + double percent = 1f / getMaxValue() * value; + int low = (int) Math.floor((mBarColors.length - 1) * percent); + int high = low + 1; + if (low < 0) { + low = 0; + high = 1; + } else if (high >= mBarColors.length) { + low = mBarColors.length - 2; + high = mBarColors.length - 1; + } + return ColorUtils.getRGBGradient(mBarColors[low], mBarColors[high], (float) (1 - (((mBarColors.length - 1) * percent) % 1d))); + } else if (mBarColors.length == 1) { + return mBarColors[0]; + } else { + return Color.BLACK; + } + } + + private void setTextSizeAndTextBoundsWithAutoTextSize(float unitGapWidthHalf, float unitWidth, float unitGapHeightHalf, float unitHeight, String text) { + RectF textRect = mOuterTextBounds; + + if (mShowUnit) { + + //shrink text Rect so that there is space for the unit + switch (mUnitPosition) { + + case TOP: + textRect = new RectF(mOuterTextBounds.left, mOuterTextBounds.top + unitHeight + unitGapHeightHalf, mOuterTextBounds.right, mOuterTextBounds.bottom); + break; + case BOTTOM: + textRect = new RectF(mOuterTextBounds.left, mOuterTextBounds.top, mOuterTextBounds.right, mOuterTextBounds.bottom - unitHeight - unitGapHeightHalf); + break; + case LEFT_TOP: + case LEFT_BOTTOM: + textRect = new RectF(mOuterTextBounds.left + unitWidth + unitGapWidthHalf, mOuterTextBounds.top, mOuterTextBounds.right, mOuterTextBounds.bottom); + break; + case RIGHT_TOP: + case RIGHT_BOTTOM: + default: + textRect = new RectF(mOuterTextBounds.left, mOuterTextBounds.top, mOuterTextBounds.right - unitWidth - unitGapWidthHalf, mOuterTextBounds.bottom); + break; + } + + } + + mTextPaint.setTextSize(calcTextSizeForRect(text, mTextPaint, textRect) * mTextScale); + mActualTextBounds = calcTextBounds(text, mTextPaint, textRect); // center text in text rect + } + + private void setTextSizeAndTextBoundsWithFixedTextSize(String text) { + mTextPaint.setTextSize(mTextSize); + mActualTextBounds = calcTextBounds(text, mTextPaint, mCircleBounds); //center text in circle + } + + private void setUnitTextBoundsAndSizeWithAutoTextSize(float unitGapWidthHalf, float unitWidth, float unitGapHeightHalf, float unitHeight) { + //calc the rectangle containing the unit text + switch (mUnitPosition) { + + case TOP: { + mUnitBounds = new RectF(mOuterTextBounds.left, mOuterTextBounds.top, mOuterTextBounds.right, mOuterTextBounds.top + unitHeight - unitGapHeightHalf); + break; + } + case BOTTOM: + mUnitBounds = new RectF(mOuterTextBounds.left, mOuterTextBounds.bottom - unitHeight + unitGapHeightHalf, mOuterTextBounds.right, mOuterTextBounds.bottom); + break; + case LEFT_TOP: + case LEFT_BOTTOM: { + mUnitBounds = new RectF(mOuterTextBounds.left, mOuterTextBounds.top, mOuterTextBounds.left + unitWidth - unitGapWidthHalf, mOuterTextBounds.top + unitHeight); + break; + } + case RIGHT_TOP: + case RIGHT_BOTTOM: + default: { + mUnitBounds = new RectF(mOuterTextBounds.right - unitWidth + unitGapWidthHalf, mOuterTextBounds.top, mOuterTextBounds.right, mOuterTextBounds.top + unitHeight); + } + break; + } + + mUnitTextPaint.setTextSize(calcTextSizeForRect(mUnit, mUnitTextPaint, mUnitBounds) * mUnitScale); + mUnitBounds = calcTextBounds(mUnit, mUnitTextPaint, mUnitBounds); // center text in rectangle and reuse it + + switch (mUnitPosition) { + + + case LEFT_TOP: + case RIGHT_TOP: { + //move unite to top of text + float dy = mActualTextBounds.top - mUnitBounds.top; + mUnitBounds.offset(0, dy); + break; + } + case LEFT_BOTTOM: + case RIGHT_BOTTOM: { + //move unite to bottom of text + float dy = mActualTextBounds.bottom - mUnitBounds.bottom; + mUnitBounds.offset(0, dy); + break; + } + } + } + + private void setUnitTextBoundsAndSizeWithFixedTextSize(float unitGapWidth, float unitGapHeight) { + mUnitTextPaint.setTextSize(mUnitTextSize); + mUnitBounds = calcTextBounds(mUnit, mUnitTextPaint, mOuterTextBounds); // center text in rectangle and reuse it + + switch (mUnitPosition) { + + case TOP: + mUnitBounds.offsetTo(mUnitBounds.left, mActualTextBounds.top - unitGapHeight - mUnitBounds.height()); + break; + case BOTTOM: + mUnitBounds.offsetTo(mUnitBounds.left, mActualTextBounds.bottom + unitGapHeight); + break; + case LEFT_TOP: + case LEFT_BOTTOM: + mUnitBounds.offsetTo(mActualTextBounds.left - unitGapWidth - mUnitBounds.width(), mUnitBounds.top); + break; + case RIGHT_TOP: + case RIGHT_BOTTOM: + default: + mUnitBounds.offsetTo(mActualTextBounds.right + unitGapWidth, mUnitBounds.top); + break; + } + + switch (mUnitPosition) { + case LEFT_TOP: + case RIGHT_TOP: { + //move unite to top of text + float dy = mActualTextBounds.top - mUnitBounds.top; + mUnitBounds.offset(0, dy); + break; + } + case LEFT_BOTTOM: + case RIGHT_BOTTOM: { + //move unite to bottom of text + float dy = mActualTextBounds.bottom - mUnitBounds.bottom; + mUnitBounds.offset(0, dy); + break; + } + } + } + + + /** + * Returns the bounding rectangle of the given _text, with the size and style defined in the _textPaint centered in the middle of the _textBounds + * + * @param _text The text. + * @param _textPaint The paint defining the text size and style. + * @param _textBounds The rect where the text will be centered. + * @return The bounding box of the text centered in the _textBounds. + */ + private RectF calcTextBounds(String _text, Paint _textPaint, RectF _textBounds) { + + Rect textBoundsTmp = new Rect(); + + //get current text bounds + _textPaint.getTextBounds(_text, 0, _text.length(), textBoundsTmp); + float width = textBoundsTmp.left + textBoundsTmp.width(); + float height = textBoundsTmp.bottom + textBoundsTmp.height() * 0.93f; // the height of calcTextBounds is a bit to high, therefore * 0.93 + //center in circle + RectF textRect = new RectF(); + textRect.left = (_textBounds.left + ((_textBounds.width() - width) / 2)); + textRect.top = _textBounds.top + ((_textBounds.height() - height) / 2); + textRect.right = textRect.left + width; + textRect.bottom = textRect.top + height; + + + return textRect; + } + + //endregion helper + //---------------------------------- + + //---------------------------------- + //region Setting up stuff + + /** + * Set the bounds of the component + */ + private void setupBounds() { + // Width should equal to Height, find the min value to setup the circle + int minValue = Math.min(mLayoutWidth, mLayoutHeight); + + // Calc the Offset if needed + int xOffset = mLayoutWidth - minValue; + int yOffset = mLayoutHeight - minValue; + + // Add the offset + float paddingTop = this.getPaddingTop() + (yOffset / 2); + float paddingBottom = this.getPaddingBottom() + (yOffset / 2); + float paddingLeft = this.getPaddingLeft() + (xOffset / 2); + float paddingRight = this.getPaddingRight() + (xOffset / 2); + + int width = getWidth(); //this.getLayoutParams().width; + int height = getHeight(); //this.getLayoutParams().height; + + + float circleWidthHalf = mBarWidth / 2f > mRimWidth / 2f + mContourSize ? mBarWidth / 2f : mRimWidth / 2f + mContourSize; + + mCircleBounds = new RectF(paddingLeft + circleWidthHalf, + paddingTop + circleWidthHalf, + width - paddingRight - circleWidthHalf, + height - paddingBottom - circleWidthHalf); + + + mInnerCircleBound = new RectF(paddingLeft + (mBarWidth), + paddingTop + (mBarWidth), + width - paddingRight - (mBarWidth), + height - paddingBottom - (mBarWidth)); + mOuterTextBounds = getInnerCircleRect(mCircleBounds); + mCircleInnerContour = new RectF(mCircleBounds.left + (mRimWidth / 2.0f) + (mContourSize / 2.0f), mCircleBounds.top + (mRimWidth / 2.0f) + (mContourSize / 2.0f), mCircleBounds.right - (mRimWidth / 2.0f) - (mContourSize / 2.0f), mCircleBounds.bottom - (mRimWidth / 2.0f) - (mContourSize / 2.0f)); + mCircleOuterContour = new RectF(mCircleBounds.left - (mRimWidth / 2.0f) - (mContourSize / 2.0f), mCircleBounds.top - (mRimWidth / 2.0f) - (mContourSize / 2.0f), mCircleBounds.right + (mRimWidth / 2.0f) + (mContourSize / 2.0f), mCircleBounds.bottom + (mRimWidth / 2.0f) + (mContourSize / 2.0f)); + + mCenter = new PointF(mCircleBounds.centerX(), mCircleBounds.centerY()); + } + + private void setupBarPaint() { + + if (mBarColors.length > 1) { + mBarPaint.setShader(new SweepGradient(mCircleBounds.centerX(), mCircleBounds.centerY(), mBarColors, null)); + Matrix matrix = new Matrix(); + mBarPaint.getShader().getLocalMatrix(matrix); + + matrix.postTranslate(-mCircleBounds.centerX(), -mCircleBounds.centerY()); + matrix.postRotate(mStartAngle); + matrix.postTranslate(mCircleBounds.centerX(), mCircleBounds.centerY()); + mBarPaint.getShader().setLocalMatrix(matrix); + } else { + mBarPaint.setColor(mBarColors[0]); + mBarPaint.setShader(null); + } + + mBarPaint.setAntiAlias(true); + mBarPaint.setStrokeCap(mBarStrokeCap); + mBarPaint.setStyle(Style.STROKE); + mBarPaint.setStrokeWidth(mBarWidth); + } + + + /** + * Setup all paints. + * Call only if changes to color or size properties are not visible. + */ + public void setupPaints() { + setupBarPaint(); + setupBarSpinnerPaint(); + setupContourPaint(); + setupUnitTextPaint(); + setupTextPaint(); + setupBackgroundCirclePaint(); + setupRimPaint(); + } + + private void setupContourPaint() { + mContourPaint.setColor(mContourColor); + mContourPaint.setAntiAlias(true); + mContourPaint.setStyle(Style.STROKE); + mContourPaint.setStrokeWidth(mContourSize); + } + + private void setupUnitTextPaint() { + mUnitTextPaint.setStyle(Style.FILL); + mUnitTextPaint.setAntiAlias(true); + if (unitTextTypeface != null) { + mUnitTextPaint.setTypeface(unitTextTypeface); + } + } + + private void setupTextPaint() { + mTextPaint.setSubpixelText(true); + mTextPaint.setLinearText(true); + mTextPaint.setTypeface(Typeface.MONOSPACE); + mTextPaint.setColor(mTextColor); + mTextPaint.setStyle(Style.FILL); + mTextPaint.setAntiAlias(true); + mTextPaint.setTextSize(mTextSize); + if (textTypeface != null) { + mTextPaint.setTypeface(textTypeface); + } else { + mTextPaint.setTypeface(Typeface.MONOSPACE); + } + + } + + + private void setupBackgroundCirclePaint() { + mBackgroundCirclePaint.setColor(mBackgroundCircleColor); + mBackgroundCirclePaint.setAntiAlias(true); + mBackgroundCirclePaint.setStyle(Style.FILL); + } + + private void setupRimPaint() { + mRimPaint.setColor(mRimColor); + mRimPaint.setAntiAlias(true); + mRimPaint.setStyle(Style.STROKE); + mRimPaint.setStrokeWidth(mRimWidth); + } + + private void setupBarSpinnerPaint() { + mBarSpinnerPaint.setAntiAlias(true); + mBarSpinnerPaint.setStrokeCap(mSpinnerStrokeCap); + mBarSpinnerPaint.setStyle(Style.STROKE); + mBarSpinnerPaint.setStrokeWidth(mBarWidth); + mBarSpinnerPaint.setColor(mSpinnerColor); + } + + //endregion Setting up stuff + //---------------------------------- + + //---------------------------------- + //region draw all the things + + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + if (DEBUG) { + drawDebug(canvas); + } + + float degrees = (360f / mMaxValue * mCurrentValue); + + // Draw the background circle + if (mBackgroundCircleColor != 0) { + canvas.drawArc(mInnerCircleBound, 360, 360, false, mBackgroundCirclePaint); + } + //Draw the rim + if (mRimWidth > 0) { + if (!mShowBlock) { + canvas.drawArc(mCircleBounds, 360, 360, false, mRimPaint); + } else { + drawBlocks(canvas, mCircleBounds, mStartAngle, 360, false, mRimPaint); + } + } + //Draw contour + if (mContourSize > 0) { + canvas.drawArc(mCircleOuterContour, 360, 360, false, mContourPaint); + canvas.drawArc(mCircleInnerContour, 360, 360, false, mContourPaint); + } + + + //Draw spinner + if (mAnimationState == AnimationState.SPINNING || mAnimationState == AnimationState.END_SPINNING) { + drawSpinner(canvas); + if (mShowTextWhileSpinning) { + drawTextWithUnit(canvas); + } + + } else if (mAnimationState == AnimationState.END_SPINNING_START_ANIMATING) { + //draw spinning arc + drawSpinner(canvas); + + if (mDrawBarWhileSpinning) { + drawBar(canvas, degrees); + drawTextWithUnit(canvas); + } else if (mShowTextWhileSpinning) { + drawTextWithUnit(canvas); + } + + } else { + drawBar(canvas, degrees); + drawTextWithUnit(canvas); + } + + + if (mClippingBitmap != null) { + canvas.drawBitmap(mClippingBitmap, 0, 0, mMaskPaint); + } + + } + + private void drawDebug(Canvas canvas) { + Paint innerRectPaint = new Paint(); + innerRectPaint.setColor(Color.YELLOW); + canvas.drawRect(mCircleBounds, innerRectPaint); + + } + + private void drawBlocks(Canvas _canvas, RectF circleBounds, float startAngle, float _degrees, boolean userCenter, Paint paint) { + float tmpDegree = 0.0f; + while (tmpDegree < _degrees) { + _canvas.drawArc(circleBounds, startAngle + tmpDegree, Math.min(mBlockScaleDegree, _degrees - tmpDegree), userCenter, paint); + tmpDegree += mBlockDegree; + } + } + + private void drawSpinner(Canvas canvas) { + + if (mSpinningBarLengthCurrent < 0) { + mSpinningBarLengthCurrent = 1; + } + float startAngle = (mStartAngle + mCurrentSpinnerDegreeValue - mSpinningBarLengthCurrent); + canvas.drawArc(mCircleBounds, startAngle, mSpinningBarLengthCurrent, false, + mBarSpinnerPaint); + + } + + private void drawTextWithUnit(Canvas canvas) { + + final float relativeGapHeight; + final float relativeGapWidth; + final float relativeHeight; + final float relativeWidth; + + switch (mUnitPosition) { + case TOP: + case BOTTOM: + relativeGapWidth = 0.05f; //gap size between text and unit + relativeGapHeight = 0.025f; //gap size between text and unit + relativeHeight = 0.25f * mRelativeUniteSize; + relativeWidth = 0.4f * mRelativeUniteSize; + break; + default: + case LEFT_TOP: + case RIGHT_TOP: + case LEFT_BOTTOM: + case RIGHT_BOTTOM: + relativeGapWidth = 0.05f; //gap size between text and unit + relativeGapHeight = 0.025f; //gap size between text and unit + relativeHeight = 0.55f * mRelativeUniteSize; + relativeWidth = 0.3f * mRelativeUniteSize; + break; + } + + float unitGapWidthHalf = mOuterTextBounds.width() * relativeGapWidth / 2f; + float unitWidth = (mOuterTextBounds.width() * relativeWidth); + + float unitGapHeightHalf = mOuterTextBounds.height() * relativeGapHeight / 2f; + float unitHeight = (mOuterTextBounds.height() * relativeHeight); + + + boolean update = false; + //Draw Text + if (mIsAutoColorEnabled) { + mTextPaint.setColor(calcTextColor(mCurrentValue)); + } + + //set text + String text; + switch (mTextMode) { + case TEXT: + default: + text = mText != null ? mText : ""; + break; + case PERCENT: + text = decimalFormat.format(100f / mMaxValue * mCurrentValue) + "%"; + break; + case VALUE: + text = decimalFormat.format(mCurrentValue) + "%"; + break; + } + + + // only re-calc position and size if string length changed + if (mTextLength != text.length()) { + + update = true; + mTextLength = text.length(); + if (mTextLength == 1) { + mOuterTextBounds = getInnerCircleRect(mCircleBounds); + mOuterTextBounds = new RectF(mOuterTextBounds.left + (mOuterTextBounds.width() * 0.1f), mOuterTextBounds.top, mOuterTextBounds.right - (mOuterTextBounds.width() * 0.1f), mOuterTextBounds.bottom); + } else { + mOuterTextBounds = getInnerCircleRect(mCircleBounds); + } + if (mIsAutoTextSize) { + setTextSizeAndTextBoundsWithAutoTextSize(unitGapWidthHalf, unitWidth, unitGapHeightHalf, unitHeight, text); + + } else { + setTextSizeAndTextBoundsWithFixedTextSize(text); + } + } + + + if (DEBUG) { + Paint rectPaint = new Paint(); + rectPaint.setColor(Color.MAGENTA); + canvas.drawRect(mOuterTextBounds, rectPaint); + rectPaint.setColor(Color.GREEN); + canvas.drawRect(mActualTextBounds, rectPaint); + + } + + canvas.drawText(text, mActualTextBounds.left - (mTextPaint.getTextSize() * 0.02f), mActualTextBounds.bottom, mTextPaint); + + if (mShowUnit) { + + + if (mIsAutoColorEnabled) { + mUnitTextPaint.setColor(calcTextColor(mCurrentValue)); + } + if (update) { + //calc unit text position + if (mIsAutoTextSize) { + setUnitTextBoundsAndSizeWithAutoTextSize(unitGapWidthHalf, unitWidth, unitGapHeightHalf, unitHeight); + + } else { + setUnitTextBoundsAndSizeWithFixedTextSize(unitGapWidthHalf * 2f, unitGapHeightHalf * 2f); + } + + + } + + if (DEBUG) { + Paint rectPaint = new Paint(); + rectPaint.setColor(Color.RED); + canvas.drawRect(mUnitBounds, rectPaint); + } + + canvas.drawText(mUnit, mUnitBounds.left - (mUnitTextPaint.getTextSize() * 0.02f), mUnitBounds.bottom, mUnitTextPaint); + } + } + + private void drawBar(Canvas _canvas, float _degrees) { + if (!mShowBlock) { + _canvas.drawArc(mCircleBounds, mStartAngle, _degrees, false, mBarPaint); + } else { + drawBlocks(_canvas, mCircleBounds, mStartAngle, _degrees, false, mBarPaint); + } + + } + + //endregion draw + //---------------------------------- + + + /** + * Turn off spinning mode + */ + public void stopSpinning() { + mAnimationHandler.sendEmptyMessage(AnimationMsg.STOP_SPINNING.ordinal()); + } + + /** + * Puts the view in spin mode + */ + public void spin() { + mAnimationHandler.sendEmptyMessage(AnimationMsg.START_SPINNING.ordinal()); + } + + + //---------------------------------- + //region touch input + @Override + public boolean onTouchEvent(@NonNull MotionEvent event) { + + if (mSeekModeEnabled == false) { + return super.onTouchEvent(event); + } + + switch (event.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + case MotionEvent.ACTION_UP: { + mTouchEventCount = 0; + PointF point = new PointF(event.getX(), event.getY()); + float angle = normalizeAngle(Math.round(calcRotationAngleInDegrees(mCenter, point) - mStartAngle)); + setValueAnimated(mMaxValue / 360f * angle, 800); + return true; + } + case MotionEvent.ACTION_MOVE: { + mTouchEventCount++; + if (mTouchEventCount > 5) { //touch/move guard + PointF point = new PointF(event.getX(), event.getY()); + float angle = normalizeAngle(Math.round(calcRotationAngleInDegrees(mCenter, point) - mStartAngle)); + setValue(mMaxValue / 360f * angle); + return true; + } else { + return false; + } + + } + case MotionEvent.ACTION_CANCEL: + mTouchEventCount = 0; + return false; + } + + + return super.onTouchEvent(event); + } + + + //endregion touch input + //---------------------------------- + + + //----------------------------------- + //region listener for progress change + + + public interface OnProgressChangedListener { + void onProgressChanged(float value); + } + + //endregion listener for progress change + //-------------------------------------- + +} + + diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/ColorUtils.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/ColorUtils.java new file mode 100644 index 0000000..0328403 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/ColorUtils.java @@ -0,0 +1,71 @@ +package com.yonsz.z1.wifi.switcher.circleprogress; + +import android.graphics.Color; +import android.support.annotation.ColorInt; + +/** + * Created by Jakob on 05.09.2015. + */ +public class ColorUtils { + + public static int getRGBGradient(@ColorInt int startColor, @ColorInt int endColor, float proportion) { + + int[] rgb = new int[3]; + rgb[0] = interpolate(Color.red(startColor), Color.red(endColor), proportion); + rgb[1] = interpolate(Color.green(startColor), Color.green(endColor), proportion); + rgb[2] = interpolate(Color.blue(startColor), Color.blue(endColor), proportion); + return Color.argb(255, rgb[0], rgb[1], rgb[2]); + } + + + private static int interpolate(float a, float b, float proportion) { + return Math.round((a * (proportion)) + (b * (1 - proportion))); + } + + +// not finished +// public static @ColorInt int getHSVGradient(@ColorInt int startColor,@ColorInt int endColor, float proportion, HSVColorDirection _direction) { +// float[] startHSV = new float[3]; +// float[] endHSV = new float[3]; +// Color.colorToHSV(startColor, startHSV); +// Color.colorToHSV(endColor, endHSV); +// +// float brightness = (startHSV[2] + endHSV[2]) / 2; +// float saturation = (startHSV[1] + endHSV[1]) / 2; +// +// // determine clockwise and counter-clockwise distance between hues +// float distCCW = (startHSV[0] >= endHSV[0]) ? 360 - startHSV[0] - endHSV[0] : startHSV[0] - endHSV[0]; +// float distCW = (startHSV[0] >= endHSV[0]) ? endHSV[0] - startHSV[0] : 360 - endHSV[0] - startHSV[0]; +// float hue = 0; +// switch (_direction) { +// +// case ClockWise: +// hue = startHSV[0] + (distCW * proportion) % 360; +// break; +// case CounterClockWise: +// hue = startHSV[0] + (distCCW * proportion) % 360; +// break; +// case Shortest: +// break; +// case Longest: +// break; +// } +// +// // interpolate h +// float hue = (float) ((distCW <= distCCW) ? startHSV[0] + (distCW * proportion) : startHSV[0] - (distCCW * proportion)); +// //reuse array +// endHSV[0] = hue; +// endHSV[1] = saturation; +// endHSV[2] = brightness; +// return Color.HSVToColor(endHSV); +// +// } +// +// enums HSVColorDirection{ +// ClockWise, +// CounterClockWise, +// Shortest, +// Longest +// } + +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/TextMode.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/TextMode.java new file mode 100644 index 0000000..293ba1c --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/TextMode.java @@ -0,0 +1,16 @@ +package com.yonsz.z1.wifi.switcher.circleprogress; + +public enum TextMode { + /** + * Show specified text + */ + TEXT, + /** + * Show percent of current value from max value + */ + PERCENT, + /** + * Show current value + */ + VALUE +} diff --git a/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/UnitPosition.java b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/UnitPosition.java new file mode 100644 index 0000000..4101335 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/wifi/switcher/circleprogress/UnitPosition.java @@ -0,0 +1,14 @@ +package com.yonsz.z1.wifi.switcher.circleprogress; + +/** + * Created by Jakob on 20.11.2015. + */ +public enum UnitPosition { + TOP, + BOTTOM, + LEFT_TOP, + RIGHT_TOP, + LEFT_BOTTOM, + RIGHT_BOTTOM + +} diff --git a/app/src/main/java/com/yonsz/z1/xgpush/Constants.java b/app/src/main/java/com/yonsz/z1/xgpush/Constants.java new file mode 100644 index 0000000..3a27da4 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/xgpush/Constants.java @@ -0,0 +1,17 @@ +package com.yonsz.z1.xgpush; + +/** + * Created by chacewang on 2019/7/5. + */ + +public class Constants { + public static final int TEST_LOCAL_NOTIFICATION = 1; + public static final int TEST_NOTIFICATION = 2; + public static final int TEST_SET_TAG = 3; + public static final int TEST_DEL_TAG = 4; + public static final int TEST_SET_ACCOUNT = 5; + public static final int TEST_DEL_ACCOUNT = 6; + + public static final String LOCAL_NOTIFICATION_TITLE = "localtest"; + public static final String TEST_TAG_NAME = "DiagnosisTag"; +} diff --git a/app/src/main/java/com/yonsz/z1/xgpush/DBOpenHelper.java b/app/src/main/java/com/yonsz/z1/xgpush/DBOpenHelper.java new file mode 100644 index 0000000..8250a52 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/xgpush/DBOpenHelper.java @@ -0,0 +1,24 @@ +package com.yonsz.z1.xgpush; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +public class DBOpenHelper extends SQLiteOpenHelper { + + public DBOpenHelper(Context context) { + + super(context, "XGExample.db", null, 1); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL("CREATE TABLE notification (id integer primary key autoincrement,msg_id varchar(64),title varchar(128),activity varchar(256),notificationActionType varchar(512),content text,update_time varchar(16))"); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + + } + +} diff --git a/app/src/main/java/com/yonsz/z1/xgpush/MessageReceiver.java b/app/src/main/java/com/yonsz/z1/xgpush/MessageReceiver.java new file mode 100644 index 0000000..e02946f --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/xgpush/MessageReceiver.java @@ -0,0 +1,272 @@ +package com.yonsz.z1.xgpush; + +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import com.tencent.android.tpush.NotificationAction; +import com.tencent.android.tpush.XGPushBaseReceiver; +import com.tencent.android.tpush.XGPushClickedResult; +import com.tencent.android.tpush.XGPushRegisterResult; +import com.tencent.android.tpush.XGPushShowedResult; +import com.tencent.android.tpush.XGPushTextMessage; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.SimpleDateFormat; +import java.util.Calendar; + +public class MessageReceiver extends XGPushBaseReceiver { + public static final String UPDATE_LISTVIEW_ACTION = "com.qq.xgdemo.activity.UPDATE_LISTVIEW"; + public static final String TEST_ACTION = "com.qq.xgdemo.activity.TEST_ACTION"; + public static final String LogTag = "xg.test"; + + /** + * 消息透传处理 + * @param context + * @param message 解析自定义的 JSON + */ + @Override + public void onTextMessage(Context context, XGPushTextMessage message) { + String text = "收到消息:" + message.toString(); + // 获取自定义key-value + String customContent = message.getCustomContent(); + if (customContent != null && customContent.length() != 0) { + try { + JSONObject obj = new JSONObject(customContent); + // key1为前台配置的key + if (!obj.isNull("key")) { + String value = obj.getString("key"); + Log.d(LogTag, "get custom value:" + value); + } + // ... + } catch (JSONException e) { + e.printStackTrace(); + } + } + // APP自主处理消息的过程... + Log.d(LogTag, text); + show(context, text); + } + + /** + * 通知展示 + * @param context + * @param notifiShowedRlt 包含通知的内容 + */ + @Override + public void onNotificationShowedResult(Context context, XGPushShowedResult notifiShowedRlt) { + if (context == null || notifiShowedRlt == null) { + return; + } + XGNotification notific = new XGNotification(); + notific.setMsg_id(notifiShowedRlt.getMsgId()); + notific.setTitle(notifiShowedRlt.getTitle()); + notific.setContent(notifiShowedRlt.getContent()); + // notificationActionType==1为Activity,2为url,3为intent + notific.setNotificationActionType(notifiShowedRlt + .getNotificationActionType()); + // Activity,url,intent都可以通过getActivity()获得 + notific.setActivity(notifiShowedRlt.getActivity()); + notific.setUpdate_time(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") + .format(Calendar.getInstance().getTime())); + NotificationService.getInstance(context).save(notific); + + Intent testIntent = new Intent(TEST_ACTION); + if (notifiShowedRlt.getTitle().equals(Constants.LOCAL_NOTIFICATION_TITLE)) { + testIntent.putExtra("step", Constants.TEST_LOCAL_NOTIFICATION); + } else { + testIntent.putExtra("step", Constants.TEST_NOTIFICATION); + } + context.sendBroadcast(testIntent); + + Intent viewIntent = new Intent(UPDATE_LISTVIEW_ACTION); + context.sendBroadcast(viewIntent); + show(context, "您有1条新消息, " + "通知被展示 , " + notifiShowedRlt.toString()); + Log.d(LogTag, "您有1条新消息, " + "通知被展示 , " + notifiShowedRlt.toString() + ", PushChannel:" + notifiShowedRlt.getPushChannel()); + } + + /** + * 注册回调 + * @param context + * @param errorCode 0 为成功,其它为错误码 + */ + @Override + public void onRegisterResult(Context context, int errorCode, XGPushRegisterResult message) { + if (context == null || message == null) { + return; + } + String text = ""; + if (errorCode == XGPushBaseReceiver.SUCCESS) { + // 在这里拿token + String token = message.getToken(); + text = "注册成功1. token:" + token; + } else { + text = message + "注册失败,错误码:" + errorCode; + } + Log.d(LogTag, text); + show(context, text); + } + + /** + * 反注册回调 + * @param context + * @param errorCode 0 为成功,其它为错误码 + */ + @Override + public void onUnregisterResult(Context context, int errorCode) { + if (context == null) { + return; + } + String text = ""; + if (errorCode == XGPushBaseReceiver.SUCCESS) { + text = "反注册成功"; + } else { + text = "反注册失败" + errorCode; + } + Log.d(LogTag, text); + show(context, text); + + } + + /** + * 设置标签回调 + * @param context + * @param errorCode 0 为成功,其它为错误码 + * @param tagName 设置的 TAG + */ + @Override + public void onSetTagResult(Context context, int errorCode, String tagName) { + if (context == null) { + return; + } + String text = ""; + if (errorCode == XGPushBaseReceiver.SUCCESS) { + text = "\"" + tagName + "\"设置成功"; + } else { + text = "\"" + tagName + "\"设置失败,错误码:" + errorCode; + } + Log.d(LogTag, text); + show(context, text); + + Intent testIntent = new Intent(TEST_ACTION); + testIntent.putExtra("step", Constants.TEST_SET_TAG); + context.sendBroadcast(testIntent); + } + + /** + * 删除标签的回调 + * @param context + * @param errorCode 0 为成功,其它为错误码 + * @param tagName 设置的 TAG + */ + @Override + public void onDeleteTagResult(Context context, int errorCode, String tagName) { + if (context == null) { + return; + } + String text = ""; + if (errorCode == XGPushBaseReceiver.SUCCESS) { + text = "\"" + tagName + "\"删除成功"; + } else { + text = "\"" + tagName + "\"删除失败,错误码:" + errorCode; + } + Log.d(LogTag, text); + show(context, text); + + Intent testIntent = new Intent(TEST_ACTION); + testIntent.putExtra("step", Constants.TEST_DEL_TAG); + context.sendBroadcast(testIntent); + } + + /** + * 设置账号回调 + * @param context + * @param errorCode 0 为成功,其它为错误码 + * @param account 设置的账号 + */ + @Override + public void onSetAccountResult(Context context, int errorCode, String account) { + Intent testIntent = new Intent(TEST_ACTION); + testIntent.putExtra("step", Constants.TEST_SET_ACCOUNT); + context.sendBroadcast(testIntent); + } + + + /** + * 删除账号回调 + * @param context + * @param errorCode 0 为成功,其它为错误码 + * @param account 设置的账号 + */ + @Override + public void onDeleteAccountResult(Context context, int errorCode, String account) { + Intent testIntent = new Intent(TEST_ACTION); + testIntent.putExtra("step", Constants.TEST_DEL_ACCOUNT); + context.sendBroadcast(testIntent); + } + + @Override + public void onSetAttributeResult(Context context, int i, String s) { + + } + + @Override + public void onQueryTagsResult(Context context, int i, String s, String s1) { + + } + + @Override + public void onDeleteAttributeResult(Context context, int i, String s) { + + } + + /** + * 通知点击回调 actionType=1为该消息被清除,actionType=0为该消息被点击 + * @param context + * @param message 包含被点击通知的内容 + */ + @Override + public void onNotificationClickedResult(Context context, XGPushClickedResult message) { + if (context == null || message == null) { + return; + } + String text = ""; + if (message.getActionType() == NotificationAction.clicked.getType()) { + // 通知在通知栏被点击啦。。。。。 + // APP自己处理点击的相关动作 + // 这个动作可以在activity的onResume也能监听,请看第3点相关内容 + text = "通知被打开 :" + message; + } else if (message.getActionType() == NotificationAction.delete.getType()) { + // 通知被清除啦。。。。 + // APP自己处理通知被清除后的相关动作 + text = "通知被清除 :" + message; + } + /*Toast.makeText(context, "广播接收到通知被点击:" + message.toString(), + Toast.LENGTH_SHORT).show();*/ + // 获取自定义key-value + String customContent = message.getCustomContent(); + if (customContent != null && customContent.length() != 0) { + try { + JSONObject obj = new JSONObject(customContent); + // key1为前台配置的key + if (!obj.isNull("key")) { + String value = obj.getString("key"); + Log.d(LogTag, "get custom value:" + value); + } + // ... + } catch (JSONException e) { + e.printStackTrace(); + } + } + // APP自主处理的过程。。。 + Log.d(LogTag, text); + show(context, text); + } + + private void show(Context context, String text) { +// Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); + } + +} diff --git a/app/src/main/java/com/yonsz/z1/xgpush/NotificationService.java b/app/src/main/java/com/yonsz/z1/xgpush/NotificationService.java new file mode 100644 index 0000000..799d387 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/xgpush/NotificationService.java @@ -0,0 +1,133 @@ +package com.yonsz.z1.xgpush; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +import java.util.ArrayList; +import java.util.List; + + +public class NotificationService { + private DBOpenHelper dbOpenHelper; + private static NotificationService instance = null; + + public NotificationService(Context context) { + this.dbOpenHelper = new DBOpenHelper(context); + } + + public synchronized static NotificationService getInstance(Context ctx) { + if (null == instance) { + instance = new NotificationService(ctx); + } + return instance; + } + + public void save(XGNotification notification) { + SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put("msg_id", notification.getMsg_id()); + values.put("title", notification.getTitle()); + values.put("content", notification.getContent()); + values.put("activity", notification.getActivity()); + values.put("notificationActionType", notification.getNotificationActionType()); + values.put("update_time", notification.getUpdate_time()); + db.insert("notification", null, values); + } + + public void delete(Integer id) { + SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); + db.delete("notification", "id=?", new String[]{id.toString()}); + } + + public void deleteAll() { + SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); + db.delete("notification", "", null); + } + + public void update(XGNotification notification) { + SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put("msg_id", notification.getMsg_id()); + values.put("title", notification.getTitle()); + values.put("content", notification.getContent()); + values.put("activity", notification.getActivity()); + values.put("notificationActionType", notification.getNotificationActionType()); + values.put("update_time", notification.getUpdate_time()); + db.update("notification", values, "id=?", new String[]{notification + .getId().toString()}); + } + + public XGNotification find(Integer id) { + SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); + Cursor cursor = db + .query("notification", + new String[]{"id,msg_id,title,content,activity,notificationActionType,update_time"}, + "id=?", new String[]{id.toString()}, null, null, + null, "1"); + try { + if (cursor.moveToFirst()) { + return new XGNotification(cursor.getInt(cursor + .getColumnIndex("id")), cursor.getLong(cursor + .getColumnIndex("msg_id")), cursor.getString(cursor + .getColumnIndex("title")), cursor.getString(cursor + .getColumnIndex("content")), cursor.getString(cursor + .getColumnIndex("activity")), cursor.getInt(cursor + .getColumnIndex("notificationActionType")), cursor.getString(cursor + .getColumnIndex("update_time"))); + } + return null; + } finally { + cursor.close(); + } + } + + public List getScrollData(int currentPage, int lineSize, + String msg_id) { + String firstResult = String.valueOf((currentPage - 1) * lineSize); + SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); + Cursor cursor = null; + try { + if (msg_id == null || "".equals(msg_id)) { + cursor = db + .query("notification", + new String[]{"id,msg_id,title,content,activity,notificationActionType,update_time"}, + null, null, null, null, "update_time DESC", + firstResult + "," + lineSize); + } else { + cursor = db + .query("notification", + new String[]{"id,msg_id,title,content,activity,notificationActionType,update_time"}, + "msg_id like ?", new String[]{msg_id + "%"}, + null, null, "update_time DESC", firstResult + + "," + lineSize); + } + List notifications = new ArrayList(); + while (cursor.moveToNext()) { + notifications.add(new XGNotification(cursor.getInt(cursor + .getColumnIndex("id")), cursor.getLong(cursor + .getColumnIndex("msg_id")), cursor.getString(cursor + .getColumnIndex("title")), cursor.getString(cursor + .getColumnIndex("content")), cursor.getString(cursor + .getColumnIndex("activity")), cursor.getInt(cursor + .getColumnIndex("notificationActionType")), cursor.getString(cursor + .getColumnIndex("update_time")))); + } + return notifications; + } finally { + cursor.close(); + } + } + + public int getCount() { + SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); + Cursor cursor = db.rawQuery("select count(*) from notification", null); + try { + cursor.moveToFirst(); + return cursor.getInt(0); + } finally { + cursor.close(); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/xgpush/XGNotification.java b/app/src/main/java/com/yonsz/z1/xgpush/XGNotification.java new file mode 100644 index 0000000..e78eab9 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/xgpush/XGNotification.java @@ -0,0 +1,90 @@ +package com.yonsz.z1.xgpush; + +/** + * Created by admin on 2017/2/13. + */ + +public class XGNotification { + private Integer id; + private long msg_id; + private String title; + private String content; + private String activity; + private int notificationActionType; + private String update_time; + + public void setId(Integer id) { + this.id = id; + } + + public void setMsg_id(long msg_id) { + this.msg_id = msg_id; + } + + public void setTitle(String title) { + this.title = title; + } + + public void setContent(String content) { + this.content = content; + } + + public void setActivity(String activity) { + this.activity = activity; + } + + public void setNotificationActionType(int notificationActionType) { + this.notificationActionType = notificationActionType; + } + + public void setUpdate_time(String update_time) { + this.update_time = update_time; + } + + + public Integer getId() { + return id; + } + + public long getMsg_id() { + return msg_id; + } + + public String getTitle() { + return title; + } + + public String getContent() { + return content; + } + + public String getActivity() { + return activity; + } + + public int getNotificationActionType() { + return notificationActionType; + } + + public String getUpdate_time() { + return update_time; + } + + + public XGNotification() { + + } + + public XGNotification(Integer id, Long msg_id, String title, + String content, String activity, int notificationActionType, String update_time) { + super(); + this.id = id; + this.msg_id = msg_id; + this.title = title; + this.content = content; + this.activity = activity; + this.notificationActionType = notificationActionType; + this.update_time = update_time; + } + +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/card/SituationalTriggerFragment.java b/app/src/main/java/com/yonsz/z1/ybl/card/SituationalTriggerFragment.java new file mode 100644 index 0000000..d56b847 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/card/SituationalTriggerFragment.java @@ -0,0 +1,582 @@ +package com.yonsz.z1.ybl.card; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.StudyValueEntity; +import com.yonsz.z1.database.entity.entity4.YblPanelControlEvent; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entity5.Key5Entity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.ybl.panel.PanelModelSelectActivity; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.lang.ref.WeakReference; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.SITUATIONAL_PANEL; +import static com.yonsz.z1.net.Constans.SITUATIONAL_TRIGGER; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_GETCONTROLKEYS; + +public class SituationalTriggerFragment extends BaseFragment implements View.OnClickListener { + private View fragView; + private UIHandle mHandler; + private DeviceEntityV4.DataBean.DevicesBean devicesBean; + private TitleView mTitleView; + private String panelType; + private ImageView panelImage; + private TextView panelName, panelNameM; + private RelativeLayout congigOneRl, congigTwoRl, congigThreeRl, congigFourRl, congigFiveRl, congigSixRl, panelPostionRl, panelNameRl; + private TextView congigOneTv, congigTwoTv, congigThreeTv, congigFourTv, congigFiveTv, congigSixTv, tv_config_two, tv_config_one, tv_panel_name_bottom; + private String modelId1 = "", modelId2 = "", modelId3 = "", modelId4 = "", modelId5 = "", modelId6 = ""; + private TextView deleteTv; + private TextView panelPostion; + private String id; + private String ziId; + private String deviceAddress; + private String response; + private String deviceModel = ""; + private int deviceCount = 2; + + public static SituationalTriggerFragment getInstance(DeviceEntityV4.DataBean.DevicesBean devicesBean) { + SituationalTriggerFragment fragment = new SituationalTriggerFragment(); + fragment.devicesBean = devicesBean; + return fragment; + } + + public void onEventMainThread(YblPanelControlEvent event) { + /*String msg = event.getMsg(); + Log.e("nettyUtil", msg + msg.length()); + YblEntity nettyEntity = JSON.parseObject(msg, YblEntity.class); + String deviceId = nettyEntity.getDeviceId(); + if (id.equals(deviceId)) { + int key = Integer.parseInt(nettyEntity.getKey()); + String modelId = ""; + String keyName = ""; + if (null != response) { + try { + JSONObject jsonObject = new JSONObject(response); + JSONObject object = jsonObject.getJSONObject("obj"); + if (!object.isNull("key" + key)) { + modelId = object.getJSONObject("key" + key).getString("modelId"); + keyName = object.getJSONObject("key" + key).getString("name"); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + Intent intent = new Intent(getContext(), PanelModelSelectActivity.class); + intent.putExtra("id", id); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("ziId", ziId); + intent.putExtra("configKey", "" + key); + intent.putExtra("keyName", keyName); + intent.putExtra("modelId", modelId); + startActivity(intent); + }*/ + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.activity_ybl_panel_three, null); + initView(fragView); + initListener(); + return fragView; + } + + @Override + public void onResume() { + super.onResume(); + queryStudyValue(); + } + + private void initListener() { + congigOneRl.setOnClickListener(this); + congigTwoRl.setOnClickListener(this); + congigThreeRl.setOnClickListener(this); + congigFourRl.setOnClickListener(this); + congigFiveRl.setOnClickListener(this); + congigSixRl.setOnClickListener(this); + deleteTv.setOnClickListener(this); + panelPostionRl.setOnClickListener(this); + panelNameRl.setOnClickListener(this); + } + + private void initView(View fragView) { + // devicesBean = (DeviceEntityV4.DataBean.DevicesBean) getArguments().get("DATA"); + id = devicesBean.getId(); + ziId = devicesBean.getZiId(); + panelType = String.valueOf(devicesBean.getDeviceCount()); + deviceCount = devicesBean.getDeviceCount(); + deviceModel = devicesBean.getDeviceModel(); + deviceAddress = devicesBean.getAddressId(); + congigOneRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_one); + congigTwoRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_two); + congigThreeRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_three); + congigFourRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_four); + congigFiveRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_five); + congigSixRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_six); + panelPostionRl = (RelativeLayout) fragView.findViewById(R.id.rl_panel_position); + panelNameRl = (RelativeLayout) fragView.findViewById(R.id.rl_panel_name); + congigOneTv = (TextView) fragView.findViewById(R.id.tv_config_one_position); + congigTwoTv = (TextView) fragView.findViewById(R.id.tv_config_two_position); + congigThreeTv = (TextView) fragView.findViewById(R.id.tv_config_three_position); + congigFourTv = (TextView) fragView.findViewById(R.id.tv_config_four_position); + congigFiveTv = (TextView) fragView.findViewById(R.id.tv_config_five_position); + congigSixTv = (TextView) fragView.findViewById(R.id.tv_config_six_position); + tv_config_one = (TextView) fragView.findViewById(R.id.tv_config_one); + tv_config_two = (TextView) fragView.findViewById(R.id.tv_config_two); + tv_panel_name_bottom = (TextView) fragView.findViewById(R.id.tv_panel_name_bottom); + panelImage = (ImageView) fragView.findViewById(R.id.iv_panel_image); + panelName = (TextView) fragView.findViewById(R.id.iv_panel_name); + panelNameM = (TextView) fragView.findViewById(R.id.tv_panel_name); + deleteTv = (TextView) fragView.findViewById(R.id.btn_exit); + panelPostion = (TextView) fragView.findViewById(R.id.tv_panel_position); + mTitleView = (TitleView) fragView.findViewById(R.id.title_panel_three); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + getActivity().finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + tv_config_one.setText("上电配置:"); + tv_config_two.setText("断电配置:"); + panelPostionRl.setVisibility(View.VISIBLE); + + panelPostion.setText(AddressNameUtil.getAddressName(deviceAddress)); + + panelImage.setImageResource(R.drawable.pic_multifunctional); + deleteTv.setVisibility(View.VISIBLE); + tv_panel_name_bottom.setVisibility(View.GONE); + congigThreeRl.setVisibility(View.GONE); + congigFourRl.setVisibility(View.GONE); + congigFiveRl.setVisibility(View.GONE); + congigSixRl.setVisibility(View.GONE); + + if (null != devicesBean.getDeviceName()) { + mTitleView.setHead(devicesBean.getDeviceName()); + panelNameM.setText(devicesBean.getDeviceName()); + panelName.setText(devicesBean.getDeviceName()); + } else { + mTitleView.setHead("情景触发器"); + panelName.setText("情景触发器"); + panelNameM.setText("情景触发器"); + } + } + + @Override + public void onClick(View v) { + Intent intent = new Intent(getContext(), PanelModelSelectActivity.class); + intent.putExtra("id", id); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", SITUATIONAL_TRIGGER); + switch (v.getId()) { + case R.id.rl_config_one: + intent.putExtra("configKey", "1"); + intent.putExtra("keyName", congigOneTv.getText().toString()); + intent.putExtra("modelId", modelId1); + startActivity(intent); + break; + case R.id.rl_config_two: + intent.putExtra("configKey", "2"); + intent.putExtra("keyName", congigTwoTv.getText().toString()); + intent.putExtra("modelId", modelId2); + startActivity(intent); + break; + case R.id.rl_config_three: + intent.putExtra("configKey", "3"); + intent.putExtra("keyName", congigThreeTv.getText().toString()); + intent.putExtra("modelId", modelId3); + startActivity(intent); + break; + case R.id.rl_config_four: + intent.putExtra("configKey", "4"); + intent.putExtra("keyName", congigFourTv.getText().toString()); + intent.putExtra("modelId", modelId4); + startActivity(intent); + break; + case R.id.rl_config_five: + intent.putExtra("configKey", "5"); + intent.putExtra("keyName", congigFiveTv.getText().toString()); + intent.putExtra("modelId", modelId5); + startActivity(intent); + break; + case R.id.rl_config_six: + intent.putExtra("configKey", "6"); + intent.putExtra("keyName", congigSixTv.getText().toString()); + intent.putExtra("modelId", modelId6); + startActivity(intent); + break; + case R.id.btn_exit: + ConfirmDialog dialog = new ConfirmDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + // deleteChildDevice(); + subsetDelete(); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.rl_panel_position: + /*intent = new Intent(this, UpadateYblPanelPosActivity.class); + intent.putExtra("id", id); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", deviceAddress); + startActivityForResult(intent, MODIFY_ADDRESS_RESULT);*/ + + intent = new Intent(getContext(), ModifyRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", SITUATIONAL_TRIGGER); + intent.putExtra("deviceModel", "0"); + intent.putExtra("addressId", deviceAddress); + intent.putExtra("deviceId", id); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + break; + case R.id.rl_panel_name: + subsetModifyName(); + break; + } + } + + private void subsetModifyName() { + //修改名字 + ConfirmNameDialog dialog1 = new ConfirmNameDialog(getContext(), new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + subsetModify(positioName); + break; + } + } + }); + dialog1.setMaxEms(12); + dialog1.setOldName(mTitleView.getHead()); + dialog1.setContent("修改设备名称"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + } + + private void subsetModify(String deviceName) { + // initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", devicesBean.getDeviceType()); + map.put("ziId", ziId); + if (!TextUtils.isEmpty(deviceName)) { + map.put("name", deviceName); + } + util.requestPostByAsyBody(NetWorkUrl.SUBSET_MODIFY, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetModify", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + devicesBean.setDeviceName(deviceName); + Message msg = mHandler.obtainMessage(MODIFY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(MODIFY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(MODIFY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + public void callBackUiThread(Message msg) { + switch (msg.what) { + case DELETE_CHILDDEVICE_SUCCESS: + ToastUtil.show(getContext(), "删除成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }, 2000); + break; + case QUERY_STUDY_SUCCESS: + response = (String) msg.obj; + try { + JSONObject jsonObject = new JSONObject(response); + JSONObject object = jsonObject.getJSONObject("obj"); + if (!object.isNull("key1")) { + congigOneTv.setText(object.getJSONObject("key1").getString("name")); + modelId1 = object.getJSONObject("key1").getString("modelId"); + } else { + congigOneTv.setText(""); + modelId1 = ""; + } + if (!object.isNull("key2")) { + congigTwoTv.setText(object.getJSONObject("key2").getString("name")); + modelId2 = object.getJSONObject("key2").getString("modelId"); + } else { + congigTwoTv.setText(""); + modelId2 = ""; + } + if (!object.isNull("key3")) { + congigThreeTv.setText(object.getJSONObject("key3").getString("name")); + modelId3 = object.getJSONObject("key3").getString("modelId"); + } else { + congigThreeTv.setText(""); + modelId3 = ""; + } + if (!object.isNull("key4")) { + congigFourTv.setText(object.getJSONObject("key4").getString("name")); + modelId4 = object.getJSONObject("key4").getString("modelId"); + } else { + congigFourTv.setText(""); + modelId4 = ""; + } + if (!object.isNull("key5")) { + congigFiveTv.setText(object.getJSONObject("key5").getString("name")); + modelId5 = object.getJSONObject("key5").getString("modelId"); + } else { + congigFiveTv.setText(""); + modelId5 = ""; + } + if (!object.isNull("key6")) { + congigSixTv.setText(object.getJSONObject("key6").getString("name")); + modelId6 = object.getJSONObject("key6").getString("modelId"); + } else { + congigSixTv.setText(""); + modelId6 = ""; + } + } catch (JSONException e) { + e.printStackTrace(); + Log.i("queryStudyValue", "TvA1Fragment callBackUiThread()" + e.getMessage()); + } + break; + case MODIFY_NAME_SUCCESS: + mTitleView.setHead(devicesBean.getDeviceName()); + panelNameM.setText(devicesBean.getDeviceName()); + panelName.setText(devicesBean.getDeviceName()); + break; + case MODIFY_NAME_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_ADDRESS_RESULT: + if (data != null && data.getExtras().get("data") != null) { + deviceAddress = (String) data.getExtras().get("data"); + panelPostion.setText(AddressNameUtil.getAddressName((String) data.getExtras().get("data"))); + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("devicePosition") != null) { + deviceAddress = data.getExtras().get("addressId").toString(); + panelPostion.setText(AddressNameUtil.getAddressName((String) data.getExtras().get("addressId"))); + } + break; + } + } + + /*private void queryStudyValue() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", SITUATIONAL_TRIGGER); + map.put("ziId", ziId); + netWorkUtil.requestGetByAsy(SUBSET_GETCONTROLKEYS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("subsetGetControlKeys", "onSuccess()" + respone); + Key5Entity obj = JSON.parseObject(respone, Key5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + }*/ + + private void queryStudyValue() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", SITUATIONAL_TRIGGER); + map.put("ziId", ziId); + map.put("deviceId", id); + util.requestPostByAsynew(NetWorkUrl.QUERY_CONTROL_KEY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryStudyValue", "onSuccess: " + respone); + StudyValueEntity entity = JSON.parseObject(respone, StudyValueEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_SUCCESS); + msg.obj = respone; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceModel", deviceModel); + map.put("deviceType", SITUATIONAL_TRIGGER); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(SituationalTriggerFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + SituationalTriggerFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/card/YblPanelDetailFragment.java b/app/src/main/java/com/yonsz/z1/ybl/card/YblPanelDetailFragment.java new file mode 100644 index 0000000..0b728df --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/card/YblPanelDetailFragment.java @@ -0,0 +1,537 @@ +package com.yonsz.z1.ybl.card; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.StudyValueEntity; +import com.yonsz.z1.database.entity.entity4.YblPanelControlEvent; +import com.yonsz.z1.database.entity.entity5.Key5Entity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.ybl.panel.PanelModelSelectActivity; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.lang.ref.WeakReference; +import java.util.HashMap; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CARD_ACCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.SITUATIONAL_TRIGGER; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_GETCONTROLKEYS; + +public class YblPanelDetailFragment extends BaseFragment implements View.OnClickListener { + private View fragView; + private UIHandle mHandler; + private DeviceEntityV4.DataBean.DevicesBean devicesBean; + private TitleView mTitleView; + private String panelType; + private ImageView panelImage; + private TextView panelName; + private RelativeLayout congigOneRl, congigTwoRl, congigThreeRl, congigFourRl, congigFiveRl, congigSixRl, panelPostionRl; + private TextView congigOneTv, congigTwoTv, congigThreeTv, congigFourTv, congigFiveTv, congigSixTv, tv_config_two, tv_config_one, tv_panel_name_bottom; + private String modelId1 = "", modelId2 = "", modelId3 = "", modelId4 = "", modelId5 = "", modelId6 = ""; + private TextView deleteTv; + private TextView panelPostion; + private String id; + private String ziId; + private String deviceAddress; + private String response; + private String deviceModel = ""; + private int deviceCount = 2; + + public static YblPanelDetailFragment getInstance(DeviceEntityV4.DataBean.DevicesBean devicesBean) { + YblPanelDetailFragment fragment = new YblPanelDetailFragment(); + fragment.devicesBean = devicesBean; + return fragment; + } + + public void onEventMainThread(YblPanelControlEvent event) { + /*String msg = event.getMsg(); + Log.e("nettyUtil", msg + msg.length()); + YblEntity nettyEntity = JSON.parseObject(msg, YblEntity.class); + String deviceId = nettyEntity.getDeviceId(); + if (id.equals(deviceId)) { + int key = Integer.parseInt(nettyEntity.getKey()); + String modelId = ""; + String keyName = ""; + if (null != response) { + try { + JSONObject jsonObject = new JSONObject(response); + JSONObject object = jsonObject.getJSONObject("obj"); + if (!object.isNull("key" + key)) { + modelId = object.getJSONObject("key" + key).getString("modelId"); + keyName = object.getJSONObject("key" + key).getString("name"); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + Intent intent = new Intent(getContext(), PanelModelSelectActivity.class); + intent.putExtra("id", id); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("ziId", ziId); + intent.putExtra("configKey", "" + key); + intent.putExtra("keyName", keyName); + intent.putExtra("modelId", modelId); + startActivity(intent); + }*/ + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.activity_ybl_panel_three, null); + initView(fragView); + initListener(); + return fragView; + } + + @Override + public void onResume() { + super.onResume(); + queryStudyValue(); + } + + private void initListener() { + congigOneRl.setOnClickListener(this); + congigTwoRl.setOnClickListener(this); + congigThreeRl.setOnClickListener(this); + congigFourRl.setOnClickListener(this); + congigFiveRl.setOnClickListener(this); + congigSixRl.setOnClickListener(this); + deleteTv.setOnClickListener(this); + panelPostionRl.setOnClickListener(this); + } + + private void initView(View fragView) { + // devicesBean = (DeviceEntityV4.DataBean.DevicesBean) getArguments().get("DATA"); + id = devicesBean.getId(); + ziId = devicesBean.getZiId(); + panelType = String.valueOf(devicesBean.getDeviceCount()); + deviceCount = devicesBean.getDeviceCount(); + deviceModel = devicesBean.getDeviceModel(); + deviceAddress = devicesBean.getAddressId(); + congigOneRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_one); + congigTwoRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_two); + congigThreeRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_three); + congigFourRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_four); + congigFiveRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_five); + congigSixRl = (RelativeLayout) fragView.findViewById(R.id.rl_config_six); + panelPostionRl = (RelativeLayout) fragView.findViewById(R.id.rl_panel_position); + congigOneTv = (TextView) fragView.findViewById(R.id.tv_config_one_position); + congigTwoTv = (TextView) fragView.findViewById(R.id.tv_config_two_position); + congigThreeTv = (TextView) fragView.findViewById(R.id.tv_config_three_position); + congigFourTv = (TextView) fragView.findViewById(R.id.tv_config_four_position); + congigFiveTv = (TextView) fragView.findViewById(R.id.tv_config_five_position); + congigSixTv = (TextView) fragView.findViewById(R.id.tv_config_six_position); + tv_config_one = (TextView) fragView.findViewById(R.id.tv_config_one); + tv_config_two = (TextView) fragView.findViewById(R.id.tv_config_two); + tv_panel_name_bottom = (TextView) fragView.findViewById(R.id.tv_panel_name_bottom); + panelImage = (ImageView) fragView.findViewById(R.id.iv_panel_image); + panelName = (TextView) fragView.findViewById(R.id.iv_panel_name); + deleteTv = (TextView) fragView.findViewById(R.id.btn_exit); + panelPostion = (TextView) fragView.findViewById(R.id.tv_panel_position); + mTitleView = (TitleView) fragView.findViewById(R.id.title_panel_three); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setHead("插卡面板"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + getActivity().finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + tv_config_one.setText("插卡配置:"); + tv_config_two.setText("拔卡配置:"); + + panelPostion.setText(AddressNameUtil.getAddressName(deviceAddress)); + switch (panelType) { + case "1": + panelImage.setImageResource(R.drawable.pic_scene_one); + panelName.setText(R.string.panel_one_big); + congigTwoRl.setVisibility(View.GONE); + congigThreeRl.setVisibility(View.GONE); + congigFourRl.setVisibility(View.GONE); + congigFiveRl.setVisibility(View.GONE); + congigSixRl.setVisibility(View.GONE); + break; + case "2": + // panelImage.setImageResource(R.drawable.pic_card); + panelName.setText("插卡面板"); + deleteTv.setVisibility(View.VISIBLE); + tv_panel_name_bottom.setVisibility(View.GONE); + congigThreeRl.setVisibility(View.GONE); + congigFourRl.setVisibility(View.GONE); + congigFiveRl.setVisibility(View.GONE); + congigSixRl.setVisibility(View.GONE); + break; + case "3": + panelImage.setImageResource(R.drawable.pic_scene_three); + panelName.setText(R.string.panel_three_big); + congigFourRl.setVisibility(View.GONE); + congigFiveRl.setVisibility(View.GONE); + congigSixRl.setVisibility(View.GONE); + break; + case "4": + switch (deviceModel) { + case "0": + panelImage.setImageResource(R.drawable.pic_scene_four); + break; + case "1": + panelImage.setImageResource(R.drawable.pic_t3_scene_four); + break; + case "2": + panelImage.setImageResource(R.drawable.pic_t5_scene_four); + break; + } + panelName.setText(R.string.panel_four_big); + congigFiveRl.setVisibility(View.GONE); + congigSixRl.setVisibility(View.GONE); + break; + case "6": + switch (deviceModel) { + case "0": + panelImage.setImageResource(R.drawable.pic_scene_six); + break; + case "1": + panelImage.setImageResource(R.drawable.pic_t3_scene_six); + break; + case "2": + panelImage.setImageResource(R.drawable.pic_t5_scene_six); + break; + } + panelName.setText(R.string.panel_six_big); + break; + } + } + + @Override + public void onClick(View v) { + Intent intent = new Intent(getContext(), PanelModelSelectActivity.class); + intent.putExtra("id", id); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", CARD_ACCESS); + switch (v.getId()) { + case R.id.rl_config_one: + intent.putExtra("configKey", "1"); + intent.putExtra("keyName", congigOneTv.getText().toString()); + intent.putExtra("modelId", modelId1); + startActivity(intent); + break; + case R.id.rl_config_two: + intent.putExtra("configKey", "2"); + intent.putExtra("keyName", congigTwoTv.getText().toString()); + intent.putExtra("modelId", modelId2); + startActivity(intent); + break; + case R.id.rl_config_three: + intent.putExtra("configKey", "3"); + intent.putExtra("keyName", congigThreeTv.getText().toString()); + intent.putExtra("modelId", modelId3); + startActivity(intent); + break; + case R.id.rl_config_four: + intent.putExtra("configKey", "4"); + intent.putExtra("keyName", congigFourTv.getText().toString()); + intent.putExtra("modelId", modelId4); + startActivity(intent); + break; + case R.id.rl_config_five: + intent.putExtra("configKey", "5"); + intent.putExtra("keyName", congigFiveTv.getText().toString()); + intent.putExtra("modelId", modelId5); + startActivity(intent); + break; + case R.id.rl_config_six: + intent.putExtra("configKey", "6"); + intent.putExtra("keyName", congigSixTv.getText().toString()); + intent.putExtra("modelId", modelId6); + startActivity(intent); + break; + case R.id.btn_exit: + ConfirmDialog dialog = new ConfirmDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + // deleteChildDevice(); + subsetDelete(); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.rl_panel_position: + /*intent = new Intent(this, UpadateYblPanelPosActivity.class); + intent.putExtra("id", id); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", deviceAddress); + startActivityForResult(intent, MODIFY_ADDRESS_RESULT);*/ + + intent = new Intent(getContext(), ModifyRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", CARD_ACCESS); + intent.putExtra("deviceModel", "0"); + intent.putExtra("addressId", deviceAddress); + intent.putExtra("deviceId", id); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + break; + } + } + + public void callBackUiThread(Message msg) { + switch (msg.what) { + case DELETE_CHILDDEVICE_SUCCESS: + ToastUtil.show(getContext(), "删除成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }, 2000); + break; + case QUERY_STUDY_SUCCESS: + response = (String) msg.obj; + try { + JSONObject jsonObject = new JSONObject(response); + JSONObject object = jsonObject.getJSONObject("obj"); + if (!object.isNull("key1")) { + congigOneTv.setText(object.getJSONObject("key1").getString("name")); + modelId1 = object.getJSONObject("key1").getString("modelId"); + } else { + congigOneTv.setText(""); + modelId1 = ""; + } + if (!object.isNull("key2")) { + congigTwoTv.setText(object.getJSONObject("key2").getString("name")); + modelId2 = object.getJSONObject("key2").getString("modelId"); + } else { + congigTwoTv.setText(""); + modelId2 = ""; + } + if (!object.isNull("key3")) { + congigThreeTv.setText(object.getJSONObject("key3").getString("name")); + modelId3 = object.getJSONObject("key3").getString("modelId"); + } else { + congigThreeTv.setText(""); + modelId3 = ""; + } + if (!object.isNull("key4")) { + congigFourTv.setText(object.getJSONObject("key4").getString("name")); + modelId4 = object.getJSONObject("key4").getString("modelId"); + } else { + congigFourTv.setText(""); + modelId4 = ""; + } + if (!object.isNull("key5")) { + congigFiveTv.setText(object.getJSONObject("key5").getString("name")); + modelId5 = object.getJSONObject("key5").getString("modelId"); + } else { + congigFiveTv.setText(""); + modelId5 = ""; + } + if (!object.isNull("key6")) { + congigSixTv.setText(object.getJSONObject("key6").getString("name")); + modelId6 = object.getJSONObject("key6").getString("modelId"); + } else { + congigSixTv.setText(""); + modelId6 = ""; + } + } catch (JSONException e) { + e.printStackTrace(); + Log.i("queryStudyValue", "TvA1Fragment callBackUiThread()" + e.getMessage()); + } + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_ADDRESS_RESULT: + if (data != null && data.getExtras().get("data") != null) { + deviceAddress = (String) data.getExtras().get("data"); + panelPostion.setText(AddressNameUtil.getAddressName((String) data.getExtras().get("data"))); + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("devicePosition") != null) { + deviceAddress = data.getExtras().get("addressId").toString(); + panelPostion.setText(AddressNameUtil.getAddressName((String) data.getExtras().get("addressId"))); + } + break; + } + } + + private void queryStudyValue() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", CARD_ACCESS); + map.put("ziId", ziId); + netWorkUtil.requestGetByAsy(SUBSET_GETCONTROLKEYS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("subsetGetControlKeys", "onSuccess()" + respone); + Key5Entity obj = JSON.parseObject(respone, Key5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /*private void queryStudyValue() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", CARD_ACCESS); + map.put("ziId", ziId); + map.put("deviceId", id); + util.requestPostByAsynew(NetWorkUrl.QUERY_CONTROL_KEY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryStudyValue", "onSuccess: " + respone); + StudyValueEntity entity = JSON.parseObject(respone, StudyValueEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_SUCCESS); + msg.obj = respone; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + }*/ + + private void subsetDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceModel", deviceModel); + map.put("deviceType", CARD_ACCESS); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(YblPanelDetailFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + YblPanelDetailFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/light/LightItemAdpter.java b/app/src/main/java/com/yonsz/z1/ybl/light/LightItemAdpter.java new file mode 100644 index 0000000..eae2872 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/light/LightItemAdpter.java @@ -0,0 +1,178 @@ +package com.yonsz.z1.ybl.light; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.AppIdUtil; + +/** + * Created by Administrator on 2019/12/18. + */ + +public class LightItemAdpter extends RecyclerView.Adapter { + + private YblEntity mObjEntity; + private Context mContext; + private YblLightAdapter.OnItemLightClickListener mLightClickListener; + private int parentPosition; + + public LightItemAdpter(Context mContext, YblEntity mObjEntity, int parentPosition) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + this.parentPosition = parentPosition; + } + + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_item_one, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.getLights() == null ? 0 : mObjEntity.getLights().size(); + } + + public void setOnItemLightClickListener(YblLightAdapter.OnItemLightClickListener listener) { + this.mLightClickListener = listener; + } + + private void setLightIcon(ImageView yblLightIcon, int lightType, TextView mLightType, String deviceName) { + if (AppIdUtil.isWork()) { + yblLightIcon.setVisibility(View.GONE); + mLightType.setVisibility(View.VISIBLE); + if (!deviceName.isEmpty()) { + mLightType.setText(deviceName); + } else { + mLightType.setText("灯光"); + } + } else { + switch (String.valueOf(lightType)) { + case "0"://灯光 + yblLightIcon.setImageResource(R.drawable.icon_light); + break; + case "1"://筒灯 + yblLightIcon.setImageResource(R.drawable.icon_tubelamp); + break; + case "2"://灯带 + yblLightIcon.setImageResource(R.drawable.icon_lightbelt); + break; + case "3"://射灯 + yblLightIcon.setImageResource(R.drawable.icon_lamp); + break; + case "4"://壁灯 + yblLightIcon.setImageResource(R.drawable.icon_walllamp); + break; + case "5"://吊灯 + yblLightIcon.setImageResource(R.drawable.icon_chandelier); + break; + case "6"://廊灯 + yblLightIcon.setImageResource(R.drawable.icon_porchlamp); + break; + case "7"://排气扇 + yblLightIcon.setImageResource(R.drawable.icon_exhaust); + break; + default: + yblLightIcon.setImageResource(R.drawable.icon_light); + break; + } + } + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private ImageView yblOneIcon, positionIcon; + private TextView positionOne, mLightOpenOne, mLightCloseOne, mLightType, mLightPosition; + + + public MessageViewHolder(View view) { + super(view); + yblOneIcon = (ImageView) itemView.findViewById(R.id.tv_one_ybl_icon); + mLightType = (TextView) itemView.findViewById(R.id.tv_one_ybl_type); + mLightPosition = (TextView) itemView.findViewById(R.id.tv_one_position_type); + positionOne = (TextView) itemView.findViewById(R.id.tv_one_position); + mLightOpenOne = (TextView) itemView.findViewById(R.id.tv_one_open); + mLightCloseOne = (TextView) itemView.findViewById(R.id.tv_one_close); + positionIcon = (ImageView) itemView.findViewById(R.id.tv_one_position_icon); + } + + public void setViews(final int position) { + final YblEntity detaiEntity = mObjEntity; + if (AppIdUtil.isWork()) { + positionIcon.setVisibility(View.GONE); + mLightPosition.setVisibility(View.VISIBLE); + mLightPosition.setText(AddressNameUtil.getAddressName(detaiEntity.getLights().get(position).getAddressId())); + } else { + AddressNameUtil.setAddressIcon(mContext, positionIcon, detaiEntity.getLights().get(position).getAddressId()); + } + + setLightIcon(yblOneIcon, detaiEntity.getLights().get(position).getLightType(), mLightType, detaiEntity.getLights().get(position).getDeviceName()); + + mLightOpenOne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(parentPosition, 1, position); + } + } + }); + mLightCloseOne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(parentPosition, 0, position); + } + } + }); + + + positionIcon.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(parentPosition, 1, position); + } + } + }); + mLightPosition.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(parentPosition, 1, position); + } + } + }); + yblOneIcon.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(parentPosition, 0, position); + } + } + }); + mLightType.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(parentPosition, 0, position); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/light/SafeHandSearchAdapter.java b/app/src/main/java/com/yonsz/z1/ybl/light/SafeHandSearchAdapter.java new file mode 100644 index 0000000..827c99e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/light/SafeHandSearchAdapter.java @@ -0,0 +1,123 @@ +package com.yonsz.z1.ybl.light; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.YblEntity; + +import java.util.List; + +import static com.yonsz.z1.net.Constans.CARD_ACCESS; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.SECURITY_TRIGGER; +import static com.yonsz.z1.net.Constans.SERVICE_PANEL_485; +import static com.yonsz.z1.net.Constans.SITUATIONAL_TRIGGER; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; + +/** + * Created by Administrator on 2017/12/20. + */ + +public class SafeHandSearchAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mObjEntity; + private OnItemLightClickListener mLightClickListener; + private String deviceType, deviceModel; + + public SafeHandSearchAdapter(Context mContext, List mObjEntity, String deviceType, String deviceModel) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + this.deviceType = deviceType; + this.deviceModel = deviceModel; + } + + + @Override + public SafeHandSearchAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl_hand, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(SafeHandSearchAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + public void setOnItemLightClickListener(OnItemLightClickListener listener) { + this.mLightClickListener = listener; + } + + public interface OnItemLightClickListener { + + public void onLearnLightClick(int position, int i, int j); + + public void onLightOpenCloseClick(int position, int i); + + public void onVoiceClick(int position, int voiceControlTag, int childPosition); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView yblNameOne; + private ImageView yblIcon; + private ImageView iv_top; + + public MessageViewHolder(View view) { + super(view); + yblNameOne = (TextView) itemView.findViewById(R.id.tv_light_name); + yblIcon = (ImageView) itemView.findViewById(R.id.iv_left_icon); + iv_top = (ImageView) itemView.findViewById(R.id.iv_top); + } + + public void setViews(final int position) { + switch (deviceType) { + case DOOR_LOCK_TAG: + yblIcon.setImageResource(R.drawable.pic_add_magnetism_jd); + yblNameOne.setText("门磁探测器"); + break; + case INFRARED_TAG: + yblIcon.setImageResource(R.drawable.pic_add_infrared_jd); + yblNameOne.setText("红外探测器"); + break; + case SMOKE_TAG: + yblIcon.setImageResource(R.drawable.pic_add_smoke_jd); + yblNameOne.setText("烟雾探测器"); + break; + case WATER_TAG: + yblIcon.setImageResource(R.drawable.pic_add_water_jd); + yblNameOne.setText("水浸探测器"); + break; + case GAS_TAG: + if (deviceModel.equals("1")) { + yblIcon.setImageResource(R.drawable.pic_add_gas_jd); + yblNameOne.setText("燃气探测器"); + } else { + yblIcon.setImageResource(R.drawable.pic_add_wall_hanging_gas_jd); + yblNameOne.setText("壁挂燃气探测器"); + } + break; + } + if (mObjEntity.get(position).getContext().getValue().equals("1")){ + iv_top.setVisibility(View.GONE); + }else { + iv_top.setVisibility(View.VISIBLE); + } + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/light/YblHandSearchActivity.java b/app/src/main/java/com/yonsz/z1/ybl/light/YblHandSearchActivity.java new file mode 100644 index 0000000..176ddd3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/light/YblHandSearchActivity.java @@ -0,0 +1,450 @@ +package com.yonsz.z1.ybl.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity4.YblLightEvent; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.EXECUTE_PHONE_FAIL; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MULTIFUNCTIONAL_CONTROLLER; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.NetWorkUrl.YBL_SEARCH; + +/** + * Created by Administrator on 2019/1/8. + */ + +public class YblHandSearchActivity extends BaseActivity { + private Set mNettyEntities = new LinkedHashSet<>(); + private List mYblEntities = new ArrayList<>(); + private TitleView mTitleView; + private StateButton mStateButton; + private int sec = 60; + private boolean isSearchEnd = false; + private LinearLayout chageAutoSearchLl; + private Button nextButton; + private ImageView gestureOne, gestureTwo, gestureThree; + private SwipeMenuRecyclerView mRecyclerView; + private YblHandSearchAdapter yblHandSearchAdapter; + private ImageView learnHelpIv; + private boolean isSearchHelp = false; + private String deviceType = "", deviceModel = ""; + private boolean isReAddLight = false; + private String relatedId = ""; + private TextView tv_declare, tv_bind_guide; + + public void onEventMainThread(YblLightEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg + msg.length()); + if (msg.equals("搜索完成")) { + isSearchEnd = true; + } else { + if (msg.length() < 188) { + YblEntity nettyEntity = JSON.parseObject(msg, YblEntity.class); + if (mNettyEntities.contains(nettyEntity)) { + ToastUtil.show(this, "发现一个重复的控制器"); + } + if (!TextUtils.isEmpty(deviceType)) { + switch (deviceType) { + case MULTIFUNCTIONAL_CONTROLLER: + if (nettyEntity.getYblType().equals("04")) { + mNettyEntities.add(nettyEntity); + } + break; + case CURTAINS_TAG: + if (nettyEntity.getYblType().equals("12") || nettyEntity.getYblType().equals("04")) { + if (nettyEntity.getYblType().equals("04")) { + nettyEntity.setYblLabel("窗帘控制器"); + } + mNettyEntities.add(nettyEntity); + } + break; + case SWITCH_TAG: + if (nettyEntity.getYblType().equals("01") && nettyEntity.getLightCount() == 1) { + mNettyEntities.add(nettyEntity); + } + break; + default: + if (!nettyEntity.getYblType().equals("04") && !nettyEntity.getYblType().equals("12")) { + if (deviceModel.equals("8")) { + if (nettyEntity.getYblType().equals("02")) { + if (isReAddLight) { + nettyEntity.setYblLabel("调色控制器"); +// nettyEntity.getLights().get(0).setLightType(Integer.parseInt(getIntent().getExtras().get("lightType").toString())); + } + mNettyEntities.add(nettyEntity); + } + } else { + mNettyEntities.add(nettyEntity); + } + } + break; + } + } + Log.e("nettyUtil", mNettyEntities.size() + ""); + if (mNettyEntities.size() > 0) { + tv_bind_guide.setVisibility(View.GONE); + nextButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextButton.setClickable(true); + nextButton.setEnabled(true); + chageAutoSearchLl.setVisibility(View.GONE); + mYblEntities.clear(); + mYblEntities.addAll(new ArrayList<>(mNettyEntities)); + yblHandSearchAdapter.notifyDataSetChanged(); + } else { + tv_bind_guide.setVisibility(View.VISIBLE); + } + } + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ybl_search_hand); + initView(); + initListener(); + NettyHandlerUtil.getInstance(); + } + + @Override + public void onResume() { + super.onResume(); + isSearchHelp = false; + yblSearch("3"); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initView() { + if (null != getIntent().getExtras().get("deviceType")) { + deviceType = getIntent().getExtras().get("deviceType").toString(); + } + if (null != getIntent().getExtras().get("deviceModel")) { + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + } + if (null != getIntent().getExtras().get("isReAddLight")) { + isReAddLight = true; + relatedId = getIntent().getExtras().get("relatedId").toString(); + } + learnHelpIv = (ImageView) findViewById(R.id.iv_learn_help); + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.rc_light_list); + gestureOne = (ImageView) findViewById(R.id.iv_gesture_one); + gestureTwo = (ImageView) findViewById(R.id.iv_gesture_two); + gestureThree = (ImageView) findViewById(R.id.iv_gesture_three); + mStateButton = (StateButton) findViewById(R.id.bt_sec); + chageAutoSearchLl = (LinearLayout) findViewById(R.id.ll_change_auto); + tv_declare = (TextView) findViewById(R.id.tv_declare); + tv_bind_guide = (TextView) findViewById(R.id.tv_bind_guide); + nextButton = (Button) findViewById(R.id.bt_restart_config); + nextButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextButton.setClickable(false); + nextButton.setEnabled(false); + mTitleView = (TitleView) findViewById(R.id.title_wifi_search); + if (deviceType.equals(MULTIFUNCTIONAL_CONTROLLER)) { + if (null != getIntent().getExtras().get("subType")) { + switch (getIntent().getExtras().get("subType").toString()) { + case "0": + mTitleView.setHead("添加窗帘"); + break; + case "1": + mTitleView.setHead("添加纱帘"); + break; + case "2": + mTitleView.setHead("添加开窗器"); + break; + case "3": + mTitleView.setHead("添加车库门"); + break; + case "4": + mTitleView.setHead("添加遮阳棚"); + break; + case "5": + mTitleView.setHead("添加电动门"); + break; + case "6": + mTitleView.setHead("添加投影升降"); + break; + case "7": + mTitleView.setHead("添加幕布升降"); + break; + case "8": + mTitleView.setHead("添加电动喷淋"); + break; + case "9": + mTitleView.setHead("添加卷闸门"); + break; + default: + mTitleView.setHead("添加多功能控制器"); + break; + } + } else { + mTitleView.setHead("添加多功能控制器"); + } + } else if (deviceType.equals(CURTAINS_TAG)) { + mTitleView.setHead("添加窗帘"); + } else if (deviceType.equals(SWITCH_TAG)) { + mTitleView.setHead("添加插座"); + } else { + mTitleView.setHead(R.string.Add_Light); + } + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setHeadFuntionTxt(""); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + } + + @Override + public void onFunctionText() { + + } + }); + + yblHandSearchAdapter = new YblHandSearchAdapter(this, mYblEntities); + GridLayoutManager manage = new GridLayoutManager(this, 2); + + + // LinearLayoutManager manage = new LinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setAdapter(yblHandSearchAdapter); + + if (deviceType.equals(LIGHT_TAG) && deviceModel.equals("8")) { + chageAutoSearchLl.setVisibility(View.GONE); + if (isReAddLight) { + tv_declare.setText("请按一下面板上调色+ \n并等待匹配"); + } else { + tv_declare.setText("请按一下面板上调光+ \n并等待匹配"); + } + } + } + + @Override + public void onPause() { + super.onPause(); + yblSearch("301"); + } + + private void initListener() { + chageAutoSearchLl.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent = new Intent(YblHandSearchActivity.this, YblLightSearchActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("deviceType", deviceType); + if (null != getIntent().getExtras().get("subType")) { + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + } + if (null != getIntent().getExtras().get("version")) { + intent.putExtra("version", getIntent().getExtras().get("version").toString()); + } + startActivity(intent); + finish(); + } + }); + nextButton.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (mNettyEntities.size() > 0) { + Intent intent = new Intent(YblHandSearchActivity.this, YblLightListActivity.class); + intent.putExtra("mNettyEntities", (Serializable) mNettyEntities); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("deviceType", deviceType); + if (isReAddLight) { + intent.putExtra("isReAddLight", isReAddLight); + intent.putExtra("relatedId", relatedId); + intent.putExtra("lightType", getIntent().getExtras().get("lightType").toString()); + } + if (null != getIntent().getExtras().get("subType")) { + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + } + if (null != getIntent().getExtras().get("version")) { + intent.putExtra("version", getIntent().getExtras().get("version").toString()); + } + startActivity(intent); + finish(); + } + } + }); + learnHelpIv.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + isSearchHelp = true; + Intent intent = new Intent(YblHandSearchActivity.this, YblLightSearchFailActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("from", "YblHandSearchHelp"); + intent.putExtra("deviceType", deviceType); + if (null != getIntent().getExtras().get("subType")) { + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + } + if (isReAddLight) { + intent.putExtra("isReAddLight", isReAddLight); + intent.putExtra("relatedId", relatedId); + intent.putExtra("lightType", getIntent().getExtras().get("lightType").toString()); + } + if (null != getIntent().getExtras().get("version")) { + intent.putExtra("version", getIntent().getExtras().get("version").toString()); + } + startActivity(intent); + // finish(); + } + }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_SEC: + if (sec > 1) { + if (isSearchEnd && mNettyEntities.size() > 0) { + Intent intent = new Intent(YblHandSearchActivity.this, YblLightListActivity.class); + intent.putExtra("mNettyEntities", (Serializable) mNettyEntities); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + if (null != getIntent().getExtras().get("subType")) { + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + } + if (null != getIntent().getExtras().get("version")) { + intent.putExtra("version", getIntent().getExtras().get("version").toString()); + } + startActivity(intent); + finish(); + } else { + if (isSearchHelp) { + + } else { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } + } + } else { + if (mNettyEntities.size() > 0) { + Intent intent = new Intent(YblHandSearchActivity.this, YblLightListActivity.class); + intent.putExtra("mNettyEntities", (Serializable) mNettyEntities); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceType", deviceType); + intent.putExtra("deviceModel", deviceModel); + if (null != getIntent().getExtras().get("subType")) { + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + } + if (null != getIntent().getExtras().get("version")) { + intent.putExtra("version", getIntent().getExtras().get("version").toString()); + } + startActivity(intent); + finish(); + } else { + Intent intent = new Intent(YblHandSearchActivity.this, YblLightSearchFailActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("from", "YblHandSearchActivity"); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("deviceType", deviceType); + if (null != getIntent().getExtras().get("subType")) { + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + } + if (null != getIntent().getExtras().get("version")) { + intent.putExtra("version", getIntent().getExtras().get("version").toString()); + } + startActivity(intent); + finish(); + } + } + if (sec > 1) { + int i = sec % 3; + switch (i) { + case 2: + gestureOne.setVisibility(View.VISIBLE); + gestureTwo.setVisibility(View.GONE); + gestureThree.setVisibility(View.GONE); + break; + case 1: + gestureOne.setVisibility(View.GONE); + gestureTwo.setVisibility(View.VISIBLE); + gestureThree.setVisibility(View.GONE); + break; + case 0: + gestureOne.setVisibility(View.GONE); + gestureTwo.setVisibility(View.GONE); + gestureThree.setVisibility(View.VISIBLE); + break; + default: + break; + } + } + break; + } + } + + private void yblSearch(String type) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("type", type); + netWorkUtil.requestPostByAsynewApi(YBL_SEARCH, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("yblSearch", "onSuccess()" + respone); + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/light/YblHandSearchAdapter.java b/app/src/main/java/com/yonsz/z1/ybl/light/YblHandSearchAdapter.java new file mode 100644 index 0000000..85f4fe7 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/light/YblHandSearchAdapter.java @@ -0,0 +1,79 @@ +package com.yonsz.z1.ybl.light; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.YblEntity; + +import java.util.List; + +/** + * Created by Administrator on 2017/12/20. + */ + +public class YblHandSearchAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mObjEntity; + private OnItemLightClickListener mLightClickListener; + + public YblHandSearchAdapter(Context mContext, List mObjEntity) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + } + + + @Override + public YblHandSearchAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl_hand, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(YblHandSearchAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + public void setOnItemLightClickListener(OnItemLightClickListener listener) { + this.mLightClickListener = listener; + } + + public interface OnItemLightClickListener { + + public void onLearnLightClick(int position, int i, int j); + + public void onLightOpenCloseClick(int position, int i); + + public void onVoiceClick(int position, int voiceControlTag, int childPosition); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView yblNameOne; + private ImageView yblIcon; + + public MessageViewHolder(View view) { + super(view); + yblNameOne = (TextView) itemView.findViewById(R.id.tv_light_name); + yblIcon = (ImageView) itemView.findViewById(R.id.iv_left_icon); + } + + public void setViews(final int position) { + if (mObjEntity.get(position).getYblType().equals("12")) { + yblIcon.setImageResource(R.drawable.icon_curtains); + } + yblNameOne.setText(mObjEntity.get(position).getYblLabel()); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/light/YblLightAdapter.java b/app/src/main/java/com/yonsz/z1/ybl/light/YblLightAdapter.java new file mode 100644 index 0000000..934850d --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/light/YblLightAdapter.java @@ -0,0 +1,886 @@ +package com.yonsz.z1.ybl.light; + +import android.content.Context; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.AppIdUtil; + +import java.util.List; + +/** + * Created by Administrator on 2017/12/20. + */ + +public class YblLightAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mObjEntity; + private boolean isLearn; + private OnItemLightClickListener mLightClickListener; + private boolean isDeleteChild; + private LightItemAdpter lightItemAdpter; + private int nowPosition = 100; + + public YblLightAdapter(Context mContext, List mObjEntity, boolean isLearn, boolean isDelete) { + super(); + this.mContext = mContext; + this.mObjEntity = mObjEntity; + this.isLearn = isLearn; + } + + public void setIsLearn(boolean isLearn1) { + isLearn = isLearn1; + } + + public void setIsDelete(boolean isDelete1) { + isDeleteChild = isDelete1; + } + + @Override + public YblLightAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = null; + switch (viewType) { + case 1: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl_one, + parent, false); + break; + case 2: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl_two, + parent, false); + break; + case 3: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl_three, + parent, false); + break; + case 5: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl_multi_control, + parent, false); + break; + case 6: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl, + parent, false); + break; + default: + view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_light_ybl_one, + parent, false); + break; + } + + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(YblLightAdapter.MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public int getItemViewType(int position) { + if (mObjEntity != null && mObjEntity.get(position).getLightCount() == 1) { + if (mObjEntity != null && mObjEntity.get(position).getYblType().equals("12")) { + return 5; + } else { + return 1; + } + } else if (mObjEntity != null && mObjEntity.get(position).getLightCount() == 2) { + return 2; + } else if (mObjEntity != null && mObjEntity.get(position).getLightCount() == 3) { + return 3; + } else if (mObjEntity != null && mObjEntity.get(position).getYblType().equals("04")) { + //多功能控制器,暂定为5 + return 5; + } else if (mObjEntity != null && mObjEntity.get(position).getYblType().equals("12")) { + //FSK窗帘,暂定为4 + return 5; + } else if (mObjEntity != null && mObjEntity.get(position).getYblType().equals("10")) { + //FSK窗帘,暂定为4 + return 6; + } else { + return 7; + } + } + + @Override + public int getItemCount() { + return mObjEntity.size(); + } + + public void setOnItemLightClickListener(OnItemLightClickListener listener) { + this.mLightClickListener = listener; + } + + private void setLightIcon(ImageView yblLightIcon, int lightType, TextView mLightType, String deviceName) { + if (AppIdUtil.isWork()) { + yblLightIcon.setVisibility(View.GONE); + mLightType.setVisibility(View.VISIBLE); + if (!deviceName.isEmpty()) { + mLightType.setText(deviceName); + } else { + mLightType.setText("灯光"); + } + } else { + switch (String.valueOf(lightType)) { + case "0"://灯光 + yblLightIcon.setImageResource(R.drawable.icon_light); + break; + case "1"://筒灯 + yblLightIcon.setImageResource(R.drawable.icon_tubelamp); + break; + case "2"://灯带 + yblLightIcon.setImageResource(R.drawable.icon_lightbelt); + break; + case "3"://射灯 + yblLightIcon.setImageResource(R.drawable.icon_lamp); + break; + case "4"://壁灯 + yblLightIcon.setImageResource(R.drawable.icon_walllamp); + break; + case "5"://吊灯 + yblLightIcon.setImageResource(R.drawable.icon_chandelier); + break; + case "6"://廊灯 + yblLightIcon.setImageResource(R.drawable.icon_porchlamp); + break; + case "7"://排气扇 + yblLightIcon.setImageResource(R.drawable.icon_exhaust); + break; + default: + yblLightIcon.setImageResource(R.drawable.icon_light); + break; + } + } + } + + private void setMulticontrolTypePic(ImageView yblLightIcon, String subType, TextView yblNameTwo1) { + if (AppIdUtil.isWork()) { + yblLightIcon.setVisibility(View.GONE); + yblNameTwo1.setVisibility(View.VISIBLE); + switch (subType) { + case "0": + yblNameTwo1.setText("窗帘"); + break; + case "1": + yblNameTwo1.setText("纱帘"); + break; + case "2": + yblNameTwo1.setText("开窗器"); + break; + case "3": + yblNameTwo1.setText("车库门"); + break; + case "4": + yblNameTwo1.setText("遮阳棚"); + break; + case "5": + yblNameTwo1.setText("电动门"); + break; + case "6": + yblNameTwo1.setText("投影升降"); + break; + case "7": + yblNameTwo1.setText("幕布升降"); + break; + case "8": + yblNameTwo1.setText("电动喷淋"); + break; + case "9": + yblNameTwo1.setText("卷闸门"); + break; + default: + yblNameTwo1.setText("控制器"); + break; + } + } else { + switch (subType) { + case "0": + yblLightIcon.setImageResource(R.drawable.icon_curtains); + break; + case "1": + yblLightIcon.setImageResource(R.drawable.icon_gauze); + break; + case "2": + yblLightIcon.setImageResource(R.drawable.pic_window_open_close); + break; + case "3": + yblLightIcon.setImageResource(R.drawable.icon_garage); + break; + case "4": + yblLightIcon.setImageResource(R.drawable.icon_sunshade); + break; + case "5": + yblLightIcon.setImageResource(R.drawable.icon_autogate); + break; + case "6": + yblLightIcon.setImageResource(R.drawable.icon_elevator); + break; + case "7": + yblLightIcon.setImageResource(R.drawable.icon_curtain_elevator); + break; + case "8": + yblLightIcon.setImageResource(R.drawable.icon_spray); + break; + case "9": + yblLightIcon.setImageResource(R.drawable.icon_window_opener); + break; + default: + yblLightIcon.setImageResource(R.drawable.pic_multifunctional); + break; + } + } + } + + public interface OnItemLightClickListener { + + public void onLearnLightClick(int position, int i, int j); + + public void onLightOpenCloseClick(int position, int i); + + public void onVoiceClick(int position, int voiceControlTag, int childPosition); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView yblNameOne; + private CheckBox lightChooseOne; + private ImageView yblOneIcon, positionIcon; + private TextView positionOne, mLightOpenOne, mLightCloseOne, mLightType, mLightPosition; + private RelativeLayout yblOneTop; + + private TextView yblNameTWo; + private CheckBox lightChooseTWo; + private ImageView yblIconTwo1, positionIcon1; + private TextView yblNameTwo1, yblNameTwo2, yblNameTwo3, yblPositionTwo1, yblPositionTwo2, yblPositionTwo3; + private ImageView yblIconTwo2, positionIcon2, positionIcon3, yblIconTwo3; + private TextView positionTwo1, mLightOpenTwo1, mLightCloseTwo1, mLightOpenTwo3, mLightCloseTwo3; + private TextView positionTwo2, mLightOpenTwo2, mLightCloseTwo2; + private RelativeLayout yblTwoTop; + private RecyclerView rv_light; + + + public MessageViewHolder(View view) { + super(view); + yblNameOne = (TextView) itemView.findViewById(R.id.tv_ybl_name_one); + lightChooseOne = (CheckBox) itemView.findViewById(R.id.cb_device_choose_one); + yblOneIcon = (ImageView) itemView.findViewById(R.id.tv_one_ybl_icon); + mLightType = (TextView) itemView.findViewById(R.id.tv_one_ybl_type); + mLightPosition = (TextView) itemView.findViewById(R.id.tv_one_position_type); + positionOne = (TextView) itemView.findViewById(R.id.tv_one_position); + mLightOpenOne = (TextView) itemView.findViewById(R.id.tv_one_open); + mLightCloseOne = (TextView) itemView.findViewById(R.id.tv_one_close); + yblOneTop = (RelativeLayout) itemView.findViewById(R.id.ll_ybl_one_top); + positionIcon = (ImageView) itemView.findViewById(R.id.tv_one_position_icon); + + + yblNameTWo = (TextView) itemView.findViewById(R.id.tv_ybl_name_two); + lightChooseTWo = (CheckBox) itemView.findViewById(R.id.cb_device_choose2); + yblIconTwo1 = (ImageView) itemView.findViewById(R.id.tv_two_ybl_icon1); + yblIconTwo2 = (ImageView) itemView.findViewById(R.id.tv_two_ybl_icon2); + yblNameTwo1 = (TextView) itemView.findViewById(R.id.tv_two_ybl_type1); + yblNameTwo2 = (TextView) itemView.findViewById(R.id.tv_two_ybl_type2); + yblNameTwo3 = (TextView) itemView.findViewById(R.id.tv_two_ybl_type3); + yblPositionTwo1 = (TextView) itemView.findViewById(R.id.tv_two_position_type1); + yblPositionTwo2 = (TextView) itemView.findViewById(R.id.tv_two_position_type2); + yblPositionTwo3 = (TextView) itemView.findViewById(R.id.tv_two_position_type3); + positionTwo1 = (TextView) itemView.findViewById(R.id.tv_two_position1); + mLightOpenTwo1 = (TextView) itemView.findViewById(R.id.tv_two_open1); + mLightCloseTwo1 = (TextView) itemView.findViewById(R.id.tv_two_close1); + positionTwo2 = (TextView) itemView.findViewById(R.id.tv_two_position2); + mLightOpenTwo2 = (TextView) itemView.findViewById(R.id.tv_two_open2); + mLightCloseTwo2 = (TextView) itemView.findViewById(R.id.tv_two_close2); + yblTwoTop = (RelativeLayout) itemView.findViewById(R.id.ll_ybl_two_top); + positionIcon1 = (ImageView) itemView.findViewById(R.id.tv_one_position_icon1); + positionIcon2 = (ImageView) itemView.findViewById(R.id.tv_one_position_icon2); + + mLightOpenTwo3 = (TextView) itemView.findViewById(R.id.tv_three_open2); + mLightCloseTwo3 = (TextView) itemView.findViewById(R.id.tv_three_close2); + positionIcon3 = (ImageView) itemView.findViewById(R.id.tv_three_position_icon2); + yblIconTwo3 = (ImageView) itemView.findViewById(R.id.tv_three_ybl_icon2); + rv_light = (RecyclerView) itemView.findViewById(R.id.rv_light); + } + + public void setViews(final int position) { + if ((mObjEntity.get(position).getLightCount() == 1 || mObjEntity.get(position).getYblType().equals("1f")) && !mObjEntity.get(position).getYblType().equals("12")) { + final YblEntity detaiEntity = mObjEntity.get(position); + yblNameOne.setText(detaiEntity.getYblLabel()); + if (AppIdUtil.isWork()) { + positionIcon.setVisibility(View.GONE); + mLightPosition.setVisibility(View.VISIBLE); + mLightPosition.setText(AddressNameUtil.getAddressName(detaiEntity.getLights().get(0).getAddressId())); + } else { + AddressNameUtil.setAddressIcon(mContext, positionIcon, detaiEntity.getLights().get(0).getAddressId()); + } + + setLightIcon(yblOneIcon, detaiEntity.getLights().get(0).getLightType(), mLightType, detaiEntity.getLights().get(0).getDeviceName()); + + mLightOpenOne.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 0); + } + } + }); + mLightCloseOne.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 0); + } + } + }); + + //调光调速改成单选 + if (mObjEntity.get(position).getYblType().equals("02")) { + if (nowPosition == position) { + lightChooseOne.setChecked(true); + } else { + lightChooseOne.setChecked(false); + } + } + lightChooseOne.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + if (lightChooseOne.isChecked()) { + mLightClickListener.onLightOpenCloseClick(position, 0); + nowPosition = position; + } else { + mLightClickListener.onLightOpenCloseClick(position, 1); + nowPosition = 100; + } + notifyDataSetChanged(); + } + } + }); + positionIcon.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + mLightPosition.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + yblOneIcon.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + mLightType.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblOneTop.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + + } + }); + } else if (mObjEntity.get(position).getLightCount() == 2) { + final YblEntity detaiEntity = mObjEntity.get(position); + yblNameTWo.setText(detaiEntity.getYblLabel()); + /* String addressName1 = AddressNameUtil.getAddressName(detaiEntity.getLights().get(0).getAddressId()); + positionTwo1.setText(addressName1); + String addressName2 = AddressNameUtil.getAddressName(detaiEntity.getLights().get(1).getAddressId()); + positionTwo2.setText(addressName2);*/ + if (AppIdUtil.isWork()) { + positionIcon1.setVisibility(View.GONE); + positionIcon2.setVisibility(View.GONE); + yblPositionTwo1.setVisibility(View.VISIBLE); + yblPositionTwo2.setVisibility(View.VISIBLE); + yblPositionTwo1.setText(AddressNameUtil.getAddressName(detaiEntity.getLights().get(0).getAddressId())); + yblPositionTwo2.setText(AddressNameUtil.getAddressName(detaiEntity.getLights().get(1).getAddressId())); + } else { + AddressNameUtil.setAddressIcon(mContext, positionIcon1, detaiEntity.getLights().get(0).getAddressId()); + AddressNameUtil.setAddressIcon(mContext, positionIcon2, detaiEntity.getLights().get(1).getAddressId()); + } + + setLightIcon(yblIconTwo1, detaiEntity.getLights().get(0).getLightType(), yblNameTwo1, detaiEntity.getLights().get(0).getDeviceName()); + setLightIcon(yblIconTwo2, detaiEntity.getLights().get(1).getLightType(), yblNameTwo2, detaiEntity.getLights().get(1).getDeviceName()); + + mLightOpenTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 0); + } + } + }); + mLightOpenTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 1); + } + } + }); + mLightCloseTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 0); + } + } + }); + mLightCloseTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 1); + } + } + }); + + lightChooseTWo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + if (lightChooseTWo.isChecked()) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } else { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + } + }); + + positionIcon1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + yblPositionTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + positionIcon2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 1); + } + } + }); + yblPositionTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 1); + } + } + }); + yblIconTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblNameTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblIconTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 1); + } + } + }); + yblNameTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 1); + } + } + }); + yblTwoTop.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + } + }); + } else if (mObjEntity.get(position).getLightCount() == 3) { + final YblEntity detaiEntity = mObjEntity.get(position); + yblNameTWo.setText(detaiEntity.getYblLabel()); + /* String addressName1 = AddressNameUtil.getAddressName(detaiEntity.getLights().get(0).getAddressId()); + positionTwo1.setText(addressName1); + String addressName2 = AddressNameUtil.getAddressName(detaiEntity.getLights().get(1).getAddressId()); + positionTwo2.setText(addressName2);*/ + if (AppIdUtil.isWork()) { + positionIcon1.setVisibility(View.GONE); + positionIcon2.setVisibility(View.GONE); + positionIcon3.setVisibility(View.GONE); + yblPositionTwo1.setVisibility(View.VISIBLE); + yblPositionTwo2.setVisibility(View.VISIBLE); + yblPositionTwo3.setVisibility(View.VISIBLE); + yblPositionTwo1.setText(AddressNameUtil.getAddressName(detaiEntity.getLights().get(0).getAddressId())); + yblPositionTwo2.setText(AddressNameUtil.getAddressName(detaiEntity.getLights().get(1).getAddressId())); + yblPositionTwo3.setText(AddressNameUtil.getAddressName(detaiEntity.getLights().get(2).getAddressId())); + } else { + AddressNameUtil.setAddressIcon(mContext, positionIcon1, detaiEntity.getLights().get(0).getAddressId()); + AddressNameUtil.setAddressIcon(mContext, positionIcon2, detaiEntity.getLights().get(1).getAddressId()); + AddressNameUtil.setAddressIcon(mContext, positionIcon3, detaiEntity.getLights().get(2).getAddressId()); + } + setLightIcon(yblIconTwo1, detaiEntity.getLights().get(0).getLightType(), yblNameTwo1, detaiEntity.getLights().get(0).getDeviceName()); + setLightIcon(yblIconTwo2, detaiEntity.getLights().get(1).getLightType(), yblNameTwo2, detaiEntity.getLights().get(1).getDeviceName()); + setLightIcon(yblIconTwo3, detaiEntity.getLights().get(2).getLightType(), yblNameTwo3, detaiEntity.getLights().get(2).getDeviceName()); + + mLightOpenTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 0); + } + } + }); + mLightOpenTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 1); + } + } + }); + mLightOpenTwo3.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 2); + } + } + }); + mLightCloseTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 0); + } + } + }); + mLightCloseTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 1); + } + } + }); + mLightCloseTwo3.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 2); + } + } + }); + + lightChooseTWo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + if (lightChooseTWo.isChecked()) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } else { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + } + }); + + positionIcon1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + yblPositionTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + positionIcon2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 1); + } + } + }); + yblPositionTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 1); + } + } + }); + positionIcon3.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 2); + } + } + }); + yblPositionTwo3.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 2); + } + } + }); + yblIconTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblNameTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblIconTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 1); + } + } + }); + yblNameTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 1); + } + } + }); + yblIconTwo3.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 2); + } + } + }); + yblNameTwo3.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 2); + } + } + }); + yblTwoTop.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + } + }); + } else if (mObjEntity.get(position).getYblType().equals("04") || mObjEntity.get(position).getYblType().equals("12")) { + final YblEntity detaiEntity = mObjEntity.get(position); + yblNameTWo.setText(detaiEntity.getYblLabel()); + if (AppIdUtil.isWork()) { + positionIcon1.setVisibility(View.GONE); + yblPositionTwo1.setVisibility(View.VISIBLE); + yblPositionTwo1.setText(AddressNameUtil.getAddressName(detaiEntity.getLights().get(0).getAddressId())); + } else { + AddressNameUtil.setAddressIcon(mContext, positionIcon1, detaiEntity.getLights().get(0).getAddressId()); + } + if (mObjEntity.get(position).getYblType().equals("12")) { + if (AppIdUtil.isWork()) { + yblIconTwo1.setVisibility(View.GONE); + yblNameTwo1.setVisibility(View.VISIBLE); + if (detaiEntity.getSubType().equals("1")) { + yblNameTwo1.setText("纱帘"); + } else { + yblNameTwo1.setText("窗帘"); + } + } else { + if (detaiEntity.getSubType().equals("1")) { + yblIconTwo1.setImageResource(R.drawable.icon_gauze); + } else { + yblIconTwo1.setImageResource(R.drawable.icon_curtains); + } + } + mLightCloseTwo2.setText("反向"); + mLightCloseTwo2.setBackgroundResource(R.drawable.btn_round_360dp_blue); + } else { + setMulticontrolTypePic(yblIconTwo1, detaiEntity.getSubType(), yblNameTwo1); + } + + mLightOpenTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 0); + } + } + }); + mLightOpenTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 1, 1); + } + } + }); + mLightCloseTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 0); + } + } + }); + mLightCloseTwo2.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onLearnLightClick(position, 0, 1); + } + } + }); + + lightChooseTWo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + if (lightChooseTWo.isChecked()) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } else { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + } + }); + positionIcon1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + yblPositionTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 1, 0); + } + } + }); + yblIconTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblNameTwo1.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + if (mLightClickListener != null) { + mLightClickListener.onVoiceClick(position, 0, 0); + } + } + }); + yblTwoTop.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View v) { + } + }); + } else if (mObjEntity.get(position).getYblType().equals("10")) { + yblNameTWo.setText(mObjEntity.get(position).getYblLabel()); + + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext); + linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + rv_light.setLayoutManager(linearLayoutManager); + lightItemAdpter = new LightItemAdpter(mContext, mObjEntity.get(position), position); + rv_light.setAdapter(lightItemAdpter); + + lightChooseTWo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mLightClickListener != null) { + if (lightChooseTWo.isChecked()) { + mLightClickListener.onLightOpenCloseClick(position, 0); + } else { + mLightClickListener.onLightOpenCloseClick(position, 1); + } + } + } + }); + + lightItemAdpter.setOnItemLightClickListener(new OnItemLightClickListener() { + @Override + public void onLearnLightClick(int position, int i, int j) { + mLightClickListener.onLearnLightClick(position, i, j); + } + + @Override + public void onLightOpenCloseClick(int position, int i) { + mLightClickListener.onLightOpenCloseClick(position, i); + } + + @Override + public void onVoiceClick(int position, int voiceControlTag, int childPosition) { + mLightClickListener.onVoiceClick(position, voiceControlTag, childPosition); + } + }); + } + } + } + + +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/light/YblLightListActivity.java b/app/src/main/java/com/yonsz/z1/ybl/light/YblLightListActivity.java new file mode 100644 index 0000000..0fab2ee --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/light/YblLightListActivity.java @@ -0,0 +1,800 @@ +package com.yonsz.z1.ybl.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entity5.BaseVersionMultiEntity; +import com.yonsz.z1.database.entity.entity5.YBLBodyEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ShakeUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.DeviceControlActivity; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.version5.ModifyTypeActivity; +import com.yonsz.z1.version5.MulitiControlModifyActivity; +import com.yonsz.z1.version5.light.ModifyLightTypeActivity; +import com.yonsz.z1.version5.weidget.RecyclerViewNoBugLinearLayoutManager; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Set; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.EXECUTE_PHONE_FAIL; +import static com.yonsz.z1.net.Constans.GET_SWITCHER_CHANGE_INFO; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.MULTIFUNCTIONAL_CONTROLLER; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.YBL_ADD_FAIL; +import static com.yonsz.z1.net.Constans.YBL_ADD_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.YBL_ADD; +import static com.yonsz.z1.net.NetWorkUrl.YBL_CONTROL; + +/** + * Created by Administrator on 2019/1/8. + */ + +public class YblLightListActivity extends BaseActivity { + private TitleView mTitleView; + private SwipeMenuRecyclerView mRecyclerView; + private List mNettyEntities = new ArrayList<>(); + private List yblDevices = new ArrayList<>(); + private YblLightAdapter mLightAdapter; + private String deviceAddress, subtype = "0"; + private int modifyPosition, modifyChildPosition; + private LoadingDialog mLoadingDialog; + private Button nextButton; + private TextView tv_air_declare; + private String deviceType; + private String deviceModel = "0"; + private YblEntity body = new YblEntity(); + private boolean isReAddLight = false; + private String relatedId = ""; + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ybl_light_list); + NettyHandlerUtil.getInstance(); + initView(); + initListener(); + } + + private void initView() { + if (null != getIntent().getExtras().get("deviceType")) { + deviceType = getIntent().getExtras().get("deviceType").toString(); + } + if (null != getIntent().getExtras().get("deviceModel")) { + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + } + if (null != getIntent().getExtras().get("isReAddLight")) { + isReAddLight = true; + relatedId = getIntent().getExtras().get("relatedId").toString(); + } + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + Set yblEntities = (Set) getIntent().getSerializableExtra("mNettyEntities"); + nextButton = (Button) findViewById(R.id.bt_restart_config); + mNettyEntities = new ArrayList<>(yblEntities); + tv_air_declare = (TextView) findViewById(R.id.tv_air_declare); + mTitleView = (TitleView) findViewById(R.id.title_air_list); + if (deviceType.equals(MULTIFUNCTIONAL_CONTROLLER)) { + if (null != getIntent().getExtras().get("subType")) { + switch (getIntent().getExtras().get("subType").toString()) { + case "0": + mTitleView.setHead("添加窗帘"); + break; + case "1": + mTitleView.setHead("添加纱帘"); + break; + case "2": + mTitleView.setHead("添加开窗器"); + break; + case "3": + mTitleView.setHead("添加车库门"); + break; + case "4": + mTitleView.setHead("添加遮阳棚"); + break; + case "5": + mTitleView.setHead("添加电动门"); + break; + case "6": + mTitleView.setHead("添加投影升降"); + break; + case "7": + mTitleView.setHead("添加幕布升降"); + break; + case "8": + mTitleView.setHead("添加电动喷淋"); + break; + case "9": + mTitleView.setHead("添加卷闸门"); + break; + default: + mTitleView.setHead("添加多功能控制器"); + break; + } + } else { + mTitleView.setHead("添加多功能控制器"); + } + } else if (deviceType.equals(CURTAINS_TAG)) { + mTitleView.setHead("添加窗帘"); + } else if (deviceType.equals(SWITCH_TAG)) { + mTitleView.setHead("添加插座"); + tv_air_declare.setText("尝试以下按钮是否可用"); + } else { + mTitleView.setHead(R.string.Add_Light); + } + setInitAddressAndType(mNettyEntities); + mTitleView.setHeadFuntionGone(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + /*if (yblDevices.size() > 0) { + yblAdd(); + } else { + ToastUtil.show(getBaseContext(), "请选择灯光"); + }*/ + } + + @Override + public void onFunctionText() { + + } + }); + if (deviceType.equals(SWITCH_TAG)) { + mTitleView.setHead("添加插座"); + } + + mLightAdapter = new YblLightAdapter(this, mNettyEntities, false, false); + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.smr_child_device_list); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setItemViewCacheSize(0);//试图解决复用的问题 + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setAdapter(mLightAdapter); + + nextButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextButton.setClickable(false); + nextButton.setEnabled(false); + + if (AppIdUtil.isWork()) { + tv_air_declare.setText("尝试以下按钮是否可用,并设置设备的类型与位置"); + } else { + tv_air_declare.setText("尝试以下按钮是否可用,并设置设备的位置"); + } + } + + private void setInitAddressAndType(List nettyEntities) { + for (int i = 0; i < nettyEntities.size(); i++) { + List lights = new ArrayList<>(); + if (nettyEntities.get(i).getLightCount() != 0) { + for (int j = 0; j < nettyEntities.get(i).getLightCount(); j++) { + YblEntity.LightsBean lightsBean = new YblEntity.LightsBean(); + lightsBean.setAddressId(deviceAddress); + setInitDeviceName(lightsBean); + if (isReAddLight) { + lightsBean.setLightType(Integer.parseInt(getIntent().getExtras().get("lightType").toString())); + } else { + lightsBean.setLightType(0); + } + lights.add(lightsBean); + } + } else { + YblEntity.LightsBean lightsBean = new YblEntity.LightsBean(); + lightsBean.setAddressId(deviceAddress); + setInitDeviceName(lightsBean); + if (isReAddLight) { + lightsBean.setLightType(Integer.parseInt(getIntent().getExtras().get("lightType").toString())); + } else { + lightsBean.setLightType(0); + } + lights.add(lightsBean); + } + + /*if (nettyEntities.get(i).getLightCount() == 3) { + YblEntity.LightsBean lightsBean1 = new YblEntity.LightsBean(); + lightsBean1.setAddressId(deviceAddress); + setInitDeviceName(lightsBean1); + lightsBean1.setLightType(0); + lights.add(lightsBean1); + YblEntity.LightsBean lightsBean2 = new YblEntity.LightsBean(); + lightsBean2.setAddressId(deviceAddress); + setInitDeviceName(lightsBean2); + lightsBean2.setLightType(0); + lights.add(lightsBean2); + YblEntity.LightsBean lightsBean3 = new YblEntity.LightsBean(); + lightsBean3.setAddressId(deviceAddress); + setInitDeviceName(lightsBean3); + lightsBean3.setLightType(0); + lights.add(lightsBean3); + } else if (nettyEntities.get(i).getLightCount() == 2) { + YblEntity.LightsBean lightsBean1 = new YblEntity.LightsBean(); + lightsBean1.setAddressId(deviceAddress); + setInitDeviceName(lightsBean1); + lightsBean1.setLightType(0); + lights.add(lightsBean1); + YblEntity.LightsBean lightsBean2 = new YblEntity.LightsBean(); + lightsBean2.setAddressId(deviceAddress); + setInitDeviceName(lightsBean2); + lightsBean2.setLightType(0); + lights.add(lightsBean2); + } else { + YblEntity.LightsBean lightsBean = new YblEntity.LightsBean(); + lightsBean.setAddressId(deviceAddress); + setInitDeviceName(lightsBean); + lightsBean.setLightType(0); + lights.add(lightsBean); + }*/ + if (deviceType.equals(MULTIFUNCTIONAL_CONTROLLER)) { + mNettyEntities.get(i).setSubType(getIntent().getExtras().get("subType").toString()); + mNettyEntities.get(i).setYblLabel(mTitleView.getHead().substring(2, mTitleView.getHead().length())); + } + mNettyEntities.get(i).setLights(lights); + } + } + + private void setInitDeviceName(YblEntity.LightsBean lightsBean1) { + if (deviceType.equals(LIGHT_TAG)) { + lightsBean1.setDeviceName("灯光"); + } else if (deviceType.equals(SWITCH_TAG)) { + lightsBean1.setDeviceName("插座"); + } + } + + private void initListener() { + nextButton.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + if (yblDevices.size() > 0) { + if (deviceType.equals(MULTIFUNCTIONAL_CONTROLLER)) { + subsetAddmulti(); + } else if (deviceType.equals(CURTAINS_TAG)) { + // subsetAdd(); + subsetAddmulti(); + } else if (deviceType.equals(SWITCH_TAG)) { + subsetAddmulti(); + } else { + // subsetAddmulti(); + if (deviceModel.equals("8")) { + if (yblDevices.size() > 1) { + ToastUtil.show(getBaseContext(), "仅支持选择当前控制器,不可多选"); + } else { + subsetAdd(); + } + } else { + yblAdd(); + } + } + } else { + if (deviceType.equals(MULTIFUNCTIONAL_CONTROLLER)) { + ToastUtil.show(getBaseContext(), "请选择多功能控制器"); + } else if (deviceType.equals(CURTAINS_TAG)) { + ToastUtil.show(getBaseContext(), "请选择窗帘"); + } else if (deviceType.equals(SWITCH_TAG)) { + ToastUtil.show(getBaseContext(), "请选择插座"); + } else { + ToastUtil.show(getBaseContext(), "请选择灯光"); + } + } + } + }); + mLightAdapter.setOnItemLightClickListener(new YblLightAdapter.OnItemLightClickListener() { + @Override + public void onLearnLightClick(int position, int i, int j) { + if (deviceType.equals(MULTIFUNCTIONAL_CONTROLLER) || deviceType.equals(CURTAINS_TAG)) { + ShakeUtil.setShake(getApplicationContext()); + switch (i) { + case 0: + if (deviceType.equals(CURTAINS_TAG) && j == 1) { + if (deviceModel.equals("9")) { + subsetTest("stop", position); + } else { + if (deviceModel.equals("7")) { + subsetTest("stop", position); + } else { + subsetTest("reverse", position); + } + } + } else { + subsetTest("stop", position); + } + break; + case 1: + if (j == 1) { + subsetTest("close", position); + } else { + subsetTest("open", position); + } + break; + } + } else { + switch (i) { + case 0: + ShakeUtil.setShake(getApplicationContext()); + //关灯 第几路 + yblControl(mNettyEntities.get(position), i, j); + break; + case 1: + ShakeUtil.setShake(getApplicationContext()); + //开灯 + yblControl(mNettyEntities.get(position), i, j); + break; + } + } + } + + @Override + public void onLightOpenCloseClick(int position, int i) { + //是否选择了这一个 + if (i == 0) { + if (deviceModel.equals("8")) { + yblDevices.clear(); + } + yblDevices.add(mNettyEntities.get(position)); + body.setYblId(mNettyEntities.get(position).getYblId()); + body.setYblType(mNettyEntities.get(position).getYblType()); + deviceAddress = mNettyEntities.get(position).getLights().get(0).getAddressId(); + if (mNettyEntities.get(position).getSubType().isEmpty()) { + if (deviceType.equals(SWITCH_TAG)) { + subtype = "36"; + } else { + subtype = String.valueOf(mNettyEntities.get(position).getSubType()); + } + } else { + subtype = String.valueOf(mNettyEntities.get(position).getSubType()); + } + } else { + yblDevices.remove(mNettyEntities.get(position)); + } + if (yblDevices.size() > 0) { + nextButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextButton.setClickable(true); + nextButton.setEnabled(true); + } else { + nextButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextButton.setClickable(false); + nextButton.setEnabled(false); + } + } + + @Override + public void onVoiceClick(int position, int voiceControlTag, int childPosition) { + if (isReAddLight) { + return; + } + //修改位置和图标 + modifyPosition = position; + modifyChildPosition = childPosition; + if (voiceControlTag == 0) { + if (deviceType.equals(MULTIFUNCTIONAL_CONTROLLER)) { + Intent intent2; + if (AppIdUtil.isWork()) { + intent2 = new Intent(YblLightListActivity.this, ModifyTypeActivity.class); + } else { + intent2 = new Intent(YblLightListActivity.this, MulitiControlModifyActivity.class); + } + intent2.putExtra("subtype", mNettyEntities.get(modifyPosition).getSubType()); + intent2.putExtra("deviceModel", "0"); + intent2.putExtra("deviceType", deviceType); + intent2.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent2.putExtra("deviceName", mNettyEntities.get(modifyPosition).getYblLabel()); + startActivityForResult(intent2, MODIFY_DEVICE_NAME); + } else if (deviceType.equals(CURTAINS_TAG)) { + Intent intent2; + if (AppIdUtil.isWork()) { + intent2 = new Intent(YblLightListActivity.this, ModifyTypeActivity.class); + } else { + intent2 = new Intent(YblLightListActivity.this, MulitiControlModifyActivity.class); + } + intent2.putExtra("subtype", mNettyEntities.get(modifyPosition).getSubType()); + intent2.putExtra("deviceModel", "2"); + intent2.putExtra("deviceType", deviceType); + intent2.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent2.putExtra("deviceName", mNettyEntities.get(modifyPosition).getYblLabel()); + startActivityForResult(intent2, MODIFY_DEVICE_NAME); + } else if (deviceType.equals(SWITCH_TAG)) { + return; + } else { + Intent intent1; + if (AppIdUtil.isWork()) { + intent1 = new Intent(YblLightListActivity.this, ModifyTypeActivity.class); + } else { + intent1 = new Intent(YblLightListActivity.this, ModifyLightTypeActivity.class); + } + if (mNettyEntities.get(position).getLights().get(childPosition).getDeviceName().isEmpty()) { + intent1.putExtra("deviceName", "灯光"); + } else { + intent1.putExtra("deviceName", mNettyEntities.get(position).getLights().get(childPosition).getDeviceName()); + } + intent1.putExtra("lightType", mNettyEntities.get(position).getLights().get(childPosition).getLightType()); + intent1.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent1.putExtra("deviceType", LIGHT_TAG); + intent1.putExtra("deviceModel", "2"); + startActivityForResult(intent1, MODIFY_DEVICE_NAME); + } + } else if (voiceControlTag == 1) { + Intent intent1 = new Intent(YblLightListActivity.this, ModifyRoomActivity.class); + intent1.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent1.putExtra("deviceType", LIGHT_TAG); + intent1.putExtra("deviceModel", ""); + intent1.putExtra("addressId", mNettyEntities.get(position).getLights().get(childPosition).getAddressId()); + startActivityForResult(intent1, MODIFY_DEVICE_NAME); + } + /*Intent intent1 = new Intent(getBaseContext(), YblLightModifyActivity.class); + intent1.putExtra("lightType", mNettyEntities.get(position).getLights().get(childPosition).getLightType()); + intent1.putExtra("lightId", mNettyEntities.get(position).getYblId()); + intent1.putExtra("deviceAddress", mNettyEntities.get(position).getLights().get(childPosition).getAddressId()); + intent1.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + startActivityForResult(intent1, GET_SWITCHER_CHANGE_INFO);*/ + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case YBL_ADD_SUCCESS: + case UPDATE_BLINDENTITY_NAME_SUCCESS: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + EventBus.getDefault().post( + new EventBusEntity("关闭")); + if (deviceModel.equals("8") && deviceType.equals(LIGHT_TAG)) { + BaseVersion5Entity blindTestEntity = (BaseVersion5Entity) msg.obj; + Intent intent; + if (AppIdUtil.isBaseZhiKong()) { + intent = new Intent(this, DeviceControlByRoomActivity.class); + } else { + intent = new Intent(this, DeviceControlActivity.class); + } + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addressId", deviceAddress); + intent.putExtra("deviceAddress", deviceAddress); + if (isReAddLight) { + intent.putExtra("relatedStatus", "1"); + intent.putExtra("id", blindTestEntity.getData().getRelatedId()); + } else { + intent.putExtra("id", blindTestEntity.getData().getId()); + intent.putExtra("relatedStatus", "-1"); + } + startActivity(intent); + finish(); + } else { + ToastUtil.show(this, "添加成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 2000); + } + break; + case YBL_ADD_FAIL: + case UPDATE_BLINDENTITY_NAME_FAIL: + if (null != mLoadingDialog && mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void subsetAdd() { + initLoadDialog(); + if (deviceModel.equals("8")) { + body.setDimmingType("light"); + if (isReAddLight) { + body.setDimmingType("color"); + body.setRelatedId(relatedId); + } + } + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("addressId", deviceAddress); + map.put("subtype", subtype); + if (null != getIntent().getExtras().get("floor")) { + map.put("floor", getIntent().getExtras().get("floor").toString()); + } + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, JSONObject.toJSONString(body), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(YBL_ADD_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(YBL_ADD_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(YBL_ADD_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void yblAdd() { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("yblDevices", JSONObject.toJSONString(yblDevices)); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + if (null != getIntent().getExtras().get("version")) { + map.put("version", getIntent().getExtras().get("version").toString()); + } + netWorkUtil.requestPostByAsynewApi(YBL_ADD, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("yblAdd", "onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(YBL_ADD_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(YBL_ADD_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(YBL_ADD_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void yblControl(YblEntity nettyEntity, int i, int j) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("yblId", nettyEntity.getYblId()); + map.put("yblType", nettyEntity.getYblType()); + map.put("openFlag", String.valueOf(i)); + map.put("lightOrder", String.valueOf(j + 1)); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("isSend", String.valueOf(true)); + if (null != getIntent().getExtras().get("version")) { + map.put("version", getIntent().getExtras().get("version").toString()); + } + netWorkUtil.requestPostByAsynewApi(YBL_CONTROL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("yblControl", "onSuccess()" + respone); + + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case GET_SWITCHER_CHANGE_INFO: + if (data != null && data.getExtras().get("lightType") != null) { + int lightType = Integer.parseInt(data.getExtras().get("lightType").toString()); + String addressId = data.getExtras().get("addressId").toString(); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setLightType(lightType); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setAddressId(addressId); + mLightAdapter.notifyDataSetChanged(); + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("addressId") != null) { + String addressId = data.getExtras().get("addressId").toString(); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setAddressId(addressId); + mLightAdapter.notifyDataSetChanged(); + } + if (data != null && data.getExtras().get("lightType") != null) { + int lightType = Integer.parseInt(data.getExtras().get("lightType").toString()); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setLightType(lightType); + mNettyEntities.get(modifyPosition).setSubType(String.valueOf(lightType)); + if (null != data.getExtras().get("lightName")) { + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setDeviceName(data.getExtras().get("lightName").toString()); + } else { + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setDeviceName(""); + } + mLightAdapter.notifyDataSetChanged(); + } + if (data != null && data.getExtras().get("deviceName") != null) { + String deviceName = data.getExtras().get("deviceName").toString(); + int deviceNamePosition = Integer.parseInt(data.getExtras().get("deviceNamePosition").toString()); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setDeviceName(deviceName); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setLightType(deviceNamePosition); + mNettyEntities.get(modifyPosition).getLights().get(modifyChildPosition).setSubType(String.valueOf(deviceNamePosition)); + mNettyEntities.get(modifyPosition).setSubType(String.valueOf(deviceNamePosition)); + if (deviceType.equals(MULTIFUNCTIONAL_CONTROLLER)) { + mNettyEntities.get(modifyPosition).setYblLabel(deviceName); + } + mLightAdapter.notifyDataSetChanged(); + } + if (data != null && data.getExtras().get("plugType") != null) { + mNettyEntities.get(modifyPosition).setYblLabel(data.getExtras().get("plugName").toString()); + mNettyEntities.get(modifyPosition).setSubType(data.getExtras().get("plugType").toString()); + mLightAdapter.notifyDataSetChanged(); + } + if (yblDevices.contains(mNettyEntities.get(modifyPosition))) { + if (data != null && data.getExtras().get("plugType") != null) { + subtype = data.getExtras().get("plugType").toString(); + } + } + break; + } + } + + private void subsetTest(String key, int position) { + YblEntity yblEntity = mNettyEntities.get(position); + if (null != getIntent().getExtras().get("version")) { + yblEntity.setVersion(getIntent().getExtras().get("version").toString()); + } + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("oper", key); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_TEST, map, JSONObject.toJSONString(yblEntity), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetTest", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetAddmulti() { + initLoadDialog(); + YBLBodyEntity yblBodyEntity = new YBLBodyEntity(); + List itemsBeans = new ArrayList<>(); + + for (int i = 0; i < yblDevices.size(); i++) { + if (deviceType.equals(LIGHT_TAG)) { + yblBodyEntity.setYblId(yblDevices.get(i).getYblId()); + yblBodyEntity.setYblType(yblDevices.get(i).getYblType()); + yblBodyEntity.setZiId(getIntent().getExtras().get("ziId").toString()); + if (null != getIntent().getExtras().get("version")) { + yblBodyEntity.setVersion(getIntent().getExtras().get("version").toString()); + } + for (int j = 0; j < yblDevices.get(i).getLights().size(); j++) { + YBLBodyEntity.ItemsBean itemsBean = new YBLBodyEntity.ItemsBean(); + itemsBean.setAddressId(yblDevices.get(i).getLights().get(j).getAddressId()); + itemsBean.setDeviceName(yblDevices.get(i).getLights().get(j).getDeviceName()); + itemsBean.setSubtype(String.valueOf(yblDevices.get(i).getLights().get(j).getLightType())); + itemsBeans.add(itemsBean); + } + } else { + YBLBodyEntity.ItemsBean itemsBean = new YBLBodyEntity.ItemsBean(); + itemsBean.setAddressId(yblDevices.get(i).getLights().get(0).getAddressId()); + itemsBean.setYblId(yblDevices.get(i).getYblId()); + itemsBean.setYblType(yblDevices.get(i).getYblType()); + if (!yblDevices.get(i).getYblLabel().isEmpty()) { + if (deviceType.equals(SWITCH_TAG)) { + itemsBean.setDeviceName("插座"); + } else if (deviceType.equals(CURTAINS_TAG)) { + itemsBean.setDeviceName(""); + } else { + itemsBean.setDeviceName(yblDevices.get(i).getYblLabel()); + } + } + /*else { + itemsBean.setYblType("多功能控制器"); + }*/ + if (yblDevices.get(i).getSubType().isEmpty()) { + if (deviceType.equals(SWITCH_TAG)) { + itemsBean.setSubtype("36"); + } else if (deviceType.equals(CURTAINS_TAG)) { + itemsBean.setSubtype("0"); + } else { + itemsBean.setSubtype("254"); + } + } else { + itemsBean.setSubtype(yblDevices.get(i).getSubType()); + } + itemsBeans.add(itemsBean); + } + } + yblBodyEntity.setItems(itemsBeans); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADDMULTI, map, JSONObject.toJSONString(yblBodyEntity), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAddmulti", "ShareDeviceActivity onSuccess()" + respone); + BaseVersionMultiEntity obj = JSON.parseObject(respone, BaseVersionMultiEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/light/YblLightModifyActivity.java b/app/src/main/java/com/yonsz/z1/ybl/light/YblLightModifyActivity.java new file mode 100644 index 0000000..6c23312 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/light/YblLightModifyActivity.java @@ -0,0 +1,455 @@ +package com.yonsz.z1.ybl.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.LightEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version4.childdevice.Light4Activity; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.GET_SWITCHER_CHANGE_INFO; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; + +/** + * Created by Administrator on 2018/7/9. + */ + +public class YblLightModifyActivity extends BaseActivity implements CompoundButton.OnCheckedChangeListener { + private TitleView mTitleView; + private ImageView dengGuangIv, tongDengIv, dengDaiIv, sheDengIv, biDengIv, diaoDengIv, langDengIv, paqiIv; + private ImageView dengGuangMark, tongDengMark, dengDaiMark, sheDengMark, biDengMark, diaoDengMark, langDengMark, paqiMark; + private String lightType1 = "0"; + + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String deviceAddress = "0"; + private List condition = new ArrayList<>(); + private String addressId; + private LoadingDialog mLoadingDialog; + private String lightId; + + public void onEventMainThread(EventBusEntity event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg); + finish(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_light_modify); + initView(); + initListener(); + } + + private void initView() { + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + lightType1 = getIntent().getExtras().get("lightType").toString(); + lightId = getIntent().getExtras().get("lightId").toString(); + addressId = deviceAddress; + dengGuangIv = (ImageView) findViewById(R.id.iv_deng_guang); + tongDengIv = (ImageView) findViewById(R.id.iv_tong_deng); + dengDaiIv = (ImageView) findViewById(R.id.iv_deng_dai); + sheDengIv = (ImageView) findViewById(R.id.iv_she_deng); + biDengIv = (ImageView) findViewById(R.id.iv_bi_deng); + diaoDengIv = (ImageView) findViewById(R.id.iv_diao_deng); + langDengIv = (ImageView) findViewById(R.id.iv_lang_deng); + paqiIv = (ImageView) findViewById(R.id.iv_pai_qi); + + dengGuangMark = (ImageView) findViewById(R.id.iv_deng_guang_mark); + tongDengMark = (ImageView) findViewById(R.id.iv_tong_deng_mark); + dengDaiMark = (ImageView) findViewById(R.id.iv_deng_dai_mark); + sheDengMark = (ImageView) findViewById(R.id.iv_she_deng_mark); + biDengMark = (ImageView) findViewById(R.id.iv_bi_deng_mark); + diaoDengMark = (ImageView) findViewById(R.id.iv_diao_deng_mark); + langDengMark = (ImageView) findViewById(R.id.iv_lang_deng_mark); + paqiMark = (ImageView) findViewById(R.id.iv_pai_qi_mark); + mTitleView = (TitleView) findViewById(R.id.title_switcher_two); + mTitleView.setHead(R.string.Edit_smart_switch_panel); + mTitleView.setHeadFuntionTxt(R.string.save); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + Intent intent = new Intent(YblLightModifyActivity.this, YblLightListActivity.class); + intent.putExtra("lightType", lightType1); + if (addressId.equals("13")) { + intent.putExtra("addressId", "0"); + } else { + intent.putExtra("addressId", String.valueOf(Integer.valueOf(addressId) + 1)); + } + setResult(GET_SWITCHER_CHANGE_INFO, intent); + finish(); + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(this); + } + + switch (deviceAddress) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + + switch (lightType1) { + case "0": + dengGuangMark.setVisibility(View.VISIBLE); + break; + case "1": + tongDengMark.setVisibility(View.VISIBLE); + break; + case "2": + dengDaiMark.setVisibility(View.VISIBLE); + break; + case "3": + sheDengMark.setVisibility(View.VISIBLE); + break; + case "4": + biDengMark.setVisibility(View.VISIBLE); + break; + case "5": + diaoDengMark.setVisibility(View.VISIBLE); + break; + case "6": + langDengMark.setVisibility(View.VISIBLE); + break; + case "7": + paqiMark.setVisibility(View.VISIBLE); + break; + default: + dengGuangMark.setVisibility(View.VISIBLE); + break; + } + } + + private void initListener() { + dengGuangIv.setOnClickListener(this); + tongDengIv.setOnClickListener(this); + dengDaiIv.setOnClickListener(this); + sheDengIv.setOnClickListener(this); + biDengIv.setOnClickListener(this); + diaoDengIv.setOnClickListener(this); + langDengIv.setOnClickListener(this); + paqiIv.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_deng_guang: + lightType1 = "0"; + dengGuangMark.setVisibility(View.VISIBLE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_tong_deng: + lightType1 = "1"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.VISIBLE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_deng_dai: + lightType1 = "2"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.VISIBLE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_she_deng: + lightType1 = "3"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.VISIBLE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_bi_deng: + lightType1 = "4"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.VISIBLE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_diao_deng: + lightType1 = "5"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.VISIBLE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_lang_deng: + lightType1 = "6"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.VISIBLE); + paqiMark.setVisibility(View.GONE); + break; + case R.id.iv_pai_qi: + lightType1 = "7"; + dengGuangMark.setVisibility(View.GONE); + tongDengMark.setVisibility(View.GONE); + dengDaiMark.setVisibility(View.GONE); + sheDengMark.setVisibility(View.GONE); + biDengMark.setVisibility(View.GONE); + diaoDengMark.setVisibility(View.GONE); + langDengMark.setVisibility(View.GONE); + paqiMark.setVisibility(View.VISIBLE); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_BLINDENTITY_NAME_SUCCESS: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + LightEntity blindTestEntity = (LightEntity) msg.obj; + Intent intent = new Intent(YblLightModifyActivity.this, Light4Activity.class); + intent.putExtra("devicePosition", blindTestEntity.getObj().getAddressName().toString()); + intent.putExtra("lightType", blindTestEntity.getObj().getLightType().toString()); + intent.putExtra("addressId", blindTestEntity.getObj().getAddressId().toString()); + setResult(MODIFY_DEVICE_NAME, intent); + finish(); + break; + case UPDATE_BLINDENTITY_NAME_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + //如果是时间筛选 + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + switch (id) { + case R.id.cb_position0: + if (isChecked) + addressId = "0"; + break; + case R.id.cb_position1: + if (isChecked) + addressId = "1"; + break; + case R.id.cb_position2: + if (isChecked) + addressId = "2"; + break; + case R.id.cb_position3: + if (isChecked) + addressId = "3"; + break; + case R.id.cb_position4: + if (isChecked) + addressId = "4"; + break; + case R.id.cb_position5: + if (isChecked) + addressId = "5"; + break; + case R.id.cb_position6: + if (isChecked) + addressId = "6"; + break; + case R.id.cb_position7: + if (isChecked) + addressId = "7"; + break; + case R.id.cb_position8: + if (isChecked) + addressId = "8"; + break; + case R.id.cb_position9: + if (isChecked) + addressId = "9"; + break; + case R.id.cb_position10: + if (isChecked) + addressId = "10"; + break; + case R.id.cb_position11: + if (isChecked) + addressId = "11"; + break; + case R.id.cb_position12: + if (isChecked) + addressId = "12"; + break; + case R.id.cb_position13: + if (isChecked) + addressId = "13"; + break; + } + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/light/YblLightSearchActivity.java b/app/src/main/java/com/yonsz/z1/ybl/light/YblLightSearchActivity.java new file mode 100644 index 0000000..3791a83 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/light/YblLightSearchActivity.java @@ -0,0 +1,484 @@ +package com.yonsz.z1.ybl.light; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.animation.AlphaAnimation; +import android.view.animation.AnimationUtils; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity4.YblLightEvent; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.Set; + +import static com.yonsz.z1.UniKongApp.getActivity; +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.EXECUTE_PHONE_FAIL; +import static com.yonsz.z1.net.Constans.MULTIFUNCTIONAL_CONTROLLER; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.NetWorkUrl.YBL_SEARCH; + +/** + * Created by Administrator on 2019/1/8. + */ + +public class YblLightSearchActivity extends BaseActivity { + private static final int SEARCH_YBL_LIGHT_CIRCLE = 1; + private static final int SEARCH_YBL_LIGHT_MARK = 2; + private Set mNettyEntities = new LinkedHashSet<>(); + private TitleView mTitleView; + private StateButton mStateButton; + private int sec = 20; + private ImageView mScanTop; + private RotateAnimation rotateAnimation; + private AlphaAnimation alphaAnimation; + private ImageView mImageView01, mImageView02, mImageView03, mImageView04, mImageView05; + private ImageView markIv01, markIv02, markIv03, markIv04, markIv05; + private ImageView circleIv01, circleIv02, circleIv03, circleIv04, circleIv05; + private boolean isOne = true, isTwo = true, isThree = true, isFour = true, isFive = true; + private boolean isSearchEnd = false; + private String deviceType = ""; + + public void onEventMainThread(YblLightEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg + msg.length()); + if (msg.equals("搜索完成")) { + isSearchEnd = true; + } else { + if (msg.length() < 188) { + YblEntity nettyEntity = JSON.parseObject(msg, YblEntity.class); + + if (!TextUtils.isEmpty(deviceType)) { + switch (deviceType) { + case MULTIFUNCTIONAL_CONTROLLER: + if (nettyEntity.getYblType().equals("04")) { + mNettyEntities.add(nettyEntity); + } + break; + case CURTAINS_TAG: + if (nettyEntity.getYblType().equals("12")) { + mNettyEntities.add(nettyEntity); + } + break; + case SWITCH_TAG: + if (nettyEntity.getYblType().equals("01") || nettyEntity.getYblType().equals("02") || nettyEntity.getYblType().equals("1f")) { + mNettyEntities.add(nettyEntity); + } + break; + default: + if (!nettyEntity.getYblType().equals("04") && !nettyEntity.getYblType().equals("12")&& !nettyEntity.getYblType().equals("1f")) { + mNettyEntities.add(nettyEntity); + } + break; + } + } + Log.e("nettyUtil", mNettyEntities.size() + ""); + switch (mNettyEntities.size()) { + case 1: + if (isOne) { + isOne = false; + Message message = mHandler.obtainMessage(SEARCH_YBL_LIGHT_CIRCLE); + message.arg1 = 1; + mHandler.sendMessage(message); + } + break; + case 2: + if (isTwo) { + isTwo = false; + Message message = mHandler.obtainMessage(SEARCH_YBL_LIGHT_CIRCLE); + message.arg1 = 2; + mHandler.sendMessage(message); + } + break; + case 3: + if (isThree) { + isThree = false; + Message message = mHandler.obtainMessage(SEARCH_YBL_LIGHT_CIRCLE); + message.arg1 = 3; + mHandler.sendMessage(message); + } + break; + case 4: + if (isFour) { + isFour = false; + Message message = mHandler.obtainMessage(SEARCH_YBL_LIGHT_CIRCLE); + message.arg1 = 4; + mHandler.sendMessage(message); + } + break; + case 5: + if (isFive) { + isFive = false; + Message message = mHandler.obtainMessage(SEARCH_YBL_LIGHT_CIRCLE); + message.arg1 = 5; + mHandler.sendMessage(message); + } + break; + default: + break; + } + } + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ybl_search); + initView(); + initListener(); + NettyHandlerUtil.getInstance(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initView() { + if (null != getIntent().getExtras().get("deviceType")) { + deviceType = getIntent().getExtras().get("deviceType").toString(); + } + mStateButton = (StateButton) findViewById(R.id.bt_sec); + mScanTop = (ImageView) findViewById(R.id.iv_scan_top); + rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(YblLightSearchActivity.this, R.anim.rotate360_anim); + alphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(YblLightSearchActivity.this, R.anim.alpha_anim); + mScanTop.startAnimation(rotateAnimation); + mTitleView = (TitleView) findViewById(R.id.title_wifi_search); + if (deviceType.equals(MULTIFUNCTIONAL_CONTROLLER)) { + if (null != getIntent().getExtras().get("subType")) { + switch (getIntent().getExtras().get("subType").toString()) { + case "0": + mTitleView.setHead("添加窗帘"); + break; + case "1": + mTitleView.setHead("添加纱帘"); + break; + case "2": + mTitleView.setHead("添加开窗器"); + break; + case "3": + mTitleView.setHead("添加车库门"); + break; + case "4": + mTitleView.setHead("添加遮阳棚"); + break; + case "5": + mTitleView.setHead("添加电动门"); + break; + case "6": + mTitleView.setHead("添加投影升降"); + break; + case "7": + mTitleView.setHead("添加幕布升降"); + break; + case "8": + mTitleView.setHead("添加电动喷淋"); + break; + case "9": + mTitleView.setHead("添加卷闸门"); + break; + default: + mTitleView.setHead("添加多功能控制器"); + break; + } + } else { + mTitleView.setHead("添加多功能控制器"); + } + } else if (deviceType.equals(CURTAINS_TAG)) { + mTitleView.setHead("添加窗帘"); + } else if (deviceType.equals(SWITCH_TAG)) { + mTitleView.setHead("添加插座"); + } else { + mTitleView.setHead(R.string.Add_Light); + } + // mTitleView.clearBackGroud(); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setHeadFuntionTxt(""); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (sec > 0) { + showIsFinishThis(); + } else { + finish(); + } + } + + @Override + public void onFunction() { + } + + @Override + public void onFunctionText() { + + } + }); + + mImageView01 = (ImageView) findViewById(R.id.imageView01); + mImageView02 = (ImageView) findViewById(R.id.imageView02); + mImageView03 = (ImageView) findViewById(R.id.imageView03); + mImageView04 = (ImageView) findViewById(R.id.imageView04); + mImageView05 = (ImageView) findViewById(R.id.imageView05); + markIv01 = (ImageView) findViewById(R.id.iv_mark01); + markIv02 = (ImageView) findViewById(R.id.iv_mark02); + markIv03 = (ImageView) findViewById(R.id.iv_mark03); + markIv04 = (ImageView) findViewById(R.id.iv_mark04); + markIv05 = (ImageView) findViewById(R.id.iv_mark05); + circleIv01 = (ImageView) findViewById(R.id.iv_circle_search01); + circleIv02 = (ImageView) findViewById(R.id.iv_circle_search02); + circleIv03 = (ImageView) findViewById(R.id.iv_circle_search03); + circleIv04 = (ImageView) findViewById(R.id.iv_circle_search04); + circleIv05 = (ImageView) findViewById(R.id.iv_circle_search05); + + if (deviceType.equals(CURTAINS_TAG)) { + mImageView01.setImageResource(R.drawable.icon_curtains); + mImageView02.setImageResource(R.drawable.icon_curtains); + mImageView03.setImageResource(R.drawable.icon_curtains); + mImageView04.setImageResource(R.drawable.icon_curtains); + mImageView05.setImageResource(R.drawable.icon_curtains); + } + + yblSearch(); + } + + @Override + public void onBackPressed() { + // super.onBackPressed(); + if (sec > 0) { + showIsFinishThis(); + } else { + finish(); + } + } + + private void showIsFinishThis() { + ConfirmDialog dialog = new ConfirmDialog(getActivity(), new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + finish(); + break; + } + } + }); + dialog.setContent("您正在搜索设备中请勿退出,如有退出可能在接下来的20秒期间无法再次添加设备"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + } + + private void initListener() { + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mScanTop.clearAnimation(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SEARCH_YBL_LIGHT_CIRCLE: + int obj = msg.arg1; + switch (obj) { + case 1: + circleIv01.setVisibility(View.VISIBLE); + setPicAnimate(circleIv01, mImageView01, obj); + break; + case 2: + circleIv02.setVisibility(View.VISIBLE); + setPicAnimate(circleIv02, mImageView02, obj); + break; + case 3: + circleIv03.setVisibility(View.VISIBLE); + setPicAnimate(circleIv03, mImageView03, obj); + break; + case 4: + circleIv04.setVisibility(View.VISIBLE); + setPicAnimate(circleIv04, mImageView04, obj); + break; + case 5: + circleIv05.setVisibility(View.VISIBLE); + setPicAnimate(circleIv05, mImageView05, obj); + break; + } + break; + case SEARCH_YBL_LIGHT_MARK: + int obj3 = (int) msg.obj; + switch (obj3) { + case 1: + markIv01.startAnimation(alphaAnimation); + break; + case 2: + markIv02.startAnimation(alphaAnimation); + break; + case 3: + markIv03.startAnimation(alphaAnimation); + break; + case 4: + markIv04.startAnimation(alphaAnimation); + break; + case 5: + markIv05.startAnimation(alphaAnimation); + break; + } + break; + case UPDATE_SEC: + if (sec > 1) { + if (isSearchEnd && mNettyEntities.size() > 0) { + Intent intent = new Intent(YblLightSearchActivity.this, YblLightListActivity.class); + intent.putExtra("mNettyEntities", (Serializable) mNettyEntities); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("deviceType", deviceType); + if (null != getIntent().getExtras().get("subType")) { + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + } + if (null != getIntent().getExtras().get("version")) { + intent.putExtra("version", getIntent().getExtras().get("version").toString()); + } + startActivity(intent); + finish(); + } else { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } + } else { + if (mNettyEntities.size() > 0) { + Intent intent = new Intent(YblLightSearchActivity.this, YblLightListActivity.class); + intent.putExtra("mNettyEntities", (Serializable) mNettyEntities); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("deviceType", deviceType); + if (null != getIntent().getExtras().get("subType")) { + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + } + if (null != getIntent().getExtras().get("version")) { + intent.putExtra("version", getIntent().getExtras().get("version").toString()); + } + startActivity(intent); + finish(); + } else { + Intent intent = new Intent(YblLightSearchActivity.this, YblLightSearchFailActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + if (deviceType.equals(CURTAINS_TAG)) { + intent.putExtra("from", CURTAINS_TAG); + } else if (deviceType.equals(SWITCH_TAG)) { + intent.putExtra("from", SWITCH_TAG); + } else { + intent.putExtra("from", "YblLightSearchActivity"); + } + intent.putExtra("deviceType", deviceType); + if (null != getIntent().getExtras().get("subType")) { + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + } + if (null != getIntent().getExtras().get("version")) { + intent.putExtra("version", getIntent().getExtras().get("version").toString()); + } + startActivity(intent); + finish(); + } + } + break; + } + } + + private void setPicAnimate(ImageView circleIv, ImageView mImageView, int obj2) { + Message message1 = mHandler.obtainMessage(SEARCH_YBL_LIGHT_MARK); + message1.obj = obj2; + mHandler.sendMessage(message1); + circleIv.setVisibility(View.INVISIBLE); + mImageView.startAnimation(alphaAnimation); + } + + private void subsetSearch() { + String body = "{}"; + if (deviceType.equals(CURTAINS_TAG)) { + body = "{\"type\":\"" + 3 + "\"}"; + } + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_SEARCH, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetSearch", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void yblSearch() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("type", "1"); + netWorkUtil.requestPostByAsynewApi(YBL_SEARCH, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("yblSearch", "onSuccess()" + respone); + + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/light/YblLightSearchFailActivity.java b/app/src/main/java/com/yonsz/z1/ybl/light/YblLightSearchFailActivity.java new file mode 100644 index 0000000..880bf3a --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/light/YblLightSearchFailActivity.java @@ -0,0 +1,182 @@ +package com.yonsz.z1.ybl.light; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.version5.clotheshanger.FSKSearchActivity; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.SWITCH_TAG; + +/** + * Created by Administrator on 2019/1/8. + */ + +public class YblLightSearchFailActivity extends BaseActivity { + private TitleView mTitleView; + private Button mButton; + private TextView threeTv; + private LinearLayout changeAutoLl; + private TextView changeHandTv; + private LinearLayout lightFailBgLl; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ybl_search_fail); + initView(); + } + + private void initView() { + lightFailBgLl = (LinearLayout) findViewById(R.id.ll_light_fail_bg); + threeTv = (TextView) findViewById(R.id.tv_three); + changeHandTv = (TextView) findViewById(R.id.tv_ap_config); + changeAutoLl = (LinearLayout) findViewById(R.id.ll_change_auto); + mTitleView = (TitleView) findViewById(R.id.title_wifi_fail); + mTitleView.setHead("搜索失败"); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (getIntent().getExtras().get("from").toString().equals("YblHandSearchHelp")) { + /*Intent intent = new Intent(YblLightSearchFailActivity.this, YblHandSearchActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + startActivity(intent);*/ + finish(); + } else { + finish(); + } + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + mButton = (Button) findViewById(R.id.bt_restart_config); + if (getIntent().getExtras().get("from").toString().equals("YblHandSearchActivity")) { + threeTv.setVisibility(View.VISIBLE); + changeAutoLl.setVisibility(View.VISIBLE); + } + if (getIntent().getExtras().get("from").toString().equals(CURTAINS_TAG)) { + changeHandTv.setText("尝试手动搜索"); + threeTv.setText("3.如你的设备未绑定或无开关面板,可切换自动搜索进行匹配,若已绑定开关面板,可切换手动添加。"); + threeTv.setVisibility(View.VISIBLE); + changeAutoLl.setVisibility(View.VISIBLE); + } + if (getIntent().getExtras().get("from").toString().equals(SWITCH_TAG)) { + changeHandTv.setText("尝试手动搜索"); + threeTv.setText("3.如你的设备未绑定或无开关面板,可切换自动搜索进行匹配,若已绑定开关面板,可切换手动添加。"); + threeTv.setVisibility(View.VISIBLE); + changeAutoLl.setVisibility(View.VISIBLE); + } + if (getIntent().getExtras().get("from").toString().equals("YblHandSearchHelp")) { + threeTv.setVisibility(View.VISIBLE); + mButton.setVisibility(View.GONE); + mTitleView.setHead("添加帮助"); + lightFailBgLl.setVisibility(View.INVISIBLE); + } + if (null != getIntent().getExtras().get("deviceModel") && getIntent().getExtras().get("deviceModel").toString().equals("8")) { + changeAutoLl.setVisibility(View.GONE); + } + mButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent; + if (getIntent().getExtras().get("from").toString().equals("YblHandSearchActivity")) { + intent = new Intent(YblLightSearchFailActivity.this, YblHandSearchActivity.class); + } else if (getIntent().getExtras().get("from").toString().equals("FskListActivity")) { + intent = new Intent(YblLightSearchFailActivity.this, FSKSearchActivity.class); + if (null != getIntent().getExtras().get("floor")) { + intent.putExtra("floor", getIntent().getExtras().get("floor").toString()); + } + } else { + intent = new Intent(YblLightSearchFailActivity.this, YblLightSearchActivity.class); + } + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + if (null != getIntent().getExtras().get("subType")) { + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + } + if (null != getIntent().getExtras().get("version")) { + intent.putExtra("version", getIntent().getExtras().get("version").toString()); + } + if (null != getIntent().getExtras().get("isReAddLight")) { + intent.putExtra("isReAddLight", true); + intent.putExtra("relatedId", getIntent().getExtras().get("relatedId").toString()); + intent.putExtra("lightType", getIntent().getExtras().get("lightType").toString()); + } + startActivity(intent); + finish(); + } + }); + changeAutoLl.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + Intent intent; + if (getIntent().getExtras().get("from").toString().equals(CURTAINS_TAG) || getIntent().getExtras().get("from").toString().equals(SWITCH_TAG)) { + intent = new Intent(YblLightSearchFailActivity.this, YblHandSearchActivity.class); + } else { + intent = new Intent(YblLightSearchFailActivity.this, YblLightSearchActivity.class); + } + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + if (null != getIntent().getExtras().get("deviceType")) { + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + } + if (null != getIntent().getExtras().get("deviceModel")) { + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + } + if (null != getIntent().getExtras().get("subType")) { + intent.putExtra("subType", getIntent().getExtras().get("subType").toString()); + } + if (null != getIntent().getExtras().get("version")) { + intent.putExtra("version", getIntent().getExtras().get("version").toString()); + } + startActivity(intent); + finish(); + } + }); + } + + @Override + public void onBackPressed() { + if (getIntent().getExtras().get("from").toString().equals("YblHandSearchHelp")) { + /*Intent intent = new Intent(YblLightSearchFailActivity.this, YblHandSearchActivity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + startActivity(intent);*/ + finish(); + } else { + finish(); + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/panel/LockStepOneActivity.java b/app/src/main/java/com/yonsz/z1/ybl/panel/LockStepOneActivity.java new file mode 100644 index 0000000..9b29a0e --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/panel/LockStepOneActivity.java @@ -0,0 +1,91 @@ +package com.yonsz.z1.ybl.panel; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2019/1/9. + */ + +public class LockStepOneActivity extends BaseActivity { + private TitleView mTitleView; + private Button nextConfig; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_lock_step_one); + initView(); + initListener(); + } + + private void initListener() { + + } + + private void initView() { + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + setNextVisible(); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + Intent intent = new Intent(LockStepOneActivity.this, YblPanelStepTwoActivity.class); + intent.putExtra("panelType", "2"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("deviceAddress").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + startActivity(intent); + finish(); + } + }); + mTitleView = (TitleView) findViewById(R.id.title_panel_one); + mTitleView.setHead("添加设备"); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + + } + } + + private void setNextVisible() { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + } + + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/panel/PanelDefaultAdapter.java b/app/src/main/java/com/yonsz/z1/ybl/panel/PanelDefaultAdapter.java new file mode 100644 index 0000000..47dec70 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/panel/PanelDefaultAdapter.java @@ -0,0 +1,127 @@ +package com.yonsz.z1.ybl.panel; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.utils.AddressNameUtil; + +import java.util.List; + +/** + * Created by Administrator on 2017/7/26. + */ + +public class PanelDefaultAdapter extends RecyclerView.Adapter { + private List mDatas; + private Context mContext; + private int isShowSelcet; + private String chooseModelId, chooseOper = ""; + private String modelId = ""; + private OnRecyclerClickListener mOnItemClickListener; + + public PanelDefaultAdapter(List datas, Context context, int isShowSelcet, String chooseModelId, String chooseOper) { + mDatas = datas; + mContext = context; + this.chooseModelId = chooseModelId; + this.chooseOper = chooseOper; + this.isShowSelcet = isShowSelcet; + } + + public void setIsShowSelcet(int isShowSelcet, String chooseModelId, String chooseOper) { + this.isShowSelcet = isShowSelcet; + this.chooseModelId = chooseModelId; + this.chooseOper = chooseOper; + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_panel_default, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public int getItemCount() { + return mDatas.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView modelNameTv; + private ImageView modelSelectIv; + private RelativeLayout modelRl; + + + public MessageViewHolder(View view) { + super(view); + modelNameTv = (TextView) itemView.findViewById(R.id.tv_model_name); + modelSelectIv = (ImageView) itemView.findViewById(R.id.iv_model_select); + modelRl = (RelativeLayout) itemView.findViewById(R.id.rl_model_select); + } + + public void setViews(final int position) { + if (!mDatas.get(position).getAddressId().isEmpty()) { + modelNameTv.setText(AddressNameUtil.getAddressName(mDatas.get(position).getAddressId()) + mDatas.get(position).getName()); + } else { + modelNameTv.setText(mDatas.get(position).getName()); + } + if (chooseModelId.equals(mDatas.get(position).getId())) { + if (!chooseOper.isEmpty()) { + if (chooseOper.equals(mDatas.get(position).getOper())) { + modelSelectIv.setVisibility(View.VISIBLE); + } else { + modelSelectIv.setVisibility(View.GONE); + } + } else { + modelSelectIv.setVisibility(View.VISIBLE); + } + } else { + modelSelectIv.setVisibility(View.GONE); + } + /*if (position == isShowSelcet) { + modelSelectIv.setVisibility(View.VISIBLE); + chooseModelId = mDatas.get(position).getModelName(); + } else { + //没点击的情况 + if (chooseModelId.equals(mDatas.get(position).getModelId())) { + modelSelectIv.setVisibility(View.VISIBLE); + } else { + modelSelectIv.setVisibility(View.GONE); + } + }*/ + + modelRl.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + // Log.i("PanelDefaultAdapter", "MessageViewHolder onNoDoubleClick()" + position); + if (null != mOnItemClickListener) { + mOnItemClickListener.onClick(v, position); + } + } + }); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/panel/PanelModelSelectActivity.java b/app/src/main/java/com/yonsz/z1/ybl/panel/PanelModelSelectActivity.java new file mode 100644 index 0000000..c85c8bb --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/panel/PanelModelSelectActivity.java @@ -0,0 +1,738 @@ +package com.yonsz.z1.ybl.panel; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.gavin.com.library.listener.OnGroupClickListener; +import com.gavin.com.library.listener.PowerGroupListener; +import com.lechange.demo.localvideo.PowerfulStickyDecoration; +import com.yanzhenjie.recyclerview.swipe.SwipeItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenu; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuBridge; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuItemClickListener; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.AddPanelModelEntity; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.listener.OnRecyclerClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.ADD_MODEL_BASIC_FAIL; +import static com.yonsz.z1.net.Constans.ADD_MODEL_BASIC_SUCCESS; +import static com.yonsz.z1.net.Constans.DEL_MODEL_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.DEL_MODEL_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.Constans.SITUATIONAL_PANEL; +import static com.yonsz.z1.net.Constans.YBL_SCENE_ADD_FAIL; +import static com.yonsz.z1.net.Constans.YBL_SCENE_ADD_SUCCESS; +import static com.yonsz.z1.net.Constans.deviceNumListPosition; +import static com.yonsz.z1.net.Constans.homeListEntity; +import static com.yonsz.z1.net.NetWorkUrl.ADD_MODEL_BASIC; +import static com.yonsz.z1.net.NetWorkUrl.SCENE_CANBINDLIST; +import static com.yonsz.z1.net.NetWorkUrl.SCENE_OFFLINEBINDLIST; +import static com.yonsz.z1.net.NetWorkUrl.SELECT_MODEL_TIME; + +/** + * Created by Administrator on 2019/1/9. + */ + +public class PanelModelSelectActivity extends BaseActivity implements SwipeItemClickListener { + private TitleView mTitleView; + private RelativeLayout inHomeRl, outHomeRl, inBedRl, outBedRl, userDefineRl; + private ImageView inHomeIv, outHomeIv, inBedIv, outBedIv; + private String configKey, deviceModel, deviceType = SITUATIONAL_PANEL; + private SwipeMenuRecyclerView myPanelModelListView; + private List mDatas = new ArrayList<>(); + private List customList = new ArrayList<>(); + private PanelDefaultAdapter mAdapter; + private String id; + private String modelId = ""; + private String chooseModelId = "", chooseOper = ""; + private String inhomeId = "", outHomeId = "", inbedId = "", outBedId = ""; + private String keyName = ""; + private String subTypeClass = "1", bindDeviceId = "", bindDeviceModel = "", bindDeviceType = "", bindZiId = ""; + private LinearLayout ll_no_office; + private PowerfulStickyDecoration decoration; + + + /** + * 菜单创建器,在Item要创建菜单的时候调用。 + */ + private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { + @Override + public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { + int width = getResources().getDimensionPixelSize(R.dimen.y50); + + // 1. MATCH_PARENT 自适应高度,保持和Item一样高; + // 2. 指定具体的高,比如80; + // 3. WRAP_CONTENT,自身高度,不推荐; + int height = getResources().getDimensionPixelSize(R.dimen.y50); + // int height = ViewGroup.LayoutParams.MATCH_PARENT; + // 添加右侧的,如果不添加,则右侧不会出现菜单。 + { + /*SwipeMenuItem deleteItem = new SwipeMenuItem(PanelModelSelectActivity.this) + .setBackground(R.color.z1_f0f0fa) + .setText(R.string.delete) + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + swipeRightMenu.addMenuItem(deleteItem);// 添加菜单到右侧。*/ + /*SwipeMenuItem setItem = new SwipeMenuItem(PanelModelSelectActivity.this) + .setBackground(R.color.z1_F5A623) + .setText(R.string.setting) + .setTextColor(Color.WHITE) + .setWidth(width) + .setHeight(height); + swipeRightMenu.addMenuItem(setItem);// 添加菜单到右侧。*/ + } + } + }; + /** + * RecyclerView的Item的Menu点击监听。 + */ + private SwipeMenuItemClickListener mMenuItemClickListener = new SwipeMenuItemClickListener() { + @Override + public void onItemClick(SwipeMenuBridge menuBridge) { + menuBridge.closeMenu(); + int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。 + final int adapterPosition = menuBridge.getAdapterPosition(); // RecyclerView的Item的position。 + int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。 + + if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) { + switch (menuPosition) { + /*case 0: + ConfirmDialog dialog = new ConfirmDialog(PanelModelSelectActivity.this, new Callback() { + @Override + public void callback(int position) { + switch (position) { + case 0: + break; + case 1: + //删除自定义模式 + delModelBasic(customList.get(adapterPosition).getModelId()); + break; + } + } + }); + dialog.setContent("确定删除该场景模式吗?"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break;*/ + /*case 1: + //设置自定义模式 + Intent intent = new Intent(PanelModelSelectActivity.this, YblModelDetailActivity.class); + intent.putExtra("model", customList.get(adapterPosition).getModelType()); + intent.putExtra("isAdd", false); + intent.putExtra("isCheckBoxOpen", false); + intent.putExtra("modelId", customList.get(adapterPosition).getModelId()); + intent.putExtra("isHaveDevice", "1"); + intent.putExtra("repeatTime", ""); + intent.putExtra("setTime", ""); + intent.putExtra("houseId", homeListEntity.getData().get(deviceNumListPosition).getId()); + intent.putExtra("modelName", customList.get(adapterPosition).getModelName()); + startActivity(intent); + break;*/ + } + } + } + }; + private LoadingDialog mLoadingDialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_panel_model_select); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + // selectModelTime(); + } + + private void initView() { + if (null != getIntent().getExtras().get("deviceType")) { + deviceType = getIntent().getExtras().get("deviceType").toString(); + } + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + id = getIntent().getExtras().get("id").toString(); + configKey = (String) getIntent().getExtras().get("configKey"); + keyName = (String) getIntent().getExtras().get("keyName"); + chooseModelId = (String) getIntent().getExtras().get("modelId"); + if (null != getIntent().getExtras().get("oper")) { + chooseOper = (String) getIntent().getExtras().get("oper"); + } + ll_no_office = (LinearLayout) findViewById(R.id.ll_no_office); + myPanelModelListView = (SwipeMenuRecyclerView) findViewById(R.id.my_share_list); + inHomeRl = (RelativeLayout) findViewById(R.id.rl_in_home_model); + outHomeRl = (RelativeLayout) findViewById(R.id.rl_out_home_model); + inBedRl = (RelativeLayout) findViewById(R.id.rl_in_bed_model); + outBedRl = (RelativeLayout) findViewById(R.id.rl_out_bed_model); + userDefineRl = (RelativeLayout) findViewById(R.id.rl_user_defined); + inHomeIv = (ImageView) findViewById(R.id.ImageView01); + outHomeIv = (ImageView) findViewById(R.id.ImageView02); + inBedIv = (ImageView) findViewById(R.id.ImageView03); + outBedIv = (ImageView) findViewById(R.id.ImageView04); + mTitleView = (TitleView) findViewById(R.id.title_model_select); + mTitleView.setHead(getString(R.string.Configuration_key) + configKey); + mTitleView.setHeadFuntionTxtAndSise16("保存"); + // mTitleView.setHeadFuntionTxtColor(false); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + // yblSceneSet(); + subsetSetscene(); + } + + @Override + public void onFunctionText() { + + } + }); + + inHomeRl.setOnClickListener(this); + outHomeRl.setOnClickListener(this); + inBedRl.setOnClickListener(this); + outBedRl.setOnClickListener(this); + userDefineRl.setOnClickListener(this); + + switch (keyName) { + case "回家模式": + inHomeIv.setVisibility(View.VISIBLE); + break; + case "离家模式": + outHomeIv.setVisibility(View.VISIBLE); + break; + case "睡眠模式": + inBedIv.setVisibility(View.VISIBLE); + break; + case "起床模式": + outBedIv.setVisibility(View.VISIBLE); + break; + } + + /*mAdapter = new PanelDefaultAdapter(customList, this, 100, chooseModelId); + RecyclerViewNoBugLinearLayoutManager manage = new RecyclerViewNoBugLinearLayoutManager(this); + manage.setOrientation(LinearLayoutManager.VERTICAL); + myPanelModelListView.setVisibility(View.VISIBLE); + myPanelModelListView.setHasFixedSize(true); + myPanelModelListView.setLayoutManager(manage); + myPanelModelListView.setSwipeMenuCreator(swipeMenuCreator); + myPanelModelListView.setSwipeMenuItemClickListener(mMenuItemClickListener); + myPanelModelListView.setAdapter(mAdapter); + myPanelModelListView.setSwipeItemClickListener(this);*/ + + setRecycleView(); + + if (homeListEntity.getData().get(deviceNumListPosition).getHouseCategory() == 3 || homeListEntity.getData().get(deviceNumListPosition).getHouseCategory() == 5) { + ll_no_office.setVisibility(View.GONE); + } + + if (deviceModel.equals("3") || deviceModel.equals("2")) { + getOfflineBindList(); + } else { + getCanbindlist(); + } + } + + private void setRecycleView() { + //模拟数据 + // dataList.addAll(CityUtil.getCityList()); + GridLayoutManager manager = new GridLayoutManager(this, 1); + myPanelModelListView.setLayoutManager(manager); + decoration = PowerfulStickyDecoration.Builder + .init(new PowerGroupListener() { + @Override + public String getGroupName(int position) { + //获取组名,用于判断是否是同一组 + if (customList.size() > position) { + int code = customList.get(position).getSort(); + String groupName = ""; + if (customList.get(position).getSubTypeClass().equals("1")) { + groupName = "选择系统已激活的情景模式"; + } else { + groupName = "选择系统已添加的设备类型"; + } + return groupName; + } + return null; + } + + @Override + public View getGroupView(int position) { + //获取自定定义的组View + if (customList.size() > position) { + int code = customList.get(position).getSort(); + String groupName = ""; + if (customList.get(position).getSubTypeClass().equals("1")) { + groupName = "选择系统已激活的情景模式"; + } else { + groupName = "选择系统已添加的设备类型"; + } + final View view = getLayoutInflater().inflate(R.layout.add_scene, null, true); + ((TextView) view.findViewById(R.id.tv_room_type)).setText(groupName); + return view; + } else { + return null; + } + } + }) + .setCacheEnable(true) + .resetSpan(myPanelModelListView, manager) + .setGroupHeight(DensityUtil.dip2px(PanelModelSelectActivity.this, 40)) + .setDivideHeight(0) + .setGroupBackground(0xfffafafa) + .setOnClickListener(new OnGroupClickListener() { + @Override + public void onClick(int position, int id) { + // ToastUtil.show(PanelModelSelectActivity.this, position + "---"+id); + if (customList.size() > position) { + } + } + }) + .build(); + //---------------- ------------- + myPanelModelListView.addItemDecoration(decoration); + myPanelModelListView.setVisibility(View.VISIBLE); + //------------- PowerfulStickyDecoration 使用部分 ---------------- + //下面是平时的RecyclerView操作 + mAdapter = new PanelDefaultAdapter(customList, this, 100, chooseModelId, chooseOper); + myPanelModelListView.setAdapter(mAdapter); + + mAdapter.setmOnItemClickListener(new OnRecyclerClickListener() { + + @Override + public void onClick(View view, int position) { + //勾选哪一个 + if ((customList.get(position).getId().equals(modelId) || customList.get(position).getId().equals(chooseModelId)) && customList.get(position).getOper().equals(chooseOper)) { + modelId = ""; + chooseModelId = ""; + chooseOper = ""; + } else { + chooseModelId = customList.get(position).getId(); + chooseOper = customList.get(position).getOper(); + modelId = customList.get(position).getId(); + } + mAdapter.setIsShowSelcet(position, chooseModelId, chooseOper); + + if (customList.get(position).getSubTypeClass().equals("2") && !modelId.isEmpty()) { + subTypeClass = "2"; + bindDeviceId = customList.get(position).getId(); + bindDeviceModel = customList.get(position).getDeviceModel(); + bindDeviceType = customList.get(position).getDeviceType(); + bindZiId = customList.get(position).getZiId(); + } else { + bindDeviceId = ""; + } + mAdapter.notifyDataSetChanged(); + } + }); + } + + @Override + public void onClick(View v) { + super.onClick(v); + switch (v.getId()) { + case R.id.rl_in_home_model: + modelId = inhomeId; + inHomeIv.setVisibility(View.VISIBLE); + outHomeIv.setVisibility(View.GONE); + inBedIv.setVisibility(View.GONE); + outBedIv.setVisibility(View.GONE); + // mTitleView.setHeadFuntionTxtColor(true); + mAdapter.setIsShowSelcet(100, "", ""); + mAdapter.notifyDataSetChanged(); + break; + case R.id.rl_out_home_model: + modelId = outHomeId; + outHomeIv.setVisibility(View.VISIBLE); + inHomeIv.setVisibility(View.GONE); + inBedIv.setVisibility(View.GONE); + outBedIv.setVisibility(View.GONE); + // mTitleView.setHeadFuntionTxtColor(true); + mAdapter.setIsShowSelcet(100, "", ""); + mAdapter.notifyDataSetChanged(); + break; + case R.id.rl_in_bed_model: + modelId = inbedId; + inBedIv.setVisibility(View.VISIBLE); + outHomeIv.setVisibility(View.GONE); + inHomeIv.setVisibility(View.GONE); + outBedIv.setVisibility(View.GONE); + // mTitleView.setHeadFuntionTxtColor(true); + mAdapter.setIsShowSelcet(100, "", ""); + mAdapter.notifyDataSetChanged(); + break; + case R.id.rl_out_bed_model: + modelId = outBedId; + outBedIv.setVisibility(View.VISIBLE); + outHomeIv.setVisibility(View.GONE); + inHomeIv.setVisibility(View.GONE); + inBedIv.setVisibility(View.GONE); + // mTitleView.setHeadFuntionTxtColor(true); + mAdapter.setIsShowSelcet(100, "", ""); + mAdapter.notifyDataSetChanged(); + break; + case R.id.rl_user_defined: + showModifyPop(); + break; + } + } + + public void showModifyPop() { + RenameNameDialog dialog = new RenameNameDialog(PanelModelSelectActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + addModelBasic(positioName); + break; + } + } + }); + dialog.setMaxEms(12); + dialog.setHintName(""); + dialog.setContent("设置情景模式名称"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECT_MODEL_TIME_SUCCESS: + TimeSetEntity timeSetEntity = (TimeSetEntity) msg.obj; + mDatas.clear(); + mDatas.addAll(timeSetEntity.getData()); + if (null != mDatas) { + setViewDate(mDatas); + } + break; + case YBL_SCENE_ADD_SUCCESS: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, "保存成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 1000); + break; + case YBL_SCENE_ADD_FAIL: + case ADD_MODEL_BASIC_FAIL: + case DEL_MODEL_CONTROL_FAIL: + if (null != mLoadingDialog) { + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + } + ToastUtil.show(this, (String) msg.obj); + break; + case ADD_MODEL_BASIC_SUCCESS: + AddPanelModelEntity addModelEntity = (AddPanelModelEntity) msg.obj; + Intent intent = new Intent(PanelModelSelectActivity.this, YblModelDetailActivity.class); + intent.putExtra("model", addModelEntity.getData().getModelType()); + intent.putExtra("isAdd", false); + intent.putExtra("isCheckBoxOpen", false); + intent.putExtra("modelId", addModelEntity.getData().getId()); + intent.putExtra("isHaveDevice", "1"); + intent.putExtra("repeatTime", ""); + intent.putExtra("setTime", ""); + intent.putExtra("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + intent.putExtra("modelName", addModelEntity.getData().getModelName()); + startActivity(intent); + // selectModelTime(); + break; + case DEL_MODEL_CONTROL_SUCCESS: + ToastUtil.show(this, "删除成功"); + selectModelTime(); + break; + } + } + + private void setViewDate(List datas) { + customList.clear(); + customList.addAll(datas); + + /*for (int i = customList.size() - 1; i >= 0; i--) { + if (Integer.parseInt(datas.get(i).getModelType()) < 5) { + switch (datas.get(i).getModelType()) { + case "1": + inhomeId = datas.get(i).getModelId(); + break; + case "2": + outHomeId = datas.get(i).getModelId(); + break; + case "3": + inbedId = datas.get(i).getModelId(); + break; + case "4": + outBedId = datas.get(i).getModelId(); + break; + } + customList.remove(i); + } + }*/ + mAdapter.notifyDataSetChanged(); + } + + @Override + public void onItemClick(View itemView, int position) { + // mTitleView.setHeadFuntionTxtColor(true); + inBedIv.setVisibility(View.GONE); + outHomeIv.setVisibility(View.GONE); + inHomeIv.setVisibility(View.GONE); + outBedIv.setVisibility(View.GONE); + //勾选哪一个 + modelId = customList.get(position).getId(); + chooseOper = customList.get(position).getOper(); + mAdapter.setIsShowSelcet(position, modelId, chooseOper); + + if (customList.get(position).getSubTypeClass().equals("2")) { + subTypeClass = "2"; + bindDeviceId = customList.get(position).getId(); + bindDeviceModel = customList.get(position).getDeviceModel(); + bindDeviceType = customList.get(position).getDeviceType(); + bindZiId = customList.get(position).getZiId(); + } + mAdapter.notifyDataSetChanged(); + } + + private void getCanbindlist() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("pushKey", configKey); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestGetByAsy(SCENE_CANBINDLIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getCanbindlist", "onSuccess()" + respone); + TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void getOfflineBindList() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("pushKey", configKey); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + netWorkUtil.requestGetByAsy(SCENE_OFFLINEBINDLIST, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("getOfflineBindList", "onSuccess()" + respone); + TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void selectModelTime() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (deviceNumListPosition > homeListEntity.getData().size() - 1) { + deviceNumListPosition = 0; + } + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("isCustom", "1"); + netWorkUtil.requestGetByAsy(SELECT_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("selectModelTime", "ShareDeviceActivity onSuccess()" + respone); + TimeSetEntity obj = JSON.parseObject(respone, TimeSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void addModelBasic(String modelName) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + if (null != SharedpreferencesUtil.get(Constans.HOUSEID, "")) { + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + } else { + return; + } + map.put("modelName", modelName); + netWorkUtil.requestPostByAsynewApi(ADD_MODEL_BASIC, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("addModelBasic", "onSuccess()" + respone); + AddPanelModelEntity obj = JSON.parseObject(respone, AddPanelModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_MODEL_BASIC_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_MODEL_BASIC_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_MODEL_BASIC_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + private void subsetSetscene() { + initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + map.put("deviceType", deviceType); + map.put("pushKey", configKey); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + if (subTypeClass.equals("2")) { + if (!bindDeviceId.isEmpty()) { + map.put("bindDeviceId", bindDeviceId); + map.put("bindDeviceModel", bindDeviceModel); + map.put("bindDeviceType", bindDeviceType); + map.put("bindZiId", bindZiId); + } + } else { + if (modelId.isEmpty()) { + map.put("modelId", chooseModelId); + } else { + map.put("modelId", modelId); + } + } + if (!chooseOper.isEmpty()) { + map.put("oper", chooseOper); + } + util.requestPostByAsyBody(NetWorkUrl.SUBSET_SETSCENE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetSetscene", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(YBL_SCENE_ADD_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(YBL_SCENE_ADD_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(YBL_SCENE_ADD_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/panel/SafeModelAdapter.java b/app/src/main/java/com/yonsz/z1/ybl/panel/SafeModelAdapter.java new file mode 100644 index 0000000..e941826 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/panel/SafeModelAdapter.java @@ -0,0 +1,111 @@ +package com.yonsz.z1.ybl.panel; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.entitya2.TimeSetEntity; +import com.yonsz.z1.listener.OnRecyclerClickListener; + +import java.util.List; + +/** + * Created by Administrator on 2017/7/26. + */ + +public class SafeModelAdapter extends RecyclerView.Adapter { + private List mDatas; + private Context mContext; + private int isShowSelcet; + private String chooseModelId; + private String modelId = ""; + private OnRecyclerClickListener mOnItemClickListener; + + public SafeModelAdapter(List datas, Context context, int isShowSelcet, String chooseModelId) { + mDatas = datas; + mContext = context; + this.chooseModelId = chooseModelId; + this.isShowSelcet = isShowSelcet; + } + + public void setIsShowSelcet(int isShowSelcet, String chooseModelId) { + this.isShowSelcet = isShowSelcet; + this.chooseModelId = chooseModelId; + } + + public void setmOnItemClickListener(OnRecyclerClickListener mOnItemClickListener) { + this.mOnItemClickListener = mOnItemClickListener; + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_panel_default, + parent, false); + return new MessageViewHolder(view); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.setViews(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public int getItemCount() { + return mDatas.size(); + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + private TextView modelNameTv; + private ImageView modelSelectIv; + private RelativeLayout modelRl; + + + public MessageViewHolder(View view) { + super(view); + modelNameTv = (TextView) itemView.findViewById(R.id.tv_model_name); + modelSelectIv = (ImageView) itemView.findViewById(R.id.iv_model_select); + modelRl = (RelativeLayout) itemView.findViewById(R.id.rl_model_select); + } + + public void setViews(final int position) { + modelNameTv.setText(mDatas.get(position).getModelName()); + if (chooseModelId.equals(mDatas.get(position).getModelId())) { + modelSelectIv.setVisibility(View.VISIBLE); + } else { + modelSelectIv.setVisibility(View.GONE); + } + /*if (position == isShowSelcet) { + modelSelectIv.setVisibility(View.VISIBLE); + chooseModelId = mDatas.get(position).getModelName(); + } else { + //没点击的情况 + if (chooseModelId.equals(mDatas.get(position).getModelId())) { + modelSelectIv.setVisibility(View.VISIBLE); + } else { + modelSelectIv.setVisibility(View.GONE); + } + }*/ + + /*modelRl.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { +// Log.i("PanelDefaultAdapter", "MessageViewHolder onNoDoubleClick()" + position); + if (null != mOnItemClickListener) { + mOnItemClickListener.onClick(v, position); + } + } + });*/ + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/panel/UpadateYblPanelPosActivity.java b/app/src/main/java/com/yonsz/z1/ybl/panel/UpadateYblPanelPosActivity.java new file mode 100644 index 0000000..4fd1219 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/panel/UpadateYblPanelPosActivity.java @@ -0,0 +1,318 @@ +package com.yonsz.z1.ybl.panel; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.widget.CheckBox; +import android.widget.CompoundButton; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.entity4.DeviceStateEntity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.TitleView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.ADD_SAFETY_ENTITY_FAIL; +import static com.yonsz.z1.net.Constans.ADD_SAFETY_ENTITY_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.SITUATIONAL_PANEL; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_SUB_DEVICE; + +/** + * Created by Administrator on 2018/1/9. + */ + +public class UpadateYblPanelPosActivity extends BaseActivity { + private TitleView mTitleView; + private String ziId; + private CheckBox[] timeCheckBox = new CheckBox[14]; + private List positionIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private String position; + private List condition = new ArrayList<>(); + private String id; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_update_position); + initView(); + } + + private void initView() { + position = (String) getIntent().getExtras().get("addressId"); + ziId = (String) getIntent().getExtras().get("ziId"); + id = getIntent().getExtras().get("id").toString(); + mTitleView = (TitleView) findViewById(R.id.title_update_position); + mTitleView.setHead(R.string.update_position); + mTitleView.setHeadFuntionTxt(R.string.sure); + mTitleView.setHeadFuntionTxtColor(false); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + updateSubdevice(); + } + + @Override + public void onFunctionText() { + + } + }); + + positionIds.add(R.id.cb_position0); + positionIds.add(R.id.cb_position1); + positionIds.add(R.id.cb_position2); + positionIds.add(R.id.cb_position3); + positionIds.add(R.id.cb_position4); + positionIds.add(R.id.cb_position5); + positionIds.add(R.id.cb_position6); + positionIds.add(R.id.cb_position7); + positionIds.add(R.id.cb_position8); + positionIds.add(R.id.cb_position9); + positionIds.add(R.id.cb_position10); + positionIds.add(R.id.cb_position11); + positionIds.add(R.id.cb_position12); + positionIds.add(R.id.cb_position13); + for (int i = 0; i < positionIds.size(); i++) { + timeCheckBox[i] = (CheckBox) findViewById(positionIds.get(i)); + timeCheckBox[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + mTitleView.setHeadFuntionTxtColor(true); + } + lastTimeCheckBox = buttonView; + } else { + // time = "0"; + // lastTimeCheckBox = null; + // if (id == lastTimeCheckBox.getId()) + // buttonView.setChecked(true); + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + + switch (id) { + case R.id.cb_position0: + if (isChecked) + position = "0"; + break; + case R.id.cb_position1: + if (isChecked) + position = "1"; + break; + case R.id.cb_position2: + if (isChecked) + position = "2"; + break; + case R.id.cb_position3: + if (isChecked) + position = "3"; + break; + case R.id.cb_position4: + if (isChecked) + position = "4"; + break; + case R.id.cb_position5: + if (isChecked) + position = "5"; + break; + case R.id.cb_position6: + if (isChecked) + position = "6"; + break; + case R.id.cb_position7: + if (isChecked) + position = "7"; + break; + case R.id.cb_position8: + if (isChecked) + position = "8"; + break; + case R.id.cb_position9: + if (isChecked) + position = "9"; + break; + case R.id.cb_position10: + if (isChecked) + position = "10"; + break; + case R.id.cb_position11: + if (isChecked) + position = "11"; + break; + case R.id.cb_position12: + if (isChecked) + position = "12"; + break; + case R.id.cb_position13: + if (isChecked) + position = "13"; + break; + } + } + }); + } + + switch (position) { + case "0": + timeCheckBox[13].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position13); + condition.add("13"); + break; + case "1": + timeCheckBox[0].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position0); + condition.add("0"); + break; + case "2": + timeCheckBox[1].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position1); + condition.add("1"); + break; + case "3": + timeCheckBox[2].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position2); + condition.add("2"); + break; + case "4": + timeCheckBox[3].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position3); + condition.add("3"); + break; + case "5": + timeCheckBox[4].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position4); + condition.add("4"); + break; + case "6": + timeCheckBox[5].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position5); + condition.add("5"); + break; + case "7": + timeCheckBox[6].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position6); + condition.add("6"); + break; + case "8": + timeCheckBox[7].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position7); + condition.add("7"); + break; + case "9": + timeCheckBox[8].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position8); + condition.add("8"); + break; + case "10": + timeCheckBox[9].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position9); + condition.add("9"); + break; + case "11": + timeCheckBox[10].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position10); + condition.add("10"); + break; + case "12": + timeCheckBox[11].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position11); + condition.add("11"); + break; + case "13": + timeCheckBox[12].setChecked(true); + lastTimeCheckBox = (CompoundButton) findViewById(R.id.cb_position12); + condition.add("12"); + break; + } + } + + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case ADD_SAFETY_ENTITY_SUCCESS: + ToastUtil.show(this, "修改成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(UpadateYblPanelPosActivity.this, YblPanelDetailActivity.class); + if (position.equals("13")) { + intent.putExtra("data", "0"); + } else { + intent.putExtra("data", String.valueOf(Integer.valueOf(position) + 1)); + } + setResult(MODIFY_ADDRESS_RESULT, intent); + finish(); + } + }, 1000); + break; + case ADD_SAFETY_ENTITY_FAIL: + ToastUtil.show(this, (String) msg.obj); + break; + } + } + + private void updateSubdevice() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceType", SITUATIONAL_PANEL); + map.put("ziId", ziId); + if (position.equals("13")) { + map.put("addressId", "0"); + } else { + map.put("addressId", String.valueOf(Integer.valueOf(position) + 1)); + } + netWorkUtil.requestPostByAsynewApi(UPDATE_SUB_DEVICE, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceLastInfo", "ShareDeviceActivity onSuccess()" + respone); + DeviceStateEntity obj = JSON.parseObject(respone, DeviceStateEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ADD_SAFETY_ENTITY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(ADD_SAFETY_ENTITY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(ADD_SAFETY_ENTITY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/panel/YblModelDetailActivity.java b/app/src/main/java/com/yonsz/z1/ybl/panel/YblModelDetailActivity.java new file mode 100644 index 0000000..f2de122 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/panel/YblModelDetailActivity.java @@ -0,0 +1,596 @@ +package com.yonsz.z1.ybl.panel; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.entitya2.AddModelEntity; +import com.yonsz.z1.database.entity.entitya2.DeviceAllEntity; +import com.yonsz.z1.database.entity.entitya2.ModelOpenEntity; +import com.yonsz.z1.database.entity.entitya2.ModelSetEntity; +import com.yonsz.z1.device.DeviceExpandableListView; +import com.yonsz.z1.listener.OnExbandItemClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.RenameNameDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.model.ModelSetAdapter; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.view.SwitchView; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.R.id.tv_che_dan; +import static com.yonsz.z1.net.Constans.BATCH_UPDATE_MODEL_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.BATCH_UPDATE_MODEL_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.MODEL_REAPEAT; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_DETAIL_FAIL; +import static com.yonsz.z1.net.Constans.SELECT_MODEL_DETAIL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_BASIC_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_CONTROL_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_CONTROL_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_MODEL_TIME_SUCCESS; +import static com.yonsz.z1.net.NetWorkUrl.BATCH_UPDATE_MODEL_CONTROL; +import static com.yonsz.z1.net.NetWorkUrl.QUERY_MODEL_DETAIL; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_BASIC; +import static com.yonsz.z1.net.NetWorkUrl.UPDATE_MODEL_TIME; +import static com.yonsz.z1.new433.light.LightNewActivity.removeDuplicate; + +/** + * Created by Administrator on 2018/9/13. + */ + +public class YblModelDetailActivity extends BaseActivity { + private TitleView mTitleView; + private LoadingDialog mLoadingDialog; + private int model; + private TextView modelNameTv, modelDeclareTv; + private CheckBox modelOpenCb; + private SwitchView timeOpenCb; + private DeviceExpandableListView mListView; + private ModelSetAdapter mModelSetAdapter; + private List mObjEntity; + private TextView tvDeclare; + private TextView tv_1; + private RelativeLayout mainDeclare; + private RelativeLayout noDeviceRl; + private RelativeLayout topDecalre; + private String respone; + private List mChildData = new ArrayList<>(); + private List> mDatas = new ArrayList<>(); + private String ziId; + private String isHaveDevice; + private String houseId; + private TextView onceTimeTv, timeSetTv; + private String repeatTime = "", setTime = ""; + private RelativeLayout rl_time_set; + private String modelId = ""; + private String setId; + private String modelName = ""; + private ImageView modifyModelNameIv; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_custom_model_detail); + initView(); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(this); + mLoadingDialog.show(); + } + + @Override + public void onResume() { + super.onResume(); + queryModelDetail(); + } + + private void initView() { + mTitleView = (TitleView) findViewById(R.id.title_model_detail); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + // finish(); + } + + @Override + public void onFunctionText() { + + } + }); + modelName = getIntent().getExtras().get("modelName").toString(); + modelId = getIntent().getExtras().get("modelId").toString(); + model = Integer.parseInt(getIntent().getExtras().get("model").toString()); + isHaveDevice = (String) getIntent().getExtras().get("isHaveDevice"); + houseId = (String) getIntent().getExtras().get("houseId"); + repeatTime = (String) getIntent().getExtras().get("repeatTime"); + setTime = (String) getIntent().getExtras().get("setTime"); + modifyModelNameIv = (ImageView) findViewById(R.id.iv_modify_name); + rl_time_set = (RelativeLayout) findViewById(R.id.rl_time_set); + rl_time_set.setOnClickListener(this); + onceTimeTv = (TextView) findViewById(R.id.tv_repeat_time); + timeSetTv = (TextView) findViewById(R.id.tv_time_set); + modelNameTv = (TextView) findViewById(R.id.tv_model_name); + modelDeclareTv = (TextView) findViewById(R.id.tv_model_declare); + tvDeclare = (TextView) findViewById(tv_che_dan); + tv_1 = (TextView) findViewById(R.id.tv_1); + topDecalre = (RelativeLayout) findViewById(R.id.rl_declare); + mainDeclare = (RelativeLayout) findViewById(R.id.rl_text_declare); + noDeviceRl = (RelativeLayout) findViewById(R.id.rl_text_declare_no_device); + modelOpenCb = (CheckBox) findViewById(R.id.cb_model_open); + timeOpenCb = (SwitchView) findViewById(R.id.stv_third); + modelOpenCb.setOnClickListener(this); + timeOpenCb.setOnClickListener(this); + modifyModelNameIv.setOnClickListener(this); + + mTitleView.setHead("添加场景"); + // mTitleView.setHeadFuntionTxt("完成"); + modelNameTv.setText(modelName); + modelDeclareTv.setText(""); + tvDeclare.setText("触发后,执行以下动作"); + tv_1.setText("触发后,所要"); + mListView = (DeviceExpandableListView) findViewById(R.id.expandablelist); + mObjEntity = new ArrayList<>(); + + setTopTime(); + } + + private void setTopTime() { + if (!TextUtils.isEmpty(repeatTime) && repeatTime.length() > 16) { + onceTimeTv.setText(repeatTime.substring(0, 16) + "..."); + } else { + onceTimeTv.setText(repeatTime); + } + timeSetTv.setText(setTime); + } + + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.stv_third: + if (timeOpenCb.isOpened()) { + updateModelTime(modelId, 1); + } else { + updateModelTime(modelId, 0); + } + break; + case R.id.cb_model_open: + if (modelOpenCb.isChecked()) { + updateModelBasic("1", modelName); + } else { + updateModelBasic("0", modelName); + } + break; + case R.id.iv_modify_name: + showModifyPop(); + break; + } + } + + public void showModifyPop() { + RenameNameDialog dialog = new RenameNameDialog(YblModelDetailActivity.this, new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + if (modelOpenCb.isChecked()) { + updateModelBasic("1", positioName); + } else { + updateModelBasic("0", positioName); + } + break; + } + } + }); + dialog.setMaxEms(12); + dialog.setHintName(""); + dialog.setContent("重命名"); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.save); + dialog.setCancelable(false); + dialog.show(); + } + + private void updateModelTime(String id, int openFlag) { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", id); + map.put("houseId", houseId); + map.put("openFlag", String.valueOf(openFlag)); + netWorkUtil.requestPostByAsynewApi(UPDATE_MODEL_TIME, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelTime", "ShareDeviceActivity onSuccess()" + respone); + AddModelEntity obj = JSON.parseObject(respone, AddModelEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_TIME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case SELECT_MODEL_DETAIL_SUCCESS: + if (null != msg.obj) { + if (isHaveDevice.equals("1")) { + ModelSetEntity modelSetEntity = (ModelSetEntity) msg.obj; + if (null != modelSetEntity.getData()) { + if (String.valueOf(modelSetEntity.getData().getFlag()).equals("1")) { + modelOpenCb.setChecked(true); + } else { + modelOpenCb.setChecked(false); + } + setViewData(modelSetEntity); + } + } else { + + } + } else { + + } + break; + case UPDATE_MODEL_CONTROL_SUCCESS: + // queryModelDetail(); + String modelOpenEntity = (String) msg.obj; + int arg11 = msg.arg1; + for (int i = 0; i < mObjEntity.size(); i++) { + if (mObjEntity.get(i).getConndeviceId().equals(modelOpenEntity)) { + mObjEntity.get(i).setCmdType(String.valueOf(arg11)); + } + } + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + break; + case UPDATE_MODEL_CONTROL_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(YblModelDetailActivity.this, (String) msg.obj); + break; + case BATCH_UPDATE_MODEL_CONTROL_SUCCESS: + // queryModelDetail(); + String id = (String) msg.obj; + int arg1 = msg.arg1; + for (int i = 0; i < mObjEntity.size(); i++) { + if (arg1 == 1) { + if (mObjEntity.get(i).getConndeviceId().equals(id)) { + mObjEntity.get(i).setOpenFlag(arg1); + mObjEntity.get(i).setId(setId); + } + } else { + if (mObjEntity.get(i).getConndeviceId().equals(id)) { + mObjEntity.get(i).setOpenFlag(arg1); + } + } + } + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + break; + case BATCH_UPDATE_MODEL_CONTROL_FAIL: + if (mLoadingDialog.isShowing()) { + mLoadingDialog.dismiss(); + } + break; + case UPDATE_MODEL_BASIC_SUCCESS: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ModelOpenEntity obj = (ModelOpenEntity) msg.obj; + if (null != obj.getObj()) { + modelName = obj.getObj().getModelName(); + modelNameTv.setText(modelName); + if (obj.getObj().getFlag() == 1) { + mListView.setVisibility(View.VISIBLE); + mainDeclare.setVisibility(View.GONE); + topDecalre.setVisibility(View.VISIBLE); + rl_time_set.setVisibility(View.GONE); + queryModelDetail(); + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + rl_time_set.setVisibility(View.GONE); + } + } + break; + case UPDATE_MODEL_BASIC_FAIL: + if (mLoadingDialog != null) { + mLoadingDialog.dismiss(); + } + ToastUtil.show(YblModelDetailActivity.this, (String) msg.obj); + break; + } + } + + private void setViewData(final ModelSetEntity modelSetEntity) { + mObjEntity.clear(); + mObjEntity.addAll(modelSetEntity.getData().getControlList()); + convertList(mObjEntity); + if (String.valueOf(modelSetEntity.getData().getFlag()).equals("1")) { + if (mObjEntity != null) { + mListView.setVisibility(View.VISIBLE); + mainDeclare.setVisibility(View.GONE); + topDecalre.setVisibility(View.VISIBLE); + rl_time_set.setVisibility(View.GONE); + mModelSetAdapter = new ModelSetAdapter(getBaseContext(), mObjEntity); + mListView.setAdapter(mModelSetAdapter); + for (int i = 0; i < mModelSetAdapter.getGroupCount(); i++) { + mListView.expandGroup(i); + } + mModelSetAdapter.setmOnExpandItemClickListener(new OnExbandItemClickListener() { + @Override + public void onClick(View view, int parentPosition, int childPosition, int i, int j, String id) { + switch (i) { + case 0: + if (j == 0) { + //删除 + batchUpdateModelControl("0", id, mDatas.get(parentPosition).get(childPosition).getConndeviceId().toString()); + } else { + //添加 + batchUpdateModelControl("1", id, mDatas.get(parentPosition).get(childPosition).getConndeviceId().toString()); + } + break; + case 1: + //开关 + if (j == 0) { + updateModelControl(mDatas.get(parentPosition).get(childPosition).getId().toString(), "1", mDatas.get(parentPosition).get(childPosition).getConndeviceId().toString()); + } else { + updateModelControl(mDatas.get(parentPosition).get(childPosition).getId().toString(), "0", mDatas.get(parentPosition).get(childPosition).getConndeviceId().toString()); + } + break; + } + } + }); + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + rl_time_set.setVisibility(View.GONE); + } + } else { + mListView.setVisibility(View.GONE); + mainDeclare.setVisibility(View.VISIBLE); + topDecalre.setVisibility(View.GONE); + rl_time_set.setVisibility(View.GONE); + } + } + + private void batchUpdateModelControl(final String tag, final String id, final String realId) { + /* initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("modelType", String.valueOf(model)); + map.put("houseId", houseId); + map.put("modelId", modelId); + if (tag.equals("1")) { + map.put("addList", id); + } else { + map.put("delList", id); + } + netWorkUtil.requestPostByAsynew(BATCH_UPDATE_MODEL_CONTROL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("batchUpdateModelControl", "ShareDeviceActivity onSuccess()" + respone); + DeviceAllEntity obj = JSON.parseObject(respone, DeviceAllEntity.class); + if (1 == obj.getFlag()) { + if (tag.equals("1")) { + for (int i = 0; i < obj.getObj().size(); i++) { + if (obj.getObj().get(i).getConndeviceId().equals(realId)) { + setId = obj.getObj().get(i).getId(); + } + } + } + Message msg = mHandler.obtainMessage(BATCH_UPDATE_MODEL_CONTROL_SUCCESS); + msg.obj = realId; + msg.arg1 = Integer.parseInt(tag); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(BATCH_UPDATE_MODEL_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(BATCH_UPDATE_MODEL_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void updateModelControl(final String controlId, final String cmdType, final String controlId1) { + /* initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("id", controlId); + map.put("cmdType", cmdType); + netWorkUtil.requestPostByAsynew(UPDATE_MODEL_CONTROL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelControl", "ShareDeviceActivity onSuccess()" + respone); + ModelOpenEntity obj = JSON.parseObject(respone, ModelOpenEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_CONTROL_SUCCESS); + msg.obj = controlId1; + msg.arg1 = Integer.parseInt(cmdType); + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_CONTROL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_CONTROL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private List> convertList(List mObjEntity) { + if (mObjEntity != null && mObjEntity.size() > 0) { + List mChildData = null; + ziId = mObjEntity.get(0).getZiId().toString(); + List ziIdStrings = new ArrayList<>(); + for (int i = 0; i < mObjEntity.size(); i++) { + ziIdStrings.add(mObjEntity.get(i).getZiId()); + } + List list = removeDuplicate(ziIdStrings); + mDatas.clear(); + for (int i = 0; i < list.size(); i++) { + mChildData = new ArrayList<>(); + for (int j = 0; j < mObjEntity.size(); j++) { + if (mObjEntity.get(j).getZiId().equals(list.get(i))) { + mChildData.add(mObjEntity.get(j)); + } + } + mDatas.add(mChildData); + } + } + return mDatas; + } + + private void queryModelDetail() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("houseId", houseId); + map.put("modelType", String.valueOf(model)); + map.put("modelId", modelId); + netWorkUtil.requestPostByAsynewApi(QUERY_MODEL_DETAIL, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone1) { + respone = respone1; + ToastUtil.i("queryModelDetail", respone); + ModelSetEntity obj = JSON.parseObject(respone, ModelSetEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_DETAIL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(SELECT_MODEL_DETAIL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(SELECT_MODEL_DETAIL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void updateModelBasic(String flag, String modelName) { + initLoadDialog(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("userId", SharedpreferencesUtil.get(Constans.USERPHONE, "")); + map.put("modelType", String.valueOf(model)); + map.put("flag", flag); + map.put("houseId", houseId); + map.put("modelId", modelId); + map.put("modelName", modelName); + netWorkUtil.requestPostByAsynewApi(UPDATE_MODEL_BASIC, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("updateModelBasic", "ShareDeviceActivity onSuccess()" + respone); + ModelOpenEntity obj = JSON.parseObject(respone, ModelOpenEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_MODEL_BASIC_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODEL_REAPEAT: + if (data != null && data.getExtras().get("repeatTime") != null) { + if (!TextUtils.isEmpty(data.getExtras().get("repeatTime").toString().trim())) { + repeatTime = data.getExtras().get("repeatTime").toString().trim(); + } else { + repeatTime = getString(R.string.once_time); + } + } + + if (data != null && data.getExtras().get("setTime") != null) { + if (!TextUtils.isEmpty(data.getExtras().get("setTime").toString().trim())) { + setTime = data.getExtras().get("setTime").toString().trim(); + } else { + setTime = ""; + } + } + setTopTime(); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelDetailActivity.java b/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelDetailActivity.java new file mode 100644 index 0000000..2220ff3 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelDetailActivity.java @@ -0,0 +1,656 @@ +package com.yonsz.z1.ybl.panel; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.StudyValueEntity; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity4.YblPanelControlEvent; +import com.yonsz.z1.database.entity.entity5.Key5Entity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.view.TitleView; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.List; + +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.SITUATIONAL_PANEL; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_GETCONTROLKEYS; + +/** + * Created by Administrator on 2019/1/9. + */ + +public class YblPanelDetailActivity extends BaseActivity { + private DeviceEntityV4.DataBean.DevicesBean devicesBean; + private TitleView mTitleView; + private String panelType; + private ImageView panelImage; + private TextView panelName; + private RelativeLayout congigOneRl, congigTwoRl, congigThreeRl, congigFourRl, congigFiveRl, congigSixRl, panelPostionRl, panelNameRl; + private TextView congigOneTv, congigTwoTv, congigThreeTv, congigFourTv, congigFiveTv, congigSixTv; + private String modelId1 = "", modelId2 = "", modelId3 = "", modelId4 = "", modelId5 = "", modelId6 = ""; + private String oper1 = "", oper2 = "", oper3 = "", oper4 = "", oper5 = "", oper6 = ""; + private TextView deleteTv; + private TextView panelPostion; + private String id; + private String ziId; + private String deviceAddress; + private String response; + private String deviceModel = ""; + + public void onEventMainThread(YblPanelControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg + msg.length()); + YblEntity nettyEntity = JSON.parseObject(msg, YblEntity.class); + String deviceId = nettyEntity.getDeviceId(); + if (id.equals(deviceId)) { + int key = Integer.parseInt(nettyEntity.getKey()); + String modelId = ""; + String keyName = ""; + if (null != response) { + try { + JSONObject jsonObject = new JSONObject(response); + JSONObject object = jsonObject.getJSONObject("obj"); + if (!object.isNull("key" + key)) { + modelId = object.getJSONObject("key" + key).getString("modelId"); + keyName = object.getJSONObject("key" + key).getString("name"); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + Intent intent = new Intent(this, PanelModelSelectActivity.class); + intent.putExtra("id", id); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("ziId", ziId); + intent.putExtra("configKey", "" + key); + intent.putExtra("keyName", keyName); + intent.putExtra("modelId", modelId); + startActivity(intent); + } + } + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ybl_panel_three); + initView(); + initListener(); + } + + @Override + public void onResume() { + super.onResume(); + queryStudyValue(); + } + + private void initListener() { + congigOneRl.setOnClickListener(this); + congigTwoRl.setOnClickListener(this); + congigThreeRl.setOnClickListener(this); + congigFourRl.setOnClickListener(this); + congigFiveRl.setOnClickListener(this); + congigSixRl.setOnClickListener(this); + deleteTv.setOnClickListener(this); + panelPostionRl.setOnClickListener(this); + } + + private void initView() { + // devicesBean = (DeviceEntityV4.DataBean.DevicesBean) getArguments().get("DATA"); + id = getIntent().getExtras().get("id").toString(); + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + ziId = getIntent().getExtras().get("ziId").toString(); + panelType = getIntent().getExtras().get("panelType").toString(); + deviceAddress = getIntent().getExtras().get("deviceAddress").toString(); + congigOneRl = (RelativeLayout) findViewById(R.id.rl_config_one); + congigTwoRl = (RelativeLayout) findViewById(R.id.rl_config_two); + congigThreeRl = (RelativeLayout) findViewById(R.id.rl_config_three); + congigFourRl = (RelativeLayout) findViewById(R.id.rl_config_four); + congigFiveRl = (RelativeLayout) findViewById(R.id.rl_config_five); + congigSixRl = (RelativeLayout) findViewById(R.id.rl_config_six); + panelPostionRl = (RelativeLayout) findViewById(R.id.rl_panel_position); + panelNameRl = (RelativeLayout) findViewById(R.id.rl_panel_name); + congigOneTv = (TextView) findViewById(R.id.tv_config_one_position); + congigTwoTv = (TextView) findViewById(R.id.tv_config_two_position); + congigThreeTv = (TextView) findViewById(R.id.tv_config_three_position); + congigFourTv = (TextView) findViewById(R.id.tv_config_four_position); + congigFiveTv = (TextView) findViewById(R.id.tv_config_five_position); + congigSixTv = (TextView) findViewById(R.id.tv_config_six_position); + panelImage = (ImageView) findViewById(R.id.iv_panel_image); + panelName = (TextView) findViewById(R.id.iv_panel_name); + deleteTv = (TextView) findViewById(R.id.btn_exit); + panelPostion = (TextView) findViewById(R.id.tv_panel_position); + mTitleView = (TitleView) findViewById(R.id.title_panel_three); + mTitleView.clearBackGroud(); + mTitleView.setHeadColor(Color.BLACK); + mTitleView.setBackFuntion(R.drawable.icon_nav_back_black); + mTitleView.setHead(R.string.Situational_panel); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + if (getIntent().getExtras().get("from").toString().equals("YblPanelFragment")) { + Intent intent = new Intent(YblPanelDetailActivity.this, YblPanelFragment.class); + intent.putExtra("data", deviceAddress); + setResult(MODIFY_ADDRESS_RESULT, intent); + } + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + panelNameRl.setVisibility(View.GONE); + panelPostion.setText(AddressNameUtil.getAddressName(deviceAddress)); + switch (panelType) { + case "0": + panelImage.setImageResource(R.drawable.icon_t6_scene_four); + panelName.setText(R.string.panel_four_big); + congigFiveRl.setVisibility(View.GONE); + congigSixRl.setVisibility(View.GONE); + break; + case "1": + switch (deviceModel) { + case "3": + panelImage.setImageResource(R.drawable.pic_t5_scene_one); + break; + default: + panelImage.setImageResource(R.drawable.pic_scene_one); + break; + } + panelName.setText(R.string.panel_one_big); + congigTwoRl.setVisibility(View.GONE); + congigThreeRl.setVisibility(View.GONE); + congigFourRl.setVisibility(View.GONE); + congigFiveRl.setVisibility(View.GONE); + congigSixRl.setVisibility(View.GONE); + break; + case "2": + switch (deviceModel) { + case "3": + panelImage.setImageResource(R.drawable.pic_t5_scene_two); + break; + default: + panelImage.setImageResource(R.drawable.pic_scene_two); + break; + } + panelName.setText(R.string.panel_two_big); + congigThreeRl.setVisibility(View.GONE); + congigFourRl.setVisibility(View.GONE); + congigFiveRl.setVisibility(View.GONE); + congigSixRl.setVisibility(View.GONE); + break; + case "3": + switch (deviceModel) { + case "3": + panelImage.setImageResource(R.drawable.pic_t5_scene_three); + break; + default: + panelImage.setImageResource(R.drawable.pic_scene_three); + break; + } + panelName.setText(R.string.panel_three_big); + congigFourRl.setVisibility(View.GONE); + congigFiveRl.setVisibility(View.GONE); + congigSixRl.setVisibility(View.GONE); + break; + case "4": + switch (deviceModel) { + case "0": + panelImage.setImageResource(R.drawable.icon_t4_scene_four); + break; + case "1": + panelImage.setImageResource(R.drawable.pic_t3_scene_four); + break; + case "2": + panelImage.setImageResource(R.drawable.pic_t5_scene_four); + break; + case "3": + panelImage.setImageResource(R.drawable.pic_t5_scene_four); + break; + } + panelName.setText(R.string.panel_four_big); + congigFiveRl.setVisibility(View.GONE); + congigSixRl.setVisibility(View.GONE); + break; + case "5": + // panelImage.setImageResource(R.drawable.icon_t4_scene_four); + panelImage.setImageResource(R.drawable.pic_add_scene_four_t4); + panelName.setText(R.string.panel_four_big); + congigFiveRl.setVisibility(View.GONE); + congigSixRl.setVisibility(View.GONE); + break; + case "6": + switch (deviceModel) { + case "0": + panelImage.setImageResource(R.drawable.pic_scene_six); + break; + case "1": + panelImage.setImageResource(R.drawable.pic_t3_scene_six); + break; + case "2": + panelImage.setImageResource(R.drawable.pic_t5_scene_six); + break; + case "3": + panelImage.setImageResource(R.drawable.pic_t5_scene_six); + break; + case "4": + panelImage.setImageResource(R.drawable.icon_t6_scene_six); + break; + } + panelName.setText(R.string.panel_six_big); + break; + } + } + + @Override + public void onBackPressed() { + if (getIntent().getExtras().get("from").toString().equals("YblPanelFragment")) { + Intent intent = new Intent(YblPanelDetailActivity.this, YblPanelFragment.class); + intent.putExtra("data", deviceAddress); + setResult(MODIFY_ADDRESS_RESULT, intent); + } + finish(); + } + + @Override + public void onClick(View v) { + Intent intent = new Intent(this, PanelModelSelectActivity.class); + intent.putExtra("id", id); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("ziId", ziId); + switch (v.getId()) { + case R.id.rl_config_one: + intent.putExtra("configKey", "1"); + intent.putExtra("keyName", congigOneTv.getText().toString()); + intent.putExtra("modelId", modelId1); + intent.putExtra("oper", oper1); + startActivity(intent); + break; + case R.id.rl_config_two: + intent.putExtra("configKey", "2"); + intent.putExtra("keyName", congigTwoTv.getText().toString()); + intent.putExtra("modelId", modelId2); + intent.putExtra("oper", oper2); + startActivity(intent); + break; + case R.id.rl_config_three: + intent.putExtra("configKey", "3"); + intent.putExtra("keyName", congigThreeTv.getText().toString()); + intent.putExtra("modelId", modelId3); + intent.putExtra("oper", oper3); + startActivity(intent); + break; + case R.id.rl_config_four: + intent.putExtra("configKey", "4"); + intent.putExtra("keyName", congigFourTv.getText().toString()); + intent.putExtra("modelId", modelId4); + intent.putExtra("oper", oper4); + startActivity(intent); + break; + case R.id.rl_config_five: + intent.putExtra("configKey", "5"); + intent.putExtra("keyName", congigFiveTv.getText().toString()); + intent.putExtra("modelId", modelId5); + intent.putExtra("oper", oper5); + startActivity(intent); + break; + case R.id.rl_config_six: + intent.putExtra("configKey", "6"); + intent.putExtra("keyName", congigSixTv.getText().toString()); + intent.putExtra("modelId", modelId6); + intent.putExtra("oper", oper6); + startActivity(intent); + break; + case R.id.btn_exit: + ConfirmDialog dialog = new ConfirmDialog(this, new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + deleteChildDevice(); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case R.id.rl_panel_position: + /*intent = new Intent(this, UpadateYblPanelPosActivity.class); + intent.putExtra("id", id); + intent.putExtra("ziId", ziId); + intent.putExtra("addressId", deviceAddress); + startActivityForResult(intent, MODIFY_ADDRESS_RESULT);*/ + + intent = new Intent(this, ModifyRoomActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", SITUATIONAL_PANEL); + intent.putExtra("deviceModel", deviceModel); + intent.putExtra("addressId", deviceAddress); + intent.putExtra("deviceId", id); + startActivityForResult(intent, MODIFY_DEVICE_NAME); + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case DELETE_CHILDDEVICE_SUCCESS: + ToastUtil.show(this, "删除成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + finish(); + } + }, 2000); + break; + case QUERY_STUDY_SUCCESS: + if (null != msg.obj) { + Key5Entity key5Entity = (Key5Entity) msg.obj; + if (null != key5Entity && null != key5Entity.getData()) { + List data = key5Entity.getData(); + for (int i = 0; i < data.size(); i++) { + switch (data.get(i).getName()) { + case "key1": + if (!data.get(i).isDisabled()) { + congigOneTv.setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + modelId1 = data.get(i).getValue(); + if (!data.get(i).getOper().isEmpty()) { + oper1 = data.get(i).getOper(); + } + } else { + congigOneTv.setText(""); + modelId1 = ""; + } + break; + case "key2": + if (!data.get(i).isDisabled()) { + congigTwoTv.setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + modelId2 = data.get(i).getValue(); + if (!data.get(i).getOper().isEmpty()) { + oper2 = data.get(i).getOper(); + } + } else { + congigTwoTv.setText(""); + modelId2 = ""; + } + break; + case "key3": + if (!data.get(i).isDisabled()) { + congigThreeTv.setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + modelId3 = data.get(i).getValue(); + if (!data.get(i).getOper().isEmpty()) { + oper3 = data.get(i).getOper(); + } + } else { + congigThreeTv.setText(""); + modelId3 = ""; + } + break; + case "key4": + if (!data.get(i).isDisabled()) { + congigFourTv.setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + modelId4 = data.get(i).getValue(); + if (!data.get(i).getOper().isEmpty()) { + oper4 = data.get(i).getOper(); + } + } else { + congigFourTv.setText(""); + modelId4 = ""; + } + break; + case "key5": + if (!data.get(i).isDisabled()) { + congigFiveTv.setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + modelId5 = data.get(i).getValue(); + if (!data.get(i).getOper().isEmpty()) { + oper5 = data.get(i).getOper(); + } + } else { + congigFiveTv.setText(""); + modelId5 = ""; + } + break; + case "key6": + if (!data.get(i).isDisabled()) { + congigSixTv.setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + modelId6 = data.get(i).getValue(); + if (!data.get(i).getOper().isEmpty()) { + oper6 = data.get(i).getOper(); + } + } else { + congigSixTv.setText(""); + modelId6 = ""; + } + break; + } + } + } + } + /*response = (String) msg.obj; + try { + JSONObject jsonObject = new JSONObject(response); + JSONObject object = jsonObject.getJSONObject("obj"); + if (!object.isNull("key1")) { + congigOneTv.setText(object.getJSONObject("key1").getString("name")); + modelId1 = object.getJSONObject("key1").getString("modelId"); + if (!object.getJSONObject("key1").isNull("oper")) { + oper1 = object.getJSONObject("key1").getString("oper"); + } + } else { + congigOneTv.setText(""); + modelId1 = ""; + } + if (!object.isNull("key2")) { + congigTwoTv.setText(object.getJSONObject("key2").getString("name")); + modelId2 = object.getJSONObject("key2").getString("modelId"); + if (!object.getJSONObject("key2").isNull("oper")) { + oper2 = object.getJSONObject("key2").getString("oper"); + } + } else { + congigTwoTv.setText(""); + modelId2 = ""; + } + if (!object.isNull("key3")) { + congigThreeTv.setText(object.getJSONObject("key3").getString("name")); + modelId3 = object.getJSONObject("key3").getString("modelId"); + if (!object.getJSONObject("key3").isNull("oper")) { + oper3 = object.getJSONObject("key3").getString("oper"); + } + } else { + congigThreeTv.setText(""); + modelId3 = ""; + } + if (!object.isNull("key4")) { + congigFourTv.setText(object.getJSONObject("key4").getString("name")); + modelId4 = object.getJSONObject("key4").getString("modelId"); + if (!object.getJSONObject("key4").isNull("oper")) { + oper4 = object.getJSONObject("key4").getString("oper"); + } + } else { + congigFourTv.setText(""); + modelId4 = ""; + } + if (!object.isNull("key5")) { + congigFiveTv.setText(object.getJSONObject("key5").getString("name")); + modelId5 = object.getJSONObject("key5").getString("modelId"); + if (!object.getJSONObject("key5").isNull("oper")) { + oper5 = object.getJSONObject("key5").getString("oper"); + } + } else { + congigFiveTv.setText(""); + modelId5 = ""; + } + if (!object.isNull("key6")) { + congigSixTv.setText(object.getJSONObject("key6").getString("name")); + modelId6 = object.getJSONObject("key6").getString("modelId"); + if (!object.getJSONObject("key6").isNull("oper")) { + oper6 = object.getJSONObject("key6").getString("oper"); + } + } else { + congigSixTv.setText(""); + modelId6 = ""; + } + } catch (JSONException e) { + e.printStackTrace(); + Log.i("queryStudyValue", "TvA1Fragment callBackUiThread()" + e.getMessage()); + }*/ + break; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_ADDRESS_RESULT: + if (data != null && data.getExtras().get("data") != null) { + deviceAddress = (String) data.getExtras().get("data"); + panelPostion.setText(AddressNameUtil.getAddressName((String) data.getExtras().get("data"))); + } + break; + case MODIFY_DEVICE_NAME: + if (data != null && data.getExtras().get("devicePosition") != null) { + deviceAddress = data.getExtras().get("addressId").toString(); + panelPostion.setText(AddressNameUtil.getAddressName((String) data.getExtras().get("addressId"))); + } + break; + } + } + + private void queryStudyValue() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceModel", deviceModel); + map.put("deviceType", SITUATIONAL_PANEL); + map.put("ziId", ziId); + netWorkUtil.requestGetByAsy(SUBSET_GETCONTROLKEYS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("subsetGetControlKeys", "onSuccess()" + respone); + Key5Entity obj = JSON.parseObject(respone, Key5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + /*private void queryStudyValue() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", SITUATIONAL_PANEL); + map.put("ziId", ziId); + map.put("deviceId", id); + util.requestPostByAsynew(NetWorkUrl.QUERY_CONTROL_KEY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryStudyValue", "onSuccess: " + respone); + StudyValueEntity entity = JSON.parseObject(respone, StudyValueEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_SUCCESS); + msg.obj = respone; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + }*/ + + private void deleteChildDevice() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", devicesBean.getDeviceType()); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelFragment.java b/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelFragment.java new file mode 100644 index 0000000..90ef491 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelFragment.java @@ -0,0 +1,1086 @@ +package com.yonsz.z1.ybl.panel; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.yonsz.z1.R; +import com.yonsz.z1.database.entity.AddChildDeviceEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.StudyValueEntity; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity4.DeviceStateEntity; +import com.yonsz.z1.database.entity.entity4.YblPanelControlEvent; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.database.entity.entity5.Key5Entity; +import com.yonsz.z1.database.entity.entitya2.DeviceEntityV4; +import com.yonsz.z1.fragment.BaseFragment; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmDialog; +import com.yonsz.z1.mine.aboutversion.customview.ConfirmNameDialog; +import com.yonsz.z1.mine.aboutversion.customview.DeviceBottomDialog; +import com.yonsz.z1.mine.aboutversion.feature.Callback; +import com.yonsz.z1.mine.aboutversion.feature.Callback1; +import com.yonsz.z1.net.Constans; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.utils.AddressNameUtil; +import com.yonsz.z1.utils.AppIdUtil; +import com.yonsz.z1.utils.DensityUtil; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ShakeUtil; +import com.yonsz.z1.utils.SharedpreferencesUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.DeviceOtherNameActivity; +import com.yonsz.z1.version5.ModifyRoomActivity; +import com.yonsz.z1.view.TextViewVertical; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.view.loading.LoadingDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.R.string.position; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_FAIL; +import static com.yonsz.z1.net.Constans.AVTIVE_MODEL_SUCCESS; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_FAIL; +import static com.yonsz.z1.net.Constans.DELETE_CHILDDEVICE_SUCCESS; +import static com.yonsz.z1.net.Constans.LIGHT_TAG; +import static com.yonsz.z1.net.Constans.MODIFY_ADDRESS_RESULT; +import static com.yonsz.z1.net.Constans.MODIFY_DEVICE_NAME; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.MODIFY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_DEVICE_LASTINFO_SUCCESS; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_FAIL; +import static com.yonsz.z1.net.Constans.QUERY_STUDY_SUCCESS; +import static com.yonsz.z1.net.Constans.SHOW_LOCAL_CONTROL; +import static com.yonsz.z1.net.Constans.SITUATIONAL_PANEL; +import static com.yonsz.z1.net.NetWorkUrl.AVTIVE_MODEL_NEW; +import static com.yonsz.z1.net.NetWorkUrl.QUERY_DEVICE_LASTINFO; +import static com.yonsz.z1.net.NetWorkUrl.SUBSET_GETCONTROLKEYS; + +/** + * Created by Administrator on 2018/8/8. + */ + +public class YblPanelFragment extends BaseFragment implements View.OnClickListener { + private View fragView; + private UIHandle mHandler; + private DeviceEntityV4.DataBean.DevicesBean devicesBean; + private TitleView mTitleView; + private String ziId; + private String id; + private ImageView localControlIv; + private LoadingDialog mLoadingDialog; + + private RelativeLayout[] mRelativeLayouts = new RelativeLayout[7]; + private CheckBox[] timeCheckBox = new CheckBox[7]; + private TextView[] mTextPosition = new TextView[7]; + private TextViewVertical[] mTextViewVerticals = new TextViewVertical[7]; + private ImageView[] ivModifys = new ImageView[7]; + private List positionIds = new ArrayList<>(); + private List mTextPositionIds = new ArrayList<>(); + private List mTextViewVerticalsIds = new ArrayList<>(); + private List mRelativeLayoutsIds = new ArrayList<>(); + private List ivModifysIds = new ArrayList<>(); + private CompoundButton lastTimeCheckBox; + private List condition = new ArrayList<>(); + private int deviceCount = 1; + private LinearLayout sixPanelLl; + private String panelType; + private TextView panelPosition, tv_child_position, aiNameAndState, aiModelName; + private String allDate; + private LinearLayout ll_bg; + private JSONObject jsonObject; + + public static YblPanelFragment getInstance(DeviceEntityV4.DataBean.DevicesBean devicesBean) { + YblPanelFragment fragment = new YblPanelFragment(); + fragment.devicesBean = devicesBean; + return fragment; + } + + public void onEventMainThread(YblPanelControlEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg + msg.length()); + YblEntity nettyEntity = JSON.parseObject(msg, YblEntity.class); + String deviceId = nettyEntity.getDeviceId(); + if (deviceCount == 6) { + if (id.equals(deviceId)) { + int key = Integer.parseInt(nettyEntity.getKey()); + if (key > 2) { + timeCheckBox[key].setChecked(true); + mTextPosition[key].setTextColor(getResources().getColor(R.color.z1_control)); + mTextViewVerticals[key].setTextColor(getResources().getColor(R.color.z1_control)); + } else { + timeCheckBox[key - 1].setChecked(true); + mTextPosition[key - 1].setTextColor(getResources().getColor(R.color.z1_control)); + mTextViewVerticals[key - 1].setTextColor(getResources().getColor(R.color.z1_control)); + } + } + } else { + if (id.equals(deviceId)) { + int key = Integer.parseInt(nettyEntity.getKey()); + timeCheckBox[key - 1].setChecked(true); + mTextPosition[key - 1].setTextColor(getResources().getColor(R.color.z1_control)); + mTextViewVerticals[key - 1].setTextColor(getResources().getColor(R.color.z1_control)); + } + } + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + mHandler = new UIHandle(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + fragView = View.inflate(getActivity(), R.layout.fragment_ybl_panel, null); + initView(fragView); + initListener(); + return fragView; + } + + private void initView(View fragView) { + // devicesBean = JSON.parseObject(getArguments().get("DATA").toString(), DeviceEntityV4.DataBean.DevicesBean.class); + // devicesBean = (DeviceEntityV4.DataBean.DevicesBean) getArguments().get("DATA"); + id = devicesBean.getId(); + ziId = devicesBean.getZiId(); + panelType = String.valueOf(devicesBean.getDeviceCount()); + deviceCount = devicesBean.getDeviceCount(); + ll_bg = (LinearLayout) fragView.findViewById(R.id.ll_bg); + panelPosition = (TextView) fragView.findViewById(R.id.tv_panel_position); + aiNameAndState = (TextView) fragView.findViewById(R.id.tv_ai_state); + aiModelName = (TextView) fragView.findViewById(R.id.tv_ai_modelname); + localControlIv = (ImageView) fragView.findViewById(R.id.iv_local_control); + sixPanelLl = (LinearLayout) fragView.findViewById(R.id.ll_six_panel); + mTitleView = (TitleView) fragView.findViewById(R.id.title_music); + mTitleView.setHead(devicesBean.getDeviceName()); + mTitleView.clearBackGroud(); + mTitleView.setHeadFuntion(R.drawable.icon_device_more); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + getActivity().finish(); + } + + @Override + public void onFunction() { + DeviceBottomDialog dialog2 = new DeviceBottomDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + //删除 + ConfirmDialog dialog = new ConfirmDialog(getContext(), new Callback() { + @Override + public void callback(int position1) { + switch (position1) { + case 0: + break; + case 1: + // deleteChildDevice(); + subsetDelete(); + break; + } + } + }); + dialog.setContent(R.string.sure_delete_device); + dialog.setCancleBtn(R.string.cancel); + dialog.setSureBtn(R.string.sure); + dialog.setCancelable(false); + dialog.show(); + break; + case 2: + Intent intent1 = new Intent(getActivity(), ModifyRoomActivity.class); + intent1.putExtra("addressId", devicesBean.getAddressId()); + intent1.putExtra("deviceId", devicesBean.getId()); + intent1.putExtra("id", devicesBean.getId()); + intent1.putExtra("ziId", devicesBean.getZiId()); + intent1.putExtra("deviceAddress", devicesBean.getAddressId()); + intent1.putExtra("panelType", devicesBean.getDeviceCount()); + intent1.putExtra("deviceModel", devicesBean.getDeviceModel()); + startActivityForResult(intent1, MODIFY_DEVICE_NAME); + break; + case 3: + //语令说明 + Intent intent = new Intent(getContext(), YblPanelDetailActivity.class); + intent.putExtra("id", devicesBean.getId()); + intent.putExtra("ziId", devicesBean.getZiId()); + intent.putExtra("deviceAddress", devicesBean.getAddressId()); + intent.putExtra("panelType", devicesBean.getDeviceCount()); + intent.putExtra("deviceModel", devicesBean.getDeviceModel()); + intent.putExtra("from", "YblPanelFragment"); + startActivityForResult(intent, MODIFY_ADDRESS_RESULT); + break; + case 4: + break; + case 5: + if (AddressNameUtil.isVirtual(ziId)) { + ToastUtil.show(getContext(), "虚拟家庭不支持该操作"); + return; + } + //修改名字 + ConfirmNameDialog dialog1 = new ConfirmNameDialog(getContext(), new Callback1() { + @Override + public void callback(int position, String positioName) { + switch (position) { + case 0: + break; + case 1: + if (TextUtils.isEmpty(positioName.trim())) { + return; + } + subsetModify(positioName); + break; + } + } + }); + dialog1.setMaxEms(12); + dialog1.setOldName(mTitleView.getHead()); + dialog1.setContent("修改设备名称"); + dialog1.setCancleBtn(R.string.cancel); + dialog1.setSureBtn(R.string.sure); + dialog1.setCancelable(false); + dialog1.show(); + break; + case 7: + intent = new Intent(getContext(), DeviceOtherNameActivity.class); + intent.putExtra("ziId", ziId); + intent.putExtra("deviceType", devicesBean.getDeviceType()); + intent.putExtra("deviceModel", devicesBean.getDeviceModel()); + intent.putExtra("addressId", devicesBean.getAddressId()); + intent.putExtra("deviceId", devicesBean.getId()); + startActivity(intent); + break; + } + } + }); + dialog2.setContent(); + dialog2.setOtherNameGone(); + dialog2.setTop("修改情景面板信息"); + dialog2.setSureBtnTxt("删除情景面板"); + dialog2.setLearn(); + dialog2.setCancelable(false); + Window dialogWindow = dialog2.getWindow(); + dialogWindow.setGravity(Gravity.BOTTOM); + //获得窗体的属性 + WindowManager.LayoutParams lp = dialogWindow.getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + // 将属性设置给窗体 + dialogWindow.setAttributes(lp); + dialog2.show(); + } + + @Override + public void onFunctionText() { + + } + }); + panelPosition.setText(AddressNameUtil.getAddressName(devicesBean.getAddressId())); + aiNameAndState.setText(AddressNameUtil.getAiNameAndState(ziId)); + aiModelName.setText(devicesBean.getModelName()); + positionIds.add(R.id.rb_panel_1); + positionIds.add(R.id.rb_panel_2); + positionIds.add(R.id.rb_panel_3); + positionIds.add(R.id.rb_panel_31); + positionIds.add(R.id.rb_panel_4); + positionIds.add(R.id.rb_panel_5); + positionIds.add(R.id.rb_panel_6); + mTextPositionIds.add(R.id.tv_panel_position_1); + mTextPositionIds.add(R.id.tv_panel_position_2); + mTextPositionIds.add(R.id.tv_panel_position_3); + mTextPositionIds.add(R.id.tv_panel_position_31); + mTextPositionIds.add(R.id.tv_panel_position_4); + mTextPositionIds.add(R.id.tv_panel_position_5); + mTextPositionIds.add(R.id.tv_panel_position_6); + mTextViewVerticalsIds.add(R.id.tv_panel_1); + mTextViewVerticalsIds.add(R.id.tv_panel_2); + mTextViewVerticalsIds.add(R.id.tv_panel_3); + mTextViewVerticalsIds.add(R.id.tv_panel_31); + mTextViewVerticalsIds.add(R.id.tv_panel_4); + mTextViewVerticalsIds.add(R.id.tv_panel_5); + mTextViewVerticalsIds.add(R.id.tv_panel_6); + mRelativeLayoutsIds.add(R.id.rl_panel_1); + mRelativeLayoutsIds.add(R.id.rl_panel_2); + mRelativeLayoutsIds.add(R.id.rl_panel_3); + mRelativeLayoutsIds.add(R.id.rl_panel_31); + mRelativeLayoutsIds.add(R.id.rl_panel_4); + mRelativeLayoutsIds.add(R.id.rl_panel_5); + mRelativeLayoutsIds.add(R.id.rl_panel_6); + ivModifysIds.add(R.id.iv_panel_1); + ivModifysIds.add(R.id.iv_panel_2); + ivModifysIds.add(R.id.iv_panel_3); + ivModifysIds.add(R.id.iv_panel_31); + ivModifysIds.add(R.id.iv_panel_4); + ivModifysIds.add(R.id.iv_panel_5); + ivModifysIds.add(R.id.iv_panel_6); + + for (int i = 0; i < positionIds.size(); i++) { + if (i >= 7) { + return; + } + mRelativeLayouts[i] = (RelativeLayout) fragView.findViewById(mRelativeLayoutsIds.get(i)); + timeCheckBox[i] = (CheckBox) fragView.findViewById(positionIds.get(i)); + mTextPosition[i] = (TextView) fragView.findViewById(mTextPositionIds.get(i)); + mTextViewVerticals[i] = (TextViewVertical) fragView.findViewById(mTextViewVerticalsIds.get(i)); + ivModifys[i] = (ImageView) fragView.findViewById(ivModifysIds.get(i)); + /*if (deviceCount == 6 && i > 3) { + sixPanelLl.setVisibility(View.VISIBLE); + mRelativeLayouts[3].setVisibility(View.GONE); + } else if (i + 1 > deviceCount) { + sixPanelLl.setVisibility(View.GONE); + mRelativeLayouts[i].setVisibility(View.GONE); + }*/ +// timeCheckBox[i].setText("未设置"); + timeCheckBox[i].setEnabled(false); + timeCheckBox[i].setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.rb_panel_1: + subsetControl("1"); + break; + case R.id.rb_panel_2: + subsetControl("2"); + break; + case R.id.rb_panel_3: + subsetControl("3"); + break; + case R.id.rb_panel_31: + subsetControl("3"); + break; + case R.id.rb_panel_4: + subsetControl("4"); + break; + case R.id.rb_panel_5: + subsetControl("5"); + break; + case R.id.rb_panel_6: + subsetControl("6"); + break; + } + } + }); + timeCheckBox[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int id = buttonView.getId(); + if (positionIds.contains(id)) { + if (isChecked) { + if (lastTimeCheckBox != null) { + lastTimeCheckBox.setChecked(false); + } + lastTimeCheckBox = buttonView; + } else { + boolean isForceCheck = true; + for (int i = 0; i < timeCheckBox.length; i++) { + if (timeCheckBox[i].isChecked()) { + isForceCheck = false; + } + } + if (isForceCheck) { + buttonView.setChecked(true); + } + } + } + } + }); + } + setBgPic(); + } + + private void setBgPic() { + if (AppIdUtil.isZhiKong()) { + switch (deviceCount) { + case 1: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene); + sixPanelLl.setVisibility(View.GONE); + mRelativeLayouts[0].setVisibility(View.VISIBLE); + mRelativeLayouts[1].setVisibility(View.GONE); + mRelativeLayouts[2].setVisibility(View.GONE); + mRelativeLayouts[3].setVisibility(View.GONE); + mRelativeLayouts[4].setVisibility(View.GONE); + mRelativeLayouts[5].setVisibility(View.GONE); + mRelativeLayouts[6].setVisibility(View.GONE); + break; + case 2: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene2); + sixPanelLl.setVisibility(View.GONE); + mRelativeLayouts[0].setVisibility(View.VISIBLE); + mRelativeLayouts[1].setVisibility(View.VISIBLE); + mRelativeLayouts[2].setVisibility(View.GONE); + mRelativeLayouts[3].setVisibility(View.GONE); + mRelativeLayouts[4].setVisibility(View.GONE); + mRelativeLayouts[5].setVisibility(View.GONE); + mRelativeLayouts[6].setVisibility(View.GONE); + break; + case 3: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene3); + sixPanelLl.setVisibility(View.GONE); + mRelativeLayouts[0].setVisibility(View.VISIBLE); + mRelativeLayouts[1].setVisibility(View.VISIBLE); + mRelativeLayouts[2].setVisibility(View.VISIBLE); + mRelativeLayouts[3].setVisibility(View.GONE); + mRelativeLayouts[4].setVisibility(View.GONE); + mRelativeLayouts[5].setVisibility(View.GONE); + mRelativeLayouts[6].setVisibility(View.GONE); + break; + case 4: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene4_485); + sixPanelLl.setVisibility(View.VISIBLE); + mRelativeLayouts[0].setVisibility(View.VISIBLE); + mRelativeLayouts[1].setVisibility(View.VISIBLE); + mRelativeLayouts[2].setVisibility(View.GONE); + mRelativeLayouts[3].setVisibility(View.VISIBLE); + mRelativeLayouts[4].setVisibility(View.VISIBLE); + mRelativeLayouts[5].setVisibility(View.GONE); + mRelativeLayouts[6].setVisibility(View.GONE); + break; + case 6: + ll_bg.setBackgroundResource(R.drawable.pic_control_scene6); + sixPanelLl.setVisibility(View.VISIBLE); + mRelativeLayouts[0].setVisibility(View.VISIBLE); + mRelativeLayouts[1].setVisibility(View.VISIBLE); + mRelativeLayouts[2].setVisibility(View.VISIBLE); + mRelativeLayouts[3].setVisibility(View.GONE); + mRelativeLayouts[4].setVisibility(View.VISIBLE); + mRelativeLayouts[5].setVisibility(View.VISIBLE); + mRelativeLayouts[6].setVisibility(View.VISIBLE); + break; + } + } + } + + /*@Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (isVisibleToUser) { + // 相当于onResume()方法--获取焦点 + setBgPic(); + queryStudyValue(); + } else { + // 相当于onpause()方法---失去焦点 + } + }*/ + + @Override + public void onResume() { + super.onResume(); + queryDeviceLastInfo(); + queryStudyValue(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + private void initListener() { + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + } + } + + private void callBackUiThread(Message msg) { + switch (msg.what) { + case DELETE_CHILDDEVICE_SUCCESS: + // AddChildDeviceEntity entity2 = (AddChildDeviceEntity) msg.obj; + ToastUtil.show(getContext(), "删除成功"); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + getActivity().finish(); + } + }, 2000); + break; + case DELETE_CHILDDEVICE_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + case SHOW_LOCAL_CONTROL: + String obj = (String) msg.obj; + if (obj.equals("1")) { + localControlIv.setVisibility(View.VISIBLE); + } else { + localControlIv.setVisibility(View.GONE); + } + break; + case QUERY_STUDY_SUCCESS: + if (null != msg.obj) { +// allDate = (String) msg.obj; + Key5Entity key5Entity = (Key5Entity) msg.obj; + setViewDate(key5Entity); + /*try { + jsonObject = new JSONObject(allDate); + setViewDate(key5Entity); + } catch (JSONException e) { + e.printStackTrace(); + }*/ + } + break; + case AVTIVE_MODEL_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + case QUERY_DEVICE_LASTINFO_SUCCESS: + DeviceStateEntity parseObject = (DeviceStateEntity) msg.obj; + int openFlag = Integer.parseInt(parseObject.getData().getOpenFlag()); + if (openFlag == 0) { + return; + } + if (deviceCount == 6) { + if (openFlag > 2) { + timeCheckBox[openFlag].setChecked(true); + mTextPosition[openFlag].setTextColor(getResources().getColor(R.color.z1_control)); + mTextViewVerticals[openFlag].setTextColor(getResources().getColor(R.color.z1_control)); + } else { + timeCheckBox[openFlag - 1].setChecked(true); + mTextPosition[openFlag - 1].setTextColor(getResources().getColor(R.color.z1_control)); + mTextViewVerticals[openFlag - 1].setTextColor(getResources().getColor(R.color.z1_control)); + } + } else { + timeCheckBox[openFlag - 1].setChecked(true); + mTextPosition[openFlag - 1].setTextColor(getResources().getColor(R.color.z1_control)); + mTextViewVerticals[openFlag - 1].setTextColor(getResources().getColor(R.color.z1_control)); + } + break; + case MODIFY_NAME_SUCCESS: + mTitleView.setHead(devicesBean.getDeviceName()); + break; + case MODIFY_NAME_FAIL: + ToastUtil.show(getContext(), (String) msg.obj); + break; + } + } + + private void subsetModify(String deviceName) { + // initLoadDialog(); + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", devicesBean.getDeviceType()); + map.put("ziId", ziId); + if (!TextUtils.isEmpty(deviceName)) { + map.put("name", deviceName); + } + util.requestPostByAsyBody(NetWorkUrl.SUBSET_MODIFY, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetModify", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + devicesBean.setDeviceName(deviceName); + Message msg = mHandler.obtainMessage(MODIFY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(MODIFY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(MODIFY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void setViewDate(Key5Entity key5Entity) { + if (null != key5Entity && null != key5Entity.getData()) { + List data = key5Entity.getData(); + for (int i = 0; i < data.size(); i++) { + switch (data.get(i).getName()) { + case "key1": + if (!data.get(i).isDisabled()) { + mTextViewVerticals[0].setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + timeCheckBox[0].setEnabled(true); + } else { + mTextViewVerticals[0].setText("未开启"); + timeCheckBox[0].setEnabled(false); + } + /*if (!key1.isNull("addressId")) { + mTextPosition[0].setText(AddressNameUtil.getAddressName(data.get(i).getName())); + } else { + mTextPosition[0].setText(""); + }*/ + break; + case "key2": + if (!data.get(i).isDisabled()) { + mTextViewVerticals[1].setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + timeCheckBox[1].setEnabled(true); + } else { + mTextViewVerticals[1].setText("未开启"); + timeCheckBox[1].setEnabled(false); + } + break; + case "key3": + if (!data.get(i).isDisabled()) { + mTextViewVerticals[2].setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + timeCheckBox[2].setEnabled(true); + mTextViewVerticals[3].setText(data.get(i).getLabel()); + timeCheckBox[3].setEnabled(true); + } else { + mTextViewVerticals[2].setText("未开启"); + timeCheckBox[2].setEnabled(false); + mTextViewVerticals[3].setText("未开启"); + timeCheckBox[3].setEnabled(false); + } + break; + case "key4": + if (!data.get(i).isDisabled()) { + mTextViewVerticals[4].setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + timeCheckBox[4].setEnabled(true); + } else { + mTextViewVerticals[4].setText("未开启"); + timeCheckBox[4].setEnabled(false); + } + break; + case "key5": + if (!data.get(i).isDisabled()) { + mTextViewVerticals[5].setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + timeCheckBox[5].setEnabled(true); + } else { + mTextViewVerticals[5].setText("未开启"); + timeCheckBox[5].setEnabled(false); + } + break; + case "key6": + if (!data.get(i).isDisabled()) { + mTextViewVerticals[6].setText(data.get(i).getLabel() + AddressNameUtil.getOperName(data.get(i).getOper())); + timeCheckBox[6].setEnabled(true); + } else { + mTextViewVerticals[6].setText("未开启"); + timeCheckBox[6].setEnabled(false); + } + break; + } + } + } + } + + private void setViewDate() { + try { + JSONObject object = jsonObject.getJSONObject("obj"); + if (!object.isNull("key1")) { + JSONObject key1 = object.getJSONObject("key1"); + if (key1.getString("modelOpenFlag").equals("1")) { + mTextViewVerticals[0].setText(object.getJSONObject("key1").getString("name")); + timeCheckBox[0].setEnabled(true); + } else { + mTextViewVerticals[0].setText("未开启"); + timeCheckBox[0].setEnabled(false); + } + if (!key1.isNull("addressId")) { + mTextPosition[0].setText(AddressNameUtil.getAddressName(key1.getString("addressId"))); + } else { + mTextPosition[0].setText(""); + } + } else { + mTextViewVerticals[0].setText("未设置"); + timeCheckBox[0].setEnabled(false); + } + if (!object.isNull("key2")) { + JSONObject key2 = object.getJSONObject("key2"); + if (key2.getString("modelOpenFlag").equals("1")) { + mTextViewVerticals[1].setText(object.getJSONObject("key2").getString("name")); + timeCheckBox[1].setEnabled(true); + } else { + mTextViewVerticals[1].setText("未开启"); + timeCheckBox[1].setEnabled(false); + } + if (!key2.isNull("addressId")) { + mTextPosition[1].setText(AddressNameUtil.getAddressName(key2.getString("addressId"))); + } else { + mTextPosition[1].setText(""); + } + } else { + mTextViewVerticals[1].setText("未设置"); + timeCheckBox[1].setEnabled(false); + } + if (!object.isNull("key3")) { + JSONObject key3 = object.getJSONObject("key3"); + if (key3.getString("modelOpenFlag").equals("1")) { + mTextViewVerticals[2].setText(object.getJSONObject("key3").getString("name")); + mTextViewVerticals[3].setText(object.getJSONObject("key3").getString("name")); + timeCheckBox[2].setEnabled(true); + timeCheckBox[3].setEnabled(true); + } else { + mTextViewVerticals[2].setText("未开启"); + mTextViewVerticals[3].setText("未开启"); + timeCheckBox[3].setEnabled(false); + timeCheckBox[2].setEnabled(false); + } + + if (!key3.isNull("addressId")) { + mTextPosition[2].setText(AddressNameUtil.getAddressName(key3.getString("addressId"))); + mTextPosition[3].setText(AddressNameUtil.getAddressName(key3.getString("addressId"))); + } else { + mTextPosition[2].setText(""); + mTextPosition[3].setText(""); + } + } else { + mTextViewVerticals[2].setText("未设置"); + timeCheckBox[2].setEnabled(false); + mTextViewVerticals[3].setText("未设置"); + timeCheckBox[3].setEnabled(false); + } + if (!object.isNull("key4")) { + JSONObject key4 = object.getJSONObject("key4"); + if (key4.getString("modelOpenFlag").equals("1")) { + mTextViewVerticals[4].setText(key4.getString("name")); + timeCheckBox[4].setEnabled(true); + } else { + mTextViewVerticals[4].setText("未开启"); + timeCheckBox[4].setEnabled(false); + } + if (!key4.isNull("addressId")) { + mTextPosition[4].setText(AddressNameUtil.getAddressName(key4.getString("addressId"))); + } else { + mTextPosition[4].setText(""); + } + } else { + mTextViewVerticals[4].setText("未设置"); + timeCheckBox[4].setEnabled(false); + } + if (!object.isNull("key5")) { + JSONObject key5 = object.getJSONObject("key5"); + if (key5.getString("modelOpenFlag").equals("1")) { + mTextViewVerticals[5].setText(key5.getString("name")); + timeCheckBox[5].setEnabled(true); + } else { + mTextViewVerticals[5].setText("未开启"); + timeCheckBox[5].setEnabled(false); + } + if (!key5.isNull("addressId")) { + mTextPosition[5].setText(AddressNameUtil.getAddressName(key5.getString("addressId"))); + } else { + mTextPosition[5].setText(""); + } + } else { + mTextViewVerticals[5].setText("未设置"); + timeCheckBox[5].setEnabled(false); + } + if (!object.isNull("key6")) { + JSONObject key6 = object.getJSONObject("key6"); + if (key6.getString("modelOpenFlag").equals("1")) { + mTextViewVerticals[6].setText(key6.getString("name")); + timeCheckBox[6].setEnabled(true); + } else { + mTextViewVerticals[6].setText("未开启"); + timeCheckBox[6].setEnabled(false); + } + if (!key6.isNull("addressId")) { + mTextPosition[6].setText(AddressNameUtil.getAddressName(key6.getString("addressId"))); + } else { + mTextPosition[6].setText(""); + } + } else { + mTextViewVerticals[6].setText("未设置"); + timeCheckBox[6].setEnabled(false); + } + setBgPic(); + } catch (JSONException e) { + e.printStackTrace(); + Log.i("queryStudyValue", "TvA1Fragment callBackUiThread()" + e.getMessage()); + } + } + + private void subsetControl(String scenekey) { + ShakeUtil.setShake(getContext()); + /*String modelId = ""; + String modelType = ""; + try { + JSONObject jsonObject = new JSONObject(allDate); + JSONObject object = jsonObject.getJSONObject("obj"); + if (!object.isNull("key" + scenekey)) { + modelId = object.getJSONObject("key" + scenekey).getString("modelId"); + modelType = object.getJSONObject("key" + scenekey).getString("modelType"); + } else { + return; + } + } catch (JSONException e) { + e.printStackTrace(); + }*/ + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", SITUATIONAL_PANEL); + map.put("ziId", ziId); + map.put("oper", "key" + scenekey); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_CONTROL, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetControl", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + + } else { + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void activeModel(String scenekey) { + ShakeUtil.setShake(getContext()); + if (DensityUtil.isNetworkConnected(getActivity())) { + String modelId = ""; + String modelType = ""; + try { + JSONObject jsonObject = new JSONObject(allDate); + JSONObject object = jsonObject.getJSONObject("obj"); + if (!object.isNull("key" + scenekey)) { + modelId = object.getJSONObject("key" + scenekey).getString("modelId"); + modelType = object.getJSONObject("key" + scenekey).getString("modelType"); + } else { + return; + } + } catch (JSONException e) { + e.printStackTrace(); + } + NettyHandlerUtil.getInstance(); + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("modelId", modelId); + map.put("houseId", SharedpreferencesUtil.get(Constans.HOUSEID, "")); + map.put("modelType", modelType); + map.put("deviceId", id); + map.put("sceneKey", scenekey); + netWorkUtil.requestPostByAsynewApi(AVTIVE_MODEL_NEW, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("activeModel", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(AVTIVE_MODEL_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } else { + ToastUtil.show(getActivity(), R.string.net_error); + } + } + + private void subsetDelete() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", SITUATIONAL_PANEL); + map.put("ziId", ziId); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_DELETE, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetDelete", "ShareDeviceActivity onSuccess()" + respone); + SimpleEntty obj = JSON.parseObject(respone, SimpleEntty.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(DELETE_CHILDDEVICE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + /*private void queryStudyValue() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceType", SITUATIONAL_PANEL); + map.put("ziId", ziId); + map.put("deviceId", id); + util.requestPostByAsynew(NetWorkUrl.QUERY_CONTROL_KEY, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryStudyValue", "onSuccess: " + respone); + StudyValueEntity entity = JSON.parseObject(respone, StudyValueEntity.class); + if (1 == entity.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_SUCCESS); + msg.obj = respone; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = entity.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + }*/ + + private void queryStudyValue() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", devicesBean.getId()); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("deviceType", SITUATIONAL_PANEL); + map.put("ziId", ziId); + netWorkUtil.requestGetByAsy(SUBSET_GETCONTROLKEYS, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + ToastUtil.i("subsetGetControlKeys", "onSuccess()" + respone); + Key5Entity obj = JSON.parseObject(respone, Key5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_STUDY_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case MODIFY_ADDRESS_RESULT: + if (data != null && data.getExtras().get("data") != null) { + devicesBean.setAddressId((String) data.getExtras().get("data")); + panelPosition.setText(AddressNameUtil.getAddressName((String) data.getExtras().get("data"))); + } + break; + } + } + + private void queryDeviceLastInfo() { + NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceId", id); + map.put("deviceType", SITUATIONAL_PANEL); + map.put("deviceModel", devicesBean.getDeviceModel()); + map.put("ziId", ziId); + netWorkUtil.requestGetByAsy(QUERY_DEVICE_LASTINFO, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("queryDeviceLastInfo1", "ShareDeviceActivity onSuccess()" + respone); + DeviceStateEntity obj = JSON.parseObject(respone, DeviceStateEntity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_LASTINFO_SUCCESS); + msg.obj = obj; + msg.arg1 = position; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_LASTINFO_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(QUERY_DEVICE_LASTINFO_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void initLoadDialog() { + mLoadingDialog = new LoadingDialog(getContext()); + mLoadingDialog.show(); + } + + //handler + private static class UIHandle extends Handler { + WeakReference weakReference; + + public UIHandle(YblPanelFragment activity) { + weakReference = new WeakReference(activity); + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + YblPanelFragment activity = weakReference.get(); + activity.callBackUiThread(msg); + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelStepOneActivity.java b/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelStepOneActivity.java new file mode 100644 index 0000000..95dd2db --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelStepOneActivity.java @@ -0,0 +1,148 @@ +package com.yonsz.z1.ybl.panel; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +/** + * Created by Administrator on 2019/1/9. + */ + +public class YblPanelStepOneActivity extends BaseActivity { + private TitleView mTitleView; + private CheckBox cb_position1, cb_position2, cb_position3, cb_position4, cb_position6; + private Button nextConfig; + private String panelType; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ybl_panel_one); + initView(); + initListener(); + } + + private void initListener() { + cb_position1.setOnClickListener(this); + cb_position2.setOnClickListener(this); + cb_position3.setOnClickListener(this); + cb_position4.setOnClickListener(this); + cb_position6.setOnClickListener(this); + } + + private void initView() { + cb_position1 = (CheckBox) findViewById(R.id.cb_position1); + cb_position2 = (CheckBox) findViewById(R.id.cb_position2); + cb_position3 = (CheckBox) findViewById(R.id.cb_position3); + cb_position4 = (CheckBox) findViewById(R.id.cb_position4); + cb_position6 = (CheckBox) findViewById(R.id.cb_position6); + nextConfig = (Button) findViewById(R.id.bt_start_config); + nextConfig.setOnClickListener(this); + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + nextConfig.setClickable(false); + nextConfig.setEnabled(false); + nextConfig.setOnClickListener(new NoDoubleClickListener() { + @Override + public void onNoDoubleClick(View view) { + Intent intent = new Intent(YblPanelStepOneActivity.this, YblPanelStepTwoActivity.class); + intent.putExtra("panelType", panelType); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("addressId", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + intent.putExtra("deviceType", getIntent().getExtras().get("deviceType").toString()); + startActivity(intent); + finish(); + } + }); + mTitleView = (TitleView) findViewById(R.id.title_panel_one); + mTitleView.setHead(R.string.Add_Scenario_Panel); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.cb_position1: + panelType = "1"; + cb_position1.setChecked(true); + cb_position2.setChecked(false); + cb_position3.setChecked(false); + cb_position4.setChecked(false); + cb_position6.setChecked(false); + setNextVisible(); + break; + case R.id.cb_position2: + panelType = "2"; + cb_position1.setChecked(false); + cb_position2.setChecked(true); + cb_position3.setChecked(false); + cb_position4.setChecked(false); + cb_position6.setChecked(false); + setNextVisible(); + break; + case R.id.cb_position3: + panelType = "3"; + cb_position1.setChecked(false); + cb_position2.setChecked(false); + cb_position3.setChecked(true); + cb_position4.setChecked(false); + cb_position6.setChecked(false); + setNextVisible(); + break; + case R.id.cb_position4: + panelType = "4"; + cb_position1.setChecked(false); + cb_position2.setChecked(false); + cb_position3.setChecked(false); + cb_position4.setChecked(true); + cb_position6.setChecked(false); + setNextVisible(); + break; + case R.id.cb_position6: + panelType = "5"; + cb_position1.setChecked(false); + cb_position2.setChecked(false); + cb_position3.setChecked(false); + cb_position4.setChecked(false); + cb_position6.setChecked(true); + setNextVisible(); + break; + } + } + + private void setNextVisible() { + nextConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + nextConfig.setClickable(true); + nextConfig.setEnabled(true); + } + + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelStepTwoActivity.java b/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelStepTwoActivity.java new file mode 100644 index 0000000..3ec2f20 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/ybl/panel/YblPanelStepTwoActivity.java @@ -0,0 +1,601 @@ +package com.yonsz.z1.ybl.panel; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView; +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.database.entity.EventBusEntity; +import com.yonsz.z1.database.entity.SimpleEntty; +import com.yonsz.z1.database.entity.YblEntity; +import com.yonsz.z1.database.entity.entity4.YblPanelEvent; +import com.yonsz.z1.database.entity.entity5.BaseVersion5Entity; +import com.yonsz.z1.listener.NoDoubleClickListener; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.net.NetWorkUrl; +import com.yonsz.z1.net.NetWorkUtil; +import com.yonsz.z1.panel485.Panel485Activity; +import com.yonsz.z1.utils.NettyHandlerUtil; +import com.yonsz.z1.utils.ToastUtil; +import com.yonsz.z1.version5.DeviceControlByRoomActivity; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; +import com.yonsz.z1.ybl.light.SafeHandSearchAdapter; +import com.yonsz.z1.ybl.light.YblHandSearchAdapter; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import de.greenrobot.event.EventBus; + +import static com.yonsz.z1.listener.NoDoubleClickListener.MIN_CLICK_DELAY_TIME; +import static com.yonsz.z1.net.Constans.ALLOW_VOICE_CONTROLL_SUCCESS; +import static com.yonsz.z1.net.Constans.CARD_ACCESS; +import static com.yonsz.z1.net.Constans.CURTAINS_TAG; +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.EXECUTE_PHONE_FAIL; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.INTELLIGENT_DOOR_LOCK; +import static com.yonsz.z1.net.Constans.SECURITY_TRIGGER; +import static com.yonsz.z1.net.Constans.SERVICE_PANEL_485; +import static com.yonsz.z1.net.Constans.SITUATIONAL_TRIGGER; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_FAIL; +import static com.yonsz.z1.net.Constans.UPDATE_BLINDENTITY_NAME_SUCCESS; +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.WIRELESS_EMERGENCY_BUTTON; +import static com.yonsz.z1.net.Constans.YBL_SCENE_ADD_FAIL; +import static com.yonsz.z1.net.Constans.YBL_SCENE_ADD_SUCCESS; + +/** + * Created by Administrator on 2019/1/9. + */ + +public class YblPanelStepTwoActivity extends BaseActivity { + private Set mNettyEntities = new LinkedHashSet<>(); + private List mYblEntities = new ArrayList<>(); + private TitleView mTitleView; + private StateButton mStateButton; + private Button restartButton; + private int sec = 30; + private String panelType; + private ImageView panelTypeIv; + private boolean isAdd = true; + private TextView tv_panel_press, tv_below_pic; + private String deviceType; + private String deviceModel; + private long lastClickTime = 0; + private SwipeMenuRecyclerView mRecyclerView; + private SafeHandSearchAdapter safeHandSearchAdapter; + + public void onEventMainThread(YblPanelEvent event) { + String msg = event.getMsg(); + Log.e("nettyUtil", msg + msg.length()); + synchronized (this) { + if (msg.length() < 188 && isAdd) { + if (deviceType.equals(INFRARED_TAG) || deviceType.equals(DOOR_LOCK_TAG) || (deviceType.equals(INTELLIGENT_DOOR_LOCK) && deviceModel.equals("0")) + || deviceType.equals(SMOKE_TAG) || deviceType.equals(WATER_TAG) || deviceType.equals(GAS_TAG)) { + YblEntity nettyEntity = JSON.parseObject(msg, YblEntity.class); + long currentTime = Calendar.getInstance().getTimeInMillis(); + if (mYblEntities.contains(nettyEntity)) { + if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) { + mStateButton.setVisibility(View.GONE); + restartButton.setText("确定"); + tv_below_pic.setText("请点击确定添加设备"); + restartButton.setVisibility(View.VISIBLE); + for (int i = 0; i < mYblEntities.size(); i++) { + if (mYblEntities.get(i).getContext().getCode().equals(nettyEntity.getContext().getCode())) { + mYblEntities.get(i).getContext().setValue("2"); + } + } + } + lastClickTime = currentTime; + } else { + sec = 30; + lastClickTime = currentTime; + tv_below_pic.setText("请再次触发设备报警"); + mYblEntities.add(nettyEntity); + } + if (mYblEntities.size() >= 2) { + sec = 0; + mHandler.removeMessages(UPDATE_SEC); + restartButton.setText("重试"); + mStateButton.setVisibility(View.GONE); + restartButton.setVisibility(View.VISIBLE); + tv_below_pic.setText("因为您有多台设备同时再次触发报警系统无法正确匹配设备,请返回重新匹配"); + } + Log.e("nettyUtil", mYblEntities.size() + ""); + safeHandSearchAdapter.notifyDataSetChanged(); + } + /* else if (deviceType.equals(INTELLIGENT_DOOR_LOCK) && deviceModel.equals("2")) { + YblEntity nettyEntity = JSON.parseObject(msg, YblEntity.class); + if (mYblEntities.contains(nettyEntity)) { + for (int i = 0; i < mYblEntities.size(); i++) { + if (mYblEntities.get(i).getContext().getCode().equals(nettyEntity.getContext().getCode())) { + subsetAdd(nettyEntity); + } + } + } else { + mYblEntities.add(nettyEntity); + mRecyclerView.setVisibility(View.GONE); + tv_below_pic.setVisibility(View.VISIBLE); + tv_below_pic.setText("请再次触发门锁"); + } + } */ + else { + isAdd = false; + YblEntity nettyEntity = JSON.parseObject(msg, YblEntity.class); + subsetAdd(nettyEntity); + } + } + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_ybl_panel_two); + initView(); + NettyHandlerUtil.getInstance(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initView() { + deviceModel = getIntent().getExtras().get("deviceModel").toString(); + deviceType = getIntent().getExtras().get("deviceType").toString(); + panelType = getIntent().getExtras().get("panelType").toString(); + mStateButton = (StateButton) findViewById(R.id.bt_sec); + restartButton = (Button) findViewById(R.id.bt_restart_config); + panelTypeIv = (ImageView) findViewById(R.id.iv_panel_type); + tv_panel_press = (TextView) findViewById(R.id.tv_panel_press); + tv_below_pic = (TextView) findViewById(R.id.tv_below_pic); + mRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.rc_light_list); + mTitleView = (TitleView) findViewById(R.id.title_panel_two); + switch (deviceType) { + case CARD_ACCESS: + mTitleView.setHead("添加设备"); + tv_panel_press.setText("请按一下插卡转换器开关按键并等待匹配"); + break; + case SITUATIONAL_TRIGGER: + mTitleView.setHead("添加设备"); + tv_panel_press.setText("请按一下情景触发器开关按键并等待匹配"); + break; + case SECURITY_TRIGGER: + mTitleView.setHead("添加设备"); + tv_panel_press.setText("请按一下安防触发器开关按键并等待匹配"); + break; + case SERVICE_PANEL_485: + mTitleView.setHead("添加设备"); + tv_panel_press.setText("请按一下面板上任意开关按键并等待匹配"); + break; + case WIRELESS_EMERGENCY_BUTTON: + mTitleView.setHead("添加设备"); + tv_panel_press.setText("请按一下紧急求助的开关按键后等待匹配"); + break; + case DOOR_LOCK_TAG: + case INFRARED_TAG: + case SMOKE_TAG: + case WATER_TAG: + case GAS_TAG: + mTitleView.setHead("添加设备"); + tv_panel_press.setText("请触发设备报警后等待匹配(具体操作请看产品说明书)"); + tv_below_pic.setVisibility(View.VISIBLE); + break; + case INTELLIGENT_DOOR_LOCK: + sec = 60; + mStateButton.setText("60s"); + mTitleView.setHead("添加设备"); + tv_panel_press.setVisibility(View.INVISIBLE); + tv_below_pic.setVisibility(View.VISIBLE); + tv_below_pic.setTextSize(16); + tv_below_pic.setTextColor(0xff666666); + tv_below_pic.setText("按“3”进入系统设置后,再按“3”进入联网管理,后选择录入远程用户"); + break; + default: + mTitleView.setHead(R.string.Add_Scenario_Panel); + break; + } + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (panelType) { + case "0": + //T6四位 + panelTypeIv.setImageResource(R.drawable.pic_add_scene_four_t6); + break; + case "1": + if (deviceType.equals(WIRELESS_EMERGENCY_BUTTON)) { + panelTypeIv.setImageResource(R.drawable.pic_add_scene_sos); + } else { + panelTypeIv.setImageResource(R.drawable.pic_add_scene_one); + } + break; + case "2": + /*if (deviceType.equals(CARD_ACCESS) || deviceType.equals(SITUATIONAL_TRIGGER) || deviceType.equals(SECURITY_TRIGGER)) { + panelTypeIv.setImageResource(R.drawable.pic_manual_add_card); + } else if (deviceType.equals(SERVICE_PANEL_485)) { + panelTypeIv.setImageResource(R.drawable.pic_add_485); + } else if (deviceType.equals(INFRARED_TAG) || deviceType.equals(DOOR_LOCK_TAG) + || deviceType.equals(SMOKE_TAG) || deviceType.equals(WATER_TAG) || deviceType.equals(GAS_TAG)) { + panelTypeIv.setImageResource(R.drawable.pic_infrared_jd); + } else { + panelTypeIv.setImageResource(R.drawable.pic_add_scene_two); + }*/ + switch (deviceType) { + case CARD_ACCESS: + case SITUATIONAL_TRIGGER: + case SECURITY_TRIGGER: + panelTypeIv.setImageResource(R.drawable.pic_manual_add_card); + break; + case SERVICE_PANEL_485: + panelTypeIv.setImageResource(R.drawable.pic_add_485); + break; + case WIRELESS_EMERGENCY_BUTTON: + panelTypeIv.setImageResource(R.drawable.pic_add_scene_sos); + break; + case DOOR_LOCK_TAG: + panelTypeIv.setImageResource(R.drawable.pic_add_magnetism_jd); + break; + case INFRARED_TAG: + panelTypeIv.setImageResource(R.drawable.pic_add_infrared_jd); + break; + case SMOKE_TAG: + panelTypeIv.setImageResource(R.drawable.pic_add_smoke_jd); + break; + case WATER_TAG: + panelTypeIv.setImageResource(R.drawable.pic_add_water_jd); + break; + case GAS_TAG: + if (deviceModel.equals("1")) { + panelTypeIv.setImageResource(R.drawable.pic_add_gas_jd); + } else { + panelTypeIv.setImageResource(R.drawable.pic_add_wall_hanging_gas_jd); + } + break; + case INTELLIGENT_DOOR_LOCK: + panelTypeIv.setImageResource(R.drawable.pic_add_lock_zwave2); + break; + default: + panelTypeIv.setImageResource(R.drawable.pic_add_scene_two); + break; + } + break; + case "3": + panelTypeIv.setImageResource(R.drawable.pic_add_scene_three); + break; + case "4": + // panelTypeIv.setImageResource(R.drawable.pic_add_scene_four); + panelTypeIv.setImageResource(R.drawable.pic_add_scene_four_t4_s); + break; + case "5": + panelTypeIv.setImageResource(R.drawable.pic_add_scene_four_t4); + // panelTypeIv.setImageResource(R.drawable.pic_add_scene_four); + break; + case "6": + // panelTypeIv.setImageResource(R.drawable.pic_add_scene_six); + //T6 6位 + panelTypeIv.setImageResource(R.drawable.pic_add_scene_six_t6); + break; + } + if (deviceType.equals(SERVICE_PANEL_485) || deviceType.equals(INTELLIGENT_DOOR_LOCK)) { + subsetSearch(); + } else if (deviceType.equals(INFRARED_TAG) || deviceType.equals(DOOR_LOCK_TAG) + || deviceType.equals(SMOKE_TAG) || deviceType.equals(WATER_TAG) || deviceType.equals(GAS_TAG)) { + subsetStudy(); + } else { + yblSearch(); + } + + restartButton.setOnClickListener(new NoDoubleClickListener() { + @Override + protected void onNoDoubleClick(View v) { + String s = restartButton.getText().toString(); + if (s.equals("确定")) { + if (mYblEntities.size() == 1) { + if (deviceType.equals(INFRARED_TAG) || deviceType.equals(DOOR_LOCK_TAG) || (deviceType.equals(INTELLIGENT_DOOR_LOCK) && deviceModel.equals("0")) + || deviceType.equals(SMOKE_TAG) || deviceType.equals(WATER_TAG) || deviceType.equals(GAS_TAG)) { + subsetAdd(mYblEntities.get(0)); + } + } + } else { + if (getIntent().getExtras().get("deviceType").toString().equals(INTELLIGENT_DOOR_LOCK)) { + sec = 60; + } else { + sec = 30; + } + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + mStateButton.setVisibility(View.VISIBLE); + restartButton.setVisibility(View.GONE); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + if (deviceType.equals(SERVICE_PANEL_485) || deviceType.equals(INTELLIGENT_DOOR_LOCK)) { + subsetSearch(); + } else if (deviceType.equals(INFRARED_TAG) || deviceType.equals(DOOR_LOCK_TAG) + || deviceType.equals(SMOKE_TAG) || deviceType.equals(WATER_TAG) || deviceType.equals(GAS_TAG)) { + tv_below_pic.setText("请不要同时操作多台设备触发报警否则系统无法正确匹配设备"); + mYblEntities.clear(); + safeHandSearchAdapter.notifyDataSetChanged(); + subsetStudy(); + } else { + yblSearch(); + } + } + } + }); + + safeHandSearchAdapter = new SafeHandSearchAdapter(this, mYblEntities, deviceType, deviceModel); + GridLayoutManager manage = new GridLayoutManager(this, 2); + manage.setOrientation(LinearLayoutManager.VERTICAL); + mRecyclerView.setHasFixedSize(true); + mRecyclerView.setLayoutManager(manage); + mRecyclerView.setAdapter(safeHandSearchAdapter); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else { + mStateButton.setVisibility(View.GONE); + restartButton.setVisibility(View.VISIBLE); + } + break; + case YBL_SCENE_ADD_SUCCESS: + BaseVersion5Entity baseVersion5Entity = (BaseVersion5Entity) msg.obj; + Intent intent; + if (deviceType.equals(SITUATIONAL_TRIGGER)) { + intent = new Intent(YblPanelStepTwoActivity.this, DeviceControlByRoomActivity.class); + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("id", baseVersion5Entity.getData().getId()); + intent.putExtra("tvName", "情景触发器"); + } else if (deviceType.equals(WIRELESS_EMERGENCY_BUTTON)) { + intent = new Intent(YblPanelStepTwoActivity.this, DeviceControlByRoomActivity.class); + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("id", baseVersion5Entity.getData().getId()); + intent.putExtra("tvName", "紧急求助按钮"); + } else if (deviceType.equals(INFRARED_TAG) || deviceType.equals(DOOR_LOCK_TAG) + || deviceType.equals(SMOKE_TAG) || deviceType.equals(WATER_TAG) || deviceType.equals(GAS_TAG)) { + intent = new Intent(YblPanelStepTwoActivity.this, DeviceControlByRoomActivity.class); + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("id", baseVersion5Entity.getData().getId()); + intent.putExtra("tvName", "嘉德安防"); + } else if (deviceType.equals(SECURITY_TRIGGER)) { + intent = new Intent(YblPanelStepTwoActivity.this, DeviceControlByRoomActivity.class); + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("id", baseVersion5Entity.getData().getId()); + intent.putExtra("tvName", "安防触发器"); + } else if (deviceType.equals(INTELLIGENT_DOOR_LOCK)) { + intent = new Intent(YblPanelStepTwoActivity.this, DeviceControlByRoomActivity.class); + intent.putExtra("tvStateTag", "0"); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("id", baseVersion5Entity.getData().getId()); + intent.putExtra("tvName", "门锁"); + } else if (deviceType.equals(SERVICE_PANEL_485)) { + intent = new Intent(YblPanelStepTwoActivity.this, Panel485Activity.class); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("id", baseVersion5Entity.getData().getId()); + intent.putExtra("deviceModel", baseVersion5Entity.getData().getDeviceModel()); + } else { + intent = new Intent(YblPanelStepTwoActivity.this, YblPanelDetailActivity.class); + intent.putExtra("id", baseVersion5Entity.getData().getId()); + intent.putExtra("deviceModel", baseVersion5Entity.getData().getDeviceModel()); + intent.putExtra("ziId", getIntent().getExtras().get("ziId").toString()); + intent.putExtra("panelType", getIntent().getExtras().get("panelType").toString()); + intent.putExtra("deviceAddress", getIntent().getExtras().get("addressId").toString()); + intent.putExtra("from", "YblPanelStepTwoActivity"); + } + startActivity(intent); + EventBus.getDefault().post( + new EventBusEntity("关闭")); + finish(); + break; + case YBL_SCENE_ADD_FAIL: + ToastUtil.show(this, (String) msg.obj); + if (deviceType.equals(INTELLIGENT_DOOR_LOCK)){ + sec = 0; + mStateButton.setVisibility(View.GONE); + restartButton.setVisibility(View.VISIBLE); + } + break; + } + } + + private void subsetStudy() { + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_STUDY, map, "{}", new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetStudy", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(UPDATE_BLINDENTITY_NAME_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void subsetSearch() { + String body = "{}"; + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_SEARCH, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetSearch", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } + + private void yblSearch() { + String body = "{}"; + body = "{\"type\":\"" + 2 + "\"}"; + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", getIntent().getExtras().get("deviceModel").toString()); + map.put("deviceType", getIntent().getExtras().get("deviceType").toString()); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + util.requestPostByAsyBody(NetWorkUrl.SUBSET_SEARCH, map, body, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetSearch", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + /* Message msg = mHandler.obtainMessage(ALLOW_VOICE_CONTROLL_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg);*/ + } else { + Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + /*NetWorkUtil netWorkUtil = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("type", "2"); + netWorkUtil.requestPostByAsynew(YBL_SEARCH, map, new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("yblSearch", "onSuccess()" + respone); + } + + @Override + public void onFail(String message) { + android.os.Message msg = mHandler.obtainMessage(EXECUTE_PHONE_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + });*/ + } + + private void subsetAdd(YblEntity nettyEntity) { + if (panelType.equals("5") || panelType.equals("0")) { + nettyEntity.setDeviceCount("4"); + } else { + nettyEntity.setDeviceCount(panelType); + } + if (deviceType.equals(INFRARED_TAG) || deviceType.equals(DOOR_LOCK_TAG) || (deviceType.equals(INTELLIGENT_DOOR_LOCK) && deviceModel.equals("2")) + || deviceType.equals(SMOKE_TAG) || deviceType.equals(WATER_TAG) || deviceType.equals(GAS_TAG)) { + nettyEntity.setCode(nettyEntity.getContext().getCode()); + } + NetWorkUtil util = NetWorkUtil.instans(); + HashMap map = new HashMap<>(); + map.put("deviceModel", deviceModel); + map.put("deviceType", deviceType); + map.put("ziId", getIntent().getExtras().get("ziId").toString()); + map.put("addressId", getIntent().getExtras().get("addressId").toString()); + if (deviceType.equals(SECURITY_TRIGGER)) { + map.put("subtype", getIntent().getExtras().get("subType").toString()); + } + util.requestPostByAsyBody(NetWorkUrl.SUBSET_ADD, map, JSONObject.toJSONString(nettyEntity), new NetWorkUtil.ReqCallBack() { + @Override + public void onSuccess(String respone) { + Log.i("subsetAdd", "ShareDeviceActivity onSuccess()" + respone); + BaseVersion5Entity obj = JSON.parseObject(respone, BaseVersion5Entity.class); + if (1 == obj.getFlag()) { + Message msg = mHandler.obtainMessage(YBL_SCENE_ADD_SUCCESS); + msg.obj = obj; + mHandler.sendMessage(msg); + } else { + Message msg = mHandler.obtainMessage(YBL_SCENE_ADD_FAIL); + msg.obj = obj.getMsg(); + mHandler.sendMessage(msg); + } + } + + @Override + public void onFail(String message) { + Message msg = mHandler.obtainMessage(YBL_SCENE_ADD_FAIL); + msg.obj = message; + mHandler.sendMessage(msg); + } + }); + } +} diff --git a/app/src/main/java/com/yonsz/z1/zigbee/AddZigBeeGuideActivity.java b/app/src/main/java/com/yonsz/z1/zigbee/AddZigBeeGuideActivity.java new file mode 100644 index 0000000..5a64619 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/zigbee/AddZigBeeGuideActivity.java @@ -0,0 +1,163 @@ +package com.yonsz.z1.zigbee; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.UPDATE_SEC; +import static com.yonsz.z1.net.Constans.ZIGBEE_CO; +import static com.yonsz.z1.net.Constans.ZIGBEE_DOOR; +import static com.yonsz.z1.net.Constans.ZIGBEE_GAS; +import static com.yonsz.z1.net.Constans.ZIGBEE_INFRARED; +import static com.yonsz.z1.net.Constans.ZIGBEE_LIGHT; +import static com.yonsz.z1.net.Constans.ZIGBEE_PLUG; +import static com.yonsz.z1.net.Constans.ZIGBEE_SMOKE; +import static com.yonsz.z1.net.Constans.ZIGBEE_TEMPERATURE; +import static com.yonsz.z1.net.Constans.ZIGBEE_WATER; + +/** + * Created by Administrator on 2018/5/10. + */ + +public class AddZigBeeGuideActivity extends BaseActivity { + private TitleView mTitleView; + private Button startConfig; + private CheckBox selectUnnorReveal; + private ImageView picOne, picTwo; + private String zigbeeType; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_zigbee_guide); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 500); + } + + private void initView() { + zigbeeType = getIntent().getExtras().get("ZigBeeType").toString(); + picOne = (ImageView) findViewById(R.id.pic_one); + picTwo = (ImageView) findViewById(R.id.pic_two); + selectUnnorReveal = (CheckBox) findViewById(R.id.iv_select_unnor_reveal); + selectUnnorReveal.setOnClickListener(this); + mTitleView = (TitleView) findViewById(R.id.title_add_zigbee); + mTitleView.setHead(R.string.add_device); + mTitleView.setBackTxt(getString(R.string.cancel)); + startConfig = (Button) findViewById(R.id.bt_start_config); + startConfig.setOnClickListener(this); + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + startConfig.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(AddZigBeeGuideActivity.this, ZigBeeSearchActivity.class); + intent.putExtra("ZigBeeType", zigbeeType); + startActivity(intent); + } + }); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (zigbeeType) { + case ZIGBEE_LIGHT: + picOne.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_dimmer_pre)); + picTwo.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_dimmer)); + break; + case ZIGBEE_PLUG: + picOne.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_socket)); + picTwo.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_socket)); + break; + case ZIGBEE_INFRARED: + picOne.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_infrared_pre)); + picTwo.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_infrared)); + break; + case ZIGBEE_TEMPERATURE: + picOne.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_humiture_pre)); + picTwo.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_humiture)); + break; + case ZIGBEE_DOOR: + picOne.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_gatemagnetic_pre)); + picTwo.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_gatemagnetic)); + break; + case ZIGBEE_CO: + //没画 + picOne.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_gatemagnetic_pre)); + picTwo.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_gatemagnetic)); + break; + case ZIGBEE_WATER: + picOne.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_waterimmersion_pre)); + picTwo.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_waterimmersion)); + break; + case ZIGBEE_SMOKE: + picOne.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_smoke_pre)); + picTwo.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_smoke)); + break; + case ZIGBEE_GAS: + //没画 + picOne.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_gatemagnetic_pre)); + picTwo.setImageDrawable(getResources().getDrawable(R.drawable.pic_add_gatemagnetic)); + break; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_select_unnor_reveal: + if (selectUnnorReveal.isChecked()) { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_5dp)); + startConfig.setClickable(true); + startConfig.setEnabled(true); + } else { + startConfig.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_round_e3e3e3_5dp)); + startConfig.setClickable(false); + startConfig.setEnabled(false); + } + break; + } + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_SEC: + if (picOne.getVisibility() == View.VISIBLE) { + picTwo.setVisibility(View.VISIBLE); + picOne.setVisibility(View.GONE); + } else { + picTwo.setVisibility(View.GONE); + picOne.setVisibility(View.VISIBLE); + } + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 500); + break; + } + } +} diff --git a/app/src/main/java/com/yonsz/z1/zigbee/ZigBeeDetailActivity.java b/app/src/main/java/com/yonsz/z1/zigbee/ZigBeeDetailActivity.java new file mode 100644 index 0000000..4356eca --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/zigbee/ZigBeeDetailActivity.java @@ -0,0 +1,93 @@ +package com.yonsz.z1.zigbee; + +import android.os.Bundle; +import android.os.Message; +import android.widget.ImageView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.listener.OnTitleItemClickListener; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.DOOR_LOCK_TAG; +import static com.yonsz.z1.net.Constans.GAS_TAG; +import static com.yonsz.z1.net.Constans.INFRARED_TAG; +import static com.yonsz.z1.net.Constans.SMOKE_TAG; +import static com.yonsz.z1.net.Constans.WATER_TAG; +import static com.yonsz.z1.net.Constans.ZIGBEE_DOOR; +import static com.yonsz.z1.net.Constans.ZIGBEE_GAS; +import static com.yonsz.z1.net.Constans.ZIGBEE_INFRARED; +import static com.yonsz.z1.net.Constans.ZIGBEE_SMOKE; +import static com.yonsz.z1.net.Constans.ZIGBEE_TEMPERATURE; +import static com.yonsz.z1.net.Constans.ZIGBEE_WATER; + +/** + * Created by Administrator on 2018/5/10. + */ + +public class ZigBeeDetailActivity extends BaseActivity { + private TitleView mTitleView; + private String zigbeeType; + private ImageView safeImage; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_zigbee_detail); + initView(); + } + + private void initView() { + zigbeeType = getIntent().getExtras().get("ZigBeeType").toString(); + safeImage = (ImageView) findViewById(R.id.iv_safe_image); + mTitleView = (TitleView) findViewById(R.id.title_zigbee_detail); + mTitleView.clearBackGroud(); + mTitleView.setTitleListener(new OnTitleItemClickListener() { + @Override + public void onBack() { + finish(); + } + + @Override + public void onFunction() { + + } + + @Override + public void onFunctionText() { + + } + }); + switch (zigbeeType) { + /*case ZIGBEE_DOOR: + mTitleView.setHead(R.string.door_warn); + safeImage.setImageResource(ZIGBEE_BIG_IMG[3]); + break; + case ZIGBEE_INFRARED: + mTitleView.setHead(R.string.red_warn); + safeImage.setImageResource(ZIGBEE_BIG_IMG[4]); + break; + case ZIGBEE_SMOKE: + mTitleView.setHead(R.string.smoke_warn); + safeImage.setImageResource(ZIGBEE_BIG_IMG[2]); + break; + case ZIGBEE_GAS: + mTitleView.setHead(R.string.gas_warn); + safeImage.setImageResource(ZIGBEE_BIG_IMG[1]); + break; + case ZIGBEE_WATER: + mTitleView.setHead(R.string.water_warn); + safeImage.setImageResource(ZIGBEE_BIG_IMG[0]); + break; + case ZIGBEE_TEMPERATURE: + mTitleView.setHead("温湿度报警器"); + safeImage.setImageResource(ZIGBEE_BIG_IMG[5]); + break;*/ + } + } + + @Override + public void callBackUiThread(Message msg) { + + } +} diff --git a/app/src/main/java/com/yonsz/z1/zigbee/ZigBeeSearchActivity.java b/app/src/main/java/com/yonsz/z1/zigbee/ZigBeeSearchActivity.java new file mode 100644 index 0000000..d812f44 --- /dev/null +++ b/app/src/main/java/com/yonsz/z1/zigbee/ZigBeeSearchActivity.java @@ -0,0 +1,78 @@ +package com.yonsz.z1.zigbee; + +import android.os.Bundle; +import android.os.Message; +import android.view.animation.AnimationUtils; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; + +import com.yonsz.z1.R; +import com.yonsz.z1.activity.BaseActivity; +import com.yonsz.z1.view.StateButton; +import com.yonsz.z1.view.TitleView; + +import static com.yonsz.z1.net.Constans.UPDATE_SEC; + +/** + * Created by Administrator on 2018/5/11. + */ + +public class ZigBeeSearchActivity extends BaseActivity { + private TitleView mTitleView; + private StateButton mStateButton; + private ImageView mScanTop; + private RotateAnimation rotateAnimation; + private ImageView mImageView01, mImageView02, mImageView03, mImageView04, mImageView05; + private int sec = 30; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_zigbee_search); + initView(); + } + + @Override + public void onResume() { + super.onResume(); + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + } + + private void initView() { + mStateButton = (StateButton) findViewById(R.id.bt_sec); + mScanTop = (ImageView) findViewById(R.id.iv_scan_top); + mImageView01 = (ImageView) findViewById(R.id.imageView01); + mImageView02 = (ImageView) findViewById(R.id.imageView02); + mImageView03 = (ImageView) findViewById(R.id.imageView03); + mImageView04 = (ImageView) findViewById(R.id.imageView04); + mImageView05 = (ImageView) findViewById(R.id.imageView05); + mTitleView = (TitleView) findViewById(R.id.title_zigbee_search); + mTitleView.setHead("搜索设备"); + mTitleView.setBackGone(); + rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(ZigBeeSearchActivity.this, R.anim.rotate360_anim_zigbee); + mScanTop.startAnimation(rotateAnimation); + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mScanTop.clearAnimation(); + } + + @Override + public void callBackUiThread(Message msg) { + switch (msg.what) { + case UPDATE_SEC: + if (sec > 1) { + sec--; + mHandler.sendEmptyMessageDelayed(UPDATE_SEC, 1000); + mStateButton.setText(getResources().getString(R.string.sec_30, sec)); + } else { + finish(); + } + break; + } + } +}